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