Files
ScienceLab.TimeAndSpace/Assets/Scripts/Age/PlanetSelector.cs
2026-06-15 15:38:50 +03:00

134 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class PlanetSelector : MonoBehaviour
{
public AgingController agingController;
public TimeManager timeManager;
public Button previousButton;
public Button nextButton;
public TextMeshProUGUI ageText;
public TextMeshProUGUI planetText;
public Material skyboxMaterial;
private int currentPlanetIndex = 2;
private string[] planetNames = {
"Меркурії", "Венері", "Землі", "Місяці",
"Марсі", "Юпітері", "Сатурні", "Урані", "Нептуні", "Плутоні"
};
private float[] dayLengthHours = {
1407.6f, 5832.5f, 24f, 708.7f,
24.6f, 9.9f, 10.7f, 17.2f, 16.1f, 153.3f
};
private float[] daysInYear = {
88f, 225f, 365f, 365f,
687f, 4333f, 10759f, 30687f, 60190f, 90560f
};
private float[] agingDurations = {
5f, 10f, 20f, 20f, 28f, 40f, 40f, 40f, 40f, 40f
};
private float[] orbitalYears = {
0.24f, 0.62f, 1f, 1f, 1.88f, 11.86f, 29.46f, 84.01f, 164.8f, 248f
};
private Color[] skyboxColors =
{
new Color(0.75f,0.78f,0.85f),
new Color(1.25f,0.85f,0.55f),
new Color(1f,1f,1f),
new Color(0.75f,0.85f,1.2f),
new Color(1.35f,0.55f,0.45f),
new Color(0.7f,1.15f,1.25f),
new Color(0.95f,0.65f,1.35f),
new Color(0.55f,1.25f,1.1f),
new Color(0.45f,0.65f,1.35f),
new Color(0.7f,0.7f,1.35f)
};
private float[] skyboxExposure =
{
0.7f,
0.8f,
0.9f,
0.95f,
1.15f,
0.9f,
0.8f,
0.7f,
0.6f,
0.9f
};
private float[] skyboxRotation =
{
10f, 25f, 0f, 5f, 15f,
40f, 60f, 90f, 120f, 160f
};
void Start()
{
ApplyPlanet();
}
void Update()
{
if (timeManager.showAge)
{
int earthAge = Mathf.RoundToInt(agingController.currentAge);
ageText.text = "Вік: " + earthAge + " із 70 років";
float planetAge = timeManager.fromBeginning
? agingController.currentAge / orbitalYears[currentPlanetIndex]
: (agingController.currentAge - 25f) / orbitalYears[currentPlanetIndex];
planetText.text = "На " + planetNames[currentPlanetIndex] + " пройшло: " + planetAge.ToString("F1") + " років";
}
else
{
ageText.text = "Тривалість доби на " + planetNames[currentPlanetIndex] + ": " + dayLengthHours[currentPlanetIndex].ToString("F1") + " годин";
planetText.text = "У році на " + planetNames[currentPlanetIndex] + ": " + daysInYear[currentPlanetIndex].ToString("F0") + " діб";
}
}
public void OnNextButton()
{
if (currentPlanetIndex < planetNames.Length - 1)
{
currentPlanetIndex++;
ApplyPlanet();
}
}
public void OnPreviousButton()
{
if (currentPlanetIndex > 0)
{
currentPlanetIndex--;
ApplyPlanet();
}
}
void ApplyPlanet()
{
agingController.agingDuration = agingDurations[currentPlanetIndex];
agingController.RestartAging();
agingController.ApplyHairColor(currentPlanetIndex);
skyboxMaterial.SetColor("_Tint", skyboxColors[currentPlanetIndex]);
skyboxMaterial.SetFloat("_Exposure", skyboxExposure[currentPlanetIndex]);
skyboxMaterial.SetFloat("_Rotation", skyboxRotation[currentPlanetIndex]);
DynamicGI.UpdateEnvironment();
previousButton.interactable = currentPlanetIndex > 0;
nextButton.interactable = currentPlanetIndex < planetNames.Length - 1;
}
}