diff --git a/levels/chapter_01.json b/levels/chapter_01.json index 81c6a2d..4e6c18a 100644 --- a/levels/chapter_01.json +++ b/levels/chapter_01.json @@ -5,14 +5,7 @@ "id": "output", "name": "Zero", "description": "learn how to output data", - "init_board": { - "comments": [ - { "text": "Welcome :3", "x": 3, "y": 0 }, - { "text": "< This is a marble,\n it will move down when you start the machine", "x": 3, "y": 2 }, - { "text": "< This is an input/output silo\n when a marble enters it, it disappears\n and the value it held is added to the level output", "x": 3, "y": 5 } - ], - "grid": "\n\n o \n\n\n I\n\n\n" - }, + "init_board": "\n o \n\n I\n\n", "stages": [{ "input": [], "output": [0] diff --git a/src/board.rs b/src/board.rs index 0017248..7cfe928 100644 --- a/src/board.rs +++ b/src/board.rs @@ -1,24 +1,15 @@ -use raylib::{ - color::Color, - drawing::{RaylibDraw, RaylibDrawHandle}, - math::Vector2, -}; use serde::{Deserialize, Serialize}; -use crate::{ - marble_engine::{ - grid::{Grid, ResizeDeltas}, - pos::Pos, - tile::Tile, - }, - theme::TILE_TEXTURE_SIZE, +use crate::marble_engine::{ + grid::{Grid, ResizeDeltas}, + pos::Pos, + tile::Tile, }; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct Comment { text: String, - x: i32, - y: i32, + pos: Pos, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -71,33 +62,9 @@ impl Board { } } - pub fn draw_comments(&self, d: &mut RaylibDrawHandle, offset: Vector2, scale: f32) { - let tile_size = (TILE_TEXTURE_SIZE * scale) as i32; - let font_size = 10 * (scale as i32).max(1); - let line_space = 12 * (scale as i32).max(1); - - for comment in &self.comments { - let x = comment.x * tile_size + offset.x as i32; - let y = comment.y * tile_size + offset.y as i32; - for (i, line) in comment.text.lines().enumerate() { - let y = y + line_space * i as i32; - d.draw_text(&line, x, y, font_size, Color::ORANGE); - } - } - } - pub fn get_rect(&self, pos: Pos, width: usize, height: usize) -> Self { - let comments = self - .comments - .iter() - .filter(|c| c.in_area(pos, width, height)) - .map(|c| { - let mut c = c.clone(); - c.x -= pos.x as i32; - c.y -= pos.y as i32; - c - }) - .collect(); + // TODO filter for comments in the area + let comments = self.comments.clone(); Self { grid: self.grid.get_rect(pos, width, height), comments, @@ -105,36 +72,19 @@ impl Board { } pub fn paste_board(&mut self, pos: Pos, board: &Board) { + // TODO remove overlapping comments self.grid.paste_grid(pos, &board.grid); - for c in &board.comments { - let mut comment = c.clone(); - comment.x += pos.x as i32; - comment.y += pos.y as i32; - self.add_comment(comment); - } - } - - pub fn add_comment(&mut self, comment: Comment) { - if self.comments.iter().any(|c| c == &comment) { - return; - } - self.comments.push(comment); + self.comments.extend_from_slice(&board.comments); } pub fn grow(&mut self, deltas: &ResizeDeltas) { self.grid.grow(deltas); - for c in &mut self.comments { - c.x += deltas.x_neg as i32; - c.y += deltas.y_neg as i32; - } + // TODO adjust comments } pub fn shrink(&mut self, deltas: &ResizeDeltas) { self.grid.shrink(deltas); - for c in &mut self.comments { - c.x -= deltas.x_neg as i32; - c.y -= deltas.y_neg as i32; - } + // TODO adjust comments } pub fn from_user_str(source: &str) -> Self { @@ -152,12 +102,3 @@ impl Board { self.grid.height() } } - -impl Comment { - fn in_area(&self, pos: Pos, width: usize, height: usize) -> bool { - self.x >= pos.x as i32 - && self.y >= pos.y as i32 - && self.x < pos.x as i32 + width as i32 - && self.y < pos.y as i32 + height as i32 - } -} diff --git a/src/editor.rs b/src/editor.rs index 003d6b1..21d7352 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -146,7 +146,7 @@ impl Editor { machine, sim_state: SimState::Editing, view_offset: Vector2::zero(), - zoom: 2., + zoom: 1., active_tool: Tool::None, output_as_text, input_as_text, @@ -553,7 +553,7 @@ impl Editor { self.pasting_board = Some(b); } } else if rl.is_key_pressed(KeyboardKey::KEY_Z) { - self.undo(); + self.undo() } else if rl.is_key_pressed(KeyboardKey::KEY_Y) { self.redo(); } @@ -584,10 +584,6 @@ impl Editor { .draw_marble_values(d, textures, self.view_offset, self.zoom); } } - if self.draw_overlay { - self.source_board - .draw_comments(d, self.view_offset, self.zoom); - } } pub fn draw(&mut self, d: &mut RaylibDrawHandle, textures: &Textures) { diff --git a/src/marble_engine.rs b/src/marble_engine.rs index e18c13f..89aad50 100644 --- a/src/marble_engine.rs +++ b/src/marble_engine.rs @@ -529,10 +529,6 @@ impl Machine { } #[cfg(debug_assertions)] { - self.debug_subticks.push(DebugSubTick { - grid: self.grid.clone(), - pos: None, - }); self.subtick_index = self.debug_subticks.len() - 1; } }