/// <summary> /// Rozpoczyna symulacje /// </summary> public static void Start() { Game.SetState(GameState.Simulation); PlanetColliders.Enable(true); PlanetForce.PushPlanets(); MenuSwitcher.Switch(MenuState.Simulation); }
/// <summary> /// Zatrzymuje symulacje /// </summary> public static void Stop() { PlanetPositioner.ResetPlanetsPosition(); PlanetForce.StopPlanets(); Game.SetState(GameState.Creative); PlanetColliders.Enable(false); MenuSwitcher.Switch(MenuState.Free); }
/// <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); } } }