aboutsummaryrefslogtreecommitdiff
path: root/src/game_tab/left_panel/board/BoardCanvas.cpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-12-28 12:10:08 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-12-28 12:10:08 +0100
commitc451c63aaa6c898081fc658180e175e23b6f1bbb (patch)
treecda71b9a8ed2bcec6c1a4b50e3f8638798513db8 /src/game_tab/left_panel/board/BoardCanvas.cpp
parent2151ccbe650132c8d07fba3c70c63ddc768dd38f (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.cpp67
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;