Пример #1
0
 /// <summary>
 /// Rozpoczyna symulacje
 /// </summary>
 public static void Start()
 {
     Game.SetState(GameState.Simulation);
     PlanetColliders.Enable(true);
     PlanetForce.PushPlanets();
     MenuSwitcher.Switch(MenuState.Simulation);
 }
Пример #2
0
 /// <summary>
 /// Zatrzymuje symulacje
 /// </summary>
 public static void Stop()
 {
     PlanetPositioner.ResetPlanetsPosition();
     PlanetForce.StopPlanets();
     Game.SetState(GameState.Creative);
     PlanetColliders.Enable(false);
     MenuSwitcher.Switch(MenuState.Free);
 }
Пример #3
0
    /// <summary>
    /// Pauzuje lub wznawia symulację planet
    /// </summary>
    public static void ResumeOrPause()
    {
        if (Game.State == GameState.Simulation)
        {
            Game.SetState(GameState.Paused);;
            PlanetData.SaveVelocities();
            PlanetForce.StopPlanets();
        }

        else if (Game.State == GameState.Paused)
        {
            Game.SetState(GameState.Simulation);
            PlanetForce.ResumePlanets();
        }
    }
    /// <summary>
    /// Metoda odpowiedzialna za przyciąganie planet do siebie
    /// </summary>
    /// <param name="callingPlanet">Planeta z poziomu której wywoływana jest ta metoda</param>
    public static void AttractPlanets(IPlanet callingPlanet)
    {
        foreach (IPlanet planet in PlanetData.Planets)
        {
            if (planet != callingPlanet)
            {
                Vector3 direction = GetPlanetDirection(callingPlanet, planet);
                float   distance  = GetDistanceBetweenPlanets(direction);

                if (distance == 0)
                {
                    return;
                }

                float   forceMagnitude = GetForceMagnitude(callingPlanet, planet, distance);
                Vector3 force          = GetForceVector(direction, forceMagnitude);

                PlanetForce.PushPlanet(planet, force);
            }
        }
    }