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