//! Update to the game state use crate::{ data::{NodeId, PacketId, Player, Upgrade}, wire::UserId, }; use serde::{Deserialize, Serialize}; /// An update provided by the game server #[derive(Clone, Serialize, Deserialize)] pub enum Update { /// Update made to a node Node(NodeUpdate), /// Update made to a link Link(LinkUpdate), /// Update made to a packet Packet(PacketUpdate), /// Update made to the user set User(UserUpdate), /// An error occured, can be non-fatal Error(UpdateError), } /// Update made to a node #[derive(Clone, Serialize, Deserialize)] pub enum NodeUpdate { /// The node owner changed Owner(Player), /// Represent a new upgrade state Level { node: NodeId, new: Upgrade }, /// A new packet was consumed from a link NewPacket(PacketId), /// Remove a packet from the node buffer SentPacket(PacketId), /// Dropped a packet DropPacket(PacketId), } /// Update made to a link #[derive(Clone, Serialize, Deserialize)] pub enum LinkUpdate { /// Take a packet from a node's buffer TakePacket(PacketId), /// Give a packet to a node's buffer GivePacket(PacketId), } /// Update made to a packet #[derive(Clone, Serialize, Deserialize)] pub enum PacketUpdate { /// Advance a packet along one step along the link Increment(PacketId), } /// Update made to the user set #[derive(Clone, Serialize, Deserialize)] pub enum UserUpdate { UserLeft(UserId), UserPaused(UserId), } /// An error occured, can be non-fatal #[derive(Clone, Serialize, Deserialize)] pub enum UpdateError { /// You are the last user in the match LastUser, /// The game crashed, so kick all GameCrashed, /// The server's time was behind the client time /// /// This means that newer events will be dropped from the map /// state. This should prompt the client to warn the user this /// has happened, then resync the time of the game states. TimeAheadServer, }