diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2022-12-28 12:10:08 +0100 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2022-12-28 12:10:08 +0100 |
| commit | c451c63aaa6c898081fc658180e175e23b6f1bbb (patch) | |
| tree | cda71b9a8ed2bcec6c1a4b50e3f8638798513db8 /src/game_tab/left_panel/board/BoardCanvas.cpp | |
| parent | 2151ccbe650132c8d07fba3c70c63ddc768dd38f (diff) | |
Prepare for pieces animation
Diffstat (limited to 'src/game_tab/left_panel/board/BoardCanvas.cpp')
| -rw-r--r-- | src/game_tab/left_panel/board/BoardCanvas.cpp | 67 |
1 files changed, 52 insertions, 15 deletions
diff --git a/src/game_tab/left_panel/board/BoardCanvas.cpp b/src/game_tab/left_panel/board/BoardCanvas.cpp index abe77c5..18c7288 100644 --- a/src/game_tab/left_panel/board/BoardCanvas.cpp +++ b/src/game_tab/left_panel/board/BoardCanvas.cpp @@ -8,12 +8,20 @@ BoardCanvas::BoardCanvas(wxFrame *parent) board = "rnbqkbnrpppppppp PPPPPPPPRNBQKBNR"; is_dragging = false; valid_drag = false; + reuseBuffer=false; t_captures->ResizePieces(t->GetPiecesSizes() * CAPTURE_FACTOR); SetClockTime(-1, -1, -1, false); SetClockTime(-1, -1, -1, true); ApplyPreferences(); // The following should be called when using an EVT_PAINT handler SetBackgroundStyle(wxBG_STYLE_PAINT); + timer.Bind(wxEVT_TIMER, &BoardCanvas::OnTimerTick, this); + duration=500; + fps=30; +} + +void BoardCanvas::OnTimerTick(wxTimerEvent &event) { + Refresh(); } BoardCanvas::~BoardCanvas() { @@ -35,22 +43,35 @@ void BoardCanvas::OnPaint(wxPaintEvent &event) { dc.SetBackground(*wxWHITE_BRUSH); dc.Clear(); - // Setting up required attributes - REFRESH_MOUSE_LOCATION(); - square_width = t->GetSquaresSizes(); - canvas_size = dc.GetSize(); - boardX = (canvas_size.x - (8 * square_width)) / 2; - boardY = (canvas_size.y - (8 * square_width)) / 2; - if (boardX > canvas_size.x) - boardX = 0; - if (boardY > canvas_size.y) - boardY = 0; + if(!reuseBuffer){ + // Setting up required attributes + REFRESH_MOUSE_LOCATION(); + square_width = t->GetSquaresSizes(); + canvas_size = dc.GetSize(); + boardX = (canvas_size.x - (8 * square_width)) / 2; + boardY = (canvas_size.y - (8 * square_width)) / 2; + if (boardX > canvas_size.x) + boardX = 0; + if (boardY > canvas_size.y) + boardY = 0; - // Setup buffer (later use for animations) - buffer=new wxBitmap(canvas_size.x,canvas_size.y,32); - wxMemoryDC memDC(*buffer); - DrawBoard(memDC); - dc.Blit(0,0,canvas_size.x,canvas_size.y,(wxDC*)&memDC,0,0); + // Setup buffer (later use for animations) + buffer=new wxBitmap(canvas_size.x,canvas_size.y,32); + wxMemoryDC memDC(*buffer); + DrawBoard(memDC); + dc.Blit(0,0,canvas_size.x,canvas_size.y,(wxDC*)&memDC,0,0); + } + else { + // Otherwise reuse buffer and animate. TEST CODE FOR NOW: + dc.DrawBitmap(*buffer, 0, 0, true); + dc.DrawRectangle(wxRect(0+frame,0+frame,50,50)); + frame++; + if(frame*fps>=duration){ + timer.Stop(); + reuseBuffer=false; + SetupBoard(final_board, final_is_black_turn, final_captures); + } + } } void BoardCanvas::ApplyPreferences() { @@ -83,6 +104,22 @@ void BoardCanvas::SetupBoard(std::string board, bool is_black_turn, Refresh(); } +void BoardCanvas::Animate(std::string board, bool is_black_turn, std::map<char, std::uint8_t> captures, std::string src, std::string dst){ + this->final_board=board; + this->final_is_black_turn=is_black_turn; + this->final_captures=captures; + this->src=src; + this->dst=dst; + + std::uint8_t pfile = src[0]-'a'; + std::uint8_t prank = src[1]-'1'; + char piece_moved = this->board[(7 - pfile) + 8 * (7-prank)]; // Piece to move + // Animate piece here + reuseBuffer=true; + frame=0; + timer.Start(1000/fps); // in ms; +} + void BoardCanvas::DrawBoard(wxDC &dc) { std::uint32_t piece_width = t->GetPiecesSizes(); std::uint32_t centrer_offset = (square_width - piece_width) / 2; |
