void Update() { // Scales.ClampTimeScale(); if (Input.GetKeyDown(KeyCode.KeypadPlus)) { Scales.IncreaseTimeScale(); } if (Input.GetKeyDown(KeyCode.KeypadMinus)) { Scales.DecreaseTimeScale(); } if (Input.GetKeyDown("space")) { Scales.Pause = !Scales.Pause; } /******************************************************************************************************************/ if (messageQueue.Count != 0 && messageIsBeingDisplayed == false) { messageToBeDisplayed = messageQueue.Dequeue(); StartCoroutine(CountdownForMessage(Scales.messageDuration)); } /******************************************************************************************************************/ gravityLevel0 = Scales.GravityLevel.normal; foreach (SpaceCraft sc in SpaceCraft.spaceCraftList) { if (sc.sco.gravityLevel > gravityLevel0) { gravityLevel0 = sc.sco.gravityLevel; } if (sc.IsSelected == true) { if (selectedSc != null && selectedSc != sc) { selectedSc.isCourseCorrecting = false; } selectedSc = sc; } } if (gravityLevel0 != Scales.GravityLevel.normal && strongGravityMessageQueued == false) { strongGravityMessageQueued = true; messageQueue.Enqueue(strongGravityMessage); } switch (gravityLevel0) { case Scales.GravityLevel.normal: Scales.ResetMaximumTimeScale(); break; case Scales.GravityLevel.medium: Scales.MaxTimeScale = 1; break; case Scales.GravityLevel.high: Scales.MaxTimeScale = 0.5f; break; } }
void Update () { // Scales.ClampTimeScale (); if (Input.GetKeyDown (KeyCode.KeypadPlus)) { Scales.IncreaseTimeScale (); } if (Input.GetKeyDown (KeyCode.KeypadMinus)) { Scales.DecreaseTimeScale (); } if (Input.GetKeyDown ("space")) { Scales.Pause = !Scales.Pause; } /******************************************************************************************************************/ if (messageQueue.Count != 0 && messageIsBeingDisplayed == false) { messageToBeDisplayed = messageQueue.Dequeue (); StartCoroutine (CountdownForMessage (Scales.messageDuration)); } /******************************************************************************************************************/ gravityLevel0 = Scales.GravityLevel.normal; foreach (SpaceCraft sc in SpaceCraft.spaceCraftList) { if (sc.sco.gravityLevel > gravityLevel0) gravityLevel0 = sc.sco.gravityLevel; if (sc.IsSelected == true) { if (selectedSc != null && selectedSc != sc) selectedSc.isCourseCorrecting = false; selectedSc = sc; } } if (gravityLevel0 != Scales.GravityLevel.normal && strongGravityMessageQueued == false) { strongGravityMessageQueued = true; messageQueue.Enqueue (strongGravityMessage); } switch (gravityLevel0) { case Scales.GravityLevel.normal: Scales.ResetMaximumTimeScale (); break; case Scales.GravityLevel.medium: Scales.MaxTimeScale = 1; break; case Scales.GravityLevel.high: Scales.MaxTimeScale = 0.5f; break; } }
public static void AdaptiveLeapfrog(ref Vector2 pos2, ref Vector2 vel2, float t1, float nualf, Collider[] cols, ref Scales.GravityLevel gravityLevel) { int steps = 0, stepsLimit = 1; while (true) { pos2 += vel2 * t1 * 0.5f; Vector2 force2 = Gravity(pos2, cols); float r = pos2.magnitude; float fr = force2.magnitude; if (fr > (gravityThreshold + 1) * (gravityThreshold + 1)) { gravityLevel = Scales.GravityLevel.high; } else if (fr > gravityThreshold * gravityThreshold) { gravityLevel = Scales.GravityLevel.medium; } else { gravityLevel = Scales.GravityLevel.normal; } float t0 = nualf / Mathf.Sqrt(fr / r); if (t1 < t0) { vel2 += force2 * t1; pos2 += vel2 * t1 * 0.5f; if (++steps == stepsLimit) { break; } while ((steps % 2) != 0) { steps /= 2; stepsLimit /= 2; t1 *= 2.0f; } } else { pos2 -= vel2 * t1 * 0.5f; t1 *= 0.5f; steps *= 2; stepsLimit *= 2; } } }