Files
ScienceLab.FrictionForce/Assets/Scripts/Rocket/RocketMaterialSelector.cs
2026-05-29 18:30:19 +03:00

137 lines
7.5 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 RocketMaterialSelector : MonoBehaviour
{
[SerializeField] private Renderer _cylinderMain;
[SerializeField] private Renderer _cylinder005;
[SerializeField] private Renderer _cylinder015;
[SerializeField] private TextMeshProUGUI _materialNameText;
[SerializeField] private Button _leftButton;
[SerializeField] private Button _rightButton;
private int _currentIndex = 0;
public struct RocketMaterial
{
public string name;
public Material material;
public float dragCoefficient;
public bool explodes;
public string explodeReason;
}
private List<RocketMaterial> _materials = new();
[Header("Матеріали")]
[SerializeField] private Material _matCarbonFiber;
[SerializeField] private Material _matTitanium;
[SerializeField] private Material _matSteelPolished;
[SerializeField] private Material _matAluminium;
[SerializeField] private Material _matCeramic;
[SerializeField] private Material _matSteel;
[SerializeField] private Material _matCopper;
[SerializeField] private Material _matCastIron;
[SerializeField] private Material _matGlass;
[SerializeField] private Material _matPlastic;
[SerializeField] private Material _matMarble;
[SerializeField] private Material _matGold;
[SerializeField] private Material _matWood;
[SerializeField] private Material _matRubber;
[SerializeField] private Material _matBrick;
[SerializeField] private Material _matAsphalt;
[SerializeField] private Material _matGranite;
[SerializeField] private Material _matIce;
[SerializeField] private Material _matSnow;
[SerializeField] private Material _matAvocado;
[SerializeField] private Material _matDuck;
[SerializeField] private Material _matLychee;
[SerializeField] private Material _matPaper;
private void Start()
{
BuildMaterialList();
if (_leftButton != null) _leftButton.onClick.AddListener(PrevMaterial);
if (_rightButton != null) _rightButton.onClick.AddListener(NextMaterial);
ShowMaterial(0);
}
private void BuildMaterialList()
{
_materials.Add(new RocketMaterial { name = "Вуглецеве волокно", material = _matCarbonFiber, dragCoefficient = 0.05f, explodes = false });
_materials.Add(new RocketMaterial { name = "Титан", material = _matTitanium, dragCoefficient = 0.08f, explodes = false });
_materials.Add(new RocketMaterial { name = "Полірована сталь", material = _matSteelPolished, dragCoefficient = 0.12f, explodes = false });
_materials.Add(new RocketMaterial { name = "Алюміній", material = _matAluminium, dragCoefficient = 0.15f, explodes = false });
_materials.Add(new RocketMaterial { name = "Кераміка", material = _matCeramic, dragCoefficient = 0.18f, explodes = false });
_materials.Add(new RocketMaterial { name = "Сталь", material = _matSteel, dragCoefficient = 0.25f, explodes = false });
_materials.Add(new RocketMaterial { name = "Мідь", material = _matCopper, dragCoefficient = 0.30f, explodes = false });
_materials.Add(new RocketMaterial { name = "Чавун", material = _matCastIron, dragCoefficient = 0.38f, explodes = false });
_materials.Add(new RocketMaterial { name = "Скло", material = _matGlass, dragCoefficient = 0.20f, explodes = false });
_materials.Add(new RocketMaterial { name = "Пластик", material = _matPlastic, dragCoefficient = 0.22f, explodes = false });
_materials.Add(new RocketMaterial { name = "Мармур", material = _matMarble, dragCoefficient = 0.42f, explodes = false });
_materials.Add(new RocketMaterial { name = "Золото", material = _matGold, dragCoefficient = 0.35f, explodes = true, explodeReason = "Золото надто важке - ракета падає одразу! 💥" });
_materials.Add(new RocketMaterial { name = "Дерево", material = _matWood, dragCoefficient = 0.55f, explodes = true, explodeReason = "Дерево займається від тертя об повітря!" });
_materials.Add(new RocketMaterial { name = "Гума", material = _matRubber, dragCoefficient = 0.70f, explodes = false });
_materials.Add(new RocketMaterial { name = "Цегла", material = _matBrick, dragCoefficient = 0.75f, explodes = false });
_materials.Add(new RocketMaterial { name = "Асфальт", material = _matAsphalt, dragCoefficient = 0.72f, explodes = true, explodeReason = "Асфальт плавиться і ракета розпадається!" });
_materials.Add(new RocketMaterial { name = "Граніт", material = _matGranite, dragCoefficient = 0.65f, explodes = false });
_materials.Add(new RocketMaterial { name = "Лід", material = _matIce, dragCoefficient = 0.10f, explodes = true, explodeReason = "Лід миттєво тане і ракета вибухає!" });
_materials.Add(new RocketMaterial { name = "Сніжок", material = _matSnow, dragCoefficient = 0.95f, explodes = true, explodeReason = "Сніжок випаровується на старті!" });
_materials.Add(new RocketMaterial { name = "Авокадо", material = _matAvocado, dragCoefficient = 0.85f, explodes = true, explodeReason = "Авокадо згорає за 3 секунди! 🥑💥" });
_materials.Add(new RocketMaterial { name = "Гумова качечка", material = _matDuck, dragCoefficient = 0.98f, explodes = true, explodeReason = "Качечка розплавилась! 🦆💥" });
_materials.Add(new RocketMaterial { name = "Лічі", material = _matLychee, dragCoefficient = 0.88f, explodes = true, explodeReason = "Лічі згоріло в атмосфері! 💥" });
_materials.Add(new RocketMaterial { name = "Папір", material = _matPaper, dragCoefficient = 0.99f, explodes = true, explodeReason = "Папір миттєво згорів! 📄🔥" });
}
private void ShowMaterial(int index)
{
var mat = _materials[index];
if (_materialNameText != null)
_materialNameText.text = mat.name;
if (mat.material != null)
{
if (_cylinderMain != null) _cylinderMain.materials = SetElement0(mat.material, _cylinderMain.materials);
if (_cylinder005 != null) _cylinder005.materials = SetElement0(mat.material, _cylinder005.materials);
if (_cylinder015 != null) _cylinder015.materials = SetElement0(mat.material, _cylinder015.materials);
}
if (_leftButton != null) _leftButton.interactable = index > 0;
if (_rightButton != null) _rightButton.interactable = index < _materials.Count - 1;
}
private Material[] SetElement0(Material newMat, Material[] current)
{
Material[] updated = new Material[current.Length];
for (int i = 0; i < current.Length; i++)
updated[i] = current[i];
updated[0] = newMat;
return updated;
}
private void NextMaterial()
{
if (_currentIndex < _materials.Count - 1)
{
_currentIndex++;
ShowMaterial(_currentIndex);
}
}
private void PrevMaterial()
{
if (_currentIndex > 0)
{
_currentIndex--;
ShowMaterial(_currentIndex);
}
}
public RocketMaterial GetCurrentMaterial() => _materials[_currentIndex];
}