aboutsummaryrefslogtreecommitdiff
path: root/src/game_tab/left_panel/GameTabLeftPanel.cpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2023-01-01 14:35:20 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2023-01-01 14:35:20 +0100
commit0cb695a22bf7371511893963a4896167d8c16ae1 (patch)
tree6ca5b92b3799efe293874cad695c4040b2275fc3 /src/game_tab/left_panel/GameTabLeftPanel.cpp
parent679c735596168228ad0df4e42a3768c61c809a40 (diff)
Update animation trigger
Diffstat (limited to 'src/game_tab/left_panel/GameTabLeftPanel.cpp')
-rw-r--r--src/game_tab/left_panel/GameTabLeftPanel.cpp64
1 files changed, 29 insertions, 35 deletions
diff --git a/src/game_tab/left_panel/GameTabLeftPanel.cpp b/src/game_tab/left_panel/GameTabLeftPanel.cpp
index b1bf516..2553d30 100644
--- a/src/game_tab/left_panel/GameTabLeftPanel.cpp
+++ b/src/game_tab/left_panel/GameTabLeftPanel.cpp
@@ -22,6 +22,8 @@ GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr<Game> game)
// Configure FEN field
fen_text_field->SetFont(wxFont(*wxNORMAL_FONT).Bold().Larger());
+ last_move=game->GetCurrentMove();
+
// Bind events:
Bind(PLAY_MOVE_EVENT, &GameTabLeftPanel::OnPlay, this, wxID_ANY);
Bind(wxEVT_BUTTON, [bc=board_canvas](wxCommandEvent &event){bc->Zoom(10);}, ZOOM_IN_BTN);
@@ -77,58 +79,50 @@ void GameTabLeftPanel::Notify(bool animate, bool backward) {
std::string fen = game->GetFen();
std::map<char, std::uint8_t> captures;
HalfMove *m = game->GetCurrentMove();
- //animate=false;
- //backward=false;
+ std::string src,dst;
+ animate=false;
+ backward=false;
if (m != nullptr) {
captures = m->GetLineCaptures();
- /*HalfMove *parent=m->GetParent();
- if(!parent){
- animate=true;
- }
- if(last_absolute_move == parent->GetAbsoluteMove()){
- wxLogDebug("Next true!");
+ std::string absolute_move= m->GetAbsoluteMove();
+ // Check if we should animate
+ if(m->GetParent()==last_move){
+ wxLogDebug("Animate animate next");
animate=true;
- } else if(m->GetAbsoluteMove() == last_absolute_move){
+ src=absolute_move.substr(0,2);
+ dst=absolute_move.substr(2,2);
+ } else if (m->GetMainline()==last_move){
+ wxLogDebug("Animate Previous");
animate=true;
backward=true;
- }*/
+ src=absolute_move.substr(2,2);
+ dst=absolute_move.substr(0,2);
+ } else {
+ wxLogDebug("Animate Previous");
+ for(auto v: m->GetVariations()){
+ if(v==last_move){
+ animate=true;
+ backward=true;
+ src=absolute_move.substr(2,2);
+ dst=absolute_move.substr(0,2);
+ }
+ }
+ }
}
// Update board canvas:
if(!animate){
- if(m){
- last_absolute_move=m->GetAbsoluteMove();
- }
board_canvas->SetupBoard(chessarbiter::FENParser::Parse(fen).board,
game->IsBlackToPlay(), captures,
game->GetTag("White"),game->GetTag("Black"));
}
else{
- if(backward && last_absolute_move.size()>0){
- std::string dst=last_absolute_move.substr(0,2);
- std::string src=last_absolute_move.substr(2,2);
- board_canvas->Animate(chessarbiter::FENParser::Parse(fen).board,
- game->IsBlackToPlay(), captures,src,dst,repeat);
- if(m){
- last_absolute_move=m->GetAbsoluteMove();
- }
- }
- else if(!backward && m){
- std::string new_absolute_move=m->GetAbsoluteMove();
- if(last_absolute_move!=new_absolute_move){
- last_absolute_move=new_absolute_move;
- std::string src=last_absolute_move.substr(0,2);
- std::string dst=last_absolute_move.substr(2,2);
- board_canvas->Animate(chessarbiter::FENParser::Parse(fen).board,
+ board_canvas->Animate(chessarbiter::FENParser::Parse(fen).board,
game->IsBlackToPlay(), captures,src,dst,repeat);
- }
- }
- // If m undefined
- if(!m){
- last_absolute_move="";
- }
}
+ last_move=m;
+
// Update fen field:
fen_text_field->SetValue(game->GetFen());
}