GameSystem en Singleton + début timer service + Slow-mode

This commit is contained in:
Antoine H 2020-12-14 16:23:54 +01:00
parent f37d3ffcd1
commit 4099e2908f
3 changed files with 120 additions and 1 deletions

View file

@ -0,0 +1,107 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System; //Exceptions
//Define the global game system of the service. (Singleton)
//TODO : Split gamesystem into subsystem ?
public sealed class GameSystem : MonoBehaviour
{
//Time
bool serviceOpen = false;
float serviceTime = 10.0f;
float serviceTimer = 0.0f;
float slowScale = 0.5f; //Default scale for slow mode
private float fixedDeltaTime;
//Clients
// int nbMaxClients = 2;
// float freqNewClients = 3.0f;
public void startService()
{
serviceTimer=serviceTime;
serviceOpen=true;
}
//Change time scale
//Return wether game time follow real-time (not scaled)
public bool toggleSlowMode(float? newTimeScale=null)
{
if(newTimeScale is null) //Toggle between default values
{
if(Mathf.Approximately(Time.timeScale, 1.0f))
Time.timeScale = slowScale;
else
Time.timeScale = 1.0f;
}
else //Set to specific scale
{
if(newTimeScale<0.0f)
throw new Exception("Trying to set time scale to negative value (rewinding time...) :"+newTimeScale);
Time.timeScale = (float)newTimeScale;
}
// Adjust fixed delta time according to timescale
// The fixed delta time will now be 0.02 frames per real-time second
Time.fixedDeltaTime = this.fixedDeltaTime * Time.timeScale;
//Return wether game time follow real-time (not scaled)
if(Mathf.Approximately(Time.timeScale, 1.0f))
return true;
else
return false;
}
//Awake is called when the script instance is being loaded.
void Awake()
{
// Make a copy of the fixedDeltaTime, it defaults to 0.02f, but it can be changed in the editor
this.fixedDeltaTime = Time.fixedDeltaTime;
}
// Start is called before the first frame update
void Start()
{
startService();
}
// Update is called once per frame
void Update()
{
if(serviceOpen)
{
serviceTimer-= Time.deltaTime;
if (serviceTimer < 0)
serviceOpen = false;
}
//Temporary manual slowmode toggle
if (Input.GetButtonDown("Fire2"))
{
toggleSlowMode();
Debug.Log("Time scale: "+Time.timeScale);
}
// Debug.Log("Service timer : "+(int)serviceTimer);
}
//// Singleton Implementation (https://jlambert.developpez.com/tutoriels/dotnet/implementation-pattern-singleton-csharp/#LIII) ////
private GameSystem()
{
}
public static GameSystem Instance { get { return Nested.instance; } }
private class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}
internal static readonly GameSystem instance = new GameObject("GameSystem").AddComponent<GameSystem>();
}
////
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5f18e7df2f912f644a6a6949b25117b6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -66,6 +66,8 @@ public class Tavernkeeper_controller : MonoBehaviour
{"left", null}, {"left", null},
{"right", null} {"right", null}
}; };
// GameSystem.Instance.startService();
} }
// Update is called once per frame // Update is called once per frame
@ -89,7 +91,6 @@ public class Tavernkeeper_controller : MonoBehaviour
animator.SetFloat("Speed", move.magnitude); animator.SetFloat("Speed", move.magnitude);
//Actions delay //Actions delay
actionTimer -= Time.deltaTime;
if(isInteracting) if(isInteracting)
{ {
actionTimer -= Time.deltaTime; actionTimer -= Time.deltaTime;