Exemplo n.º 1
0
    void Update()
    {
        //check for collision
        float nearest = float.MaxValue;

        {
            Ray          ray  = new Ray(transform.position, transform.forward);
            RaycastHit[] hits = Physics.SphereCastAll(ray, .2f, speed * Time.deltaTime, ~((1 << 9) | (1 << 14)), QueryTriggerInteraction.Ignore);
            foreach (RaycastHit hit in hits)
            {
                if (hit.collider.gameObject == owner)
                {
                    continue;
                }

                if (hit.distance < nearest)
                {
                    nearest = hit.distance;
                }

                Damageable d = hit.collider.GetComponent <Damageable>();
                if (d != null)
                {
                    d.Damage(Random.Range(directDamageMin, directDamageMax + 1), DamageType.Explosion, owner);
                }
            }
        }

        //explosion
        if (nearest < float.MaxValue)
        {
            transform.position = transform.position + transform.forward * nearest;

            Collider[] hits = Physics.OverlapSphere(transform.position, explosionRadius, ~(1 << 9), QueryTriggerInteraction.Ignore);
            foreach (Collider hit in hits)
            {
                Damageable d = hit.GetComponent <Damageable>();
                if (d != null)
                {
                    float distance = (hit.transform.position - transform.position).magnitude;
                    d.Damage(AxMath.Lerp(blastDamage, 1, distance / explosionRadius), DamageType.Explosion, owner);
                    d.Impulse((hit.transform.position - transform.position).normalized, Mathf.Lerp(pushForce, 100, distance / explosionRadius));
                }
            }

            if (OnDeathSpawn != null)
            {
                GameObject go = Instantiate(OnDeathSpawn);
                go.transform.position = transform.position;
            }

            if (!string.IsNullOrEmpty(_onDeathSound))
            {
                GameManager.Create3DSound(transform.position, _onDeathSound, 10f);
            }

            Destroy(gameObject);

            return;
        }

        transform.position = transform.position + transform.forward * speed * Time.deltaTime;

        Triangle sectorTriangle = TheGrid.GetExactTriangle(transform.position.x, transform.position.z);

        if (sectorTriangle != null)
        {
            SetBrightness(sectorTriangle.sector.brightness); //constant update since we are not in sector thing lists
        }
        UpdateSprite();
    }
Exemplo n.º 2
0
    void Update()
    {
        if (GameManager.Paused)
        {
            return;
        }

        if (dynamic)
        {
            ApplySimpleGravity();
        }

        if (dead)
        {
            frametime += Time.deltaTime;
            if (frametime > .15f)
            {
                frametime = 0f;

                frameindex++;

                if (frameindex == 2)
                {
                    Collider[] hits = Physics.OverlapSphere(transform.position, explosionRadius, ~(1 << 9), QueryTriggerInteraction.Ignore);
                    foreach (Collider hit in hits)
                    {
                        Damageable d = hit.GetComponent <Damageable>();
                        if (d != null)
                        {
                            float distance = (hit.transform.position - transform.position).magnitude;
                            d.Damage(AxMath.Lerp(blastDamage, 1, distance / explosionRadius), DamageType.Explosion, gameObject);
                            d.Impulse((hit.transform.position - transform.position).normalized, Mathf.Lerp(pushForce, 100, distance / explosionRadius));
                        }
                    }
                }

                if (frameindex >= ExplodeTextures.Length)
                {
                    Destroy(gameObject);

                    for (int y = -1; y <= 1; y++)
                    {
                        for (int x = -1; x <= 1; x++)
                        {
                            AI.CalculateHeat(cell.x + x, cell.y + y);
                        }
                    }

                    if (GameManager.Instance.Player[0].playerBreath.GetBreath(cell) != null)
                    {
                        GameManager.Instance.Player[0].RecastBreath();
                    }

                    return;
                }

                SetSprite(ExplodeTextures[frameindex]);
            }
            return;
        }

        frametime += Time.deltaTime;
        if (frametime > .25f)
        {
            frametime = 0;

            frameindex++;
            if (frameindex >= IdleTextures.Length)
            {
                frameindex = 0;
            }

            SetSprite(IdleTextures[frameindex]);
        }
    }