1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use crate::events::ApplicableEvent;
use crate::players::Player;
use crate::universe_group::UniverseGroup;
use serde_derive::{Deserialize, Serialize};
use std::sync::Arc;

/// This event contains all information about a [`Player`].
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct FullUpdatePlayerEvent {
    #[serde(flatten)]
    pub player: Player,
}

impl ApplicableEvent<UniverseGroup> for FullUpdatePlayerEvent {
    fn apply(mut self, group: &mut UniverseGroup) {
        let id = self.player.id;
        self.player.connection = Arc::downgrade(&group.connection);
        group.players[id.0] = Some(self.player);
    }
}