Files
Deroc_Virtual_3D/Assets/FPS/Scripts/Game/Shared/Objective.cs
T
Alex38Lyon 878ea46cac update
2025-06-03 12:00:47 +02:00

62 lines
2.1 KiB
C#

using System;
using UnityEngine;
namespace Unity.FPS.Game
{
public abstract class Objective : MonoBehaviour
{
[Tooltip("Name of the objective that will be shown on screen")]
public string Title;
[Tooltip("Short text explaining the objective that will be shown on screen")]
public string Description;
[Tooltip("Whether the objective is required to win or not")]
public bool IsOptional;
[Tooltip("Delay before the objective becomes visible")]
public float DelayVisible;
public bool IsCompleted { get; private set; }
public bool IsBlocking() => !(IsOptional || IsCompleted);
public static event Action<Objective> OnObjectiveCreated;
public static event Action<Objective> OnObjectiveCompleted;
protected virtual void Start()
{
OnObjectiveCreated?.Invoke(this);
DisplayMessageEvent displayMessage = Events.DisplayMessageEvent;
displayMessage.Message = Title;
displayMessage.DelayBeforeDisplay = 0.0f;
EventManager.Broadcast(displayMessage);
}
public void UpdateObjective(string descriptionText, string counterText, string notificationText)
{
ObjectiveUpdateEvent evt = Events.ObjectiveUpdateEvent;
evt.Objective = this;
evt.DescriptionText = descriptionText;
evt.CounterText = counterText;
evt.NotificationText = notificationText;
evt.IsComplete = IsCompleted;
EventManager.Broadcast(evt);
}
public void CompleteObjective(string descriptionText, string counterText, string notificationText)
{
IsCompleted = true;
ObjectiveUpdateEvent evt = Events.ObjectiveUpdateEvent;
evt.Objective = this;
evt.DescriptionText = descriptionText;
evt.CounterText = counterText;
evt.NotificationText = notificationText;
evt.IsComplete = IsCompleted;
EventManager.Broadcast(evt);
OnObjectiveCompleted?.Invoke(this);
}
}
}