using System; using System.Threading.Tasks; using UnityEngine; namespace DDD { // public static class GameEvents // { // public static RequestTimeScaleChangeEvent RequestTimeScaleChangeEvent = new(); // public static RequestShowGlobalMessageEvent RequestShowGlobalMessageEvent = new(); // public static InteractionEvent Interaction = new InteractionEvent(); // } // public static class RestaurantEvents // { // // Some events... // } // public static class VoyageEvents // { // // Some events... // } public class TimeScaleChangeEvent : IEvent { public readonly object Requester; public readonly float NewTimeScale; public TimeScaleChangeEvent(object requester, float newTimeScale) { Requester = requester; NewTimeScale = newTimeScale; } } public class FadeInEvent : IEvent { public readonly float Duration; public readonly TaskCompletionSource CompletionSource; public FadeInEvent(float duration) { Duration = duration; CompletionSource = new TaskCompletionSource(); } public Task WaitAsync() => CompletionSource.Task; } public class FadeOutEvent : IEvent { public readonly float Duration; public readonly TaskCompletionSource CompletionSource; public FadeOutEvent(float duration) { Duration = duration; CompletionSource = new TaskCompletionSource(); } public Task WaitAsync() => CompletionSource.Task; public static InventoryChangedEvent InventoryChangedEvent = new(); public static InteractionEvent Interaction = new(); } public class ShowGlobalMessageEvent : IEvent { public readonly string NewMessageKey; public readonly float ShowDuration; public readonly float FadeDuration; public ShowGlobalMessageEvent(string newMessageKey, float showDuration = 3f, float fadeDuration = 0.3f) { NewMessageKey = newMessageKey; ShowDuration = showDuration; FadeDuration = fadeDuration; } } public class OpenScreenUiEvent : IEvent { public readonly Type UiType; public OpenScreenUiEvent(Type uiType) => UiType = uiType; } public class CloseScreenUiEvent : IEvent { public readonly Type UiType; public CloseScreenUiEvent(Type uiType) => UiType = uiType; } public class OpenPopupUiEvent : IEvent { public readonly Type UiType; public OpenPopupUiEvent(Type uiType) => UiType = uiType; } public class ClosePopupUiEvent : IEvent { public readonly Type UiType; public ClosePopupUiEvent(Type uiType) => UiType = uiType; } public class InteractionEvent : IEvent { public GameObject Causer; public GameObject Target; } public class InventoryChangedEvent : IEvent { } }