aboutsummaryrefslogtreecommitdiff
path: root/src/tool/mod.rs
diff options
context:
space:
mode:
authorArne Dußin2020-11-01 17:44:51 +0100
committerArne Dußin2020-11-01 17:44:51 +0100
commit2db23f3213ff1bb2fe0cf005e922536da7ff5cd7 (patch)
tree912b6d829ea8c8c28a2ed257e70e0fd6814bef50 /src/tool/mod.rs
parenta6be14ada463cb5a3fc0a810b8b341093abbb68d (diff)
downloadgraf_karto-2db23f3213ff1bb2fe0cf005e922536da7ff5cd7.tar.gz
graf_karto-2db23f3213ff1bb2fe0cf005e922536da7ff5cd7.zip
Refactor a major part of the project
In order to be able to save and load the map, a major rework of the code seemed necessary, since Vector2 and Rectangle of raylib do not implement serialize, and it seems cleanest to use the serialize/deserialize traits of serde, to save for instance to RON. ToolShed was renamed to Editor, since it should better show, that it does quite a bit more than harbour tools. The map data is now centrally saved in the editor, instead of decentralised in the tool structs.
Diffstat (limited to 'src/tool/mod.rs')
-rw-r--r--src/tool/mod.rs52
1 files changed, 4 insertions, 48 deletions
diff --git a/src/tool/mod.rs b/src/tool/mod.rs
index da95c61..73654d9 100644
--- a/src/tool/mod.rs
+++ b/src/tool/mod.rs
@@ -6,9 +6,9 @@ pub use deletion_tool::DeletionTool;
pub use room_tool::RoomTool;
pub use wall_tool::WallTool;
+use crate::map_data::MapData;
use crate::transform::Transform;
use raylib::core::drawing::RaylibDrawHandle;
-use raylib::ffi::KeyboardKey;
use raylib::RaylibHandle;
#[derive(Debug)]
@@ -21,52 +21,8 @@ pub enum ToolType {
}
pub trait Tool {
- fn update(&mut self, rl: &RaylibHandle, transform: &Transform) {}
- fn active_update(&mut self, rl: &RaylibHandle, transform: &Transform);
+ fn update(&mut self, _map: &MapData, _rl: &RaylibHandle, _transform: &Transform) {}
+ fn active_update(&mut self, map: &mut MapData, rl: &RaylibHandle, transform: &Transform);
- fn draw(&self, _rld: &mut RaylibDrawHandle, _transform: &Transform) {}
-}
-
-pub struct ToolShed {
- tools: Vec<Box<dyn Tool>>,
- active: usize,
-}
-
-impl ToolShed {
- pub fn new() -> Self {
- let mut tools: Vec<Box<dyn Tool>> = Vec::with_capacity(ToolType::NumTools as usize);
- assert_eq!(ToolType::RoomTool as u8, 0);
- tools.push(Box::new(RoomTool::new()));
- assert_eq!(ToolType::WallTool as u8, 1);
- tools.push(Box::new(WallTool::new()));
- assert_eq!(ToolType::DeletionTool as u8, 2);
- tools.push(Box::new(DeletionTool::new()));
-
- assert_eq!(ToolType::NumTools as usize, tools.len());
-
- Self { tools, active: 0 }
- }
-
- pub fn update(&mut self, rl: &RaylibHandle, transform: &Transform) {
- // Handle keybindings for tool change
- self.active = if rl.is_key_pressed(KeyboardKey::KEY_R) {
- ToolType::RoomTool as usize
- } else if rl.is_key_pressed(KeyboardKey::KEY_W) {
- ToolType::WallTool as usize
- } else {
- self.active
- };
-
- for tool in &mut self.tools {
- tool.update(rl, transform);
- }
-
- self.tools[self.active].active_update(rl, transform);
- }
-
- pub fn draw_tools(&self, rld: &mut RaylibDrawHandle, transform: &Transform) {
- for tool in &self.tools {
- tool.draw(rld, transform);
- }
- }
+ fn draw(&self, _map: &MapData, _rld: &mut RaylibDrawHandle, _transform: &Transform) {}
}