using System; using Godot; using Vector2I = Vector.Vector2I; public interface IBoard { public interface IBoardOn { void OnInsert(object self, IPiece piece) {} void OnRemove(object self, IPiece piece) {} void OnMove(object self, MoveEventArgs args) {} void OnAddRecord(object self, MoveRecord record) {} void OnUndoRecord(object self, MoveRecord record) {} void OnSetPieceInteral(object self, SetPieceEventArgs args) {} record SetPieceEventArgs(IPiece? OldPiece, IPiece? NewPiece, Vector2I Pos); record MoveEventArgs(IPiece? Piece, Vector2I From, Vector2I To); } public IBoardOn? On { get; protected set; } public int Rows { get; } public int Cols { get; } bool IsPosOutOfRange(Vector2I pos); IPiece? GetPiece(Vector2I pos); IPiece? SetPiece(IPiece? piece, Vector2I pos); bool InsertPiece(IPiece piece, Vector2I pos); bool MovePiece(Vector2I from, Vector2I to); IPiece? RemovePiece(Vector2I pos); void Clear(bool clearRecords); void AddRecord(IPiece? From, IPiece? To, Vector2I FromPos, Vector2I ToPos); void UndoRecord(); record MoveRecord(IPiece? From, IPiece? To, Vector2I FromPos, Vector2I ToPos); }