Render the ghost stone over the board according to current player

This commit is contained in:
Savanni D'Gerinel 2023-03-30 21:27:23 -04:00
parent 392e162d3a
commit 02e4072c50
4 changed files with 26 additions and 11 deletions

View File

@ -17,11 +17,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1678972866, "lastModified": 1680122840,
"narHash": "sha256-YV8BcNWfNVgS449B6hFYFUg4kwVIQMNehZP+FNDs1LY=", "narHash": "sha256-zCQ/9iFHzCW5JMYkkHMwgK1/1/kTMgCMHq4THPINpAU=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "cd34d6ed7ba7d5c4e44b04a53dc97edb52f2766c", "rev": "a575c243c23e2851b78c00e9fa245232926ec32f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -52,7 +52,7 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"narHash": "sha256-03Opt2yu4E/AIFjvlgib0/nhMn6B4B/t/nvwS2bzOGw=", "narHash": "sha256-o28gi3WKSsVeXg3wDSR2kGpawrDO5lzGG4eUsLTPglw=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/oxalica/rust-overlay/archive/master.tar.gz" "url": "https://github.com/oxalica/rust-overlay/archive/master.tar.gz"
}, },
@ -70,11 +70,11 @@
}, },
"unstable": { "unstable": {
"locked": { "locked": {
"lastModified": 1678898370, "lastModified": 1680125544,
"narHash": "sha256-xTICr1j+uat5hk9FyuPOFGxpWHdJRibwZC+ATi0RbtE=", "narHash": "sha256-mlqo1r+TZUOuypWdrZHluxWL+E5WzXlUXNZ9Y0WLDFU=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ac718d02867a84b42522a0ece52d841188208f2c", "rev": "9a6aabc4740790ef3bbb246b86d029ccf6759658",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@ -1,12 +1,12 @@
use std::time::Duration; use std::time::Duration;
#[derive(Clone, Debug)] #[derive(Clone, Copy, Debug)]
pub enum Color { pub enum Color {
Black, Black,
White, White,
} }
#[derive(Clone, Debug)] #[derive(Clone, Copy, Debug)]
pub struct Size { pub struct Size {
pub width: u8, pub width: u8,
pub height: u8, pub height: u8,

View File

@ -12,10 +12,10 @@ struct Addr {
column: u8, column: u8,
} }
#[derive(Default)]
pub struct GobanPrivate { pub struct GobanPrivate {
drawing_area: gtk::DrawingArea, drawing_area: gtk::DrawingArea,
current_player: Rc<RefCell<Color>>,
goban: Rc<RefCell<GobanElement>>, goban: Rc<RefCell<GobanElement>>,
cursor_location: Rc<RefCell<Addr>>, cursor_location: Rc<RefCell<Addr>>,
} }
@ -25,6 +25,15 @@ impl ObjectSubclass for GobanPrivate {
const NAME: &'static str = "Goban"; const NAME: &'static str = "Goban";
type Type = Goban; type Type = Goban;
type ParentType = gtk::Grid; type ParentType = gtk::Grid;
fn new() -> GobanPrivate {
GobanPrivate {
drawing_area: Default::default(),
current_player: Rc::new(RefCell::new(Color::Black)),
goban: Default::default(),
cursor_location: Default::default(),
}
}
} }
impl ObjectImpl for GobanPrivate { impl ObjectImpl for GobanPrivate {
@ -34,6 +43,7 @@ impl ObjectImpl for GobanPrivate {
let goban = self.goban.clone(); let goban = self.goban.clone();
let cursor_location = self.cursor_location.clone(); let cursor_location = self.cursor_location.clone();
let current_player = self.current_player.clone();
self.drawing_area self.drawing_area
.set_draw_func(move |_, context, width, height| { .set_draw_func(move |_, context, width, height| {
let goban = goban.borrow(); let goban = goban.borrow();
@ -82,7 +92,7 @@ impl ObjectImpl for GobanPrivate {
}); });
let cursor = cursor_location.borrow(); let cursor = cursor_location.borrow();
pen.ghost_stone(context, cursor.row, cursor.column, Color::White); pen.ghost_stone(context, cursor.row, cursor.column, *current_player.borrow());
}); });
let motion_controller = gtk::EventControllerMotion::new(); let motion_controller = gtk::EventControllerMotion::new();
@ -130,6 +140,10 @@ impl Goban {
*self.imp().goban.borrow_mut() = goban; *self.imp().goban.borrow_mut() = goban;
self.imp().drawing_area.queue_draw(); self.imp().drawing_area.queue_draw();
} }
pub fn set_current_player(&self, color: Color) {
*self.imp().current_player.borrow_mut() = color;
}
} }
struct Pen { struct Pen {

View File

@ -82,6 +82,7 @@ impl PlayingField {
*s.imp().player_card_white.borrow_mut() = Some(player_card_white); *s.imp().player_card_white.borrow_mut() = Some(player_card_white);
*s.imp().player_card_black.borrow_mut() = Some(player_card_black); *s.imp().player_card_black.borrow_mut() = Some(player_card_black);
*s.imp().chat.borrow_mut() = Some(chat); *s.imp().chat.borrow_mut() = Some(chat);
s.imp().goban.set_current_player(view.current_player);
s s
} }