Ejemplo n.º 1
0
 /// <summary>
 /// Zatrzymuje symulacje
 /// </summary>
 public static void Stop()
 {
     PlanetPositioner.ResetPlanetsPosition();
     PlanetForce.StopPlanets();
     Game.SetState(GameState.Creative);
     PlanetColliders.Enable(false);
     MenuSwitcher.Switch(MenuState.Free);
 }
Ejemplo n.º 2
0
    /// <summary>
    /// Zapisanie właściwości planety
    /// </summary>
    private void PlanetMenuSaveButtonClick()
    {
        PlanetData.SelectedPlanet.PlanetName = PlanetNameChecker.Check(PlanetMenuNameInput.text);
        PlanetData.SelectedPlanet.Mass       = PlanetMenuMassSlider.value;
        PlanetData.SelectedPlanet.Speed      = PlanetMenuSpeedSlider.value;
        PlanetPositioner.ResetRotation(PlanetData.SelectedPlanet);

        MenuSwitcher.Switch(MenuState.Distance);
        CameraFocus.OnPlanetsView();
    }
Ejemplo n.º 3
0
    /// <summary>
    /// Spojrzenie kamery na planetę
    /// </summary>
    /// <param name="transform">Wybrany obiekt</param>
    /// <param name="saveCameraPosition">Określa czy zapisać pozycję kamery, którą później będzie można wykorzystać do powrotu</param>
    public static void OnPlanet(IMovingPlanet planet, bool saveCameraPosition)
    {
        //if (state != CameraState.Free)
        //     return;

        PlanetData.SelectedPlanet = (Planet)planet;

        camera.State = CameraState.Focusing;

        //Zapisanie poprzedniej pozycji i rotacji kamery
        if (saveCameraPosition)
        {
            previousCameraPosition = camera.transform.position;
            previousCameraRotation = camera.transform.rotation;
        }

        //Zapisanie rotacji planety
        PlanetData.SaveRotation(planet);

        //Ustawienie planety w taki sposób, aby "patrzyła się" na kamerę. Dzięki temu łatwo poprowadzić od niej potrzebne wektory
        planet.transform.LookAt(camera.transform);

        //Określenie wielkośći planety
        float planetSize = planet.transform.localScale.x;

        //Punkt do którego kamera ma dotrzeć
        newCameraPosition = planet.transform.position + (planet.transform.forward * planetSize * 2);

        //Punkt na który kamera ma spojrzeć
        lookAtPoint = planet.transform.position - (planet.transform.right * planetSize);

        //Rotacja kamery obliczona na podstawie wektora między punktem dotarcia a punktem patrzenia
        lookAtDirection = Quaternion.LookRotation(lookAtPoint - newCameraPosition);

        //Przywrócenie poprzedniej rotacji planety
        PlanetPositioner.ResetRotation(planet);

        //Wyświetl menu edycji planety
        MenuSwitcher.Switch(MenuState.PlanetEdit);
    }