diff --git a/assets/pf2r/tokens/adams.png b/assets/pf2r/tokens/adams.png
new file mode 100644
index 0000000..844d270
Binary files /dev/null and b/assets/pf2r/tokens/adams.png differ
diff --git a/assets/pf2r/tokens/louise.jpg b/assets/pf2r/tokens/louise.jpg
deleted file mode 100644
index b58a2d4..0000000
Binary files a/assets/pf2r/tokens/louise.jpg and /dev/null differ
diff --git a/assets/pf2r/tokens/tim.png b/assets/pf2r/tokens/tim.png
new file mode 100644
index 0000000..67b22cc
Binary files /dev/null and b/assets/pf2r/tokens/tim.png differ
diff --git a/src/game/mod.rs b/src/game/mod.rs
index aead803..d9471de 100644
--- a/src/game/mod.rs
+++ b/src/game/mod.rs
@@ -10,7 +10,8 @@ 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>> {
+pub trait GameImpl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>>
+{
/// Creates a new game
fn new() -> Self;
@@ -23,6 +24,7 @@ pub trait GameImpl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::
// Scenes
/// the list of available scenes
fn scenes(&self) -> Vec;
+ fn current_scene(&self) -> usize;
/// Gets the map background (file path)
fn scene_characters(&self, scene: usize, character_id: usize) -> Option>;
fn scene_map(&self, scene_id: usize) -> Option;
@@ -37,17 +39,47 @@ pub struct Game + Serialize, A: entry::GameEntry + Serialize> {
_a: PhantomData,
characters: Vec<(C, CharacterInfo)>,
scenes: HashMap,
+ current_scene: usize,
}
-impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>> GameImpl<'a, C, A> for Game {
+impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Serialize + Deserialize<'a>>
+ GameImpl<'a, C, A> for Game
+{
fn new() -> Self {
let mut tokens = HashMap::new();
- tokens.insert(0, TokenInfo { character: "bart".to_string(), img_source: "assets/pf2r/tokens/louise.jpg".to_string(), x: 2.0, y: 2.0 });
+ tokens.insert(
+ 0,
+ TokenInfo {
+ character: "Adams".to_string(),
+ img_source: "assets/pf2r/tokens/adams.png".to_string(),
+ x: 2.0,
+ y: 2.0,
+ },
+ );
+ tokens.insert(
+ 1,
+ TokenInfo {
+ character: "Tim".to_string(),
+ img_source: "assets/pf2r/tokens/tim.png".to_string(),
+ x: 0.0,
+ y: 2.0,
+ },
+ );
let mut scenes = HashMap::new();
- scenes.insert(0, Scene { map: None, characters: vec![(0, Party(true))] });
+ scenes.insert(
+ 0,
+ Scene {
+ map: Some(scene::Map {
+ background: String::new(),
+ tokens,
+ }),
+ characters: vec![(0, Party(true))],
+ },
+ );
Self {
_a: PhantomData,
characters: Vec::new(),
scenes,
+ current_scene: 0,
}
}
fn create_character(&mut self) -> usize {
@@ -55,7 +87,8 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
self.characters.len() - 1
}
fn move_token(&mut self, scene: usize, token_id: usize, x: f32, y: f32) -> bool {
- let token = self.scenes
+ let token = self
+ .scenes
.get_mut(&scene)
.map(|s| s.map.as_mut())
.flatten()
@@ -65,43 +98,35 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
ti.x = x;
ti.y = y;
true
- }
- else {
+ } else {
false
}
}
fn token_info(&self, scene: usize, token_id: usize) -> Option<&TokenInfo> {
- let token = self.scenes
+ let token = self
+ .scenes
.get(&scene)
.map(|s| s.map.as_ref())
.flatten()
.map(|m| m.tokens.get(&token_id))
.flatten();
- 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 {
self.scenes
.get(&scene)
.map(|s| s.map.as_ref())
.flatten()
- .map(|m| m.tokens
- .keys()
- .into_iter()
- .map(|k| *k)
- .collect()
- ) // this map feels stupid but keys() turns into a &usize iterator so :shrug:
+ // this map feels stupid but keys() turns into a &usize iterator so :shrug:
+ .map(|m| m.tokens.keys().into_iter().map(|k| *k).collect())
.unwrap_or(Vec::new())
}
-
+
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
+ let tokens = self
+ .scenes
.get_mut(&scene)
.map(|s| s.map.as_mut())
.flatten()
@@ -110,62 +135,70 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
while tokens.contains_key(&id) {
id += 1;
}
- tokens.insert(id, TokenInfo { character, img_source, x, y });
+ tokens.insert(
+ id,
+ TokenInfo {
+ character,
+ img_source,
+ x,
+ y,
+ },
+ );
id
- }
- else {
+ } else {
0
}
}
-
+
fn display_character(&self, character_id: usize, access: AccessLevel) -> Vec