Пример #1
0
        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());
        }
Пример #2
0
 private void StartMatch()
 {
     UnityMainThreadDispatcher.Instance().Enqueue(() => {
         OnMatchStart?.Invoke();
     });
 }