mirror of
https://gitlab.com/manzerbredes/ochess.git
synced 2025-04-18 03:42:02 +00:00
58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
![]() |
#pragma once
|
||
|
#include "CGEditor.hpp"
|
||
|
#include "ChessArbiter.hpp"
|
||
|
#include "ochess.hpp"
|
||
|
#include "pgnp.hpp"
|
||
|
#include <map>
|
||
|
#include <vector>
|
||
|
|
||
|
/**
|
||
|
* @brief Create your custom half move class
|
||
|
*
|
||
|
* The implementation of the class should give you
|
||
|
* an overview of how to keep your move sync with the one of CGEditor
|
||
|
*
|
||
|
*/
|
||
|
class HalfMove : public cgeditor::CGEHalfMove {
|
||
|
HalfMove *parent = NULL;
|
||
|
HalfMove *mainline = NULL;
|
||
|
std::vector<HalfMove *> variations;
|
||
|
std::string fen;
|
||
|
char capture;
|
||
|
std::string GetPGN(bool needDots);
|
||
|
|
||
|
public:
|
||
|
HalfMove(std::string move);
|
||
|
HalfMove(std::string move, std::string fen);
|
||
|
HalfMove(pgnp::HalfMove *m, std::string initial_fen);
|
||
|
|
||
|
~HalfMove();
|
||
|
/// @brief Add variation to current move
|
||
|
void AddVariation(HalfMove *m);
|
||
|
/// @brief Remove the specified child from mainline and/or variations
|
||
|
void RemoveChild(HalfMove *m);
|
||
|
void AddMove(HalfMove *m);
|
||
|
/// @brief Set value of the mailine
|
||
|
void SetMainline(HalfMove *m);
|
||
|
/// @brief Set this move as mainline
|
||
|
void SetAsMainline();
|
||
|
/// @brief Promote the current move and submove
|
||
|
void Promote();
|
||
|
/// @brief Check if current half move is within a variation
|
||
|
bool IsVariation();
|
||
|
/// @brief Get the root of a variation
|
||
|
HalfMove *GetRoot();
|
||
|
/// @brief Get parent of the current move
|
||
|
HalfMove *GetParent();
|
||
|
HalfMove *GetMainline();
|
||
|
std::map<char, std::uint8_t> GetLineCaptures();
|
||
|
|
||
|
/// @brief Set parent of the current move
|
||
|
void SetParent(HalfMove *m);
|
||
|
std::string GetFen();
|
||
|
void SetFen(std::string fen);
|
||
|
void SetCapture(char c);
|
||
|
std::string GetPGN();
|
||
|
};
|
||
|
|