diff --git a/src/bundles/player.rs b/src/bundles/player.rs index f9a255a..94307fd 100644 --- a/src/bundles/player.rs +++ b/src/bundles/player.rs @@ -6,9 +6,10 @@ use rapier3d::control::{CharacterAutostep, KinematicCharacterController}; use rapier3d::prelude::{ColliderBuilder, RigidBodyBuilder}; use crate::bundles::Bundle; -use crate::components::jump::JumpComponent; use crate::components::lights::spot::SpotlightComponent; -use crate::components::{InputComponent, MeshComponent, MovementComponent, PhysicsComponent}; +use crate::components::{ + InputComponent, JumpComponent, MeshComponent, MovementComponent, PhysicsComponent, +}; use crate::entity::EntityHandle; use crate::loaders::mesh::Mesh; use crate::physics::PhysicsManager; @@ -70,7 +71,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); let has_input = world .inputs @@ -82,7 +83,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); let has_input = world .inputs @@ -94,7 +95,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); let has_input = world .inputs @@ -106,7 +107,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); let has_input = world .inputs @@ -118,7 +119,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); !is_grounded }); @@ -126,7 +127,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); !is_grounded }); @@ -134,7 +135,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); let jump_pressed = world .inputs @@ -146,7 +147,7 @@ impl Bundle for PlayerBundle state_machine.add_transition::(move |world| { let is_grounded = world .movements - .with(entity_id, |m| m.movement_config.movement_context.is_floored) + .with(entity_id, |m| m.movement_context.is_floored) .unwrap_or(false); let jump_pressed = world .inputs @@ -159,14 +160,14 @@ impl Bundle for PlayerBundle world .jumps .with(entity_id, |jump| { - jump.jump_config.jump_context.duration >= jump.jump_config.jump_duration + jump.jump_context.duration >= jump.jump_duration }) .unwrap_or(true) }); world.transforms.insert(entity, spawn_transform); world.movements.insert(entity, MovementComponent::new()); - world.jumps.insert(entity, JumpComponent::new()); + world.jumps.insert(entity, JumpComponent::default()); world.inputs.insert(entity, InputComponent::default()); world.physics.insert( entity, @@ -189,6 +190,7 @@ impl Bundle for PlayerBundle ); world.player_tags.insert(entity, ()); world.state_machines.insert(entity, state_machine); + world.names.insert(entity, "Player".to_string()); let outer_angle = PI / 2.0 * 0.9; world.spotlights.insert( diff --git a/src/components/jump.rs b/src/components/jump.rs index 2ad2b5c..ed5af91 100644 --- a/src/components/jump.rs +++ b/src/components/jump.rs @@ -3,22 +3,6 @@ use kurbo::CubicBez; #[derive(Clone)] pub struct JumpComponent -{ - pub jump_config: JumpConfig, -} - -impl JumpComponent -{ - pub fn new() -> Self - { - Self { - jump_config: JumpConfig::default(), - } - } -} - -#[derive(Clone, Copy)] -pub struct JumpConfig { pub jump_height: f32, pub jump_duration: f32, @@ -30,7 +14,7 @@ pub struct JumpConfig pub jump_context: JumpContext, } -impl Default for JumpConfig +impl Default for JumpComponent { fn default() -> Self { @@ -56,22 +40,3 @@ pub struct JumpContext pub origin_height: f32, pub normal: Vec3, } - -impl JumpContext -{ - fn start(time: f32, current_height: f32, surface_normal: Vec3) -> Self - { - Self { - in_progress: false, - duration: 0.0, - execution_time: time, - origin_height: current_height, - normal: surface_normal, - } - } - - pub fn stop(&mut self) - { - self.in_progress = false; - } -} diff --git a/src/components/movement.rs b/src/components/movement.rs index 0adcc89..9d0fd22 100644 --- a/src/components/movement.rs +++ b/src/components/movement.rs @@ -3,22 +3,6 @@ use kurbo::CubicBez; #[derive(Clone)] pub struct MovementComponent -{ - pub movement_config: MovementConfig, -} - -impl MovementComponent -{ - pub fn new() -> Self - { - Self { - movement_config: MovementConfig::new(), - } - } -} - -#[derive(Clone)] -pub struct MovementConfig { pub walking_acceleration: f32, pub walking_acceleration_duration: f32, @@ -29,7 +13,7 @@ pub struct MovementConfig pub movement_context: MovementContext, } -impl MovementConfig +impl MovementComponent { pub fn new() -> Self { diff --git a/src/systems/player_states.rs b/src/systems/player_states.rs index 4e56d36..1b31d21 100644 --- a/src/systems/player_states.rs +++ b/src/systems/player_states.rs @@ -90,7 +90,7 @@ impl State for PlayerFallingState }; world.movements.with_mut(self.entity, |movement| { - movement.movement_config.movement_context.is_floored = is_grounded; + movement.movement_context.is_floored = is_grounded; }); } } @@ -116,7 +116,7 @@ impl State for PlayerIdleState let current_velocity = *rigidbody.linvel(); let idle_damping = world .movements - .with(self.entity, |m| m.movement_config.idle_damping) + .with(self.entity, |m| m.idle_damping) .unwrap_or(0.1); let horizontal_velocity = Vec3::new(current_velocity.x, 0.0, current_velocity.z); @@ -171,7 +171,7 @@ impl State for PlayerIdleState }); world.movements.with_mut(self.entity, |movement| { - movement.movement_config.movement_context.is_floored = true; + movement.movement_context.is_floored = true; }); } } @@ -210,7 +210,7 @@ impl State for PlayerWalkingState .inputs .with(self.entity, |input| input.move_direction) .unwrap_or(Vec3::ZERO); - (input, movement.movement_config.clone()) + (input, movement.clone()) }) .unwrap(); @@ -301,7 +301,7 @@ impl State for PlayerWalkingState }); world.movements.with_mut(self.entity, |movement| { - movement.movement_config.movement_context.is_floored = terrain_height.is_some(); + movement.movement_context.is_floored = terrain_height.is_some(); }); if movement_input.length_squared() > 0.1 @@ -334,11 +334,11 @@ impl State for PlayerJumpingState let current_position = world.transforms.get(self.entity).unwrap().position; world.jumps.with_mut(self.entity, |jump| { - jump.jump_config.jump_context.in_progress = true; - jump.jump_config.jump_context.execution_time = self.enter_time_stamp; - jump.jump_config.jump_context.origin_height = current_position.y; - jump.jump_config.jump_context.duration = 0.0; - jump.jump_config.jump_context.normal = Vec3::Y; + jump.jump_context.in_progress = true; + jump.jump_context.execution_time = self.enter_time_stamp; + jump.jump_context.origin_height = current_position.y; + jump.jump_context.duration = 0.0; + jump.jump_context.normal = Vec3::Y; }); println!("entered jumping"); @@ -347,8 +347,8 @@ impl State for PlayerJumpingState fn on_state_exit(&mut self, world: &mut World) { world.jumps.with_mut(self.entity, |jump| { - jump.jump_config.jump_context.in_progress = false; - jump.jump_config.jump_context.duration = 0.0; + jump.jump_context.in_progress = false; + jump.jump_context.duration = 0.0; }); println!("exited jumping"); @@ -361,21 +361,21 @@ impl State for PlayerJumpingState let current_time = Time::get_time_elapsed(); world.jumps.with_mut(self.entity, |jump| { - jump.jump_config.jump_context.duration = - current_time - jump.jump_config.jump_context.execution_time; + jump.jump_context.duration = + current_time - jump.jump_context.execution_time; }); - let jump_config = world + let jump = world .jumps - .with_mut(self.entity, |jump| jump.jump_config.clone()) + .with(self.entity, |jump| jump.clone()) .unwrap(); - let elapsed_time = jump_config.jump_context.duration; - let normalized_time = (elapsed_time / jump_config.jump_duration).min(1.0); - let height_progress = jump_config.jump_curve.eval(normalized_time as f64).y as f32; + let elapsed_time = jump.jump_context.duration; + let normalized_time = (elapsed_time / jump.jump_duration).min(1.0); + let height_progress = jump.jump_curve.eval(normalized_time as f64).y as f32; - let origin_height = jump_config.jump_context.origin_height; - let target_height = origin_height + height_progress * jump_config.jump_height; + let origin_height = jump.jump_context.origin_height; + let target_height = origin_height + height_progress * jump.jump_height; let current_translation = world .physics @@ -409,7 +409,7 @@ impl State for PlayerJumpingState }); world.movements.with_mut(self.entity, |movement| { - movement.movement_config.movement_context.is_floored = false; + movement.movement_context.is_floored = false; }); } }