RobotFactoryIncrementalGame/Assets/Scripts/FactoryInfo.cs

68 lines
2.0 KiB
C#

using UnityEngine;
using UnityEngine.UIElements;
public static class Collider2DHelper
{
public static Vector2 TopCenter(this Collider2D collider)
{
Vector2 center = collider.bounds.center;
Vector2 extents = collider.bounds.extents; // half-size
return new Vector2(center.x, center.y + extents.y);
}
}
[RequireComponent(typeof(Collider2D))]
[RequireComponent(typeof(ResourceSource))]
[RequireComponent(typeof(UIDocument))]
[RequireComponent(typeof(ResourceGenerator))]
public class FactoryInfo : MonoBehaviour
{
[SerializeField()]
private new Camera camera;
[SerializeField]
private string title;
private new Collider2D collider;
private ResourceSource source;
private ResourceGenerator generator;
private UIDocument uiDocument;
private VisualElement rootElement;
private VisualElement panelElement;
private Label titleLabel;
private ProgressBar progressBar;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
collider = GetComponent<Collider2D>();
source = GetComponent<ResourceSource>();
generator = GetComponent<ResourceGenerator>();
uiDocument = GetComponent<UIDocument>();
rootElement = uiDocument.rootVisualElement;
panelElement = rootElement.Q<VisualElement>("Panel");
titleLabel = rootElement.Q<Label>("Title");
progressBar = rootElement.Q<ProgressBar>("Progress");
}
[ExecuteInEditMode]
void Update()
{
if (panelElement != null)
{
Vector3 screenPos = camera.WorldToScreenPoint(collider.TopCenter());
panelElement.style.left = screenPos.x;
panelElement.style.top = Screen.height - screenPos.y;
}
else
Debug.Log("No panel");
titleLabel.text = title;
progressBar.title = source?.Resource.Name;
progressBar.value = generator.Progress * 100;
}
}