You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
72 lines
1.9 KiB
//! Update to the game state
|
|
|
|
use super::UserId;
|
|
use crate::data::{NodeId, PacketId, Player, Upgrade};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
/// An update provided by the game server
|
|
#[derive(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(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(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(Serialize, Deserialize)]
|
|
pub enum PacketUpdate {
|
|
/// Advance a packet along one step along the link
|
|
Increment(PacketId),
|
|
}
|
|
|
|
/// Update made to the user set
|
|
#[derive(Serialize, Deserialize)]
|
|
pub enum UserUpdate {
|
|
UserLeft(UserId),
|
|
}
|
|
|
|
/// An error occured, can be non-fatal
|
|
#[derive(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,
|
|
}
|
|
|