use crate::data::Gamedata; use glam::{IVec2, Vec2}; use serde::{Deserialize, Serialize}; pub type PlayerID = i64; pub type ItemIndex = usize; pub type TileIndex = usize; pub type RecipeIndex = usize; pub type DemandIndex = usize; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "type")] pub enum PacketS { Join { name: String, character: usize, }, Leave, Position { pos: Vec2, rot: f32, }, Interact { pos: IVec2, edge: bool, }, Collide { player: PlayerID, force: Vec2, }, Communicate { message: Option, }, #[serde(skip)] ReplaceHand { item: Option, }, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum Message { Text(String), Item(ItemIndex), } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "type")] pub enum PacketC { Init { data: Gamedata, id: PlayerID, }, AddPlayer { id: PlayerID, position: Vec2, character: usize, name: String, }, RemovePlayer { id: PlayerID, }, Position { player: PlayerID, pos: Vec2, rot: f32, }, TakeItem { tile: IVec2, player: PlayerID, }, PutItem { player: PlayerID, tile: IVec2, }, SetTileItem { tile: IVec2, item: Option, }, SetPlayerItem { player: PlayerID, item: Option, }, SetActive { tile: IVec2, progress: Option, }, UpdateMap { pos: IVec2, tile: TileIndex, neighbors: [Option; 4], }, Collide { player: PlayerID, force: Vec2, }, Communicate { player: PlayerID, message: Option, }, }