using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; using Player.Information; namespace Player.Interactions { public class ConstructSelector : MonoBehaviour { public GameObject foodMakerPrefab; public GameObject player; public Sprite foodMakerImage; public GameObject waterMakerPrefab; public Sprite waterMakerImage; public GameObject healthAreaPrefab; public Sprite healthAreaImage; public Image constructImage; public GameObject selectedImage; public GameObject unselectedArrow; private readonly List choices = new(); public TMP_Text constructDesc; public TMP_Text constructName; private int currentIndex; private int selectedIndex; private PlayerStats playerStats; // Start is called before the first frame update private void Start() { player = GameObject.FindGameObjectWithTag("Player"); playerStats = player.GetComponent(); choices.Add(new ConstructMenuItem("Nutrient Consolidator", foodMakerImage, "Scrapes nutrients from the ground to make food.\n\nRelies on local biodensity.", foodMakerPrefab)); choices.Add(new ConstructMenuItem("Water Condenser", waterMakerImage, "Condenses vapor from the atmosphere to make water.\n\nRelies on local humidity.", waterMakerPrefab)); choices.Add(new ConstructMenuItem("Regeneration Field", healthAreaImage, "Distributes nanites onto organisms to repair tissue.\n\nRequires proximity.", healthAreaPrefab)); currentIndex = 0; selectedIndex = 0; RenderPanel(); } // Update is called once per frame private void Update() { if (Input.GetKeyDown(KeyCode.LeftArrow) ) { currentIndex--; if (currentIndex < 0) currentIndex = choices.Count - 1; RenderPanel(); } if (Input.GetKeyDown(KeyCode.RightArrow)) { currentIndex++; if (currentIndex >= choices.Count) currentIndex = 0; RenderPanel(); } if (Input.GetKeyDown(KeyCode.UpArrow) ) { selectedIndex = currentIndex; RenderPanel(); } if (Input.GetKeyDown(KeyCode.DownArrow)) { } } public void RenderPanel() { constructName.SetText(choices[currentIndex].GetName()); constructImage.sprite = choices[currentIndex].GetImage(); constructDesc.SetText(choices[currentIndex].GetDesc()); if (selectedIndex == currentIndex) { selectedImage.SetActive(true); unselectedArrow.SetActive(false); } else { selectedImage.SetActive(false); unselectedArrow.SetActive(true); } } public GameObject GetSelected() { return choices[selectedIndex].GetTarget(); } } }