public static void Begin() { // Don't restart a match if it is still in progress if (InMatch) { return; } if (Stage.Instance == null || PlayerCount > Stage.SupportedPlayerCount) { throw new InvalidOperationException( "Cannot start a match when there are more players participating than supported by the selected stage"); } foreach (var rule in _matchRules) { rule.OnMatchStart(); } // Spawn players int playerCount = PlayerCount; var currentPlayer = 0; for (var i = 0; i < PlayerCount; i++) { if (_selected[i] == null) { continue; } _selected[i].PlayerNumber = i; Transform spawnPoint = Stage.GetSpawnPoint(currentPlayer); Character runtimeCharacter = _selected[i].Spawn(spawnPoint); if (runtimeCharacter == null) { continue; } foreach (IMatchRule rule in _matchRules) { rule.OnSpawn(runtimeCharacter); } OnSpawnCharacter.SafeInvoke(_selected[i]); currentPlayer++; } OnMatchStart.SafeInvoke(); Game.StaticCoroutine(MatchLoop()); }
private void StartMatch() { UnityMainThreadDispatcher.Instance().Enqueue(() => { OnMatchStart?.Invoke(); }); }