Make pickups actually function
This commit is contained in:
parent
e6793fde61
commit
c38526bc48
@ -1214,11 +1214,27 @@ impl Game {
|
||||
|
||||
pub fn on_pickup(&mut self, id: u8, player_id: u16) {
|
||||
self.run_deferred(move |s| {
|
||||
if let Some(map) = &mut s.current_map
|
||||
let kind = if let Some(map) = &mut s.current_map
|
||||
&& let Some(pickup) = map.bind_mut().pickups.get_mut(&id)
|
||||
{
|
||||
pickup.dyn_bind_mut().on_pickup();
|
||||
pickup.dyn_bind().kind()
|
||||
} else {
|
||||
PickupKind::Health
|
||||
};
|
||||
|
||||
if let Some(player) = s.find_player_mut(player_id)
|
||||
&& let Some(character) = &mut player.character
|
||||
{
|
||||
character.dyn_bind_mut().on_pickup(kind);
|
||||
}
|
||||
|
||||
if let Some(recorder) = &mut s.replay_recorder {
|
||||
recorder
|
||||
.bind_mut()
|
||||
.record_event(ReplayEvent::Pickup(kind, player_id));
|
||||
}
|
||||
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||
&& let PeerKind::Server(peer, _) = peer
|
||||
{
|
||||
|
||||
@ -134,7 +134,7 @@ impl<T: Pickup> PickupCommon for T {
|
||||
}
|
||||
|
||||
fn on_collision(&mut self, collider: Gd<Node3D>) {
|
||||
if !NetworkManager::singleton().bind().is_host() {
|
||||
if !NetworkManager::singleton().bind().is_host() || !self.is_active() {
|
||||
return;
|
||||
}
|
||||
if let Some(game) = &mut Game::singleton()
|
||||
|
||||
@ -15,7 +15,7 @@ use crate::{
|
||||
game_manager::{Game, GameManager, Player},
|
||||
map::Map,
|
||||
net::{network_manager::BallSync, util::NetVector3},
|
||||
pickup::ReplayVisibility,
|
||||
pickup::{PickupKind, ReplayVisibility},
|
||||
player::{
|
||||
DamageSource, IPlayer, NetTransform, ball::Ball, remote_player::RemotePlayer,
|
||||
weapon::WeaponType,
|
||||
@ -292,6 +292,11 @@ impl INode for ReplayPlayback {
|
||||
.take_damage(*damage_source, *damage, false);
|
||||
}
|
||||
}
|
||||
ReplayEvent::Pickup(kind, player_id) => {
|
||||
if let Some(character) = self.player_characters.get_mut(player_id) {
|
||||
character.bind_mut().on_pickup(*kind);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -569,6 +574,7 @@ pub enum ReplayEvent {
|
||||
Jump(u16),
|
||||
Punch(u16, NetVector3),
|
||||
TakeDamage(u16, DamageSource, i32),
|
||||
Pickup(PickupKind, u16),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user