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; }
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; } } }
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(); } }