Playing with sails and rudders

This commit is contained in:
JP Stringham
2025-11-28 16:25:37 -05:00
parent b564b42ade
commit cf4beb0b9a

View File

@@ -18,6 +18,12 @@ struct InputState {
y: f32,
}
#[derive(Component, Default)]
struct SailboatState {
sail_extension: f32,
rudder_dir: f32,
}
fn main() {
let mut app = App::new();
@@ -50,6 +56,7 @@ fn sprite_setup(assets: Res<AssetServer>, mut commands: Commands) {
},
EntityPhysics::default(),
InputState::default(),
SailboatState::default(),
))
.with_child((
Sprite {
@@ -93,28 +100,45 @@ fn handle_keys(mut q_player: Query<&mut InputState>, keys: Res<ButtonInput<KeyCo
}
}
fn player_physics(mut q_player: Query<(&InputState, &mut EntityPhysics, &mut Transform)>) {
let Ok((input, mut physics, mut transform)) = q_player.single_mut() else {
fn player_physics(
mut q_player: Query<(
&InputState,
&mut SailboatState,
&mut EntityPhysics,
&mut Transform,
)>,
) {
let Ok((input, mut boat_state, mut physics, mut transform)) = q_player.single_mut() else {
return;
};
if input.x < 0. {
physics.turn_speed -= 0.1;
boat_state.rudder_dir = (-1.0 + boat_state.rudder_dir) * 0.5;
} else if input.x > 0. {
physics.turn_speed += 0.1;
boat_state.rudder_dir = (1.0 + boat_state.rudder_dir) * 0.5;
} else {
physics.turn_speed *= 0.99;
boat_state.rudder_dir *= 0.5;
}
physics.turn_speed *= 0.1;
physics.turn_speed += boat_state.rudder_dir * (physics.speed.abs() / MAX_SAILING_SPEED);
physics.turn_speed = physics.turn_speed.clamp(-MAX_TURN_SPEED, MAX_TURN_SPEED);
physics.heading += physics.turn_speed * 0.1;
if input.y > 0. {
physics.speed += 0.1;
boat_state.sail_extension = (1.0 + boat_state.sail_extension) * 0.5;
} else if input.y < 0. {
physics.speed -= 0.1;
} else {
physics.speed *= 0.999;
boat_state.sail_extension *= 0.5;
}
boat_state.sail_extension = boat_state.sail_extension.clamp(0., 1.);
physics.speed *= 0.99;
if boat_state.sail_extension > 0. {
physics.speed += 0.01 * boat_state.sail_extension;
}
physics.speed = physics.speed.clamp(-MAX_SAILING_SPEED, MAX_SAILING_SPEED);