diff options
| author | Arne Dußin | 2020-11-01 17:44:51 +0100 |
|---|---|---|
| committer | Arne Dußin | 2020-11-01 17:44:51 +0100 |
| commit | 2db23f3213ff1bb2fe0cf005e922536da7ff5cd7 (patch) | |
| tree | 912b6d829ea8c8c28a2ed257e70e0fd6814bef50 /src/tool/mod.rs | |
| parent | a6be14ada463cb5a3fc0a810b8b341093abbb68d (diff) | |
| download | graf_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.rs | 52 |
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) {} } |
