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) {
|
pub fn on_pickup(&mut self, id: u8, player_id: u16) {
|
||||||
self.run_deferred(move |s| {
|
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)
|
&& let Some(pickup) = map.bind_mut().pickups.get_mut(&id)
|
||||||
{
|
{
|
||||||
pickup.dyn_bind_mut().on_pickup();
|
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
|
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||||
&& let PeerKind::Server(peer, _) = peer
|
&& let PeerKind::Server(peer, _) = peer
|
||||||
{
|
{
|
||||||
|
|||||||
@ -134,7 +134,7 @@ impl<T: Pickup> PickupCommon for T {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn on_collision(&mut self, collider: Gd<Node3D>) {
|
fn on_collision(&mut self, collider: Gd<Node3D>) {
|
||||||
if !NetworkManager::singleton().bind().is_host() {
|
if !NetworkManager::singleton().bind().is_host() || !self.is_active() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if let Some(game) = &mut Game::singleton()
|
if let Some(game) = &mut Game::singleton()
|
||||||
|
|||||||
@ -15,7 +15,7 @@ use crate::{
|
|||||||
game_manager::{Game, GameManager, Player},
|
game_manager::{Game, GameManager, Player},
|
||||||
map::Map,
|
map::Map,
|
||||||
net::{network_manager::BallSync, util::NetVector3},
|
net::{network_manager::BallSync, util::NetVector3},
|
||||||
pickup::ReplayVisibility,
|
pickup::{PickupKind, ReplayVisibility},
|
||||||
player::{
|
player::{
|
||||||
DamageSource, IPlayer, NetTransform, ball::Ball, remote_player::RemotePlayer,
|
DamageSource, IPlayer, NetTransform, ball::Ball, remote_player::RemotePlayer,
|
||||||
weapon::WeaponType,
|
weapon::WeaponType,
|
||||||
@ -292,6 +292,11 @@ impl INode for ReplayPlayback {
|
|||||||
.take_damage(*damage_source, *damage, false);
|
.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),
|
Jump(u16),
|
||||||
Punch(u16, NetVector3),
|
Punch(u16, NetVector3),
|
||||||
TakeDamage(u16, DamageSource, i32),
|
TakeDamage(u16, DamageSource, i32),
|
||||||
|
Pickup(PickupKind, u16),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user