Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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]));
                            }
                        }
                    }
                }
            }
        }
    }