Exemple #1
0
        public override List <BoardVector> getMovablePos(GameInfo info, BoardVector piecePos)
        {
            var  piece          = info.Board.getPiece(piecePos);
            bool useModMoveInfo = false;

            List <MoveInfo> movableInfo = new List <MoveInfo>();

            if (piece.hasAttribute <StayHomeAttribute>())
            {
                var stayHomeAttr = piece.getAttribute <StayHomeAttribute>();
                if (stayHomeAttr.IsStayHome)
                {
                    movableInfo    = stayHomeAttr.getStayHomeMoveInfo();
                    useModMoveInfo = true;
                }
            }

            if (!useModMoveInfo && piece.hasAttribute <CoVidAttribute>())
            {
                var coVidAttr = piece.getAttribute <CoVidAttribute>();
                if (coVidAttr.useModifiedMoveInfo())
                {
                    movableInfo    = coVidAttr.getModifiedMoveInfo();
                    useModMoveInfo = true;
                }
            }

            if (useModMoveInfo)
            {
                var id         = piece.getOwner().getId();
                var dir        = info.getPlayer(id).FrontDirection;
                var allMovable = new List <BoardVector>();
                foreach (var moveInfo in movableInfo)
                {
                    allMovable.AddRange(BoardUtil.getInfoPos(moveInfo, dir, piecePos, info.Board, id));
                }

                return(allMovable);
            }

            return(base.getMovablePos(info, piecePos));
        }