public override void OnStartServer() { currentCircle = 0; currentRadius = 0; currentState = BRState.WaitingForPlayers; currentDuration = currentCountdown = waitForPlayersDuration; CurrentCircleHpRateDps = 0; CurrentCountdown = 0; SpawnerMoveCountdown = 0; randomedPattern = patterns[Random.Range(0, patterns.Length)]; isInSpawnableArea = false; }
private void UpdateGameState() { if (!isServer) return; currentCountdown -= Time.deltaTime; var networkGameManager = BaseNetworkGameManager.Singleton; var gameRule = networkGameManager.gameRule == null ? null : networkGameManager.gameRule as BattleRoyaleNetworkGameRule; var characters = networkGameManager.Characters; countAliveCharacters = networkGameManager.CountAliveCharacters(); countAllCharacters = networkGameManager.maxConnections; BRCircle circle; switch (currentState) { case BRState.WaitingForPlayers: // Start game immediately when players are full if (currentCountdown <= 0) { foreach (var character in characters) { if (character == null) continue; SpawningCharacters.Add(character.GetComponent<BRCharacterEntityExtra>()); } spawnerMoveFrom = randomedPattern.spawnerMovement.GetFromPosition(); spawnerMoveTo = randomedPattern.spawnerMovement.GetToPosition(); spawnerMoveDuration = spawnerMoveCountdown = randomedPattern.spawnerMoveDuration; if (gameRule != null) gameRule.AddBots(); currentState = BRState.WaitingForFirstCircle; currentDuration = currentCountdown = waitForFirstCircleDuration; // Spawn powerup and pickup items foreach (var powerUp in powerUps) { if (powerUp.powerUpPrefab == null) continue; for (var i = 0; i < powerUp.amount; ++i) SpawnPowerUp(powerUp.powerUpPrefab.name); } foreach (var pickup in pickups) { if (pickup.pickupPrefab == null) continue; for (var i = 0; i < pickup.amount; ++i) SpawnPickup(pickup.pickupPrefab.name); } } break; case BRState.WaitingForFirstCircle: if (currentCountdown <= 0) { currentCircle = 0; if (TryGetCircle(out circle)) { currentState = BRState.ShrinkDelaying; currentDuration = currentCountdown = circle.shrinkDelay; CurrentCircleHpRateDps = circle.hpRateDps; startShrinkRadius = currentRadius = circle.circleData.radius; startShrinkCenterPosition = currentCenterPosition = circle.circleData.transform.position; nextRadius = circle.circleData.radius; nextCenterPosition = circle.circleData.transform.position; } else { currentState = BRState.LastCircle; currentDuration = currentCountdown = 0; } } break; case BRState.ShrinkDelaying: if (currentCountdown <= 0) { BRCircle nextCircle; if (TryGetCircle(out circle) && TryGetCircle(currentCircle + 1, out nextCircle)) { currentState = BRState.Shrinking; currentShrinkDuration = currentDuration = currentCountdown = circle.shrinkDuration; CurrentCircleHpRateDps = circle.hpRateDps; startShrinkRadius = currentRadius = circle.circleData.radius; startShrinkCenterPosition = currentCenterPosition = circle.circleData.transform.position; nextRadius = nextCircle.circleData.radius; nextCenterPosition = nextCircle.circleData.transform.position; } else { currentState = BRState.LastCircle; currentDuration = currentCountdown = 0; } } break; case BRState.Shrinking: if (currentCountdown <= 0) { ++currentCircle; BRCircle nextCircle; if (TryGetCircle(out circle) && TryGetCircle(currentCircle + 1, out nextCircle)) { currentState = BRState.ShrinkDelaying; currentDuration = currentCountdown = circle.shrinkDelay; CurrentCircleHpRateDps = circle.hpRateDps; } else { currentState = BRState.LastCircle; currentDuration = currentCountdown = 0; } } break; case BRState.LastCircle: currentDuration = currentCountdown = 0; break; } }