initial commit

This commit is contained in:
2026-05-29 18:30:19 +03:00
commit feebd5afa5
1068 changed files with 222390 additions and 0 deletions

View File

@@ -0,0 +1,194 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class NoteBookUI : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI _mainText;
[SerializeField] private TextMeshProUGUI _highlightText;
[SerializeField] private GameObject _highlightBox;
[SerializeField] private Button _leftButton;
[SerializeField] private Button _rightButton;
[SerializeField] private GameObject _canvasRoot;
private List<string> _pages = new();
private List<string> _highlights = new();
private int _currentPage = 0;
private void Start()
{
if (_leftButton != null)
_leftButton.onClick.AddListener(PrevPage);
if (_rightButton != null)
_rightButton.onClick.AddListener(NextPage);
if (_canvasRoot != null) _canvasRoot.SetActive(false);
}
public void Show()
{
BuildPages();
_currentPage = 0;
if (_canvasRoot != null) _canvasRoot.SetActive(true);
ShowPage(0);
}
public void Hide()
{
if (_canvasRoot != null) _canvasRoot.SetActive(false);
}
private void BuildPages()
{
_pages.Clear();
_highlights.Clear();
_pages.Add(
"СИЛА ТЕРТЯ\n" +
"Тертя спокою:\n" +
"F ≤ μs · N\n" +
"Тертя ковзання:\n" +
"F = μk · N\n" +
"Тертя кочення:\n" +
"F = μкоч · N\n\n" +
"N = m · g · cos α\n" +
"m - маса тіла (кг)\n" +
"g = 9.8 м/с²"
);
_highlights.Add(
"Ковзання на нахилі:\n" +
"F = μk · m · g · cos α\n" +
"Кочення на нахилі:\n" +
"F = μкоч · m · g · cos α\n" +
"Дослідження:\n" +
"1. Зважити об'єкт → m\n" +
"2. Спустити з полиці → μ\n"
);
string weighedPage = "ЗВАЖЕНІ ОБ'ЄКТИ\n\n";
if (GameData.WeighedObjects.Count == 0)
{
weighedPage += "Ще нічого не зважено.";
_pages.Add(weighedPage);
_highlights.Add("");
}
else
{
int count = 0;
foreach (var obj in GameData.WeighedObjects)
{
string massStr = obj.mass >= 1f
? obj.mass + " кг"
: (obj.mass * 1000f) + " г";
weighedPage += "• " + obj.name + ": " + massStr + "\n";
count++;
if (count >= 8)
{
_pages.Add(weighedPage);
_highlights.Add("");
weighedPage = "ЗВАЖЕНІ ОБ'ЄКТИ (прод.)\n\n";
count = 0;
}
}
if (count > 0)
{
_pages.Add(weighedPage);
_highlights.Add("");
}
}
string frictionPage = "КОЕФІЦІЄНТИ ТЕРТЯ\n\n";
if (GameData.MeasuredFrictions.Count == 0)
{
frictionPage += "Ще нічого не виміряно.\n\n" +
"Спусти об'єкт з полиці\n" +
"щоб виміряти μ.";
_pages.Add(frictionPage);
_highlights.Add("");
}
else
{
int count = 0;
foreach (var f in GameData.MeasuredFrictions)
{
string typeStr = f.frictionType switch
{
FrictionType.Статичне => "стат.",
FrictionType.Ковзання => "ковз.",
FrictionType.Кочення => "коч.",
_ => ""
};
string surf = f.surface switch
{
"Дерев'яна поверхня" => "дерево",
"Металева поверхня" => "метал",
"Крижана поверхня" => "лід",
"Гумова поверхня" => "гума",
_ => f.surface
};
frictionPage += "• " + f.objectName + " / " + surf + "\n";
frictionPage += " μ " + typeStr + " = " + f.mu.ToString("F2") + "\n";
count++;
if (count >= 6)
{
_pages.Add(frictionPage);
_highlights.Add("");
frictionPage = "КОЕФІЦІЄНТИ (прод.)\n\n";
count = 0;
}
}
if (count > 0)
{
_pages.Add(frictionPage);
_highlights.Add("");
}
}
}
private void ShowPage(int index)
{
if (_mainText != null)
_mainText.text = _pages[index];
bool hasHighlight = !string.IsNullOrEmpty(_highlights[index]);
if (_highlightBox != null)
_highlightBox.SetActive(hasHighlight);
if (_highlightText != null && hasHighlight)
_highlightText.text = _highlights[index];
if (_leftButton != null)
{
_leftButton.interactable = index > 0;
var colors = _leftButton.colors;
colors.normalColor = index > 0 ? Color.white : new Color(0.5f, 0.5f, 0.5f, 0.5f);
_leftButton.colors = colors;
}
if (_rightButton != null)
{
_rightButton.interactable = index < _pages.Count - 1;
var colors = _rightButton.colors;
colors.normalColor = index < _pages.Count - 1 ? Color.white : new Color(0.5f, 0.5f, 0.5f, 0.5f);
_rightButton.colors = colors;
}
}
private void NextPage()
{
if (_currentPage < _pages.Count - 1)
{
_currentPage++;
ShowPage(_currentPage);
}
}
private void PrevPage()
{
if (_currentPage > 0)
{
_currentPage--;
ShowPage(_currentPage);
}
}
}