Example #1
0
    private void CalculateClosestEnemy()
    {
        Vector3 closestEnemyDistance;

        if (ClosestEnemyInRange == null || ClosestEnemyInRange.IsFrozenInJail)
        {
            ClosestEnemyInRange  = null;
            closestEnemyDistance = new Vector3();
        }
        else
        {
            closestEnemyDistance = ClosestEnemyInRange.transform.position - transform.position;
            if (closestEnemyDistance.magnitude > EnemyRangeRadius)
            {
                ClosestEnemyInRange  = null;
                closestEnemyDistance = new Vector3();
            }
        }

        Collider[] hitColliders = Physics.OverlapSphere(transform.position, EnemyRangeRadius);
        foreach (Collider hitCollider in hitColliders)
        {
            CTFCharacterController cTFCharacterController = hitCollider.gameObject.GetComponent <CTFCharacterController>();
            if (cTFCharacterController == null)
            {
                continue;
            }

            if (cTFCharacterController.Team == Team)
            {
                continue;
            }

            if (cTFCharacterController.IsFrozenInJail)
            {
                continue;
            }

            if (ClosestEnemyInRange == null)
            {
                ClosestEnemyInRange  = cTFCharacterController;
                closestEnemyDistance = cTFCharacterController.transform.position - transform.position;
            }

            Vector3 distance = cTFCharacterController.transform.position - transform.position;

            if (distance.magnitude < closestEnemyDistance.magnitude)
            {
                ClosestEnemyInRange  = cTFCharacterController;
                closestEnemyDistance = distance;
            }
        }

        IsEnemyInRange = ClosestEnemyInRange != null;
    }
Example #2
0
    private void CalculateClosestFrozenAlly()
    {
        Vector3 closestAllyDistance;

        if (ClosestFrozenAllyInRange == null || ClosestFrozenAllyInRange.CurrentAction != CTFActions.Frozen)
        {
            ClosestFrozenAllyInRange = null;
            closestAllyDistance      = Vector3.zero;
        }
        else
        {
            closestAllyDistance = ClosestFrozenAllyInRange.transform.position - transform.position;
            if (closestAllyDistance.magnitude > EnemyRangeRadius)
            {
                ClosestFrozenAllyInRange = null;
                closestAllyDistance      = Vector3.zero;
            }
        }

        Collider[] hitColliders = Physics.OverlapSphere(transform.position, EnemyRangeRadius);
        foreach (Collider hitCollider in hitColliders)
        {
            CTFCharacterController cTFCharacterController = hitCollider.gameObject.GetComponent <CTFCharacterController>();
            if (cTFCharacterController == null)
            {
                continue;
            }

            if (cTFCharacterController.Team != Team)
            {
                continue;
            }

            if (cTFCharacterController.CurrentAction != CTFActions.Frozen)
            {
                continue;
            }

            if (ClosestFrozenAllyInRange == null)
            {
                ClosestFrozenAllyInRange = cTFCharacterController;
                closestAllyDistance      = cTFCharacterController.transform.position - transform.position;
            }

            Vector3 distance = cTFCharacterController.transform.position - transform.position;

            if (distance.magnitude < closestAllyDistance.magnitude)
            {
                ClosestFrozenAllyInRange = cTFCharacterController;
                closestAllyDistance      = distance;
            }
        }
    }
Example #3
0
    private void HandleCollision(Collider other)
    {
        switch (CurrentAction)
        {
        case CTFActions.RescueTeamate:
            CTFCharacterController ally = other.GetComponent <CTFCharacterController>();
            if (ally == null || ally.Team != Team || ally.CurrentAction != CTFActions.Frozen)
            {
                return;
            }
            ally.Rescue();
            CurrentAction = CTFActions.Idle;
            break;

        case CTFActions.PersueEnemy:
            if (CurrentBase != Team)
            {
                return;
            }
            CTFCharacterController enemy = other.GetComponent <CTFCharacterController>();
            if (enemy == null || enemy.Team == Team || enemy.CurrentAction == CTFActions.Frozen)
            {
                return;
            }
            enemy.Jail();
            CurrentAction = CTFActions.Idle;
            break;

        default:
            break;
        }

        // even if we aren't rescuing, let's unfreeze any allies we cross
        CTFCharacterController frozenAlly = other.GetComponent <CTFCharacterController>();

        if (frozenAlly != null &&
            frozenAlly.Team == Team &&
            frozenAlly.CurrentAction == CTFActions.Frozen &&
            frozenAlly != this)
        {
            frozenAlly.Rescue();
        }
    }