2025-06-23 09:48:28 +01:00
|
|
|
use core::num::NonZeroU8;
|
|
|
|
|
|
|
|
|
|
use serde::{Deserialize, Serialize};
|
2025-09-30 13:07:59 +01:00
|
|
|
use werewolves_macros::Extract;
|
2025-06-23 09:48:28 +01:00
|
|
|
|
|
|
|
|
use crate::{
|
|
|
|
|
error::GameError,
|
|
|
|
|
game::{GameOver, GameSettings},
|
|
|
|
|
message::{
|
|
|
|
|
PublicIdentity, Target,
|
|
|
|
|
night::{ActionPrompt, ActionResponse, ActionResult},
|
|
|
|
|
},
|
|
|
|
|
player::{CharacterId, PlayerId},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
use super::{CharacterState, PlayerState};
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
|
|
|
pub enum HostMessage {
|
|
|
|
|
GetState,
|
|
|
|
|
Lobby(HostLobbyMessage),
|
|
|
|
|
InGame(HostGameMessage),
|
|
|
|
|
ForceRoleAckFor(CharacterId),
|
|
|
|
|
NewLobby,
|
|
|
|
|
Echo(ServerToHostMessage),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
|
|
|
pub enum HostGameMessage {
|
|
|
|
|
Day(HostDayMessage),
|
|
|
|
|
Night(HostNightMessage),
|
2025-09-28 02:13:34 +01:00
|
|
|
PreviousState,
|
2025-06-23 09:48:28 +01:00
|
|
|
GetState,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
|
|
|
pub enum HostNightMessage {
|
|
|
|
|
ActionResponse(ActionResponse),
|
|
|
|
|
Next,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
|
|
|
pub enum HostDayMessage {
|
|
|
|
|
Execute,
|
|
|
|
|
MarkForExecution(CharacterId),
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-30 13:07:59 +01:00
|
|
|
impl From<HostDayMessage> for HostGameMessage {
|
|
|
|
|
fn from(value: HostDayMessage) -> Self {
|
|
|
|
|
HostGameMessage::Day(value)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-23 09:48:28 +01:00
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
|
|
|
pub enum HostLobbyMessage {
|
|
|
|
|
GetState,
|
|
|
|
|
Kick(PlayerId),
|
|
|
|
|
GetGameSettings,
|
|
|
|
|
SetGameSettings(GameSettings),
|
|
|
|
|
Start,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
2025-09-30 13:07:59 +01:00
|
|
|
#[cfg_attr(test, derive(werewolves_macros::Titles))]
|
2025-06-23 09:48:28 +01:00
|
|
|
pub enum ServerToHostMessage {
|
|
|
|
|
Disconnect,
|
|
|
|
|
Daytime {
|
|
|
|
|
characters: Box<[CharacterState]>,
|
|
|
|
|
marked: Box<[CharacterId]>,
|
|
|
|
|
day: NonZeroU8,
|
|
|
|
|
},
|
2025-09-30 13:07:59 +01:00
|
|
|
ActionPrompt(ActionPrompt),
|
|
|
|
|
ActionResult(Option<PublicIdentity>, ActionResult),
|
2025-06-23 09:48:28 +01:00
|
|
|
Lobby(Box<[PlayerState]>),
|
|
|
|
|
GameSettings(GameSettings),
|
|
|
|
|
Error(GameError),
|
|
|
|
|
GameOver(GameOver),
|
|
|
|
|
WaitingForRoleRevealAcks {
|
|
|
|
|
ackd: Box<[Target]>,
|
|
|
|
|
waiting: Box<[Target]>,
|
|
|
|
|
},
|
|
|
|
|
}
|