use serde::{Serialize, Deserialize}; use crate::entity::character::{CharacterEntityId, SectionID}; use crate::ship::room::{Episode, Difficulty, RoomMode}; #[derive(PartialEq, Eq, Copy, Clone, Debug, Hash, PartialOrd, Ord, Serialize, Deserialize)] pub struct RoomEntityId(pub u32); #[derive(Debug, Copy, Clone)] pub enum RoomEntityMode { Single, Multi, Challenge, Battle, } #[derive(Debug, Clone)] pub struct RoomEntity { pub id: RoomEntityId, pub name: String, pub section_id: SectionID, pub mode: RoomEntityMode, pub episode: Episode, pub difficulty: Difficulty, } #[derive(Debug, Clone)] pub struct NewRoomEntity { pub name: String, pub section_id: SectionID, pub mode: RoomEntityMode, pub episode: Episode, pub difficulty: Difficulty, } impl NewRoomEntity { fn new(name: String, section_id: SectionID, mode: RoomMode) -> NewRoomEntity { NewRoomEntity { name: name, section_id: section_id, mode: match mode { RoomMode::Single {..} => RoomEntityMode::Single, RoomMode::Multi {..} => RoomEntityMode::Multi, RoomMode::Challenge {..} => RoomEntityMode::Challenge, RoomMode::Battle {..} => RoomEntityMode::Battle, }, episode: match mode { RoomMode::Single { episode, .. } => episode, RoomMode::Multi { episode, ..} => episode , RoomMode::Challenge { episode, ..} => episode, RoomMode::Battle { episode, ..} => episode, }, difficulty: match mode { RoomMode::Single { difficulty, .. } => difficulty, RoomMode::Multi { difficulty, ..} => difficulty , RoomMode::Challenge {..} => Difficulty::Normal, RoomMode::Battle { difficulty, ..} => difficulty, }, } } } #[derive(Debug, Copy, Clone)] pub enum RoomNote { Create { character_id: CharacterEntityId, }, PlayerJoin { character_id: CharacterEntityId, }, PlayerLeave { character_id: CharacterEntityId, }, QuestStart { // quest id }, QuestComplete { // quest id }, }