public virtual void HandleMove(PlayerState p) { InputHelpers.BasicMove(p); }
void Update() { if (state == GameState.Countdown) { LeaderboardPanel.SetActive(false); playerHUDManager.DisableUI(playerStates); if (!CountdownStarted) { CountdownStarted = true; CountdownAudio.Play(); } remainingCountdownDuration -= Time.deltaTime; ui.countdownNumber.text = Mathf.CeilToInt(remainingCountdownDuration).ToString(); if (remainingCountdownDuration <= 0f) { CountdownStarted = false; state = GameState.Live; ui.animator.SetTrigger("Close"); } } else if (state == GameState.Live) { GameTimer += Time.deltaTime; UpdateGameClock(GameTimer); ProcessNewValidHits(); /* * How do we decide how players should move on a given frame? * * !player.moveStatus.Dashing * player.canMove * minigame.canMove(player) * */ if (Minigame) { if (Minigame.MinigameIsRunning()) { for (var i = 0; i < playerStates.Length; i++) { Minigame.HandleMove(playerStates[i]); Minigame.HandleDash(playerStates[i]); Minigame.HandleRotate(playerStates[i]); Minigame.HandleFire(playerStates[i]); InputHelpers.BasicReload(playerStates[i]); } //prob need to figure out where to put this so it doesnt get processed over and over foreach (var n in Minigame.NPCS) { if (!NPCS.Contains(n)) { NPCS.Add(n); if (n.OnValidHitOccurred == null) { n.OnValidHitOccurred += AddValidHit; } } } } else if (Minigame.MinigameResultsReady()) { //collect the results from the minigame in order to process them and apply prize/penalty to players if (ActiveMinigameResults == null) { ActiveMinigameResults = Minigame.Results; } } else if (Minigame.MinigameShouldDestroy()) { //wanted to ensure that the minigame results were collected / score screen shown before removing Destroy(Minigame.gameObject); } } else { // Temp code for testing if (GameTimer >= 5f && didSpawnMinigame == false && MinigamePrefabs.Length > 0) { Minigame = Instantiate(MinigamePrefabs[0]); Minigame.BeginMinigame(playerStates); didSpawnMinigame = true; } // These are the "default" behaviors when no minigames are present for (var i = 0; i < playerStates.Length; i++) { InputHelpers.BasicMove(playerStates[i]); InputHelpers.BasicDash(playerStates[i]); InputHelpers.BasicRotate(playerStates[i]); InputHelpers.BasicPullTrigger(playerStates[i]); InputHelpers.BasicReleaseTrigger(playerStates[i]); InputHelpers.BasicReload(playerStates[i]); } } // kill players that have fallen off the map for (var i = 0; i < playerStates.Length; i++) { var notDead = !playerStates[i].player.IsDead(); var belowKillHeight = playerStates[i].player.transform.position.y < killHeight; if (notDead && belowKillHeight) { playerStates[i].player.KillByFalling(); StartCoroutine(RespawnAfter(playerStates[i], RespawnTimer)); } } // calculate current top level LeaderboardPanel.SetActive(true); var topLevel = 1; for (var i = 0; i < playerStates.Length; i++) { topLevel = Mathf.Max(topLevel, playerStates[i].weaponIndex + 1); } // find all current leaders var leaders = ""; for (var i = 0; i < playerStates.Length; i++) { leaders += (playerStates[i].weaponIndex + 1) == topLevel ? "P" + (i + 1) + ", " : ""; } LeaderboardLabel.text = "Current Leaders"; GuncountText.text = topLevel + " / " + WeaponPrefabs.Length; leaders = leaders.TrimEnd(' '); leaders = leaders.TrimEnd(','); PlayerNumbers.text = leaders; playerHUDManager.UpdatePlayerHUDs(playerStates, WeaponPrefabs, shakeable.shakyCamera, screenSpaceUICanvas.transform as RectTransform, PlayerUIArea.transform as RectTransform); } else if (state == GameState.Victory) { playerHUDManager.DisableUI(playerStates); LeaderboardPanel.SetActive(false); for (var i = 0; i < playerStates.Length; i++) { if (playerStates[i].playerController.GetButtonDown("Fire")) { SceneManager.LoadScene(SceneManager.GetActiveScene().name); } } } // always push timescale back towards full-speed Time.timeScale += (1 - Time.timeScale) * .1f * Time.timeScale; }