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; } }
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(); } } } }//*/ }
protected SpellAbility(bool immediate, int numTarget, KindOfTarget kindOfTarget) { this.kindOfTarget = kindOfTarget; this.Immediate = immediate; this.NumTarget = numTarget; }