Live location tracking and playback for the game "manhunt"
at ben/frontend 126 lines 3.0 kB view raw
1use interprocess::local_socket::{GenericNamespaced, Name, ToNsName}; 2use manhunt_logic::{GameHistory, GameSettings, GameUiState, LobbyState, PowerUpType}; 3use serde::{Deserialize, Serialize}; 4 5pub mod prelude { 6 pub use anyhow::{Context, anyhow, bail}; 7 pub type Result<T = (), E = anyhow::Error> = std::result::Result<T, E>; 8} 9 10pub use prelude::*; 11 12pub fn get_socket_name(base_name: String) -> Result<Name<'static>> { 13 base_name 14 .to_ns_name::<GenericNamespaced>() 15 .context("Failed to parse socket name") 16} 17 18#[derive(Debug, Clone, Serialize, Deserialize)] 19pub enum LobbyRequest { 20 SwitchTeams(bool), 21 HostStartGame, 22 HostUpdateSettings(GameSettings), 23 Leave, 24} 25 26#[derive(Debug, Clone, Serialize, Deserialize)] 27pub enum GameRequest { 28 NextTick, 29 MarkCaught, 30 GetPowerup, 31 UsePowerup, 32 ForcePowerup(PowerUpType), 33 Quit, 34} 35 36#[derive(Debug, Clone, Serialize, Deserialize)] 37pub enum TestingRequest { 38 StartLobby(GameSettings), 39 JoinLobby(String), 40 LobbyReq(LobbyRequest), 41 GameReq(GameRequest), 42} 43 44impl From<LobbyRequest> for TestingRequest { 45 fn from(val: LobbyRequest) -> Self { 46 TestingRequest::LobbyReq(val) 47 } 48} 49 50impl From<GameRequest> for TestingRequest { 51 fn from(val: GameRequest) -> Self { 52 TestingRequest::GameReq(val) 53 } 54} 55 56impl TryInto<LobbyRequest> for TestingRequest { 57 type Error = TestingResponse; 58 59 fn try_into(self) -> Result<LobbyRequest, Self::Error> { 60 if let Self::LobbyReq(lr) = self { 61 Ok(lr) 62 } else { 63 Err(TestingResponse::WrongScreen) 64 } 65 } 66} 67 68impl TryInto<GameRequest> for TestingRequest { 69 type Error = TestingResponse; 70 71 fn try_into(self) -> Result<GameRequest, Self::Error> { 72 if let Self::GameReq(gr) = self { 73 Ok(gr) 74 } else { 75 Err(TestingResponse::WrongScreen) 76 } 77 } 78} 79 80#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] 81pub enum ScreenUpdate { 82 PreConnect, 83 Lobby, 84 Game, 85} 86 87#[derive(Debug, Clone, Serialize, Deserialize)] 88pub enum TestingResponse { 89 Complete, 90 ScreenChanged(ScreenUpdate), 91 LobbyStateUpdate(LobbyState), 92 GameStateUpdate(GameUiState), 93 GameOver(GameHistory), 94 WrongScreen, 95 Error(String), 96} 97 98impl From<GameHistory> for TestingResponse { 99 fn from(val: GameHistory) -> Self { 100 TestingResponse::GameOver(val) 101 } 102} 103 104impl From<anyhow::Error> for TestingResponse { 105 fn from(value: anyhow::Error) -> Self { 106 TestingResponse::Error(value.to_string()) 107 } 108} 109 110impl From<ScreenUpdate> for TestingResponse { 111 fn from(val: ScreenUpdate) -> Self { 112 TestingResponse::ScreenChanged(val) 113 } 114} 115 116impl From<LobbyState> for TestingResponse { 117 fn from(val: LobbyState) -> Self { 118 TestingResponse::LobbyStateUpdate(val) 119 } 120} 121 122impl From<GameUiState> for TestingResponse { 123 fn from(val: GameUiState) -> Self { 124 TestingResponse::GameStateUpdate(val) 125 } 126}