68 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|