diff --git a/src/comps/core/markers/firearm.rs b/src/comps/core/markers/firearm.rs index f0b2496..f0e72dd 100644 --- a/src/comps/core/markers/firearm.rs +++ b/src/comps/core/markers/firearm.rs @@ -2,8 +2,8 @@ use bevy::prelude::{Component, Quat, Vec3}; use crate::logic::core::guns::{caliber::Caliber, spray_pattern::FirearmSprayPattern}; -#[derive(Component)] -pub struct FirearmData<'a> { +#[derive(Component, Clone)] +pub struct FirearmData { /// Where the bullets will come out of, and muzzle flash will be spawned out of. pub firing_point: Vec3, pub caliber: Caliber, @@ -14,9 +14,8 @@ pub struct FirearmData<'a> { /// Amount of seconds it takes for gun to come down from shooting /// Also is the time it takes for the gun to aim in or aim out. pub rebound_time_seconds: f32, - pub asset_path: &'a str, - pub identifier: String, + pub asset_path: String, pub vertical_recoil_modifier: f32, pub horizontal_recoil_modifier: f32, diff --git a/src/comps/core/markers/player.rs b/src/comps/core/markers/player.rs index 1bf0f91..461d7df 100644 --- a/src/comps/core/markers/player.rs +++ b/src/comps/core/markers/player.rs @@ -1,7 +1,13 @@ use bevy::prelude::Component; +use crate::setup::equipment::Equipment; + +#[derive(Clone, Default)] +pub struct PlayerData { + pub equipment: Equipment, +} #[derive(Component)] -pub struct Player; +pub struct Player(pub PlayerData); #[derive(Component)] pub struct PlayerHand; \ No newline at end of file diff --git a/src/constants/player_values.rs b/src/constants/player_values.rs index 3b92179..c6b965f 100644 --- a/src/constants/player_values.rs +++ b/src/constants/player_values.rs @@ -1,5 +1,3 @@ -use crate::logic::core::guns::firearm::Firearm; - pub const MAX_LINEAR_PLAYER_VELOCITY: f32 = 20.0; pub const PLAYER_ACCELERATION: f32 = 20.0; pub const PLAYER_JUMP_FORCE: f32 = 900.0; @@ -25,5 +23,3 @@ pub const PLAYER_LATERAL_ACCELERATION_WHILE_SPRINTING_MULTIPLIER: f32 = 0.2; pub const PLAYER_LATERAL_ACCELERATION_MULTIPLIER: f32 = 1.0; pub const PLAYER_LINEAR_DAMPING_TIME_OFFSET_AFTER_JUMP_IN_MS: u128 = 20; - -pub const DEFAULT_PLAYER_FIREARM: Firearm = Firearm::M4A1; diff --git a/src/logic/core/guns/caliber.rs b/src/logic/core/guns/caliber.rs index e7b9ab5..01ce1d0 100644 --- a/src/logic/core/guns/caliber.rs +++ b/src/logic/core/guns/caliber.rs @@ -1,4 +1,5 @@ #[allow(unused)] +#[derive(Clone)] pub enum Caliber { NATO556, } diff --git a/src/logic/core/guns/equip_firearm.rs b/src/logic/core/guns/equip_firearm.rs index bfa1366..3a4bba0 100644 --- a/src/logic/core/guns/equip_firearm.rs +++ b/src/logic/core/guns/equip_firearm.rs @@ -1,7 +1,4 @@ +use bevy::prelude::*; -#[allow(unused)] - -/// System that checks if player -pub fn equip_firearm() { - -} \ No newline at end of file +#[derive(Event)] +pub struct SpawnFirearmEvent(); \ No newline at end of file diff --git a/src/logic/core/guns/firearm.rs b/src/logic/core/guns/firearm.rs index b2c5723..0100ece 100644 --- a/src/logic/core/guns/firearm.rs +++ b/src/logic/core/guns/firearm.rs @@ -26,7 +26,6 @@ impl Firearm { 1.0, 1.2, 1.3, -1.6, 1.5, -1.7, -1.5, 1.5, -1.5, 2.0 // 10 for now ]), }, - asset_path: "weapons/m4a1_rifle.glb", final_aimed_rotation: Quat::from_rotation_x(0.026), final_rotation: Quat::default(), @@ -43,8 +42,7 @@ impl Firearm { y: -0.45, z: -2.7, }, - identifier: String::from("m4a1_rifle"), - + asset_path: String::from("weapons/m4a1_rifle.glb"), } } pub fn holdable_object_data(&self) -> HoldableObjectData { diff --git a/src/logic/core/guns/mod.rs b/src/logic/core/guns/mod.rs index e50150e..9bd97d8 100644 --- a/src/logic/core/guns/mod.rs +++ b/src/logic/core/guns/mod.rs @@ -1,6 +1,5 @@ pub mod caliber; pub mod firearm; pub mod player_firing; -pub mod spawn_firearm; pub mod spray_pattern; pub mod equip_firearm; \ No newline at end of file diff --git a/src/logic/core/guns/player_firing.rs b/src/logic/core/guns/player_firing.rs index f708065..80f1d8b 100644 --- a/src/logic/core/guns/player_firing.rs +++ b/src/logic/core/guns/player_firing.rs @@ -2,8 +2,8 @@ use std::time::Duration; use bevy::prelude::*; -#[derive(Resource, Reflect)] -#[reflect(Resource)] +#[derive(Component, Reflect)] +#[reflect(Component)] pub struct PlayerFiringInfo { /// Timestamp since last round fired from the gun. (seconds) pub last_shot_timestamp: f32, diff --git a/src/logic/core/guns/spawn_firearm.rs b/src/logic/core/guns/spawn_firearm.rs deleted file mode 100644 index 2c6ae81..0000000 --- a/src/logic/core/guns/spawn_firearm.rs +++ /dev/null @@ -1,58 +0,0 @@ -use std::time::Duration; - -use bevy::{prelude::*, gltf::Gltf}; - -use crate::{ - comps::core::markers::{holdable::InPlayerHands, player::PlayerHand, firearm::{MagazineData, FirearmData}}, - constants::player_values::DEFAULT_PLAYER_FIREARM, - utils, setup::{animations::FirearmAnimations, assets::{GltfAssets, GltfAssetType}}, -}; - -use super::{player_firing::PlayerFiringInfo, firearm::Firearm}; - -pub fn spawn_firearm_on_player_hands( - mut commands: Commands, - query: Query>, - mut player_firing_info: ResMut, - assets_gltf: Res, - loaded_gltf_assets: Res>, -) { - if let Some(asset_handle) = assets_gltf.assets.iter().find(|asset| asset.asset_type == GltfAssetType::Firearm(Firearm::M4A1)) { - if let Some(gltf) = loaded_gltf_assets.get(&asset_handle.asset) { - for entity in query.iter() { - let mut firearm_transform = Transform::from_xyz(0.0, 0.0, 0.0); - firearm_transform.rotate_y(utils::rad_deg::radians_from_degrees( - DEFAULT_PLAYER_FIREARM.holdable_object_data().y_rot, - )); - - let scene = gltf.scenes[0].clone(); - - let firearm = commands - .spawn(( - SceneBundle { - scene, - visibility: Visibility::Inherited, - transform: firearm_transform, - ..default() - }, - DEFAULT_PLAYER_FIREARM.firearm_data(), - DEFAULT_PLAYER_FIREARM.holdable_object_data(), - MagazineData { rounds_shot: 0, max_capacity: DEFAULT_PLAYER_FIREARM.firearm_data().max_capacity }, - InPlayerHands, - - )) - .id(); - - commands.entity(entity).push_children(&[firearm]); - let time_in_secs_between_each_round = - 1.0 / DEFAULT_PLAYER_FIREARM.firearm_data().fire_rate * 60.0; - player_firing_info.full_auto_timer = Timer::new( - Duration::from_secs_f32(time_in_secs_between_each_round), - TimerMode::Once, - ); - // Load animations - //commands.insert_resource(FirearmAnimations { reload_magazine: asset_server.load(format!("{}#Animation0", DEFAULT_PLAYER_FIREARM.firearm_data().asset_path))}) - } - } - } -} diff --git a/src/logic/core/guns/spray_pattern.rs b/src/logic/core/guns/spray_pattern.rs index fed82c6..377b3bc 100644 --- a/src/logic/core/guns/spray_pattern.rs +++ b/src/logic/core/guns/spray_pattern.rs @@ -1,5 +1,6 @@ +#[derive(Clone)] pub struct FirearmSprayPattern { pub vertical: Vec, pub horizontal: Vec, diff --git a/src/logic/core/player/hands.rs b/src/logic/core/player/hands.rs index 448fe10..75df0ba 100644 --- a/src/logic/core/player/hands.rs +++ b/src/logic/core/player/hands.rs @@ -1,8 +1,8 @@ use bevy::prelude::*; use crate::{ - comps::core::markers::{firearm::{FirearmData, MagazineData}, holdable::InPlayerHands, player::PlayerHand}, - logic::core::guns::player_firing::PlayerFiringInfo, utils::rad_deg::radians_from_degrees, setup::animations::FirearmAnimations, + comps::core::markers::{firearm::{FirearmData, MagazineData}, holdable::InPlayerHands, player::{PlayerHand, Player}}, + logic::core::guns::player_firing::PlayerFiringInfo, utils::rad_deg::radians_from_degrees, setup::{animations::AllFirearmAnimations, load_state::GameLoadState}, }; pub fn capture_hand_usage( @@ -11,99 +11,113 @@ pub fn capture_hand_usage( mut hand_query: Query<&mut Transform, With>, time: Res