Files
CityBuilder/Assets/Scripts/TechNodeUI.cs

85 lines
3.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.EventSystems;
public class TechNodeUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
[SerializeField]
private Image techImage;
[SerializeField] Image techStatusImage;
[SerializeField] Sprite techStatusLocked;
[SerializeField] Sprite techStatusUnlocked;
[SerializeField] Sprite techStatusResearching;
[SerializeField] Sprite techStatusCompleted;
[SerializeField]
private TextMeshProUGUI techTitleText;
[HideInInspector]
public Technology technology;
[SerializeField]
private Image nodeImage;
[SerializeField]
private TechNodeConnector connector;
[SerializeField]
private Outline outline;
public void Initialize(Technology tech)
{
technology = tech;
techTitleText.text = tech.techName;
techImage.sprite = tech.techImage;
outline.effectColor = tech.techUIColor;
if (tech.availabilityState == Technology.AvailabilityState.Locked)
{
nodeImage.color = Color.gray;
techStatusImage.sprite = techStatusLocked;
techStatusImage.color = Color.black;
TechEvents.OnTechUnlocked += UnlockedTechnology;
}
GetComponent<Button>().onClick.AddListener(StartResearching);
}
public void StartResearching()
{
if (technology.availabilityState == Technology.AvailabilityState.Unlocked && technology.StartResearching())
{
nodeImage.color = Color.blue;
techStatusImage.color = Color.black;
techStatusImage.sprite = techStatusResearching;
TechEvents.OnTechResearchCompleted += CompletedResearch;
}
}
public void Connect(List<TechNodeUI> nodes, Transform parent)
{
foreach (RequiredTech tech in technology.techRequirements)
{
TechNodeUI connectedNode = nodes.Find(t=>t.technology.techName == tech.techName);
TechNodeConnector nodeConnector = Instantiate(connector, parent);
nodeConnector.MakeConnections(transform.position, connectedNode.transform.position, connectedNode.technology.techUIColor);
}
}
public void CompletedResearch(Technology tech)
{
nodeImage.color = Color.green;
techStatusImage.sprite = techStatusCompleted;
techStatusImage.color = Color.black;
TechEvents.OnTechResearchCompleted -= CompletedResearch;
}
public void UnlockedTechnology(Technology tech)
{
if (tech == technology)
{
nodeImage.color = Color.yellow;
techStatusImage.sprite = techStatusUnlocked;
techStatusImage.color = Color.black;
TechEvents.OnTechUnlocked -= UnlockedTechnology;
}
}
public void OnPointerEnter(PointerEventData eventData)
{
TechTooltip.Instance.Show(this.technology);
}
public void OnPointerExit(PointerEventData eventData)
{
TechTooltip.Instance.Hide();
}
}