Esempio n. 1
0
 public KimbokoCombine(List <Kimboko> kimbokos, int ID, Player ownerPlayer, MOVEDIRECTIONTYPE moveDirectionerType)
     : base(ID, ownerPlayer, unitType, moveDirectionerType)
 {
     this.kimbokos = OccupierStatDatabase.GetCombineKimbokoOrder(kimbokos);
     Stats         = OccupierStatDatabase.CreateKimbokoCombineStat(kimbokos);
     Abilities     = OccupierAbilityDatabase.CreateKimbokoAbilities(this);
 }
    public FilterMoveableWithBoardStrategyPattern(Tile from, MOVEDIRECTIONTYPE moveDirectionType, Tile[,] boardTiles, int movementAmount)
    {
        IFiltterMoveableTileWithBoardStrategy moveStratToUse = null;

        switch (moveDirectionType)
        {
        case MOVEDIRECTIONTYPE.CROSSLEFT:
        case MOVEDIRECTIONTYPE.CROSSRIGHT:
            moveStratToUse = new FilterMoveableCrossFrontWithBoard();
            break;

        case MOVEDIRECTIONTYPE.DIAGONAL:
            moveStratToUse = new FilterMoveableDiagonalWithBoard();
            break;

        case MOVEDIRECTIONTYPE.MULTI:
            moveStratToUse = new FilterMoveableAllDirectionWithBoard();
            break;
        }

        if (moveStratToUse == null)
        {
            moveableTiles = null;
            return;
        }

        ContextMoveableWithBoardFilter ctxMoveable = new ContextMoveableWithBoardFilter(moveStratToUse);

        moveableTiles = ctxMoveable.ExecuteStrategy(from, moveDirectionType, boardTiles, movementAmount);
    }
Esempio n. 3
0
        public List <Tile> GetPosibleMoveableTiles(Tile fromTile, MOVEDIRECTIONTYPE moveDirection, int movementAmount)
        {
            List <Tile> posibleMoveableTiles = new List <Tile>();
            // Filtramos esas tiles y las ponemos en la lista
            FilterMoveableWithBoardStrategyPattern filterMoveable = new FilterMoveableWithBoardStrategyPattern(fromTile, moveDirection, game.board2DManager.GridArray, movementAmount);

            posibleMoveableTiles = filterMoveable.moveableTiles;
            return(posibleMoveableTiles);
        }
Esempio n. 4
0
        public Kimboko(int ID, Player ownerPlayer, UNITTYPE UnitType, MOVEDIRECTIONTYPE MoveDirectionerType)
        {
            this.ID        = ID;
            OwnerPlayerID  = ownerPlayer.OwnerPlayerID;
            CardTargetType = CARDTARGETTYPE.UNIT;
            OccupierType   = OCUPPIERTYPE.UNIT;

            this.UnitType            = UnitType;
            this.MoveDirectionerType = MoveDirectionerType;
        }
Esempio n. 5
0
        private Dictionary <Tile, HIGHLIGHTUITYPE> CreateHighlightUIDictionary(IOcuppy occupier)
        {
            Dictionary <Tile, HIGHLIGHTUITYPE> tileHighlightTypesDictionary = new Dictionary <Tile, HIGHLIGHTUITYPE>();
            int moveAmount = occupier.Stats[STATTYPE.MOVERANGE].ActualStatValue;
            MOVEDIRECTIONTYPE movementType = occupier.MoveDirectionerType;
            Tile fromTile = game.board2DManager.GetGridObject(occupier.actualPosition.posX, occupier.actualPosition.posY);

            List <Tile> moveTiles = GetPosibleMoveableTiles(fromTile, movementType, moveAmount);

            if (moveTiles.Count <= 0)
            {
                return(tileHighlightTypesDictionary);
            }

            for (int i = 0; i < moveTiles.Count; i++)
            {
                tileHighlightTypesDictionary.Add(moveTiles[i], HIGHLIGHTUITYPE.MOVE);
            }

            return(tileHighlightTypesDictionary);
        }
 public List <Tile> ExecuteStrategy(Tile from, MOVEDIRECTIONTYPE moveDirectionType, Tile[,] boardTiles, int movementAmount)
 {
     return(strategy.FiltterMoveables(from, moveDirectionType, boardTiles, movementAmount));
 }
    public List <Tile> FiltterMoveables(Tile from, MOVEDIRECTIONTYPE moveDirectionType, Tile[,] boardTiles, int movementAmount)
    {
        if (from == null)
        {
            return(null);
        }
        if (movementAmount == 0)
        {
            return(null);
        }

        List <Tile> moveableTiles = new List <Tile>();

        PositionerDemo.Position fromPosition = new PositionerDemo.Position(from.position.posX, from.position.posY);

        int maxX = boardTiles.GetLength(0);
        int maxY = boardTiles.GetLength(1);

        for (int i = 1; i <= movementAmount; i++)
        {
            // UP RIGHT
            if (blockDirection)
            {
                if (!blockUpRight)
                {
                    if (fromPosition.posY + i < maxY && fromPosition.posX + i < maxX)
                    {
                        if (!boardTiles[fromPosition.posX + i, fromPosition.posY + i].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX + i, fromPosition.posY + i]);
                        }
                        else
                        {
                            blockUpRight = true;
                        }
                    }
                }
            }
            else
            {
                if (fromPosition.posY + i < maxY && fromPosition.posX + i < maxX)
                {
                    if (!boardTiles[fromPosition.posX + i, fromPosition.posY + i].IsOccupied())
                    {
                        moveableTiles.Add(boardTiles[fromPosition.posX + i, fromPosition.posY + i]);
                    }
                }
            }

            // UP LEFT
            if (blockDirection)
            {
                if (!blockUpLeft)
                {
                    if (fromPosition.posY + i < maxY && fromPosition.posX - i >= 0)
                    {
                        if (!boardTiles[fromPosition.posX - i, fromPosition.posY + i].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX - i, fromPosition.posY + i]);
                        }
                        else
                        {
                            blockUpLeft = true;
                        }
                    }
                }
            }
            else
            {
                if (fromPosition.posY + i < maxY && fromPosition.posX - i >= 0)
                {
                    if (!boardTiles[fromPosition.posX - i, fromPosition.posY + i].IsOccupied())
                    {
                        moveableTiles.Add(boardTiles[fromPosition.posX - i, fromPosition.posY + i]);
                    }
                }
            }

            // DOWN RIGHT
            if (blockDirection)
            {
                if (!blockDownRight)
                {
                    if (fromPosition.posY - i >= 0 && fromPosition.posX + i < maxX)
                    {
                        if (!boardTiles[fromPosition.posX + i, fromPosition.posY - i].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX + i, fromPosition.posY - i]);
                        }
                        else
                        {
                            blockDownRight = true;
                        }
                    }
                }
            }
            else
            {
                if (fromPosition.posY - i >= 0 && fromPosition.posX + i < maxX)
                {
                    if (!boardTiles[fromPosition.posX + i, fromPosition.posY - i].IsOccupied())
                    {
                        moveableTiles.Add(boardTiles[fromPosition.posX + i, fromPosition.posY - i]);
                    }
                }
            }

            // DOWN LEFT
            if (blockDirection)
            {
                if (!blockDownLeft)
                {
                    if (fromPosition.posY - i >= 0 && fromPosition.posX - i >= 0)
                    {
                        if (!boardTiles[fromPosition.posX - i, fromPosition.posY - i].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX - i, fromPosition.posY - i]);
                        }
                        else
                        {
                            blockDownLeft = true;
                        }
                    }
                }
            }
            else
            {
                if (fromPosition.posY - i >= 0 && fromPosition.posX - i >= 0)
                {
                    if (!boardTiles[fromPosition.posX - i, fromPosition.posY - i].IsOccupied())
                    {
                        moveableTiles.Add(boardTiles[fromPosition.posX - i, fromPosition.posY - i]);
                    }
                }
            }
        }
        return(moveableTiles);
    }
Esempio n. 8
0
        public void OnTryMove(IOcuppy occupier, Tile endPosition)
        {
            if (CanIEnterMoveState(occupier) == false)
            {
                return;
            }

            if (occupier == null || endPosition == null)
            {
                if (debugOn)
                {
                    Debug.Log("No Tile Object or Ocuppier");
                }
                return;
            }

            /////////////////////////////////////////////////////////////////

            // CREAMOS POSIBLE MOVEABLE TILES, SOLO LA LISTA SIN PINTARLAS NI NADA
            // TILE EN DONDE ESTAMOS PARADOS
            Tile fromTile = game.board2DManager.GetUnitPosition(occupier);

            if (fromTile == null)
            {
                if (debugOn)
                {
                    Debug.Log("You are walking on the sky my men");
                }
                return;
            }

            // TIPO DE MOVIMIENTO DE NUESTRA UNIDAD
            MOVEDIRECTIONTYPE moveDirection = occupier.MoveDirectionerType;

            if (moveDirection == MOVEDIRECTIONTYPE.NONE)
            {
                return;
            }

            // CANTIDA DE CASILLA QUE PUEDO MOVERME
            int movementAmount = occupier.Stats[STATTYPE.MOVERANGE].ActualStatValue;

            if (movementAmount == 0)
            {
                return;
            }

            // 3 - QUE SEA UNA DISTANCIA VALIDA SEGUN MI RANGO DE MOVIMIENTO
            // CANTIDA DE CASILLA QUE PUEDO MOVERME DEBERIA RESTAR A LA POS INICIAL LA POS FINAL Y VER LA DIFERENCIA EN DISTANCIA
            // Filtramos esas tiles y las ponemos en la lista
            FilterMoveableWithBoardStrategyPattern filterMoveable =
                new FilterMoveableWithBoardStrategyPattern(fromTile, moveDirection, game.board2DManager.GridArray, movementAmount);

            posibleMoveableTiles = filterMoveable.moveableTiles;

            // 2- SI NO HAY TILES LIBRES PARA MOVERSE
            if (posibleMoveableTiles.Count == 0)
            {
                return;
            }

            /////////////////////////////////////

            if (!IsLegalMovement(occupier, endPosition))
            {
                if (debugOn)
                {
                    Debug.Log("Ilegal MOVE");
                }
                return;
            }
            if (occupier.Abilities.ContainsKey(ABILITYTYPE.MOVE) == false)
            {
                if (debugOn)
                {
                    Debug.Log("ERROR HABILIDAD MOVE NO ENCONTRADA EN OCUPPIER");
                }
                return;
            }
            MoveAbility moveAb = (MoveAbility)occupier.Abilities[ABILITYTYPE.MOVE];

            if (moveAb == null)
            {
                if (debugOn)
                {
                    Debug.Log("ERROR HABILIDAD MOVE NO ENCONTRADA EN EL OCCUPIER");
                }
                return;
            }
            MoveAbilityEventInfo movInfo = new MoveAbilityEventInfo(occupier, fromTile, endPosition);

            moveAb.SetRequireGameData(movInfo);
            StartPerform(moveAb);
            if (moveAb.CanIExecute() == false)
            {
                if (debugOn)
                {
                    Debug.Log("SPAWN ABILITY NO SE PUEDE EJECUTAR");
                }
                return;
            }
            Move(movInfo);
            Perform(moveAb);
            EndPerform(moveAb);
        }
Esempio n. 9
0
    public List <Tile> FiltterMoveables(Tile from, MOVEDIRECTIONTYPE moveDirectionType, Tile[,] boardTiles, int movementAmount)
    {
        if (from == null)
        {
            return(null);
        }
        if (movementAmount == 0)
        {
            return(null);
        }

        List <Tile> moveableTiles = new List <Tile>();

        PositionerDemo.Position fromPosition = new PositionerDemo.Position(from.position.posX, from.position.posY);

        int maxX = boardTiles.GetLength(0);
        int maxY = boardTiles.GetLength(1);

        //            GridArray = new Tile[this.columnsWidht, this.rowsHeight];
        //              this.columnsWidht = columnsWidht + 4;   11 columnas
        //           this.rowsHeight = rowsHeight;    5 filas
        //
        // maxX = 11;   x + 1 == right  x - 1 == left
        // maxY = 5;     y + 1 == up   y - 1 == down

        for (int i = 1; i <= movementAmount; i++)
        {
            if (moveDirectionType == MOVEDIRECTIONTYPE.CROSSRIGHT)
            {
                if (blockDirection)
                {
                    if (!blockRight)
                    {
                        if (fromPosition.posX + i < maxX)
                        {
                            if (!boardTiles[fromPosition.posX + i, fromPosition.posY].IsOccupied())
                            {
                                moveableTiles.Add(boardTiles[fromPosition.posX + i, fromPosition.posY]);
                            }
                            else
                            {
                                blockRight = true;
                            }
                        }
                    }
                }
                else
                {
                    if (fromPosition.posX + i < maxX)
                    {
                        if (!boardTiles[fromPosition.posX + i, fromPosition.posY].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX + i, fromPosition.posY]);
                        }
                    }
                }
            }
            else if (moveDirectionType == MOVEDIRECTIONTYPE.CROSSLEFT)
            {
                if (blockDirection)
                {
                    if (!blockLeft)
                    {
                        if (fromPosition.posX - i >= 0)
                        {
                            if (!boardTiles[fromPosition.posX - i, fromPosition.posY].IsOccupied())
                            {
                                moveableTiles.Add(boardTiles[fromPosition.posX - i, fromPosition.posY]);
                            }
                            else
                            {
                                blockLeft = true;
                            }
                        }
                    }
                }
                else
                {
                    if (fromPosition.posX - i >= 0)
                    {
                        if (!boardTiles[fromPosition.posX - i, fromPosition.posY].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX - i, fromPosition.posY]);
                        }
                    }
                }
            }
            // UP
            if (blockDirection)
            {
                if (!blockUp)
                {
                    if (fromPosition.posY + i < maxY)
                    {
                        if (!boardTiles[fromPosition.posX, fromPosition.posY + i].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX, fromPosition.posY + i]);
                        }
                        else
                        {
                            blockUp = true;
                        }
                    }
                }
            }
            else
            {
                if (fromPosition.posY + i < maxY)
                {
                    if (!boardTiles[fromPosition.posX, fromPosition.posY + i].IsOccupied())
                    {
                        moveableTiles.Add(boardTiles[fromPosition.posX, fromPosition.posY + i]);
                    }
                }
            }

            // DOWN
            if (blockDirection)
            {
                if (!blockDown)
                {
                    if (fromPosition.posY - i >= 0)
                    {
                        if (!boardTiles[fromPosition.posX, fromPosition.posY - i].IsOccupied())
                        {
                            moveableTiles.Add(boardTiles[fromPosition.posX, fromPosition.posY - i]);
                        }
                        else
                        {
                            blockDown = true;
                        }
                    }
                }
            }
            else
            {
                if (fromPosition.posY - i >= 0)
                {
                    if (!boardTiles[fromPosition.posX, fromPosition.posY - i].IsOccupied())
                    {
                        moveableTiles.Add(boardTiles[fromPosition.posX, fromPosition.posY - i]);
                    }
                }
            }
        }
        return(moveableTiles);
    }
 public KimbokoCombineFactory(List <Kimboko> kimbokos)
 {
     this.kimbokos      = kimbokos;
     this.directionType = OccupierStatDatabase.GetMovementDirectionTypeCombineStat(kimbokos);
 }