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 _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]; }