137 lines
7.5 KiB
C#
137 lines
7.5 KiB
C#
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];
|
||
}
|