asset integration 50%
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.Serialization;
|
||||
using TMPro;
|
||||
using Mirror;
|
||||
|
||||
@@ -21,6 +22,8 @@ public class GameManager : NetworkBehaviour
|
||||
void OnGameStartedChanged(bool oldStarted, bool newStarted){
|
||||
if(newStarted){
|
||||
GameCanvas.instance.HideWaitingForOpponentPanel();
|
||||
if (AudioManager.instance != null)
|
||||
AudioManager.instance.SetCrowdNoiseType(CrowdNoiseType.Normal);
|
||||
}else{
|
||||
GameCanvas.instance.ShowWaitingForOpponentPanel();
|
||||
}
|
||||
@@ -31,6 +34,11 @@ public class GameManager : NetworkBehaviour
|
||||
void OnSelectedTeamChanged(Team oldTeam, Team newTeam){
|
||||
Debug.Log($"Selected team changed from {oldTeam} to {newTeam}");
|
||||
OnTeamChanged?.Invoke(newTeam);
|
||||
|
||||
if (!isClient || !gameStarted || oldTeam == newTeam)
|
||||
return;
|
||||
if (AudioManager.instance != null)
|
||||
AudioManager.instance.PlayRefereeWhistle();
|
||||
}
|
||||
public static bool NoPuckSelected {
|
||||
get{
|
||||
@@ -58,6 +66,13 @@ public class GameManager : NetworkBehaviour
|
||||
public TMP_Text blueScoreText;
|
||||
public GameObject gameOverPanel;
|
||||
public GameObject blueWon,redWon;
|
||||
public CanvasGroupUtils blueTimerGroup;
|
||||
[FormerlySerializedAs("timerGroup")] public CanvasGroupUtils redTimerGroup;
|
||||
[Header("Timer Flash Settings")]
|
||||
[Tooltip("Minimum flash speed when timer is at 5 seconds")]
|
||||
public float minFlashSpeed = 10f;
|
||||
[Tooltip("Maximum flash speed when timer is at 0 seconds")]
|
||||
public float maxFlashSpeed = 20f;
|
||||
|
||||
[Header("Misc")]
|
||||
public List<Puck> pucks = new List<Puck>();
|
||||
@@ -251,6 +266,13 @@ public class GameManager : NetworkBehaviour
|
||||
if(!gameStarted){
|
||||
|
||||
NetPlayer[] players = FindObjectsOfType<NetPlayer>();
|
||||
#if UNITY_EDITOR
|
||||
if(Input.GetKeyDown(KeyCode.Space)){
|
||||
gameStarted = true;
|
||||
GameCanvas.instance.HideWaitingForOpponentPanel();
|
||||
Debug.Log("Game started On Server, EDITOR ONLY, DEBUG ONLY");
|
||||
}
|
||||
#endif
|
||||
if (players.Length == 2)
|
||||
{
|
||||
gameStarted = true;
|
||||
@@ -259,6 +281,36 @@ public class GameManager : NetworkBehaviour
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UpdateLocalTurnTimerBeep();
|
||||
UpdateTimerColor();
|
||||
}
|
||||
|
||||
void UpdateLocalTurnTimerBeep()
|
||||
{
|
||||
if (!isClient || NetPlayer.localPlayer == null)
|
||||
return;
|
||||
|
||||
if (!gameStarted || SelectedTeam != NetPlayer.localPlayer.myTeam)
|
||||
{
|
||||
_lastTurnTimerBeepFloor = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_isMoving || turnTimerCounter >= turnTimer)
|
||||
return;
|
||||
|
||||
float remaining = turnTimer - turnTimerCounter;
|
||||
int floorSec = Mathf.FloorToInt(remaining);
|
||||
|
||||
if (floorSec != _lastTurnTimerBeepFloor)
|
||||
{
|
||||
if (_lastTurnTimerBeepFloor >= 0 && floorSec < _lastTurnTimerBeepFloor
|
||||
&& AudioManager.instance != null)
|
||||
AudioManager.instance.PlayTimerBeep();
|
||||
|
||||
_lastTurnTimerBeepFloor = floorSec;
|
||||
}
|
||||
}
|
||||
|
||||
void HandleTurnTimer(){
|
||||
@@ -272,10 +324,82 @@ public class GameManager : NetworkBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
float flashPhase = 0f;
|
||||
float lastUpdateTime = 0f;
|
||||
float lastRemainingTime = 10f;
|
||||
|
||||
int _lastTurnTimerBeepFloor = -1;
|
||||
|
||||
void UpdateTimerColor(){
|
||||
float remainingTime = turnTimer - turnTimerCounter;
|
||||
|
||||
// Detect timer reset: if remainingTime jumped from low to high, reset phase
|
||||
if(remainingTime > lastRemainingTime + 2f){
|
||||
flashPhase = 0f;
|
||||
lastUpdateTime = 0f;
|
||||
}
|
||||
lastRemainingTime = remainingTime;
|
||||
|
||||
CanvasGroupUtils activeTimerGroup = SelectedTeam == Team.Red ? redTimerGroup : blueTimerGroup;
|
||||
CanvasGroupUtils inactiveTimerGroup = SelectedTeam == Team.Red ? blueTimerGroup : redTimerGroup;
|
||||
|
||||
if(inactiveTimerGroup != null){
|
||||
inactiveTimerGroup.overrideColor = Color.white;
|
||||
}
|
||||
|
||||
if(activeTimerGroup == null){
|
||||
if(remainingTime >= 5f || !gameStarted){
|
||||
flashPhase = 0f;
|
||||
lastUpdateTime = 0f;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if(remainingTime < 5f && gameStarted){
|
||||
// Calculate intensity based on how close timer is to 0
|
||||
// Intensity increases from 0 to 1 as timer goes from 5 to 0
|
||||
float intensity = 1f - (remainingTime / 5f);
|
||||
|
||||
// Create flashing effect using sine wave
|
||||
// Flash speed increases as timer approaches 0
|
||||
float flashSpeed = Mathf.Lerp(minFlashSpeed, maxFlashSpeed, intensity);
|
||||
|
||||
// Update phase based on delta time and current flash speed
|
||||
// This ensures smooth flashing that resets with the timer
|
||||
if(lastUpdateTime > 0f){
|
||||
float deltaTime = Time.time - lastUpdateTime;
|
||||
flashPhase += flashSpeed * deltaTime;
|
||||
} else {
|
||||
// First frame in warning zone, initialize phase
|
||||
flashPhase = 0f;
|
||||
}
|
||||
lastUpdateTime = Time.time;
|
||||
|
||||
float flashValue = (Mathf.Sin(flashPhase) + 1f) * 0.5f; // 0 to 1
|
||||
|
||||
// Combine intensity with flash for final red intensity
|
||||
// As timer approaches 0, intensity increases and flash becomes more prominent
|
||||
float finalRedIntensity = intensity * (0.3f + flashValue * 0.7f); // Range: intensity*0.3 to intensity*1
|
||||
|
||||
// Lerp between white and red based on final intensity, keeping alpha at 1
|
||||
Color white = Color.white;
|
||||
Color red = Color.red;
|
||||
activeTimerGroup.overrideColor = Color.Lerp(white, red, finalRedIntensity);
|
||||
}else{
|
||||
// Reset phase when timer is above 5 seconds or game hasn't started
|
||||
flashPhase = 0f;
|
||||
lastUpdateTime = 0f;
|
||||
activeTimerGroup.overrideColor = Color.white;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void OnGoal(Team team){
|
||||
if(!isServer){
|
||||
Debug.LogWarning("OnGoal called on client, skipping");
|
||||
return;}
|
||||
|
||||
RpcPlayGoalScoredSfx();
|
||||
|
||||
freezeInput=true;
|
||||
|
||||
@@ -311,6 +435,13 @@ public class GameManager : NetworkBehaviour
|
||||
hitCounter = 0;
|
||||
}
|
||||
|
||||
[ClientRpc]
|
||||
void RpcPlayGoalScoredSfx()
|
||||
{
|
||||
if (AudioManager.instance != null)
|
||||
AudioManager.instance.PlayGoalScoredSfxSequence();
|
||||
}
|
||||
|
||||
[ClientRpc]
|
||||
void RpcGameOver(Team team){
|
||||
gameOver(team);
|
||||
|
||||
Reference in New Issue
Block a user