namespace Shogi.Domain.Other; public interface IRulesLifecycle where TPiece : IRulesLifecycle { /// /// Invoked by during the MoveValidation life cycle event. /// If a move begins or ends outside the board space coordinates, this function is not called. /// The purpose is to ensure a proposed board move is valid with regard to the moved piece's rules. /// This event does not worry about check or check-mate, or if a move is legal. /// /// /// A context object with information for you to use to assess whether a move is valid for your implementing piece. /// A new object indicating whether or not the move is valid. RulesLifecycleResult OnMoveValidation(MoveValidationContext context); }