/// <summary> /// Rozpoczyna symulacje /// </summary> public static void Start() { Game.SetState(GameState.Simulation); PlanetColliders.Enable(true); PlanetForce.PushPlanets(); MenuSwitcher.Switch(MenuState.Simulation); }
/// <summary> /// Usunięcie planety z układu słonecznego /// </summary> private void PlanetMenuDeleteButtonClick() { PlanetManager.Destroy(PlanetData.SelectedPlanet); MenuSwitcher.Switch(MenuState.Free); CameraFocus.Unfocus(); RefreshSelectPlanetDropdown(); }
/// <summary> /// Zatrzymuje symulacje /// </summary> public static void Stop() { PlanetPositioner.ResetPlanetsPosition(); PlanetForce.StopPlanets(); Game.SetState(GameState.Creative); PlanetColliders.Enable(false); MenuSwitcher.Switch(MenuState.Free); }
/// <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(); }
// Use this for initialization void Start() { LoadSun(); PlanetColliders.Enable(false); Game.SetState(GameState.Creative); //Odpalanie menu na starcie MenuSwitcher.Switch(MenuState.Free); }
/// <summary> /// Funkcja odfocusowuje kamere po tym jak zostałą skupiona na planecie /// </summary> public static void Unfocus() { camera.State = CameraState.Unfocusing; newCameraPosition = previousCameraPosition; lookAtDirection = previousCameraRotation; Factory.GetUIController().DeselectPlanetDropDown(); MenuSwitcher.Switch(MenuState.Free); //Jeżeli planeta dopiero co zostala stworzona i nie została ustawiona na układzie słonecznym, to zostaje usunięta if (PlanetData.SelectedPlanet != null && PlanetData.SelectedPlanet.SunDistance == 220f) { PlanetManager.Destroy(PlanetData.SelectedPlanet); } }
private void SelectPlanetDropdownValueChange(int index) { //Odznaczenie planet if (index == 0) { CameraFocus.Unfocus(); return; } //Zaznaczenie planety foreach (IMovingPlanet planet in PlanetData.Planets) { if (planet.PlanetName == selectPlanetList[index]) { CameraFocus.OnPlanet(planet, true); MenuSwitcher.Switch(MenuState.PlanetEdit); break; } } }
/// <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); }
/// <summary> /// Zapisanie pozycji i wielkości planety /// </summary> private void DistanceMenuAddButtonClick() { MenuSwitcher.Switch(MenuState.Free); CameraFocus.Unfocus(); }