public void UpdatePosition() { if (StartTime > Time.time) { return; } if (!alreadyCreated) { CreateProjectile(); } if (projectileGameObject == null) { return; } float secondsSinceStart = Time.time - StartTime; float feetTraveled = SpeedFeetPerSecond * secondsSinceStart; if (feetTraveled > totalTravelDistanceInFeet) { TriggerCollision(); DestroyProjectile(); readyToDelete = true; projectileGameObject = null; return; } float percentTraveled = feetTraveled / totalTravelDistanceInFeet; // Linear: // Projectile.transform.position = SourcePosition + direction * Talespire.Convert.FeetToTiles(feetTraveled); // Bezier path: projectileGameObject.transform.position = bezierPath.CalculateBezierPoint(0, pathTimeCurve.Evaluate(percentTraveled)); projectileGameObject.transform.LookAt(bezierPath.CalculateBezierPoint(0, pathTimeCurve.Evaluate(percentTraveled + 0.01f))); float scaleAtTime = 1f; if (sizeCurve != null) { scaleAtTime = sizeCurve.Evaluate(percentTraveled); } float newScale = scaleAtTime * ProjectileSizeMultiplier; if (newScale != projectileGameObject.transform.localScale.x && newScale != 0) { projectileGameObject.transform.localScale = new Vector3(newScale, newScale, newScale); // Assuming a uniformly-scaled effect! if (particleSystems != null) { foreach (ParticleSystemDetails particleSystemDetails in particleSystems) { particleSystemDetails.Scale(newScale); } } } }
IEnumerator Jump(Vector3 destination) { JumpTimer = 0.0f; // Compute jump spline List <Vector3> points = new List <Vector3>(); points.Add(this.transform.position); points.Add(new Vector3(this.transform.position.x, this.transform.position.y + JUMP_HEIGHT, this.transform.position.z)); points.Add(new Vector3(destination.x, this.transform.position.y + JUMP_HEIGHT, this.transform.position.z)); points.Add(destination); BezierPath bezierPath = new BezierPath(); bezierPath.SetControlPoints(points); List <Vector3> drawingPoints = bezierPath.GetDrawingPoints0(); destination.y = transform.position.y; LastJumpDirectionWorld = destination - transform.position; LastJumpDirectionWorld.Normalize(); while (transform.parent == null) // Not yet reattached to an icefloe { transform.position = bezierPath.CalculateBezierPoint(0, JumpTimer); transform.forward = Vector3.Slerp(-LastJumpDirectionWorld, transform.forward, Mathf.Exp(-Time.time * 0.1f)); JumpTimer += Time.fixedDeltaTime / JUMP_DURATION; if (GetComponent <Collider>().bounds.max.y < IceFloe.SUNK_HEIGHT) { Debug.Log("Player has jumped into the water. You lost."); gameController.gameEndStatus(); yield return(null); } yield return(new WaitForFixedUpdate()); } yield return(null); }
private IEnumerator TweenCoroutine(float p_duration) { float fStartTime = Time.time; float t = 0; while (t <= 1) { t = (Time.time - fStartTime) / p_duration; Vector3 point = m_bezier.CalculateBezierPoint(0, t); MoveObject(point); yield return(null); } if (m_callback != null) { m_callback(); } ResetValues(); }
private void LateUpdate() { if (_path == null) { return; } if (stage == 0) { stage++; } else if (stage == 1) { EnableRenderers(true); int index = 0; while (true) { if (index >= bones.Length) { stage++; break; } if (index == 0) { transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time)); transform.LookAt(_path.CalculateBezierPoint(0, animCurve.Evaluate(time + 0.01f))); } bones[index].transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time - (index * boneDistance))); index++; } } else if (stage == 2) { stage++; } else if (stage != 3) { if (stage == 4) { Creature creature; EnableRenderers(false); impact.transform.position = _targetPosition; impact.transform.LookAt(impact.transform.position + transform.forward); impact.Play(true); if (_castingCreature.TryGetCreatureFromTarget(EndTarget, out creature)) { creature.AttackTargetCreature(impact.transform.forward); } if (SimpleSingletonBehaviour <CameraController> .HasInstance) { TS_CameraShaker.CallPushInDirection(0.1f, impact.transform.forward); } stage++; } } else { int index = 0; while (true) { if (index >= bones.Length) { time += Time.deltaTime; if (time > 1f) { stage++; } if (!drizzle.isEmitting) { drizzle.Clear(true); drizzle.Play(true); } break; } if (index == 0) { transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time)); transform.LookAt(_path.CalculateBezierPoint(0, animCurve.Evaluate(time + 0.01f))); } bones[index].transform.position = _path.CalculateBezierPoint(0, animCurve.Evaluate(time - (index * boneDistance))); index++; } } TryPlayImpactAudio(time); }