85 lines
3.0 KiB
C#
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();
|
|
}
|
|
} |