spinningcube/Assets/Asset Packs/Ultimate GUI Kit/Script/GameStateManager.cs

127 lines
3.3 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class GameStateManager : MonoBehaviour
{
private static GameStateManager instance;
public static bool ScoringLockout = true;
public static int StartingLives = 3, StartingScore = 0;
private int lives, score;
private int? highScore;
private string username = null;
public static Texture UserTexture;
public static Texture FriendTexture = null;
private string friendName = null;
private string friendID = null;
public static bool IsFullscreen = false;
public bool Immortal;
private static bool immortal;
public static int ToSmash = -1;
public static string FriendID
{
set { Instance.friendID = value; }
get { return Instance.friendID; }
}
public static string FriendName
{
set { Instance.friendName = value; }
get { return Instance.friendName == null ? "Blue Guy" : Instance.friendName; }
}
public static Dictionary<string, Player> leaderboard;
void Start()
{
lives = StartingLives;
score = StartingScore;
immortal = Instance.Immortal;
ScoringLockout = false;
Time.timeScale = 1.0f;
}
public void StartGame()
{
Start();
}
void Awake()
{
DontDestroyOnLoad(this);
}
public static GameStateManager Instance { get { return current(); } }
public static int Score { get { return Instance.score; } }
public static int HighScore { get { return Instance.highScore.HasValue ? Instance.highScore.Value : 0; } set { Instance.highScore = value; }}
public static int LivesRemaining { get { return Instance.lives; } }
public static string Username
{
get { return Instance.username; }
set { Instance.username = value; }
}
delegate GameStateManager InstanceStep();
static InstanceStep init = delegate()
{
GameObject container = new GameObject("GameStateManagerManager");
instance = container.AddComponent<GameStateManager>();
instance.lives = StartingLives;
instance.score = StartingScore;
instance.highScore = null;
current = then;
return instance;
};
static InstanceStep then = delegate() { return instance; };
static InstanceStep current = init;
public static void onFriendDie()
{
if (--Instance.lives == 0)
{
EndGame();
}
}
public static void onFriendSmash()
{
if (!ScoringLockout) ++Instance.score;
}
public static void onEnemySmash(GameObject enemy)
{
// Instance.fatalEnemy = enemy;
}
public static void EndGame()
{
if (immortal) return;
GameObject[] friends = GameObject.FindGameObjectsWithTag("Friend");
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
foreach (GameObject t in friends)
{
Destroy(t);
}
foreach (GameObject t in enemies)
{
Destroy(t);
}
FbDebug.Log("EndGame Instance.highScore = " + Instance.highScore + "\nInstance.score = " + Instance.score);
Instance.highScore = Instance.score;
FbDebug.Log("Player has new high score :" + Instance.score);
Application.LoadLevel("MainMenu");
Time.timeScale = 0.0f;
}
}