diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2023-01-10 16:01:26 +0100 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2023-01-10 16:01:26 +0100 |
| commit | b9aa1085df08c4a8901ca0433de25a170b33e6d6 (patch) | |
| tree | 72034a2ff87c3187529a0dc6ffdece212b6134a6 /src/game_tab/left_panel/board/BoardCanvas.cpp | |
| parent | 840e68807cfbb23fcc2718496d07a6d3ec5fc8ed (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.cpp | 41 |
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; |
