void FindClosestAllEnemy()
    {
        float        distanceToClosestEnemy = covarageDistance * 1000f;  //Mathf.Infinity;
        KindOfTarget closestEnemy           = null;

        KindOfTarget[] allEnemies = GameObject.FindObjectsOfType <KindOfTarget>();

        foreach (KindOfTarget currentEnemy in allEnemies)
        {
            if (targetsToTrack == TargetsToTrack.Enemies)
            {
                if (currentEnemy.isEnemy == true)
                {
                    float distanceToEnemy = (currentEnemy.transform.position - this.transform.position).sqrMagnitude;
                    if (distanceToEnemy < distanceToClosestEnemy)
                    {
                        distanceToClosestEnemy = distanceToEnemy;
                        closestEnemy           = currentEnemy;
                    }
                }
            }
            else
            {
                if (currentEnemy.isEnemy == false)
                {
                    float distanceToEnemy = (currentEnemy.transform.position - this.transform.position).sqrMagnitude;
                    if (distanceToEnemy < distanceToClosestEnemy)
                    {
                        distanceToClosestEnemy = distanceToEnemy;
                        closestEnemy           = currentEnemy;
                    }
                }
            }
        }

        if (closestEnemy != null && Time.time - startTime > wait)
        {
            allTarget         = closestEnemy.transform;
            allTargetDistance = distanceToClosestEnemy;
            Debug.DrawLine(this.transform.position, closestEnemy.transform.position);
            // Debug.Log("DistanceToEnemy: " + distanceToClosestEnemy + "km");
        }
        else
        {
            allTarget = null;
        }
    }
Exemplo n.º 2
0
        public override void Visit(PlayASpellFromHandAction action)
        {
            // Ignore check if caller not AMARU
            // TODO: Remove
            if (action.Caller != CharacterEnum.AMARU)
            {
                return;
            }

            // Check caller player is alive and it is its main turn
            Player caller = this.GameManager.GetPlayer(action.Caller);

            if (!caller.IsAlive || GameManager.ActiveCharacter != action.Caller || !GameManager.IsMainTurn)
            {
                throw new CallerCannotPlayException();
            }

            //Check if caller player has enough CPs to play the card
            Card cardPlaying = caller.GetCardFromId(action.PlayedCardId, Place.HAND);

            if (cardPlaying.Cost > caller.Mana)
            {
                throw new NotEnoughManaAvailableException();
            }

            //check if the Card is a Creature
            if (!(cardPlaying is SpellCard))
            {
                throw new InvalidCardTypeException();
            }

            //Check if target is alive, if the spell has a target or more than one target
            List <Target> target    = action.Targets;
            SpellAbility  effect    = ((SpellCard)cardPlaying).Effect;
            int           numTarget = effect.NumTarget;
            KindOfTarget  acceptableTypeOfTarget = effect.kindOfTarget;

            if (target is null)
            {
                return;
            }

            if (numTarget != 0 || target.Count > numTarget)
            {
                //Check targets are not immune, and that the right number of target has been chosen. BUT it depends on the card!ù
                throw new InvalidTargetException();
            }

            foreach (Target t in target)
            {
                if (t is PlayerTarget && acceptableTypeOfTarget != KindOfTarget.PLAYER && acceptableTypeOfTarget != KindOfTarget.MIXED)
                {
                    throw new InvalidTargetException();
                }
                if (t is CardTarget && acceptableTypeOfTarget != KindOfTarget.MIXED && acceptableTypeOfTarget != KindOfTarget.CREATURE)
                {
                    throw new InvalidTargetException();
                }
                if (t is PlayerTarget && GameManager.UserDict[((PlayerTarget)t).Character].Player.IsImmune)
                {
                    throw new InvalidTargetException();
                }
                if (t is CardTarget)
                {
                    CardTarget cardTarget = (CardTarget)t;
                    Card       cardOuter  = GameManager.UserDict[((CardTarget)t).Character].Player.GetCardFromId(cardTarget.CardId, Place.OUTER);
                    Card       cardInner  = GameManager.UserDict[((CardTarget)t).Character].Player.GetCardFromId(cardTarget.CardId, Place.INNER);
                    if (cardOuter != null && cardOuter is CreatureCard)
                    {
                        if (((CreatureCard)cardOuter).creatureEffect is ImmunityCreatureEffect)
                        {
                            throw new InvalidTargetException();
                        }
                    }
                    if (cardInner != null && cardInner is CreatureCard)
                    {
                        if (((CreatureCard)cardInner).creatureEffect is ImmunityCreatureEffect)
                        {
                            throw new InvalidTargetException();
                        }
                    }
                }
            }//*/
        }
Exemplo n.º 3
0
 protected SpellAbility(bool immediate, int numTarget, KindOfTarget kindOfTarget)
 {
     this.kindOfTarget = kindOfTarget;
     this.Immediate    = immediate;
     this.NumTarget    = numTarget;
 }