Ejemplo n.º 1
0
        public static Dictionary <ABILITYTYPE, IAbility> CreateKimbokoAbilities(Kimboko kimboko)
        {
            Dictionary <ABILITYTYPE, IAbility> Abilities = new Dictionary <ABILITYTYPE, IAbility>();
            MoveAbility moveAbility = new MoveAbility(kimboko);

            Abilities.Add(moveAbility.AbilityType, moveAbility);
            CombineAbility combineAbility = new CombineAbility(kimboko);

            Abilities.Add(combineAbility.AbilityType, combineAbility);
            return(Abilities);
        }
Ejemplo n.º 2
0
        public bool CanIEnterMoveState(IOcuppy occupier)
        {
            // 6- SI ESTOY ONLINE TENGO QUE PREGUNTARLE AL SERVER SI ES UN MOVIMIENTO VALIDO
            // ES EL TURNO DEL PLAYER, Y SU UNIDAD TIENE AC Y LA LA HABILIDAD

            // SI EL PLAYER ESTA EN SU TURNO
            if (occupier.OwnerPlayerID != game.turnController.CurrentPlayerTurn.OwnerPlayerID)
            {
                if (debugOn)
                {
                    Debug.Log("NO ES EL TURNO DEL PLAYER");
                }
                return(false);
            }

            if (occupier.Abilities.ContainsKey(ABILITYTYPE.MOVE) == false)
            {
                if (debugOn)
                {
                    Debug.Log("ERROR HABILIDAD MOVE NO ENCONTRADA EN PLAYER");
                }
                return(false);
            }
            MoveAbility moveAbility = (MoveAbility)occupier.Abilities[ABILITYTYPE.MOVE];

            if (moveAbility == null)
            {
                if (debugOn)
                {
                    Debug.Log("ERROR HABILIDAD MOVE NO ENCONTRADA EN PLAYER");
                }
                return(false);
            }

            return(true);
        }
Ejemplo n.º 3
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);
        }