Add BeforeRoundStartEvent

This commit is contained in:
Atony committed 2025-08-02 14:24:53 -05:00
1 parent 74741b41a7
commit afd6fbc3b6
7 files changed
+46 -5

No files matched your search

@@ -0,0 +1,21 @@
namespace MiraAPI.Events.Vanilla.Gameplay;
/// <summary>
/// Event invoked on IntroCutscene.OnDestroy and ExileController.WrapUp to determine if it should run the round event or not.
/// </summary>
public class BeforeRoundStartEvent : MiraCancelableEvent
{
/// <summary>
/// Gets a value indicating whether the event was triggered by the IntroCutscene or ExileController.
/// </summary>
public bool TriggeredByIntro { get; }
/// <summary>
/// Initializes a new instance of the <see cref="BeforeRoundStartEvent"/> class.
/// </summary>
/// <param name="triggeredByIntro">Whether the event was triggered by the intro or not.</param>
public BeforeRoundStartEvent(bool triggeredByIntro)
{
TriggeredByIntro = triggeredByIntro;
}
}
@@ -1,7 +1,7 @@
namespace MiraAPI.Events.Vanilla.Gameplay;
/// <summary>
/// Start Round event, invoked on IntroCutscene.OnDestroy and ExileController.WrapUp.
/// Start Round event, invoked on IntroCutscene.OnDestroy and ExileController.WrapUp if the event isn't cancelled.
/// </summary>
public class RoundStartEvent : MiraEvent
{
@@ -9,7 +9,12 @@ internal static class SpawnInMinigamePatch
{
public static void Postfix()
{
var @event = new RoundStartEvent(false);
var @event = new BeforeRoundStartEvent(false);
MiraEventManager.InvokeEvent(@event);
if (@event.IsCancelled) return;
var @event2 = new RoundStartEvent(false);
MiraEventManager.InvokeEvent(@event2);
}
}
@@ -25,7 +25,12 @@ internal static class SubmergedSpawnGamePatch
public static void Postfix()
{
var @event = new RoundStartEvent(false);
var @event = new BeforeRoundStartEvent(false);
MiraEventManager.InvokeEvent(@event);
if (@event.IsCancelled) return;
var @event2 = new RoundStartEvent(false);
MiraEventManager.InvokeEvent(@event2);
}
}
+5
View File
@@ -61,6 +61,11 @@ public static class IntroCutscenePatches
public static void GameBeginPatch(IntroCutscene __instance)
{
MiraEventManager.InvokeEvent(new IntroEndEvent(__instance));
var @event = new BeforeRoundStartEvent(true);
MiraEventManager.InvokeEvent(@event);
if (@event.IsCancelled) return;
MiraEventManager.InvokeEvent(new RoundStartEvent(true));
}
}
+6 -1
View File
@@ -38,8 +38,13 @@ internal static class EjectionPatches
{
public static void Postfix()
{
var @event = new RoundStartEvent(false);
var @event = new BeforeRoundStartEvent(false);
MiraEventManager.InvokeEvent(@event);
if (@event.IsCancelled) return;
var @event2 = new RoundStartEvent(false);
MiraEventManager.InvokeEvent(@event2);
}
}
}
+1 -1
View File
@@ -513,7 +513,7 @@ public static class Extensions
/// <param name="includeImpostors">Whether impostors should be included in the search.</param>
/// <param name="distance">The radius to search within.</param>
/// <param name="ignoreColliders">Whether colliders should be ignored when searching.</param>
/// <param name="includeGhosts">Determines if Ghosts are included</param>
/// <param name="includeGhosts">Determines if Ghosts are included.</param>
/// <param name="predicate">Optional predicate to test if the object is valid.</param>
/// <returns>The closest player if there is one, false otherwise.</returns>
public static PlayerControl? GetClosestPlayer(