aboutsummaryrefslogtreecommitdiff
path: root/src/game_tab/left_panel/board/BoardCanvas.cpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2023-01-10 16:01:26 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2023-01-10 16:01:26 +0100
commitb9aa1085df08c4a8901ca0433de25a170b33e6d6 (patch)
tree72034a2ff87c3187529a0dc6ffdece212b6134a6 /src/game_tab/left_panel/board/BoardCanvas.cpp
parent840e68807cfbb23fcc2718496d07a6d3ec5fc8ed (diff)
Improve pawn promotion code
Diffstat (limited to 'src/game_tab/left_panel/board/BoardCanvas.cpp')
-rw-r--r--src/game_tab/left_panel/board/BoardCanvas.cpp41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/game_tab/left_panel/board/BoardCanvas.cpp b/src/game_tab/left_panel/board/BoardCanvas.cpp
index 8a017c8..7f045f9 100644
--- a/src/game_tab/left_panel/board/BoardCanvas.cpp
+++ b/src/game_tab/left_panel/board/BoardCanvas.cpp
@@ -9,6 +9,7 @@ tmp=rot_m.TransformPoint(tmp); \
(PT).x+=xsrc;(PT).y+=ysrc;}
wxDEFINE_EVENT(PLAY_MOVE_EVENT, wxCommandEvent);
+wxDEFINE_EVENT(PLAY_PROMOTE, wxCommandEvent);
BoardCanvas::BoardCanvas(wxFrame *parent)
: wxPanel(parent), black_side(false), frozen(false),
@@ -134,6 +135,7 @@ void BoardCanvas::SetupBoard(const GameState &new_gs) {
gs.white_time=new_gs.white_time;
gs.squares_hl=new_gs.squares_hl;
gs.arrows=new_gs.arrows;
+ gs.promotion=new_gs.promotion;
Refresh();
}
@@ -421,11 +423,10 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
}
}
// Ask for promotion
- /*std::string s="f8";
- {
- std::uint8_t sfile = s[0]-'a';
- std::uint8_t srank = s[1]-'1';
- bool is_black_promotion=s[1]=='1';
+ if(gs.promotion.size()==2){
+ std::uint8_t sfile = gs.promotion[0]-'a';
+ std::uint8_t srank = gs.promotion[1]-'1';
+ bool is_black_promotion=gs.promotion[1]=='1';
if (!black_side) {
srank = 7 - srank;
sfile = 7 - sfile;
@@ -451,7 +452,7 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
else
offset++;
}
- }*/
+ }
}
void BoardCanvas::MouseEvent(wxMouseEvent &event) {
@@ -459,6 +460,34 @@ void BoardCanvas::MouseEvent(wxMouseEvent &event) {
if(frozen)
return;
+ // If ask for promotion just wait for the user reply
+ if(gs.promotion.size()==2){
+ if(event.LeftDown()){
+ REFRESH_MOUSE_LOCATION();
+ INIT_CURRENT_SQUARE();
+ if (IsCurrentSquareValid) {
+ if((char)('a' + file)==gs.promotion[0]){
+ std::uint8_t prank=abs((int)gs.promotion[1]-(int)(char)('1' + rank));
+ if(prank<=3){
+ wxLogDebug("%d",(int)prank);
+ wxCommandEvent event(PLAY_PROMOTE, GetId());
+ event.SetEventObject(this);
+ if(prank==1)
+ event.SetString("r");
+ else if(prank==2)
+ event.SetString("b");
+ else if(prank==3)
+ event.SetString("n");
+ else
+ event.SetString("q");
+ ProcessEvent(event);
+ }
+ }
+ }
+ }
+ return;
+ }
+
// Just redraw if a piece is currently being moved:
if (event.Dragging() && valid_drag) {
is_dragging = true;