/*
Undercooked - 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,
},
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 {
id: PlayerID,
},
Data {
data: Gamedata,
},
AddPlayer {
id: PlayerID,
position: Vec2,
character: i32,
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,
warn: bool,
},
UpdateMap {
tile: IVec2,
kind: Option,
neighbors: [Option; 4],
},
Collide {
player: PlayerID,
force: Vec2,
},
Communicate {
player: PlayerID,
message: Option,
},
Score {
demands_failed: usize,
demands_completed: usize,
},
Error {
message: String,
},
}