mirror of
https://github.com/danbulant/cushy
synced 2026-07-07 12:10:44 +00:00
try to update the player colour based on mouse position (currently not working)
This commit is contained in:
parent
1d80f8467c
commit
fa56922594
3 changed files with 32 additions and 4 deletions
|
|
@ -46,8 +46,7 @@ fn main() -> gooey::Result {
|
||||||
id: myself,
|
id: myself,
|
||||||
})
|
})
|
||||||
.tick(Tick::times_per_second(60, move |elapsed, input| {
|
.tick(Tick::times_per_second(60, move |elapsed, input| {
|
||||||
// get mouse cursor position and subsequently get the object under
|
// get mouse cursor position and subsequently get the object under the cursor
|
||||||
// the mouse
|
|
||||||
|
|
||||||
let mut direction = Point::new(0., 0.);
|
let mut direction = Point::new(0., 0.);
|
||||||
if input.keys.contains(&Key::ArrowDown) {
|
if input.keys.contains(&Key::ArrowDown) {
|
||||||
|
|
@ -65,11 +64,20 @@ fn main() -> gooey::Result {
|
||||||
|
|
||||||
let one_second_movement = direction * TILE_SIZE.0 as f32;
|
let one_second_movement = direction * TILE_SIZE.0 as f32;
|
||||||
|
|
||||||
|
let cursor_pos = input.mouse.pos;
|
||||||
|
|
||||||
layers.map_mut(|layers| {
|
layers.map_mut(|layers| {
|
||||||
layers.1[myself].position += Point::new(
|
let pos = &mut layers.1[myself].position;
|
||||||
|
*pos += Point::new(
|
||||||
one_second_movement.x * elapsed.as_secs_f32(),
|
one_second_movement.x * elapsed.as_secs_f32(),
|
||||||
one_second_movement.y * elapsed.as_secs_f32(),
|
one_second_movement.y * elapsed.as_secs_f32(),
|
||||||
)
|
);
|
||||||
|
|
||||||
|
let rect = Rect::new(*pos, Size::new(16., 16.));
|
||||||
|
let color = match rect.cast().contains(cursor_pos) {
|
||||||
|
true => Color::RED,
|
||||||
|
false => Color::BLUE,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
|
||||||
16
src/tick.rs
16
src/tick.rs
|
|
@ -5,6 +5,8 @@ use std::time::{Duration, Instant};
|
||||||
|
|
||||||
use kludgine::app::winit::event::KeyEvent;
|
use kludgine::app::winit::event::KeyEvent;
|
||||||
use kludgine::app::winit::keyboard::Key;
|
use kludgine::app::winit::keyboard::Key;
|
||||||
|
use kludgine::figures::Point;
|
||||||
|
use kludgine::figures::units::Px;
|
||||||
|
|
||||||
use crate::context::WidgetContext;
|
use crate::context::WidgetContext;
|
||||||
use crate::value::Dynamic;
|
use crate::value::Dynamic;
|
||||||
|
|
@ -48,6 +50,11 @@ impl Tick {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_cursor_position(&self, pos: Point<Px>) {
|
||||||
|
let mut state = self.data.state();
|
||||||
|
state.input.mouse.pos = pos;
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns a new tick that invokes `tick`, aiming to repeat at the given
|
/// Returns a new tick that invokes `tick`, aiming to repeat at the given
|
||||||
/// duration.
|
/// duration.
|
||||||
pub fn new<F>(tick_every: Duration, tick: F) -> Self
|
pub fn new<F>(tick_every: Duration, tick: F) -> Self
|
||||||
|
|
@ -62,6 +69,7 @@ impl Tick {
|
||||||
keep_running: true,
|
keep_running: true,
|
||||||
frame: 0,
|
frame: 0,
|
||||||
input: InputState::default(),
|
input: InputState::default(),
|
||||||
|
mouse: None,
|
||||||
}),
|
}),
|
||||||
period: tick_every,
|
period: tick_every,
|
||||||
sync: Condvar::new(),
|
sync: Condvar::new(),
|
||||||
|
|
@ -110,8 +118,15 @@ impl Tick {
|
||||||
pub struct InputState {
|
pub struct InputState {
|
||||||
/// A collection of all keys currently pressed.
|
/// A collection of all keys currently pressed.
|
||||||
pub keys: HashSet<Key>,
|
pub keys: HashSet<Key>,
|
||||||
|
pub mouse: Mouse,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Default)]
|
||||||
|
pub struct Mouse {
|
||||||
|
pub pos: Point<Px>,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct TickData {
|
struct TickData {
|
||||||
state: Mutex<TickState>,
|
state: Mutex<TickState>,
|
||||||
|
|
@ -136,6 +151,7 @@ struct TickState {
|
||||||
keep_running: bool,
|
keep_running: bool,
|
||||||
frame: usize,
|
frame: usize,
|
||||||
input: InputState,
|
input: InputState,
|
||||||
|
mouse: Option<Mouse>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tick_loop<F>(data: &TickData, mut tick: F)
|
fn tick_loop<F>(data: &TickData, mut tick: F)
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,10 @@ where
|
||||||
let zoom = self.zoom;
|
let zoom = self.zoom;
|
||||||
let world = tilemap::translate_coordinates(local, offset, scale, zoom, size);
|
let world = tilemap::translate_coordinates(local, offset, scale, zoom, size);
|
||||||
|
|
||||||
|
if let Some(tick) = &self.tick {
|
||||||
|
tick.set_cursor_position(world);
|
||||||
|
}
|
||||||
|
|
||||||
self.debug_output.as_ref().unwrap().set(format!("world: {world:?} | local: {local:?}"));
|
self.debug_output.as_ref().unwrap().set(format!("world: {world:?} | local: {local:?}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue