/* Hurry Curry! - a game about cooking Copyright 2024 metamuffin This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License only. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ use crate::data::Gamedata; use glam::{IVec2, Vec2}; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(transparent)] pub struct PlayerID(pub i64); #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(transparent)] pub struct ItemIndex(pub usize); #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(transparent)] pub struct TileIndex(pub usize); #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(transparent)] pub struct RecipeIndex(pub usize); #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(transparent)] pub struct DemandIndex(pub usize); #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "type")] pub enum PacketS { Join { name: String, character: i32, }, Leave, Position { pos: Vec2, rot: f32, boosting: bool, }, Interact { pos: IVec2, edge: bool, }, Collide { player: PlayerID, force: Vec2, }, Communicate { message: Option, persist: bool, }, #[serde(skip)] /// For internal use only ReplaceHand { item: Option, }, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum Message { Text(String), Item(ItemIndex), Effect(String), } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "type")] pub enum PacketC { Init { id: PlayerID, }, Data { data: Gamedata, }, AddPlayer { id: PlayerID, position: Vec2, character: i32, name: String, }, RemovePlayer { id: PlayerID, }, Position { player: PlayerID, pos: Vec2, rot: f32, boosting: bool, }, MoveItem { from: ItemLocation, to: ItemLocation, }, SetItem { location: ItemLocation, item: Option, }, SetProgress { item: ItemLocation, progress: Option, warn: bool, }, UpdateMap { tile: IVec2, kind: Option, neighbors: [Option; 4], }, Collide { player: PlayerID, force: Vec2, }, Communicate { player: PlayerID, message: Option, persist: bool, }, ServerMessage { text: String, }, Score { points: i64, demands_failed: usize, demands_completed: usize, time_remaining: Option, }, SetIngame { state: bool, lobby: bool, }, Error { message: String, }, } #[derive(Debug, Clone, Serialize, Deserialize, Copy)] #[serde(rename_all = "snake_case")] pub enum ItemLocation { Tile(IVec2), Player(PlayerID), }