243 lines
5.7 KiB
C#
243 lines
5.7 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
public class timeBullet : MonoBehaviour
|
|
{
|
|
[Header ("Main Settings")]
|
|
[Space]
|
|
|
|
public bool timeBulletEnabled;
|
|
public float timeBulletTimeSpeed = 0.1f;
|
|
public bool restoreAudioPitch;
|
|
|
|
[Space]
|
|
[Header ("Input Settings")]
|
|
[Space]
|
|
|
|
public bool timeBulletByInputEnabled = true;
|
|
|
|
[Space]
|
|
[Header ("Debug")]
|
|
[Space]
|
|
|
|
public bool showDebugPrint;
|
|
|
|
public float timeBulletTime = 1;
|
|
public bool timeBulletActivated;
|
|
public bool previouslyActivated;
|
|
|
|
|
|
AudioSource [] audios;
|
|
Coroutine timeCoroutine;
|
|
|
|
Coroutine timeBulletXSecondsCoroutine;
|
|
|
|
float customTimeBulletDuration;
|
|
|
|
float originalTimeBulletTimeSpeed;
|
|
|
|
|
|
void Start ()
|
|
{
|
|
originalTimeBulletTimeSpeed = timeBulletTimeSpeed;
|
|
}
|
|
|
|
public void activateTime ()
|
|
{
|
|
//check that the player is not using a device, the game is not paused and that this feature is enabled
|
|
if (Time.deltaTime != 0 && timeBulletEnabled) {
|
|
timeBulletActivated = !timeBulletActivated;
|
|
|
|
if (timeBulletActivated) {
|
|
timeBulletTime = timeBulletTimeSpeed;
|
|
} else {
|
|
timeBulletTime = 1;
|
|
|
|
changeAudioPitch ();
|
|
}
|
|
|
|
updateTimeScaleValue ();
|
|
}
|
|
}
|
|
|
|
public void updateTimeBulletTime (float newValue)
|
|
{
|
|
timeBulletTime = newValue;
|
|
}
|
|
|
|
public void updateTimeScaleValue ()
|
|
{
|
|
Time.timeScale = timeBulletTime;
|
|
Time.fixedDeltaTime = timeBulletTime * 0.02f;
|
|
}
|
|
|
|
public void disableTimeBullet ()
|
|
{
|
|
if (timeBulletActivated) {
|
|
activateTime ();
|
|
|
|
previouslyActivated = true;
|
|
}
|
|
}
|
|
|
|
public void disableTimeBulletTotally ()
|
|
{
|
|
if (timeBulletActivated) {
|
|
activateTime ();
|
|
}
|
|
|
|
previouslyActivated = false;
|
|
}
|
|
|
|
public void reActivateTime ()
|
|
{
|
|
if (previouslyActivated) {
|
|
stopReactivateTime ();
|
|
|
|
timeCoroutine = StartCoroutine (reActivateTimeCoroutine ());
|
|
|
|
previouslyActivated = false;
|
|
}
|
|
}
|
|
|
|
void stopReactivateTime ()
|
|
{
|
|
if (timeCoroutine != null) {
|
|
StopCoroutine (timeCoroutine);
|
|
}
|
|
}
|
|
|
|
IEnumerator reActivateTimeCoroutine ()
|
|
{
|
|
WaitForSeconds delay = new WaitForSeconds (0.001f);
|
|
|
|
yield return delay;
|
|
|
|
activateTime ();
|
|
}
|
|
|
|
public void changeAudioPitch ()
|
|
{
|
|
if (restoreAudioPitch) {
|
|
audios = FindObjectsOfType (typeof (AudioSource)) as AudioSource [];
|
|
|
|
for (int i = 0; i < audios.Length; i++) {
|
|
audios [i].pitch = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void activateTimeBulletXSeconds (float timeBulletDuration, float timeScale)
|
|
{
|
|
if (timeBulletXSecondsCoroutine != null) {
|
|
StopCoroutine (timeBulletXSecondsCoroutine);
|
|
}
|
|
|
|
timeBulletXSecondsCoroutine = StartCoroutine (activateTimeBulletXSecondsCoroutine (timeBulletDuration, timeScale));
|
|
}
|
|
|
|
IEnumerator activateTimeBulletXSecondsCoroutine (float timeBulletDuration, float timeScale)
|
|
{
|
|
setBulletTimeState (true, timeScale);
|
|
|
|
WaitForSeconds delay = new WaitForSeconds (timeBulletDuration * timeScale);
|
|
|
|
yield return delay;
|
|
|
|
setBulletTimeState (false, 1);
|
|
}
|
|
|
|
public void setCustomTimeBulletDuration (float timeScale)
|
|
{
|
|
customTimeBulletDuration = timeScale;
|
|
}
|
|
|
|
public void activateTimeBulletXSeconds (float timeBulletDuration)
|
|
{
|
|
if (timeBulletXSecondsCoroutine != null) {
|
|
StopCoroutine (timeBulletXSecondsCoroutine);
|
|
}
|
|
|
|
timeBulletXSecondsCoroutine = StartCoroutine (activateTimeBulletXSecondsCoroutine (timeBulletDuration));
|
|
}
|
|
|
|
IEnumerator activateTimeBulletXSecondsCoroutine (float timeScale)
|
|
{
|
|
setBulletTimeState (true, timeScale);
|
|
|
|
yield return new WaitForSecondsRealtime (customTimeBulletDuration);
|
|
|
|
setBulletTimeState (false, 1);
|
|
}
|
|
|
|
|
|
public void setBulletTimeState (bool state, float timeScale)
|
|
{
|
|
//check that the player is not using a device, the game is not paused and that this feature is enabled
|
|
if (Time.deltaTime != 0) {
|
|
setTimeValues (state, timeScale);
|
|
}
|
|
}
|
|
|
|
public void setNewTimeBulletTimeSpeedValue (float newValue)
|
|
{
|
|
timeBulletTimeSpeed = newValue;
|
|
}
|
|
|
|
public void setOriginalTimeBulletTimeSpeed ()
|
|
{
|
|
setNewTimeBulletTimeSpeedValue (originalTimeBulletTimeSpeed);
|
|
}
|
|
|
|
public void setTimeValues (bool state, float timeScale)
|
|
{
|
|
if (timeBulletEnabled) {
|
|
stopReactivateTime ();
|
|
|
|
timeBulletActivated = state;
|
|
|
|
timeBulletTime = timeScale;
|
|
|
|
updateTimeScaleValue ();
|
|
|
|
changeAudioPitch ();
|
|
|
|
if (showDebugPrint) {
|
|
print ("setTimeValues " + state + " " + timeScale);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void inputActivateBulletTime ()
|
|
{
|
|
if (timeBulletEnabled && timeBulletByInputEnabled) {
|
|
activateTime ();
|
|
}
|
|
}
|
|
|
|
public void setTimeBulletByInputEnabledState (bool state)
|
|
{
|
|
timeBulletByInputEnabled = state;
|
|
}
|
|
|
|
public bool isTimeBulletActivated ()
|
|
{
|
|
return timeBulletActivated;
|
|
}
|
|
|
|
//EDITOR FUNCTIONS
|
|
public void setTimeBulletByInputEnabledStateFromEditor (bool state)
|
|
{
|
|
setTimeBulletByInputEnabledState (state);
|
|
|
|
updateComponent ();
|
|
}
|
|
|
|
void updateComponent ()
|
|
{
|
|
GKC_Utils.updateComponent (this);
|
|
|
|
GKC_Utils.updateDirtyScene ("Update Time Bullet System", gameObject);
|
|
}
|
|
} |