Example #1
0
    public void Throw(int dir, Transform source)
    {
        if (dir > 0)
        {
            initialDirection = 1;
        }
        else
        {
            initialDirection = -1;
        }

        curVeloX = startSpeed * initialDirection;
        curVeloY = 0;
        accelX = decel * dir * -1;

        transform.position = source.position + new Vector3(dir * spawnOffset.x, spawnOffset.y, 0);

        Affector a = TargetFinder.SpawnAffector(transform.position, 2f, HashLookup.EnemiesMask);
        a.OnTouch += TornadoTouchHandler;
        a.SetLifetime(lifetime);
        a.transform.SetParent(transform);
        affector = a;

        state = TornadoProjStates.Outgoing;
        thrower = source;
    }
Example #2
0
    void Update()
    {
        if (state == TornadoProjStates.Outgoing)
        {
            curVeloX += accelX * Time.deltaTime;
            controller.Move(new Vector3(curVeloX * Time.deltaTime, 0, 0));

            if (Mathf.Abs(lastPosX - transform.position.x) * Time.deltaTime < 0.001f)
            {
                curVeloX *= -0.7f;
                state = TornadoProjStates.Return;
                gameObject.layer = LayerMask.NameToLayer("NoCollide");
                affector.ResetTouches();
            }

            if ((curVeloX < 0 && initialDirection > 0) || (curVeloX > 0 && initialDirection < 0))
            {
                state = TornadoProjStates.Return;
                gameObject.layer = LayerMask.NameToLayer("NoCollide");
                affector.ResetTouches();
            }

            lastPosX = transform.position.x;
        }

        if (state == TornadoProjStates.Return)
        {
            curVeloX += accelX * Time.deltaTime;

            if (thrower.position.y + spawnOffset.y > transform.position.y)
            {
                curVeloY += accelY;
            }
            else if (thrower.position.y + spawnOffset.y < transform.position.y)
            {
                curVeloY -= accelY;
            }

            controller.Move(new Vector3(curVeloX * Time.deltaTime, curVeloY * Time.deltaTime, 0));

            if (lastPosX == transform.position.x)
            {
                Destroy(gameObject);
            }

            lastPosX = transform.position.x;

            if (Vector3.Distance(thrower.position + new Vector3(0, spawnOffset.y, 0), transform.position) < 1.3f)
            {
                Destroy(gameObject);
            }
        }

        if (tempEffect != null)
        {
            Vector3 curAngles = tempEffect.localEulerAngles;
            tempEffect.localEulerAngles = new Vector3(curAngles.x, curAngles.y + 500f * Time.deltaTime, curAngles.z);
        }

        if (Time.time > deathTime)
        {
            Destroy(gameObject);
        }
    }