From 4a283056436cd8a8956e099b8df22ec6ee008f28 Mon Sep 17 00:00:00 2001 From: Nilton Constantino Date: Wed, 14 Jan 2026 09:14:59 +0000 Subject: [PATCH] added touch --- crates/core/src/machine.rs | 35 +++++++++++++++------ crates/core/src/model/color.rs | 8 +++-- crates/core/src/peripherals/input_signal.rs | 10 +++--- crates/core/src/peripherals/pad.rs | 20 ++++++------ crates/host_desktop/src/main.rs | 10 +++--- 5 files changed, 51 insertions(+), 32 deletions(-) diff --git a/crates/core/src/machine.rs b/crates/core/src/machine.rs index 2f2200aa..720d4722 100644 --- a/crates/core/src/machine.rs +++ b/crates/core/src/machine.rs @@ -89,14 +89,11 @@ impl Machine { // SETUP BANCO 2 (Tiles 16x16 para Sprites) if self.gfx.banks[2].is_none() { let mut bank = crate::model::TileBank::new(crate::model::TileSize::Size16, 128, 128); - // Define Cor na Paleta 0, Índice 1 = INDIGO (Roxo) bank.palettes[0][1] = Color::INDIGO; - // Define Cor na Paleta 1, Índice 1 = AMARELO (para Palette Swap) bank.palettes[1][1] = Color::YELLOW; - // Define Cor na Paleta 1, Índice 1 = AMARELO (para Palette Swap) bank.palettes[2][1] = Color::RED; - // Define Cor na Paleta 1, Índice 1 = AMARELO (para Palette Swap) bank.palettes[3][1] = Color::GREEN; + bank.palettes[4][1] = Color::ORANGE; let tile_size = 16; let start_x = 16; @@ -121,7 +118,7 @@ impl Machine { } // 512 Sprites (usando Banco 2 - Indigo e Amarelo) - for i in 0..511 { + for i in 0..510 { let s = &mut self.gfx.sprites[i]; s.active = true; s.bank_id = 2; @@ -156,10 +153,30 @@ impl Machine { cursor.tile.palette_id = 3; // GREEN } - // // Teste de Pressed: se clicou JUSTO AGORA, reseta o frame_index - // if self.touch.f.pressed { - // self.frame_index = 0; - // } + // --- INTERATIVIDADE COM INPUT (Gamepad) --- + let player = &mut self.gfx.sprites[510]; // Usaremos outro sprite para o Pad + player.active = true; + player.bank_id = 2; + player.tile.id = 1; + player.priority = 4; + player.tile.palette_id = 1; // YELLOW + + // Movimento contínuo (enquanto segura) + let move_speed = 2; + if self.pad.up.down { player.y -= move_speed; } + if self.pad.down.down { player.y += move_speed; } + if self.pad.left.down { player.x -= move_speed; } + if self.pad.right.down { player.x += move_speed; } + + // Trigger (apenas no frame que apertou) + if self.pad.a.pressed { + player.tile.palette_id = 4; + } + + // Exemplo de uso do released + if self.pad.start.released { + // Se soltar o Start, podemos pausar algo futuramente + } // // Post-FX Fade Pulsante // let pulse = (self.frame_index / 4) % 64; diff --git a/crates/core/src/model/color.rs b/crates/core/src/model/color.rs index 2c7284f2..bfd9396e 100644 --- a/crates/core/src/model/color.rs +++ b/crates/core/src/model/color.rs @@ -9,17 +9,19 @@ pub struct Color(pub u16); impl Color { - pub const INDIGO: Self = Self::rgb(32, 32, 64); - pub const GRAY: Self = Self::rgb(64, 64, 64); pub const BLACK: Self = Self::rgb(0, 0, 0); // 0x0000 pub const WHITE: Self = Self::rgb(255, 255, 255); // 0xFFFF pub const RED: Self = Self::rgb(255, 0, 0); // 0xF800 pub const GREEN: Self = Self::rgb(0, 255, 0); // 0x07E0 pub const BLUE: Self = Self::rgb(0, 0, 255); // 0x001F pub const YELLOW: Self = Self::rgb(255, 255, 0); // 0xFFE0 - pub const CYAN: Self = Self::rgb(0, 255, 255); // 0x07FF + pub const ORANGE: Self = Self::rgb(255, 128, 0); + pub const INDIGO: Self = Self::rgb(75, 0, 130); + pub const GRAY: Self = Self::rgb(128, 128, 128); + pub const CYAN: Self = Self::rgb(0, 255, 255); // 0x07FF pub const MAGENTA: Self = Self::rgb(255, 0, 255); // 0xF81F pub const COLOR_KEY: Self = Self::MAGENTA; + pub const TRANSPARENT: Self = Self::MAGENTA; /// Extrai canais já na faixa nativa do RGB565: /// R: 0..31, G: 0..63, B: 0..31 diff --git a/crates/core/src/peripherals/input_signal.rs b/crates/core/src/peripherals/input_signal.rs index 97feea76..e880bd2a 100644 --- a/crates/core/src/peripherals/input_signal.rs +++ b/crates/core/src/peripherals/input_signal.rs @@ -7,11 +7,11 @@ pub struct InputSignals { pub right_signal: bool, pub a_signal: bool, - pub d_signal: bool, - pub w_signal: bool, - pub s_signal: bool, - pub q_signal: bool, - pub e_signal: bool, + pub b_signal: bool, + pub x_signal: bool, + pub y_signal: bool, + pub l_signal: bool, + pub r_signal: bool, pub start_signal: bool, pub select_signal: bool, diff --git a/crates/core/src/peripherals/pad.rs b/crates/core/src/peripherals/pad.rs index ca047f7d..8fc58bac 100644 --- a/crates/core/src/peripherals/pad.rs +++ b/crates/core/src/peripherals/pad.rs @@ -9,11 +9,11 @@ pub struct Pad { pub right: Button, pub a: Button, // ps: square - pub d: Button, // ps: circle - pub w: Button, // ps: triangle - pub s: Button, // ps: cross - pub q: Button, // ps: R - pub e: Button, // ps: L + pub b: Button, // ps: circle + pub x: Button, // ps: triangle + pub y: Button, // ps: cross + pub l: Button, // ps: R + pub r: Button, // ps: L pub start: Button, pub select: Button, @@ -27,11 +27,11 @@ impl Pad { self.right.begin_frame(signals.right_signal); self.a.begin_frame(signals.a_signal); - self.d.begin_frame(signals.d_signal); - self.w.begin_frame(signals.w_signal); - self.s.begin_frame(signals.s_signal); - self.q.begin_frame(signals.q_signal); - self.e.begin_frame(signals.e_signal); + self.b.begin_frame(signals.b_signal); + self.x.begin_frame(signals.x_signal); + self.y.begin_frame(signals.y_signal); + self.l.begin_frame(signals.l_signal); + self.r.begin_frame(signals.r_signal); self.start.begin_frame(signals.start_signal); self.select.begin_frame(signals.select_signal); diff --git a/crates/host_desktop/src/main.rs b/crates/host_desktop/src/main.rs index 132ca42b..2c7112c6 100644 --- a/crates/host_desktop/src/main.rs +++ b/crates/host_desktop/src/main.rs @@ -150,11 +150,11 @@ impl ApplicationHandler for PrometeuApp { // A/B (troque depois como quiser) KeyCode::KeyA => self.input_signals.a_signal = is_down, - KeyCode::KeyD => self.input_signals.d_signal = is_down, - KeyCode::KeyW => self.input_signals.w_signal = is_down, - KeyCode::KeyS => self.input_signals.s_signal = is_down, - KeyCode::KeyQ => self.input_signals.q_signal = is_down, - KeyCode::KeyE => self.input_signals.e_signal = is_down, + KeyCode::KeyD => self.input_signals.b_signal = is_down, + KeyCode::KeyW => self.input_signals.x_signal = is_down, + KeyCode::KeyS => self.input_signals.y_signal = is_down, + KeyCode::KeyQ => self.input_signals.l_signal = is_down, + KeyCode::KeyE => self.input_signals.r_signal = is_down, KeyCode::KeyZ => self.input_signals.start_signal = is_down, KeyCode::ShiftLeft | KeyCode::ShiftRight => self.input_signals.select_signal = is_down,