Move ball when it's being shot

This commit is contained in:
Sofia 2026-07-22 23:53:27 +03:00
parent 09959cb923
commit 4b41d61040

View File

@ -2,8 +2,9 @@ use godot::{classes::AudioStreamPlayer3D, prelude::*};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::{ use crate::{
ball::Ball,
game_manager::{Game, GameOption}, game_manager::{Game, GameOption},
net::util::cast_ray, net::{network_manager::NetworkManager, util::cast_ray},
player::{DamageSource, IPlayer}, player::{DamageSource, IPlayer},
}; };
@ -68,7 +69,7 @@ impl Weapon for Raygun {
} }
if deal_damage && let Some(target) = target { if deal_damage && let Some(target) = target {
if let Ok(mut player) = target.collider.try_dynify::<dyn IPlayer>() { if let Ok(mut player) = target.collider.clone().try_dynify::<dyn IPlayer>() {
self.run_deferred(move |_| { self.run_deferred(move |_| {
if let Some(game) = Game::singleton() if let Some(game) = Game::singleton()
&& game.bind().opts.is_true(GameOption::FriendlyFire) && game.bind().opts.is_true(GameOption::FriendlyFire)
@ -80,6 +81,11 @@ impl Weapon for Raygun {
); );
} }
}); });
} else if let Ok(mut ball) = target.collider.try_cast::<Ball>() {
let prev_velocity = ball.bind().base().get_linear_velocity();
ball.bind_mut()
.base_mut()
.set_linear_velocity(prev_velocity + dir * 10.);
} }
} }
} }