public override void Update() { base.Update(); resource.Spend(leak * Time.deltaTime); puddleSpawnTimer -= Time.deltaTime; while (puddleSpawnTimer <= 0) { Puddle.Create(puddle, target.transform.position, puddleAmount); Liquid.Create(liquid.gameObject, target.transform.position, puddleAmount); puddleSpawnTimer += puddlePeriod; } }
// Update is called once per frame protected virtual void Update() { if (transform.position.magnitude > 100.0f) { Destroy(); Debug.Log("Missile " + name + " deleted by total distance"); return; } if (timeToLive > 0) { lifeTimer.Update(); if (lifeTimer.Expired) { if (liquid != null && maxLiquidVolume > 0) { float volume = Random.Range(minLiquidVolume, maxLiquidVolume); Liquid.Create(liquid.gameObject, transform.position, volume); } Destroy(); Debug.Log("Missile " + name + " deleted by time to live"); return; } } if (distanceToTravel > 0) { traveledDistance = (startingPoint - transform.position).magnitude; if (traveledDistance >= distanceToTravel) { if (liquid != null && maxLiquidVolume > 0) { float volume = Random.Range(minLiquidVolume, maxLiquidVolume); Liquid.Create(liquid.gameObject, transform.position, volume); } Destroy(); Debug.Log("Missile " + name + " deleted by distance to travel (starting poist is " + startingPoint + ", now at " + transform.position + ", distance to travel is " + distanceToTravel + ")"); return; } } switch (scalingType) { case ScalingType.SCALE_WITH_TIME: { float percentage = lifeTimer.timeLeft / timeToLive; transform.localScale = Vector3.one * (initialScale + (finalScale - initialScale) * percentage); break; } case ScalingType.SCALE_WITH_DISTANCE: { float percentage = traveledDistance / distanceToTravel; transform.localScale = Vector3.one * (initialScale + (finalScale - initialScale) * percentage); break; } } }
private new void Update() { if (splashReload > 0) { splashReload -= Time.deltaTime; if (splashReload < 0) { splashReload = 0; } } Vector3 endPoint; if (owner.target && owner.targetDistance < range) { endPoint = owner.viewPoint; if (explosion && splashReload == 0) { Instantiate(explosion, owner.viewPoint - transform.forward * 0.05f, Quaternion.identity); splashReload = splashPeriod; } float dealingDamage = (damage - distanceDamageReduction * (owner.targetDistance / range)) * Time.deltaTime; switch (owner.target.layer) { case GameLayer.Units: { if (owner.targetUnit) { owner.targetUnit.ReceiveDamage(dealingDamage, damageType); } break; } case GameLayer.Destructibles: { if (owner.targetDestructible) { owner.targetDestructible.ReceiveDamage(dealingDamage, damageType); } break; } case GameLayer.Items: { if (owner.targetItem) { owner.targetItem.ReceiveDamage(dealingDamage, damageType); } break; } } } else { endPoint = owner.transform.forward * range; //if(splashReload == 0 && puddle && puddleAmount > 0) //{ // Puddle.Create(puddle, Vector3.Scale(endPoint, new Vector3(1, 0, 1)), puddleAmount); // splashReload = splashPeriod; //} if (liquid && maxLiquidVolume > 0) { float volume = Random.Range(minLiquidVolume, maxLiquidVolume); Liquid.Create(liquid.gameObject, owner.viewPoint - transform.forward * 0.05f, volume); } } Vector3 direction = endPoint - transform.position; transform.rotation = Quaternion.LookRotation(direction); transform.localScale = new Vector3(1.0f, 1.0f, direction.magnitude); if (particles) { ParticleSystem.ShapeModule shape = particles.shape; shape.scale = new Vector3(shape.scale.x, shape.scale.y, transform.localScale.z); } }