示例#1
0
    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;
        }
    }
示例#2
0
    // 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;
        }
        }
    }
示例#3
0
    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);
        }
    }