using UnityEngine;
using UnityEngine.UI;
using TMPro;
///
/// Handles mouse hover tooltips for event markers
/// Shows event information when hovering over red event markers
///
public class EventMarkerTooltip : MonoBehaviour
{
[Header("Tooltip Settings")]
[SerializeField] private GameObject tooltipPrefab;
[SerializeField] private Canvas tooltipCanvas;
[SerializeField] private float showDelay = 0.5f;
[SerializeField] private Vector2 tooltipOffset = new Vector2(10f, 10f);
// References
private TravelEvent associatedEvent;
private GameObject tooltipInstance;
private Camera mainCamera;
private bool isHovering = false;
private float hoverStartTime;
// Static tooltip management (only one tooltip at a time)
private static EventMarkerTooltip currentTooltipShowing;
void Start()
{
mainCamera = Camera.main;
if (mainCamera == null)
mainCamera = FindFirstObjectByType();
// Find or create tooltip canvas
SetupTooltipCanvas();
}
void Update()
{
// Handle mouse hover detection
if (isHovering && tooltipInstance == null && Time.time - hoverStartTime >= showDelay)
{
ShowTooltip();
}
// Update tooltip position if showing
if (tooltipInstance != null && isHovering)
{
UpdateTooltipPosition();
}
}
///
/// Initialize this tooltip with event data
///
/// The event this marker represents
public void Initialize(TravelEvent travelEvent)
{
associatedEvent = travelEvent;
// Add collider for mouse detection if not present
if (GetComponent() == null)
{
var collider = gameObject.AddComponent();
collider.radius = 1.5f; // Larger area for easier hovering when zoomed out
collider.isTrigger = true;
}
}
void OnMouseEnter()
{
if (associatedEvent == null) return;
isHovering = true;
hoverStartTime = Time.time;
// Hide any other tooltips
if (currentTooltipShowing != null && currentTooltipShowing != this)
{
currentTooltipShowing.HideTooltip();
}
}
void OnMouseExit()
{
isHovering = false;
HideTooltip();
}
void OnDestroy()
{
HideTooltip();
}
private void SetupTooltipCanvas()
{
if (tooltipCanvas == null)
{
// Find existing UI canvas or create one
tooltipCanvas = FindFirstObjectByType