remove the GameImpl trait as it made no sense during development

This commit is contained in:
Rusty Striker 2025-07-17 19:05:54 +03:00
parent 529896a352
commit 295c9438af
Signed by: RustyStriker
GPG key ID: 87E4D691632DFF15
2 changed files with 16 additions and 42 deletions

View file

@ -10,40 +10,14 @@ pub mod chat_message;
pub mod entry; pub mod entry;
pub mod scene; pub mod scene;
pub trait GameImpl<'a, C: Character<A> + 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<Option<(String, EntryType)>>;
fn characters(&self) -> Vec<usize>;
fn character_short(&self, character_id: usize) -> Option<CharacterShort>;
// Scenes
/// the list of available scenes
fn scenes(&self) -> Vec<usize>;
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<usize>;
}
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct Game<C: Character<A> + Serialize, A: entry::GameEntry + Serialize> { pub struct Game<C: Character<A> + Serialize, A: entry::GameEntry + Serialize> {
_a: PhantomData<A>, _a: PhantomData<A>,
characters: Vec<(C, CharacterInfo)>, characters: Vec<(C, CharacterInfo)>,
scenes: HashMap<usize, Scene>, scenes: HashMap<usize, Scene>,
} }
impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>> impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>> Game<C, A> {
GameImpl<'a, C, A> for Game<C, A> pub fn new() -> Self {
{
fn new() -> Self {
let mut tokens = HashMap::new(); let mut tokens = HashMap::new();
tokens.insert( tokens.insert(
0, 0,
@ -98,11 +72,11 @@ impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
scenes, scenes,
} }
} }
fn create_character(&mut self) -> usize { pub fn create_character(&mut self) -> usize {
self.characters.push((C::default(), CharacterInfo::default())); self.characters.push((C::default(), CharacterInfo::default()));
self.characters.len() - 1 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 let token = self
.scenes .scenes
.get_mut(&scene) .get_mut(&scene)
@ -118,7 +92,7 @@ impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
false 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 let token = self
.scenes .scenes
.get(&scene) .get(&scene)
@ -129,7 +103,7 @@ impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
if let Some(ti) = token { Some(ti) } else { None } if let Some(ti) = token { Some(ti) } else { None }
} }
fn available_tokens(&self, scene: usize) -> Vec<usize> { pub fn available_tokens(&self, scene: usize) -> Vec<usize> {
self.scenes self.scenes
.get(&scene) .get(&scene)
.map(|s| s.map.as_ref()) .map(|s| s.map.as_ref())
@ -139,7 +113,7 @@ impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
.unwrap_or(Vec::new()) .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 mut id = 0;
let tokens = self let tokens = self
.scenes .scenes
@ -166,32 +140,32 @@ impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
} }
} }
fn display_character(&self, character_id: usize, access: AccessLevel) -> Vec<Option<(String, EntryType)>> { pub fn display_character(&self, character_id: usize, access: AccessLevel) -> Vec<Option<(String, EntryType)>> {
self.characters self.characters
.get(character_id) .get(character_id)
.map(|c| c.0.display(access)) .map(|c| c.0.display(access))
.unwrap_or(Vec::new()) .unwrap_or(Vec::new())
} }
fn characters(&self) -> Vec<usize> { pub fn characters(&self) -> Vec<usize> {
// this is stupid i should redo the characters data struct to actually have ids rather than use an index // 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) // (as deletion of a character f-s up the ids)
(0_usize..self.characters.len()).collect() (0_usize..self.characters.len()).collect()
} }
fn character_short(&self, character_id: usize) -> Option<CharacterShort> { pub fn character_short(&self, character_id: usize) -> Option<CharacterShort> {
self.characters.get(character_id).map(|c| c.0.short(character_id)) self.characters.get(character_id).map(|c| c.0.short(character_id))
} }
fn scenes(&self) -> Vec<usize> { pub fn scenes(&self) -> Vec<usize> {
self.scenes.keys().map(|k| *k).collect() 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) 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); let id = self.scenes.keys().max().map(|k| k + 1).unwrap_or(0);
self.scenes.insert( self.scenes.insert(
id, id,
@ -204,13 +178,13 @@ impl<'a, C: Character<A> + 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) { if let Some(scene) = self.scenes.get_mut(&scene) {
scene.visible_to_users = visible; 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) self.scenes.get_mut(&id)
} }
} }

View file

@ -2,7 +2,7 @@ use std::collections::HashMap;
use api::game_actions::SpawnToken; use api::game_actions::SpawnToken;
use game::{ use game::{
Game, GameImpl, Game,
chat_message::ChatMessage, chat_message::ChatMessage,
entry::{ActionDefinition, DiceRoll}, entry::{ActionDefinition, DiceRoll},
}; };