SHADE_Y3/Assets/Scripts/Gameplay/SC_GameManager.cs

259 lines
6.4 KiB
C#
Raw Normal View History

using SHADE;
2023-02-03 00:40:22 +08:00
using SHADE_Scripting.Audio;
2023-03-01 17:36:02 +08:00
using SHADE_Scripting.UI;
using System;
using System.Collections.Generic;
2023-03-21 14:40:30 +08:00
using System.Diagnostics.Contracts;
public class GameManager : Script
{
public enum GameState
{
START,
2023-04-01 00:35:16 +08:00
OVER
}
public uint winScene = 92009475;
[NonSerialized]
public GameState currGameState;
[NonSerialized]
public int totalItemCount;
[NonSerialized]
public int Score;
[NonSerialized]
public float timer;
2022-11-23 20:26:53 +08:00
public GameObject scoreText;
public GameObject scoreTextBG;
2022-11-23 20:26:53 +08:00
public GameObject timeText;
2023-03-21 14:40:30 +08:00
public GameObject minusTimerText;
2022-11-23 20:26:53 +08:00
2023-04-01 00:35:16 +08:00
public GameObject Results;
public int MaxComboAccquired { get; set; }
public int finalTime { get; set; }
public int finalScore { get; set; }
//mulitpler info
public GameObject multiplierText;
public float maxMultiplierDuration = 5.0f;
public float currMultiplierDuration { get; set; }
public int maxMultiplierCombo = 10;
public bool itemScored {get;set;}
public int currMultiplierCombo { get; set;}
public float multiplierFont = 60.0f;
public static GameManager Instance { get; private set; }
public bool GamePause { get; set; }
2023-03-02 17:33:02 +08:00
public bool stealFoodPopUpDone { get; set; }
public bool PreviewLevelDone { get; set; }
2022-11-23 20:26:53 +08:00
public bool itemShatter { get; set; }
2023-02-04 01:44:00 +08:00
2023-03-01 17:36:02 +08:00
//For scene transitions
2023-04-01 00:35:16 +08:00
private bool waitForTransition;
2023-03-01 17:36:02 +08:00
2023-03-26 13:27:42 +08:00
private bool playSpeedUp = false;
2023-02-04 01:44:00 +08:00
protected override void awake()
{
if (Instance != null && Instance != this)
RemoveScript<GameManager>();
else
Instance = this;
totalItemCount = 0;
Score = 0;
currGameState = GameState.START;
itemScored = false;
2023-04-01 00:51:15 +08:00
currMultiplierCombo = 0;
currMultiplierDuration = 0;
itemShatter = false;
GamePause = false;
2023-03-02 17:33:02 +08:00
stealFoodPopUpDone = false;
PreviewLevelDone = false;
2023-02-04 00:23:05 +08:00
var winAudio = Audio.CreateAudioClip("event:/Music/stingers/game_win");
winAudio.DestroyOnSceneExit = false;
AudioHandler.audioClipHandlers["BGMWin"] = winAudio;
var loseAudio = Audio.CreateAudioClip("event:/Music/stingers/game_lose");
loseAudio.DestroyOnSceneExit = false;
AudioHandler.audioClipHandlers["BGMLose"] = loseAudio;
2023-03-01 17:36:02 +08:00
2023-04-01 00:35:16 +08:00
waitForTransition = false;
2023-03-02 00:02:18 +08:00
if (scoreText)
2023-03-04 03:17:20 +08:00
scoreText.GetComponent<TextRenderable>().Text = $"{Score}";
2023-03-02 00:02:18 +08:00
if (timeText)
2023-03-04 03:17:20 +08:00
timeText.GetComponent<TextRenderable>().Text = $"{timer.ToString("0")}";
Input.SetMouseCentering(true);
Application.IsCursorVisible = false;
Application.FixDeltaTime = Time.DefaultFixDeltaTime;
2023-03-23 18:20:42 +08:00
AudioHandler.audioClipHandlers["SFXItemScore"] = Audio.CreateAudioClip("event:/Music/stingers/item_scored");
2023-03-25 02:38:56 +08:00
AudioHandler.audioClipHandlers["RaccoonScored"] = Audio.CreateAudioClip("event:/Raccoon/raccoon_scored");
2023-03-26 13:27:42 +08:00
Audio.SetParameterWithLabel("PlaybackSpeed", "Normal");
}
protected override void start()
{
AudioHandler.audioClipHandlers["BGMAdaptive"] = Audio.CreateAudioClip("event:/Music/bgm_adaptive_new");
AudioHandler.audioClipHandlers["BGMAdaptive"].Play();
Audio.SetParameterWithLabel("PlayerDetection", "Undetected");
AudioHandler.audioClipHandlers["KitchenAmbience"] = Audio.CreateAudioClip("event:/Ambience/roomtone_kitchen");
AudioHandler.audioClipHandlers["KitchenAmbience"].Play();
2023-03-05 15:35:57 +08:00
GamePause = false;
}
protected override void update()
{
2023-03-02 17:33:02 +08:00
if (GamePause || !stealFoodPopUpDone)
{
return;
}
Cheat();
2022-11-23 20:26:53 +08:00
if (currGameState == GameState.START)
2023-04-01 00:35:16 +08:00
{
timer -= Time.DeltaTimeF;
2023-03-26 13:27:42 +08:00
if (timer < 30.0f && !playSpeedUp)
{
Audio.SetParameterWithLabel("PlaybackSpeed", "ToTransition");
playSpeedUp = true;
}
2023-04-01 00:35:16 +08:00
if (scoreText)
2023-03-02 09:55:41 +08:00
scoreText.GetComponent<TextRenderable>().Text = $"{Score}";
2023-04-01 00:35:16 +08:00
if (timeText)
2023-03-31 14:50:25 +08:00
timeText.GetComponent<TextRenderable>().Text = $"{timer.ToString("0")}";
2022-11-23 20:26:53 +08:00
if (itemScored)
{
currMultiplierDuration += Time.DeltaTimeF;
if (currMultiplierDuration >= maxMultiplierDuration)
2023-04-01 00:35:16 +08:00
{
itemScored = false;
2023-04-01 00:51:15 +08:00
currMultiplierCombo = 0;
currMultiplierDuration = 0;
}
}
2023-04-01 00:35:16 +08:00
if (timer <= 0 || (totalItemCount <= 0 && !itemShatter))
{
2023-03-01 17:36:02 +08:00
AudioHandler.StopAllSounds(false);
2023-04-01 00:35:16 +08:00
if (timer <= 0)
AudioHandler.audioClipHandlers["BGMLose"].Play();
else if (totalItemCount <= 0)
AudioHandler.audioClipHandlers["BGMWin"].Play();
currGameState = GameState.OVER;
finalTime = (int)timer;
Results.SetActive(true);
Input.SetMouseCentering(false);
Application.IsCursorVisible = true;
GamePause = true;
Application.FixDeltaTime = 0;
AnimationSystem.TimeScale = 0;
2022-11-23 20:26:53 +08:00
}
}
2023-04-01 00:35:16 +08:00
if (SceneFadeInOut.Instance && SceneFadeInOut.Instance.FadeInFinished() && waitForTransition)
SceneManager.ChangeScene(winScene);
}
2023-03-21 14:40:30 +08:00
public void RacoonCaught()
2023-04-01 00:35:16 +08:00
{
timer -= 10.0f;
if (minusTimerText != GameObject.Null)
2023-03-21 14:40:30 +08:00
{
2023-04-01 00:35:16 +08:00
MinusTimerText text = minusTimerText.GetScript<MinusTimerText>();
if (text)
{
text.Reset();
}
2023-03-21 14:40:30 +08:00
}
2023-04-01 00:35:16 +08:00
}
2023-03-21 14:40:30 +08:00
private void Cheat()
{
if (Input.GetKeyUp(Input.KeyCode.F1))
{
2023-04-01 00:35:16 +08:00
currGameState = GameState.OVER;
AudioHandler.audioClipHandlers["BGMWin"].Play();
AudioHandler.StopAllSounds(false);
2023-04-01 00:35:16 +08:00
waitForTransition = true;
if (SceneFadeInOut.Instance != null)
SceneFadeInOut.Instance.CallFadeIn();
}
if (Input.GetKeyUp(Input.KeyCode.G))
{
ItemScored();
Score += 500;
}
}
protected override void onDestroy()
{
if (Instance == this)
Instance = null;
}
public void ItemScored()
{
totalItemCount -= 1;
itemScored = true;
currMultiplierDuration = 0;
2023-03-02 09:55:41 +08:00
if (currMultiplierCombo < maxMultiplierCombo)
2023-04-01 00:35:16 +08:00
{
currMultiplierCombo += 1;
2023-04-01 00:35:16 +08:00
if (currMultiplierCombo > MaxComboAccquired)
MaxComboAccquired = currMultiplierCombo;
}
2023-03-02 09:55:41 +08:00
2023-03-23 18:20:42 +08:00
Audio.SetParameter("Multiplier", currMultiplierCombo);
AudioHandler.audioClipHandlers["SFXItemScore"].Play();
2023-03-25 02:38:56 +08:00
AudioHandler.audioClipHandlers["RaccoonScored"].Play();
2023-03-23 18:20:42 +08:00
SingleScaleBounce textBounce = scoreText.GetScript<SingleScaleBounce>();
SingleScaleBounce textBGBounce = scoreTextBG.GetScript<SingleScaleBounce>();
//if (textBounce)
// textBounce.ScaleBounceOnce();
if (textBGBounce)
textBGBounce.ScaleBounceOnce();
MultiplierTextFx fx = multiplierText.GetScript<MultiplierTextFx>();
2023-03-02 09:55:41 +08:00
if (fx)
{
2023-03-04 02:46:56 +08:00
fx.ShowMultiplier(currMultiplierCombo, maxMultiplierDuration);
2023-03-02 09:55:41 +08:00
}
2023-03-04 02:46:56 +08:00
}
}