From aeab78e3656e9a01b26811af9ea96c0e9aaf0e98 Mon Sep 17 00:00:00 2001 From: dani <> Date: Sat, 5 Aug 2023 14:14:18 +0000 Subject: [PATCH] select tiles in map edit --- examples/basic/gfx.gif | Bin 27642 -> 27650 bytes src/background.rs | 3 + src/gsa_render_to_screen.rs | 4 +- src/mapedit.rs | 145 +++++++++++++++++++++++++++++------- 4 files changed, 123 insertions(+), 29 deletions(-) diff --git a/examples/basic/gfx.gif b/examples/basic/gfx.gif index 50e41314390883f35f73bad6b044c896d5079137..d58cb06df7b80ab1d2e40c80fd74b01ac0fd88d7 100644 GIT binary patch delta 8108 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 G0RTJJ?*V`S delta 8100 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 ybv0h~%4ii?lT}%lm06qBS^u9ETBB83r match event { - WindowEvent::KeyboardInput { - input: - KeyboardInput { - virtual_keycode: Some(VirtualKeyCode::Escape, ..), - .. - }, - .. - } => { - *control_flow = ControlFlow::Exit; + WindowEvent::KeyboardInput { input, .. } => { + match (input.state, input.virtual_keycode.unwrap()) { + (winit::event::ElementState::Pressed, VirtualKeyCode::Escape) => { + *control_flow = ControlFlow::Exit; + } + (winit::event::ElementState::Pressed, VirtualKeyCode::LShift) => { + gsa.bgs[0].active = false; + gsa.bgs[1].active = false; + gsa.bgs[2].active = false; + gsa2.bgs[0].active = true; + gsa2.bgs[1].active = true; + gsa.sprites[SPR_CURSOR].tile = EMPTY_TILE; + gsa2.sprites[SPR_CURSOR].tile = TILE_CURSOR; + } + (winit::event::ElementState::Released, VirtualKeyCode::LShift) => { + gsa.bgs[0].active = true; + gsa.bgs[1].active = true; + gsa.bgs[2].active = true; + gsa2.bgs[0].active = false; + gsa2.bgs[1].active = false; + gsa.sprites[SPR_CURSOR].tile = TILE_CURSOR; + gsa2.sprites[SPR_CURSOR].tile = EMPTY_TILE; + } + _ => {} + } } WindowEvent::MouseInput { state, button, .. } => match (state, button) { (winit::event::ElementState::Pressed, winit::event::MouseButton::Left) => { @@ -103,34 +147,70 @@ pub(crate) fn run_mapedit() { }; let delta = new_pos - *mouse_pos; if *middle_down { - gsa.bgs[0].scroll -= delta; - gsa.bgs[1].scroll -= delta; - gsa.bgs[2].scroll -= delta; + if gsa.bgs[0].active { + // normal mode + gsa.bgs[0].scroll -= delta; + gsa.bgs[1].scroll -= delta; + gsa.bgs[2].scroll -= delta; + } else { + // tile select mode + gsa2.bgs[0].scroll -= delta; + gsa2.bgs[1].scroll -= delta; + gsa2.bgs[2].scroll -= delta; + } } *mouse_pos = new_pos; - *tile_pos = (new_pos + gsa.bgs[0].scroll) / TILE_SIZE as i32; + *tile_pos = IVec2 { + x: (new_pos.x + gsa.bgs[0].scroll.x).div_euclid(TILE_SIZE as i32), + y: (new_pos.y + gsa.bgs[0].scroll.y).div_euclid(TILE_SIZE as i32), + }; + *tile_pos2 = IVec2 { + x: (new_pos.x + gsa2.bgs[0].scroll.x).div_euclid(TILE_SIZE as i32), + y: (new_pos.y + gsa2.bgs[0].scroll.y).div_euclid(TILE_SIZE as i32), + }; let cursor_pos = *tile_pos * TILE_SIZE as i32 - gsa.bgs[0].scroll; + let cursor_pos2 = *tile_pos2 * TILE_SIZE as i32 - gsa2.bgs[0].scroll; gsa.sprites[SPR_CURSOR].pos = cursor_pos; + gsa2.sprites[SPR_CURSOR].pos = cursor_pos2; } _ => {} }, Event::MainEventsCleared => { - if *left_down { - if tile_pos.x >= 0 - && tile_pos.y >= 0 - && tile_pos.x < BACKGROUND_MAX_SIZE as i32 - && tile_pos.y < BACKGROUND_MAX_SIZE as i32 - { - gsa.bgs[0].tiles[tile_pos.x as usize][tile_pos.y as usize] = 0; + if gsa.bgs[0].active { + // normal mode + if *left_down { + if tile_pos.x >= 0 + && tile_pos.y >= 0 + && tile_pos.x < BACKGROUND_MAX_SIZE as i32 + && tile_pos.y < BACKGROUND_MAX_SIZE as i32 + { + let tile = (selected_tile.x + (selected_tile.y << 8)) as u16; + gsa.bgs[0].tiles[tile_pos.x as usize][tile_pos.y as usize] = tile; + } + } else if *right_down { + if tile_pos.x >= 0 + && tile_pos.y >= 0 + && tile_pos.x < BACKGROUND_MAX_SIZE as i32 + && tile_pos.y < BACKGROUND_MAX_SIZE as i32 + { + gsa.bgs[0].tiles[tile_pos.x as usize][tile_pos.y as usize] = EMPTY_TILE; + } } - } else if *right_down { - if tile_pos.x >= 0 - && tile_pos.y >= 0 - && tile_pos.x < BACKGROUND_MAX_SIZE as i32 - && tile_pos.y < BACKGROUND_MAX_SIZE as i32 - { - gsa.bgs[0].tiles[tile_pos.x as usize][tile_pos.y as usize] = EMPTY_TILE; + } else { + // tile select mode + if *left_down { + if tile_pos2.x >= 0 + && tile_pos2.y >= 0 + && tile_pos2.x < BACKGROUND_MAX_SIZE as i32 + && tile_pos2.y < BACKGROUND_MAX_SIZE as i32 + { + gsa2.bgs[1].tiles[selected_tile.x as usize][selected_tile.y as usize] = + EMPTY_TILE; + *selected_tile = *tile_pos2; + gsa2.bgs[1].tiles[selected_tile.x as usize][selected_tile.y as usize] = + TILE_MARKER; + } } } @@ -154,6 +234,15 @@ pub(crate) fn run_mapedit() { y: size.height as i32, }, ); + render_to_screen( + &mut screen_buffer, + &gsa2, + &tileset, + IVec2 { + x: size.width as i32, + y: size.height as i32, + }, + ); render_to_window( &mut window_buffer, &mut screen_buffer,