diff --git a/src/game/mod.rs b/src/game/mod.rs index ad9c63c..a3b0092 100644 --- a/src/game/mod.rs +++ b/src/game/mod.rs @@ -10,40 +10,14 @@ pub mod chat_message; pub mod entry; pub mod scene; -pub trait GameImpl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>> -{ - /// Creates a new game - fn new() -> Self; - - // Character management - /// Creates a new character, returning the character id - fn create_character(&mut self) -> usize; - fn display_character(&self, character_id: usize, access: AccessLevel) -> Vec>; - fn characters(&self) -> Vec; - fn character_short(&self, character_id: usize) -> Option; - // Scenes - /// the list of available scenes - fn scenes(&self) -> Vec; - fn get_scene(&self, id: usize) -> Option<&Scene>; - fn get_scene_mut(&mut self, id: usize) -> Option<&mut Scene>; - fn create_scene(&mut self, title: String); - fn scene_visible(&mut self, scene: usize, visible: bool); - fn create_token(&mut self, scene_id: usize, character: String, img_source: String, x: f32, y: f32) -> usize; - fn move_token(&mut self, scene_id: usize, token_id: usize, x: f32, y: f32) -> bool; - fn token_info(&self, scene: usize, token_id: usize) -> Option<&TokenInfo>; - fn available_tokens(&self, scene: usize) -> Vec; -} - #[derive(Serialize, Deserialize)] pub struct Game + Serialize, A: entry::GameEntry + Serialize> { _a: PhantomData, characters: Vec<(C, CharacterInfo)>, scenes: HashMap, } -impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>> - GameImpl<'a, C, A> for Game -{ - fn new() -> Self { +impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>> Game { + pub fn new() -> Self { let mut tokens = HashMap::new(); tokens.insert( 0, @@ -98,11 +72,11 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se scenes, } } - fn create_character(&mut self) -> usize { + pub fn create_character(&mut self) -> usize { self.characters.push((C::default(), CharacterInfo::default())); self.characters.len() - 1 } - fn move_token(&mut self, scene: usize, token_id: usize, x: f32, y: f32) -> bool { + pub fn move_token(&mut self, scene: usize, token_id: usize, x: f32, y: f32) -> bool { let token = self .scenes .get_mut(&scene) @@ -118,7 +92,7 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se false } } - fn token_info(&self, scene: usize, token_id: usize) -> Option<&TokenInfo> { + pub fn token_info(&self, scene: usize, token_id: usize) -> Option<&TokenInfo> { let token = self .scenes .get(&scene) @@ -129,7 +103,7 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se if let Some(ti) = token { Some(ti) } else { None } } - fn available_tokens(&self, scene: usize) -> Vec { + pub fn available_tokens(&self, scene: usize) -> Vec { self.scenes .get(&scene) .map(|s| s.map.as_ref()) @@ -139,7 +113,7 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se .unwrap_or(Vec::new()) } - fn create_token(&mut self, scene: usize, character: String, img_source: String, x: f32, y: f32) -> usize { + pub fn create_token(&mut self, scene: usize, character: String, img_source: String, x: f32, y: f32) -> usize { let mut id = 0; let tokens = self .scenes @@ -166,32 +140,32 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se } } - fn display_character(&self, character_id: usize, access: AccessLevel) -> Vec> { + pub fn display_character(&self, character_id: usize, access: AccessLevel) -> Vec> { self.characters .get(character_id) .map(|c| c.0.display(access)) .unwrap_or(Vec::new()) } - fn characters(&self) -> Vec { + pub fn characters(&self) -> Vec { // this is stupid i should redo the characters data struct to actually have ids rather than use an index // (as deletion of a character f-s up the ids) (0_usize..self.characters.len()).collect() } - fn character_short(&self, character_id: usize) -> Option { + pub fn character_short(&self, character_id: usize) -> Option { self.characters.get(character_id).map(|c| c.0.short(character_id)) } - fn scenes(&self) -> Vec { + pub fn scenes(&self) -> Vec { self.scenes.keys().map(|k| *k).collect() } - fn get_scene(&self, id: usize) -> Option<&Scene> { + pub fn get_scene(&self, id: usize) -> Option<&Scene> { self.scenes.get(&id) } - fn create_scene(&mut self, title: String) { + pub fn create_scene(&mut self, title: String) { let id = self.scenes.keys().max().map(|k| k + 1).unwrap_or(0); self.scenes.insert( id, @@ -204,13 +178,13 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se ); } - fn scene_visible(&mut self, scene: usize, visible: bool) { + pub fn scene_visible(&mut self, scene: usize, visible: bool) { if let Some(scene) = self.scenes.get_mut(&scene) { scene.visible_to_users = visible; } } - fn get_scene_mut(&mut self, id: usize) -> Option<&mut Scene> { + pub fn get_scene_mut(&mut self, id: usize) -> Option<&mut Scene> { self.scenes.get_mut(&id) } } diff --git a/src/lib.rs b/src/lib.rs index c30695a..1dd79ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use api::game_actions::SpawnToken; use game::{ - Game, GameImpl, + Game, chat_message::ChatMessage, entry::{ActionDefinition, DiceRoll}, };