private void reset() { if (_collider != null) { _collider.RemoveFromCollisionPool(); } if (_allegianceInfo.Allegiance == Allegiance.Player) { _damager.RemoveAttackLandedCallback(landedAttack); } _trueRadius = 0.0f; IntegerCircleCollider circleCollider = this.integerCollider as IntegerCircleCollider; if (circleCollider != null) { circleCollider.Radius = Mathf.RoundToInt(_trueRadius); } if (_circleRenderer != null) { _circleRenderer.Radius = _trueRadius; } _destructionScheduled = false; _collisions.Clear(); ObjectPools.ReturnPooledObject(this.ObjectPoolKey, this.gameObject); }
void Update() { if (_trueRadius >= _finalRadius) { _destructionScheduled = true; } else { _trueRadius += _growthRate * Time.deltaTime; IntegerCircleCollider circleCollider = this.integerCollider as IntegerCircleCollider; circleCollider.Radius = Mathf.RoundToInt(_trueRadius); _circleRenderer.Radius = _trueRadius; int prevCount = _collisions.Count; circleCollider.Collide(_collisions, 0, 0, _damager.DamagableLayers); for (int i = prevCount; i < _collisions.Count; ++i) { Damagable damagable = _collisions[i].GetComponent <Damagable>(); if (damagable != null && !damagable.Invincible) { if (!this.LineOfSight) { this.localNotifier.SendEvent(new HitEvent(_collisions[i])); } else { Vector2 direction = (_collisions[i].transform.position - this.transform.position).normalized; float distance = Vector2.Distance(this.transform.position, _collisions[i].transform.position); if (distance < 2.0f) { this.localNotifier.SendEvent(new HitEvent(_collisions[i])); } else { Vector2 start = (Vector2)this.transform.position + direction * Mathf.Max(1.0f, Mathf.Min(Mathf.Min(_trueRadius / 10.0f, 4.5f), distance)); distance = Vector2.Distance(start, _collisions[i].transform.position); if (distance < 2.0f || !CollisionManager.RaycastFirst(start, direction, distance, this.LineOfSightBlockers).Collided) { this.localNotifier.SendEvent(new HitEvent(_collisions[i])); } } } } } } }