GameSystem en Singleton + début timer service + Slow-mode
This commit is contained in:
parent
f37d3ffcd1
commit
4099e2908f
3 changed files with 120 additions and 1 deletions
107
Assets/Scripts/GameSystem.cs
Normal file
107
Assets/Scripts/GameSystem.cs
Normal 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>();
|
||||
}
|
||||
////
|
||||
}
|
11
Assets/Scripts/GameSystem.cs.meta
Normal file
11
Assets/Scripts/GameSystem.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5f18e7df2f912f644a6a6949b25117b6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -66,6 +66,8 @@ public class Tavernkeeper_controller : MonoBehaviour
|
|||
{"left", null},
|
||||
{"right", null}
|
||||
};
|
||||
|
||||
// GameSystem.Instance.startService();
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
|
@ -89,7 +91,6 @@ public class Tavernkeeper_controller : MonoBehaviour
|
|||
animator.SetFloat("Speed", move.magnitude);
|
||||
|
||||
//Actions delay
|
||||
actionTimer -= Time.deltaTime;
|
||||
if(isInteracting)
|
||||
{
|
||||
actionTimer -= Time.deltaTime;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue