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;
		}
	}
Exemple #3
0
    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;
            }
        }
    }