Added Timer

New version featuring a timer
This commit is contained in:
Gerard Gascón 2021-06-11 19:34:49 +02:00 committed by GitHub
parent f7c4067db4
commit 750d7f6b88
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 186 additions and 23 deletions

View file

@ -1,7 +1,7 @@
using UnityEngine;
using UnityEngine.Audio;
[CreateAssetMenu(fileName = "Sounds", menuName = "Tools/Sounds", order = 0)]
[CreateAssetMenu(fileName = "Sounds", menuName = "Simple Tools/Sounds", order = 11)]
public class Sounds : ScriptableObject{
[Tooltip("The music mixer.")]

View file

@ -1,6 +1,6 @@
using UnityEngine;
[CreateAssetMenu(fileName = "New Character", menuName = "Tools/Character", order = 0)]
[CreateAssetMenu(fileName = "New Character", menuName = "Simple Tools/Character", order = 11)]
public class Dialogue : ScriptableObject{
public bool displayName;

View file

@ -8,12 +8,17 @@ namespace TMPro{
public class TMP_Animated : TextMeshProUGUI{
float speed;
float speed = 20;
public TextRevealEvent onTextReveal;
public DialogueEvent onDialogueFinish;
public void ReadText(string newText){
void Update(){
/*if(Application.isPlaying)
this.Animate();*/
}
public void ReadText(string newText){
text = string.Empty;
string[] subTexts = newText.Split('<', '>');
@ -27,7 +32,7 @@ namespace TMPro{
}
bool isCustomTag(string tag){
return tag.StartsWith("speed=") || tag.StartsWith("pause=");
return tag.StartsWith("speed=") || tag.StartsWith("pause=") || tag.StartsWith("wave") || tag.StartsWith("rainbow") || tag.StartsWith("shake");
}
text = displayText;
@ -45,7 +50,9 @@ namespace TMPro{
onTextReveal.Invoke(subTexts[subCounter][visibleCounter]);
visibleCounter++;
maxVisibleCharacters++;
yield return new WaitForSeconds(1f / speed);
//this.Animate();
yield return new WaitForSeconds(text[maxVisibleCharacters - 1] == ' ' ? 0 : (1f / speed));
}
visibleCounter = 0;
}

View file

@ -1,4 +1,3 @@
#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@ -14,13 +13,13 @@ using System;
public class ToolsEditor{
[MenuItem("GameObject/Tools/AudioManager", false, 10)]
[MenuItem("GameObject/Simple Tools/AudioManager", false, 10)]
static void CreateAudioManager(){
GameObject audioManager = new GameObject("AudioManager");
audioManager.AddComponent<AudioManager>();
}
[MenuItem("GameObject/Tools/Dialogue System", false, 10)]
[MenuItem("GameObject/Simple Tools/Dialogue System", false, 10)]
static void CreateDialogueSystem(){
GameObject dialogueCanvas = new GameObject("DialogueCanvas");
dialogueCanvas.AddComponent<RectTransform>();
@ -51,7 +50,7 @@ public class ToolsEditor{
dialogueSystem.nameField = name;
}
[MenuItem("GameObject/Tools/Camera Trigger/2D", false, 10)]
[MenuItem("GameObject/Simple Tools/Camera Trigger/2D", false, 10)]
static void CreateCameraTrigger2D(){
GameObject cameraTrigger = new GameObject("CameraTrigger2D");
cameraTrigger.AddComponent<BoxCollider2D>();
@ -64,7 +63,7 @@ public class ToolsEditor{
cam.m_Lens.Orthographic = true;
}
[MenuItem("GameObject/Tools/Camera Trigger/3D", false, 10)]
[MenuItem("GameObject/Simple Tools/Camera Trigger/3D", false, 10)]
static void CreateCameraTrigger3D(){
GameObject cameraTrigger = new GameObject("CameraTrigger3D");
cameraTrigger.AddComponent<BoxCollider>();
@ -78,7 +77,7 @@ public class ToolsEditor{
}
#if CINEMACHINE_271_OR_NEWER
[MenuItem("GameObject/Tools/ScreenShake Camera/2D", false, 10)]
[MenuItem("GameObject/Simple Tools/ScreenShake Camera/2D", false, 10)]
static void CreateScreenShakeCamera2d(){
GameObject screenShakeCamera = new GameObject("ScreenShakeCamera");
CinemachineVirtualCamera vCam = screenShakeCamera.AddComponent<CinemachineVirtualCamera>();
@ -92,7 +91,7 @@ public class ToolsEditor{
shake.m_AmplitudeGain = 0f;
shake.m_FrequencyGain = 1f;
}
[MenuItem("GameObject/Tools/ScreenShake Camera/3D", false, 10)]
[MenuItem("GameObject/Simple Tools/ScreenShake Camera/3D", false, 10)]
static void CreateScreenShakeCamera3d(){
GameObject screenShakeCamera = new GameObject("ScreenShakeCamera");
CinemachineVirtualCamera vCam = screenShakeCamera.AddComponent<CinemachineVirtualCamera>();
@ -107,7 +106,7 @@ public class ToolsEditor{
shake.m_FrequencyGain = 1f;
}
#else
[MenuItem("GameObject/Tools/ScreenShake Camera", false, 10)]
[MenuItem("GameObject/Simple Tools/ScreenShake Camera", false, 10)]
static void CreateScreenShakeCamera2d(){
GameObject screenShakeCamera = new GameObject("ScreenShakeCamera");
CinemachineVirtualCamera vCam = screenShakeCamera.AddComponent<CinemachineVirtualCamera>();
@ -122,7 +121,8 @@ public class ToolsEditor{
}
#endif
[MenuItem("Assets/Create/Tools/Create Loading Scene")]
[MenuItem("Assets/Create/Simple Tools/Create Loading Scene")]
[MenuItem("Simple Tools/Create Loading Scene")]
static void CreateLoadingScene(){
EditorSceneManager.SaveOpenScenes();
@ -163,7 +163,7 @@ public class ToolsEditor{
progressBarTransform.anchoredPosition = Vector2.zero;
progressBarTransform.sizeDelta = new Vector2Int(900, 20);
progressBar.sprite = (Sprite)AssetDatabase.LoadAssetAtPath("Packages/com.geri.simpletools/Tools/Editor/Square.png", typeof(Sprite));
progressBar.sprite = (Sprite)AssetDatabase.LoadAssetAtPath("Packages/com.geri.simpletools/Simple Tools/Editor/Square.png", typeof(Sprite));
progressBar.type = Image.Type.Filled;
progressBar.fillMethod = Image.FillMethod.Horizontal;
progressBar.fillOrigin = (int)Image.OriginHorizontal.Left;
@ -172,7 +172,8 @@ public class ToolsEditor{
}
#if UNITY_2019_3_OR_NEWER
[MenuItem("Assets/Create/Tools/Create Menu Scene")]
[MenuItem("Assets/Create/Simple Tools/Create Menu Scene")]
[MenuItem("Simple Tools/Create Menu Scene")]
static void CreateMenuScene(){
EditorSceneManager.SaveOpenScenes();
@ -532,4 +533,3 @@ public class ToolsEditor{
#endregion
#endif
}
#endif

View file

@ -1,7 +1,7 @@
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "New Pool", menuName = "Tools/Pool", order = 0)]
[CreateAssetMenu(fileName = "New Pool", menuName = "Simple Tools/Pool", order = 11)]
public class Pool : ScriptableObject{
public List<PoolPrefab> pools;

8
Tools/Timer.meta Normal file
View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b904c9938b1a3df4e83b1103e3085400
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

79
Tools/Timer/Timer.cs Normal file
View file

@ -0,0 +1,79 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using TMPro;
namespace SimpleTools.Timer{
public class Timer : MonoBehaviour{
float elapsedTime;
public float ElapsedTime { get { return elapsedTime; } }
bool isPaused;
public bool IsPaused { get { return isPaused; } }
TimeSpan timePlaying;
public TimeSpan TimePlaying { get { return timePlaying; } }
TMP_Text timer;
public TMP_Text TimerText { get { return timer; } }
TimerType timerType;
public TimerType TimerType { get { return timerType; } }
public void Setup(float elapsedTime, bool isPaused, TimeSpan timePlaying, TMP_Text timer, TimerType timerType, string text){
this.elapsedTime = elapsedTime;
this.isPaused = isPaused;
this.timePlaying = timePlaying;
this.timer = timer;
this.timerType = timerType;
timer.text = text;
}
IEnumerator UpdateTimer(){
while (!isPaused){
if(timerType == TimerType.Clock){
timer.text = DateTime.Now.ToString("HH:mm:ss");
}else{
switch (timerType){
case TimerType.Countdown:
elapsedTime -= Time.deltaTime;
if(elapsedTime < 0f){
elapsedTime = 0f;
isPaused = true;
}
break;
case TimerType.Stopwatch:
elapsedTime += Time.deltaTime;
break;
}
timePlaying = TimeSpan.FromSeconds(elapsedTime);
timer.text = timePlaying.ToString("m':'ss'.'ff");
}
yield return null;
}
}
public void Play(){
isPaused = false;
StartCoroutine(UpdateTimer());
}
public void Stop(){
isPaused = true;
}
public void ResetTimer(){
isPaused = true;
elapsedTime = 0f;
timePlaying = TimeSpan.FromSeconds(elapsedTime);
timer.text = timePlaying.ToString("m':'ss'.'ff");
}
public void Restart(){
isPaused = false;
elapsedTime = 0f;
timePlaying = TimeSpan.FromSeconds(elapsedTime);
timer.text = timePlaying.ToString("m':'ss'.'ff");
StopAllCoroutines();
StartCoroutine(UpdateTimer());
}
}
}

11
Tools/Timer/Timer.cs.meta Normal file
View file

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

7
Tools/Timer/TimerType.cs Normal file
View file

@ -0,0 +1,7 @@
namespace SimpleTools.Timer{
public enum TimerType{
Countdown,
Stopwatch,
Clock
}
}

View file

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

View file

@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using TMPro;
namespace SimpleTools.Timer{
public static class TimerUtility {
public static Timer SetupTimer(this TMP_Text container, TimerType timerType, float countdownTime = 60f){
Timer t = container.gameObject.AddComponent<Timer>();
float elapsedTime = 0f;
string text = string.Empty;
TimeSpan timePlaying = TimeSpan.Zero;
switch (timerType){
case TimerType.Countdown:
elapsedTime = countdownTime;
timePlaying = TimeSpan.FromSeconds(elapsedTime);
text = timePlaying.ToString("m':'ss'.'ff");
break;
case TimerType.Clock:
text = DateTime.Now.ToString("HH:mm:ss");
break;
}
t.Setup(elapsedTime, true, timePlaying, container, timerType, text);
return t;
}
}
}

View file

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