Sudoku up through chapter 5
This commit is contained in:
40
piston-tutorials/sudoku/src/gameboard_controller.rs
Normal file
40
piston-tutorials/sudoku/src/gameboard_controller.rs
Normal file
@@ -0,0 +1,40 @@
|
||||
//! Gameboard controller
|
||||
|
||||
use piston::GenericEvent;
|
||||
|
||||
use crate::Gameboard;
|
||||
|
||||
pub struct GameboardController {
|
||||
pub gameboard: Gameboard,
|
||||
pub selected_cell: Option<[usize; 2]>,
|
||||
cursor_pos: [f64; 2],
|
||||
}
|
||||
|
||||
impl GameboardController {
|
||||
pub fn new(gameboard: Gameboard) -> GameboardController {
|
||||
GameboardController {
|
||||
gameboard: gameboard,
|
||||
selected_cell: None,
|
||||
cursor_pos: [0.0; 2],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn event<E: GenericEvent>(&mut self, pos: [f64; 2], size: f64, e: &E) {
|
||||
use piston::input::{Button, MouseButton};
|
||||
|
||||
if let Some(pos) = e.mouse_cursor_args() {
|
||||
self.cursor_pos = pos;
|
||||
}
|
||||
|
||||
if let Some(Button::Mouse(MouseButton::Left)) = e.press_args() {
|
||||
let x = self.cursor_pos[0] - pos[0];
|
||||
let y = self.cursor_pos[1] - pos[1];
|
||||
|
||||
if x >= 0.0 && x < size && y >= 0.0 && y < size {
|
||||
let cell_x = (x / size * 9.0) as usize;
|
||||
let cell_y = (y / size * 9.0) as usize;
|
||||
self.selected_cell = Some([cell_x, cell_y]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user