Add punch animation as well

This commit is contained in:
Sofia 2026-07-26 00:29:26 +03:00
parent fb799acdbe
commit b53b6289bd
6 changed files with 14 additions and 6 deletions

View File

@ -19,7 +19,7 @@ font_color = Color(1, 0, 0, 1)
outline_size = 10
outline_color = Color(0, 0, 0, 1)
[node name="player" type="LocalPlayer" unique_id=863055906 node_paths=PackedStringArray("camera", "soldier_mesh", "collider", "effects", "dead_cam_target", "respawn_label", "camera_origin", "weapon_node", "pause_panel", "exit_to_lobby", "settings_panel", "scoreboard", "chatbox", "health_label")]
[node name="player" type="LocalPlayer" unique_id=863055906 node_paths=PackedStringArray("camera", "soldier_mesh", "collider", "effects", "dead_cam_target", "respawn_label", "camera_origin", "weapon_node", "pause_panel", "exit_to_lobby", "settings_panel", "scoreboard", "chatbox", "health_label", "hit_sound")]
look_sensitivity = 1.5
camera = NodePath("camera_3d")
move_speed = 5.0
@ -36,7 +36,9 @@ settings_panel = NodePath("settings")
scoreboard = NodePath("scoreboard")
chatbox = NodePath("chat_box")
health_label = NodePath("health_label")
hit_sound = NodePath("hit_sound")
health = 100
punch_cooldown = 1.0
collision_mask = 4
[node name="camera_3d" type="Camera3D" parent="." unique_id=1773137418]

View File

@ -38,6 +38,7 @@ soldier_mesh = NodePath("soldier_m")
collider = NodePath("collision_shape_3d")
effects = NodePath("effects")
health = 100
punch_cooldown = 1.0
spectator_camera = NodePath("spectate_root/spectate_camera")
camera_origin = NodePath("camera_origin")
name_label = NodePath("name_label")

View File

@ -431,9 +431,6 @@ impl Game {
}
pub fn change_map_selection(&mut self, map_idx: u8, emit: bool) {
if self.selected_map_idx == map_idx {
return;
}
self.selected_map_idx = map_idx;
if let Some(map) = self.maps.get(map_idx as usize) {
self.selected_map = Some(map);

View File

@ -168,6 +168,10 @@ impl IPlayer for LocalPlayer {
fn try_punch(&mut self, to: Vector3, deal_damage: bool) -> bool {
if self.punch_cd_remaining <= 0. {
if let Some(weapon) = &mut self.weapon {
weapon.set_position(Vector3::FORWARD);
weapon.set_rotation(Vector3::UP);
}
self.punch_cd_remaining = self.punch_cooldown;
self.try_punch_common(to, deal_damage)
} else {
@ -328,6 +332,7 @@ impl ICharacterBody3D for LocalPlayer {
fn process(&mut self, delta: f64) {
self.time_passed += delta;
self.punch_cd_remaining -= delta;
if self.is_dead {
self.dead_for += delta;
@ -426,10 +431,11 @@ impl ICharacterBody3D for LocalPlayer {
let prev_weapon_pos = weapon.get_position();
let new_y = prev_weapon_pos.y.lerp(target_y as f32, 0.2);
let new_x = prev_weapon_pos.x.lerp(target_x as f32, 0.2);
let new_z = prev_weapon_pos.z.lerp(0., 0.2);
let new_weapon_pos = Vector3 {
y: new_y,
x: new_x,
..prev_weapon_pos
z: new_z,
};
weapon.set_position(new_weapon_pos);
}

View File

@ -235,7 +235,7 @@ impl<T: IPlayer + ICharacterBody3D + WithBaseField> PlayerCommon for T {
self.run_deferred(move |s| {
shootable.dyn_bind_mut().on_shoot(
DamageSource::Player(s.get_player_id().unwrap_or(0)),
500,
100,
delta.normalized(),
);
});

View File

@ -242,6 +242,8 @@ impl ICharacterBody3D for RemotePlayer {
}
fn process(&mut self, delta: f64) {
self.punch_cd_remaining -= delta;
if self.is_dead {
self.dead_for += delta;
}