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},
|
{"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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue