Compare commits
12 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
672856770f | ||
![]() |
8857a11038 | ||
![]() |
09973676e1 | ||
![]() |
629841b912 | ||
![]() |
c6fe332009 | ||
![]() |
ff9831ed0b | ||
![]() |
10cccc9b70 | ||
![]() |
1fde00e811 | ||
![]() |
5dc6b69d49 | ||
![]() |
0837786d01 | ||
![]() |
5575d911c8 | ||
![]() |
1df7a33ab0 |
10 changed files with 279 additions and 23 deletions
33
README.md
33
README.md
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
This package contains simple tools to use in your project.
|
This package contains simple tools to use in your project.
|
||||||
|
|
||||||
This package will be updated once I find another useful tool or someone suggest me one.
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **AudioManager** with Play, Pause and most of the other basic things, as well as some effects like FadeIn or FadeOut.
|
- **AudioManager** with Play, Pause and most of the other basic things, as well as some effects like FadeIn or FadeOut.
|
||||||
|
@ -12,7 +10,8 @@ This package will be updated once I find another useful tool or someone suggest
|
||||||
- Basic menu with **music and SFX sliders** as well as **resolution and quality dropdowns.**
|
- Basic menu with **music and SFX sliders** as well as **resolution and quality dropdowns.**
|
||||||
- An **object pooler** with the ability to create pools with an undetermined size.
|
- An **object pooler** with the ability to create pools with an undetermined size.
|
||||||
- A basic **scene manager** with a loading screen with progress bar.
|
- A basic **scene manager** with a loading screen with progress bar.
|
||||||
- A simple **timer** that is displayed inside a TextMeshPro object.
|
- A simple **timer** that allows you to easily create clocks, countdowns and stopwatches with TextMeshPro
|
||||||
|
- An **auto-save** feature to reduce the chances of loosing data on crashes.
|
||||||
|
|
||||||
All of that comes with some editor menu items for creating all of that as fast as possible.
|
All of that comes with some editor menu items for creating all of that as fast as possible.
|
||||||
|
|
||||||
|
@ -34,7 +33,7 @@ Download latest package from the Release section Import SimpleTools.unitypackage
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### AudioManager
|
### **AudioManager**
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using SimpleTools.AudioManager;
|
using SimpleTools.AudioManager;
|
||||||
|
@ -43,6 +42,7 @@ AudioManager.instance.Play("Name"); //Plays the sound with that name
|
||||||
AudioManager.instance.Play("Name", 1f); //Starts playing the sound "Name" in 1 second
|
AudioManager.instance.Play("Name", 1f); //Starts playing the sound "Name" in 1 second
|
||||||
AudioManager.instance.PlayOneShot("Name"); //Plays one shot of that sound (Useful for repeated sounds)
|
AudioManager.instance.PlayOneShot("Name"); //Plays one shot of that sound (Useful for repeated sounds)
|
||||||
AudioManager.instance.PlayWithIntro("Intro", "Loop"); //Plays the intro and then the loop
|
AudioManager.instance.PlayWithIntro("Intro", "Loop"); //Plays the intro and then the loop
|
||||||
|
AudioManager.instance.PlayRandomSound("Name1", "Name2", "Name3"); // Plays one shot of a random sound
|
||||||
|
|
||||||
AudioManager.instance.Pause("Name"); //Pauses the sound
|
AudioManager.instance.Pause("Name"); //Pauses the sound
|
||||||
AudioManager.instance.UnPause("Name"); //Unpauses the sound
|
AudioManager.instance.UnPause("Name"); //Unpauses the sound
|
||||||
|
@ -60,7 +60,7 @@ AudioManager.instance.FadeMutedIn("Name", 1f); //Fade In a muted sound with a sp
|
||||||
AudioManager.instance.FadeMutedOut("Name", 1f); //Fade Out a sound without stopping it
|
AudioManager.instance.FadeMutedOut("Name", 1f); //Fade Out a sound without stopping it
|
||||||
```
|
```
|
||||||
|
|
||||||
### ObjectPooler
|
### **ObjectPooler**
|
||||||
|
|
||||||
The SpawnFromPool function always return a GameObject
|
The SpawnFromPool function always return a GameObject
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ Pooler.SpawnFromPool("Name", Vector3.zero, transform, true); //Spawn into a spec
|
||||||
Pooler.SpawnFromPool("Name", Vector3.zero, Quaternion.identity, transform, true); //Spawn into a specific position, rotation, parent and instantiate in worldSpace or not
|
Pooler.SpawnFromPool("Name", Vector3.zero, Quaternion.identity, transform, true); //Spawn into a specific position, rotation, parent and instantiate in worldSpace or not
|
||||||
```
|
```
|
||||||
|
|
||||||
### Dialogue System
|
### **Dialogue System**
|
||||||
|
|
||||||
The Dialogue function returns a bool (true if it's talking, false if it has ended)
|
The Dialogue function returns a bool (true if it's talking, false if it has ended)
|
||||||
|
|
||||||
|
@ -89,22 +89,25 @@ The Dialogue function returns a bool (true if it's talking, false if it has ende
|
||||||
using SimpleTools.DialogueSystem;
|
using SimpleTools.DialogueSystem;
|
||||||
|
|
||||||
Dialogue dialogue; //The dialogue scriptable object goes here
|
Dialogue dialogue; //The dialogue scriptable object goes here
|
||||||
DialogueSystem.instance.Dialogue(dialogue); //Start/Continue the dialogue
|
DialogueManager.instance.Dialogue(dialogue); //Start/Continue the dialogue
|
||||||
DialogueSystem.instance.Dialogue(dialogue, "Sound1", "Sound2"); //Start/Continue the dialogue with a random set of sounds for the text reveal
|
DialogueManager.instance.Dialogue(dialogue, "Sound1", "Sound2"); //Start/Continue the dialogue with a random set of sounds for the text reveal
|
||||||
```
|
```
|
||||||
|
|
||||||
Text commands:
|
Text commands:
|
||||||
|
|
||||||
```html
|
```
|
||||||
<color=color></color> --> Sets font color within tags
|
<color=color></color> --> Sets font color within tags
|
||||||
<size=percentage></size> --> Sets font size within tags
|
<size=percentage></size> --> Sets font size within tags
|
||||||
<sprite=index> --> Draws a sprite from the TextMeshPro
|
<sprite=index> --> Draws a sprite from the TextMeshPro
|
||||||
<p:[tiny,short,normal,long,read]> --> Pauses during a period of time
|
<p:[tiny,short,normal,long,read]> --> Pauses during a period of time
|
||||||
<anim:[wobble,wave,rainbow,shake]></anim> --> Reproduces an animation
|
<anim:[wobble,wave,rainbow,shake]></anim> --> Reproduces an animation
|
||||||
<sp:number></sp> --> Changes reveal speed
|
<sp:number></sp> --> Changes reveal speed
|
||||||
|
<snd:name> --> Plays a sound effect
|
||||||
|
<stopmsc:name,time> --> Fades a music out
|
||||||
|
<playmsc:name,time> --> Fades a music in
|
||||||
```
|
```
|
||||||
|
|
||||||
### SceneManager
|
### **SceneManager**
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using SimpleTools.SceneManagement;
|
using SimpleTools.SceneManagement;
|
||||||
|
@ -113,7 +116,7 @@ Loader.Load(0); //Loads a scene with a specific build index
|
||||||
Loader.Load("Scene"); //Loads a scene with a specific name
|
Loader.Load("Scene"); //Loads a scene with a specific name
|
||||||
```
|
```
|
||||||
|
|
||||||
### ScreenShake
|
### **ScreenShake**
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using SimpleTools.Cinemachine;
|
using SimpleTools.Cinemachine;
|
||||||
|
@ -121,7 +124,7 @@ using SimpleTools.Cinemachine;
|
||||||
ScreenShake.Shake(1f, .25f); //Shakes the camera with an intensity and duration
|
ScreenShake.Shake(1f, .25f); //Shakes the camera with an intensity and duration
|
||||||
```
|
```
|
||||||
|
|
||||||
### Timer
|
### **Timer**
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
using SimpleTools.Timer;
|
using SimpleTools.Timer;
|
||||||
|
@ -139,7 +142,11 @@ timer.ResetTimer(); //Pause and sets the time to the default one
|
||||||
timer.Restart(); //Restarts the timer
|
timer.Restart(); //Restarts the timer
|
||||||
```
|
```
|
||||||
|
|
||||||
### Editor
|
### **Auto-save**
|
||||||
|
|
||||||
|
To enable auto-save you have access the menu from the top bar, *Simple Tools>Auto Save Configuration.* You can auto-save every several minutes or auto-save every time you enter play mode.
|
||||||
|
|
||||||
|
### **Editor**
|
||||||
|
|
||||||
You can easily set up some things by right clicking in your Project Tab and then selecting Tools and clicking on the one you want to create.
|
You can easily set up some things by right clicking in your Project Tab and then selecting Tools and clicking on the one you want to create.
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to play a sound with a specific name
|
/// <summary>Use this to play a sound with a specific name
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
public void Play(string name) {
|
public void Play(string name) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -60,6 +61,8 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to play a sound with a specific name and with a certain delay
|
/// <summary>Use this to play a sound with a specific name and with a certain delay
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
|
/// <param name="delay" type="float">The delay in seconds</param>
|
||||||
public void Play(string name, float delay) {
|
public void Play(string name, float delay) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -73,6 +76,7 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to play one shot of a sound with a specific name
|
/// <summary>Use this to play one shot of a sound with a specific name
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
public void PlayOneShot(string name) {
|
public void PlayOneShot(string name) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -86,6 +90,8 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to play an intro song and then start playing the song loop
|
/// <summary>Use this to play an intro song and then start playing the song loop
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="intro" type="string">The name of the intro song</param>
|
||||||
|
/// <param name="song" type="string">The name of the song loop</param>
|
||||||
public void PlayWithIntro(string intro, string song) {
|
public void PlayWithIntro(string intro, string song) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == intro);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == intro);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -102,6 +108,7 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to play one shot of a random sound within a list
|
/// <summary>Use this to play one shot of a random sound within a list
|
||||||
/// <para>They have to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>They have to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="names" type="string[]">The names of the sounds</param>
|
||||||
public void PlayRandomSound(params string[] names) {
|
public void PlayRandomSound(params string[] names) {
|
||||||
int random = UnityEngine.Random.Range(0, names.Length);
|
int random = UnityEngine.Random.Range(0, names.Length);
|
||||||
PlayOneShot(names[random]);
|
PlayOneShot(names[random]);
|
||||||
|
@ -111,6 +118,7 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to pause a sound with a specific name
|
/// <summary>Use this to pause a sound with a specific name
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
public void Pause(string name) {
|
public void Pause(string name) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -124,6 +132,7 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to unpause a sound with a specific name
|
/// <summary>Use this to unpause a sound with a specific name
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
public void UnPause(string name) {
|
public void UnPause(string name) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -139,6 +148,7 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to stop a sound with a specific name
|
/// <summary>Use this to stop a sound with a specific name
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
public void Stop(string name) {
|
public void Stop(string name) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -163,6 +173,8 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>This function returns the AudioSource that contains a specific sound
|
/// <summary>This function returns the AudioSource that contains a specific sound
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the sound</param>
|
||||||
|
/// <returns>The AudioSource in the scene</returns>
|
||||||
public AudioSource GetSource(string name) {
|
public AudioSource GetSource(string name) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -175,6 +187,8 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to start playing a sound with a fade in
|
/// <summary>Use this to start playing a sound with a fade in
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
|
/// <param name="duration" type="float">The duration of the fade in</param>
|
||||||
public void FadeIn(string name, float duration) {
|
public void FadeIn(string name, float duration) {
|
||||||
StartCoroutine(FadeInCoroutine(name, duration));
|
StartCoroutine(FadeInCoroutine(name, duration));
|
||||||
}
|
}
|
||||||
|
@ -195,6 +209,8 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to stop playing a sound with a fade out
|
/// <summary>Use this to stop playing a sound with a fade out
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
|
/// <param name="duration" type="float">The duration of the fade out</param>
|
||||||
public void FadeOut(string name, float duration) {
|
public void FadeOut(string name, float duration) {
|
||||||
StartCoroutine(FadeOutCoroutine(name, duration));
|
StartCoroutine(FadeOutCoroutine(name, duration));
|
||||||
}
|
}
|
||||||
|
@ -217,6 +233,7 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to start playing a sound muted
|
/// <summary>Use this to start playing a sound muted
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
public void PlayMuted(string name) {
|
public void PlayMuted(string name) {
|
||||||
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
Sounds.List s = Array.Find(soundList.sounds, sound => sound.name == name);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
|
@ -231,6 +248,8 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// <para>WARNING: If the PlayMuted hasn't been called before, this function won't work</para>
|
/// <para>WARNING: If the PlayMuted hasn't been called before, this function won't work</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
|
/// <param name="duration">The duration of the fade in</param>
|
||||||
public void FadeMutedIn(string name, float duration) {
|
public void FadeMutedIn(string name, float duration) {
|
||||||
StartCoroutine(FadeMutedInCoroutine(name, duration));
|
StartCoroutine(FadeMutedInCoroutine(name, duration));
|
||||||
}
|
}
|
||||||
|
@ -250,6 +269,8 @@ namespace SimpleTools.AudioManager {
|
||||||
/// <summary>Use this to fade out a sound and keep playing that muted
|
/// <summary>Use this to fade out a sound and keep playing that muted
|
||||||
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
/// <para>It has to be in the Sound asset referenced in the AudioManager instance</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="name" type="string">The name of the sound</param>
|
||||||
|
/// <param name="duration">The duration of the fade out</param>
|
||||||
public void FadeMutedOut(string name, float duration) {
|
public void FadeMutedOut(string name, float duration) {
|
||||||
StartCoroutine(FadeMutedOutCoroutine(name, duration));
|
StartCoroutine(FadeMutedOutCoroutine(name, duration));
|
||||||
}
|
}
|
||||||
|
|
8
Tools/AutoSave.meta
Normal file
8
Tools/AutoSave.meta
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2f2d8faa0dc23b34f9f347dc08bd85be
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
124
Tools/AutoSave/AutoSaveConfig.cs
Normal file
124
Tools/AutoSave/AutoSaveConfig.cs
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using UnityEditor.SceneManagement;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SimpleTools.AutoSave {
|
||||||
|
public class AutoSaveConfig : EditorWindow {
|
||||||
|
|
||||||
|
[MenuItem("Simple Tools/Auto Save Configuration")]
|
||||||
|
public static void ShowWindow(){
|
||||||
|
EditorWindow w = GetWindow<AutoSaveConfig>("Auto-save Configuration");
|
||||||
|
w.position = new Rect(w.position.position, new Vector2(400, 150));
|
||||||
|
var data = EditorPrefs.GetString("AutoSave", JsonUtility.ToJson(w, false));
|
||||||
|
JsonUtility.FromJsonOverwrite(data, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
[InitializeOnLoadMethod]
|
||||||
|
static void OnInitialize(){
|
||||||
|
int _index = EditorPrefs.GetInt("Index", 0);
|
||||||
|
bool _logging = EditorPrefs.GetBool("Logging", false);
|
||||||
|
ChangeAutoSaveMode(_index, _logging);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnEnable() {
|
||||||
|
OnInitialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnDisable() {
|
||||||
|
var data = JsonUtility.ToJson(this, false);
|
||||||
|
EditorPrefs.SetString("AutoSave", data);
|
||||||
|
EditorPrefs.SetInt("Index", index);
|
||||||
|
EditorPrefs.SetBool("Logging", logging);
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly static string[] options = new string[] { "Disabled", "On Play", "1 Minute", "10 Minutes", "1 Hour" };
|
||||||
|
public static int index;
|
||||||
|
public static bool enabled;
|
||||||
|
public static bool logging;
|
||||||
|
|
||||||
|
void OnGUI() {
|
||||||
|
GUILayout.Label("Select auto-save mode:", EditorStyles.boldLabel);
|
||||||
|
int i = EditorGUILayout.Popup(index, options);
|
||||||
|
if (i != index) ChangeAutoSaveMode(i, logging);
|
||||||
|
|
||||||
|
GUILayout.Label("Log a message every time a the scene gets saved.");
|
||||||
|
if (logging) {
|
||||||
|
if (GUILayout.Button("Disable Logging")){
|
||||||
|
logging ^= true;
|
||||||
|
ChangeAutoSaveMode(i, logging);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (GUILayout.Button("Enable Logging")) {
|
||||||
|
logging ^= true;
|
||||||
|
ChangeAutoSaveMode(i, logging);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static CancellationTokenSource _tokenSource;
|
||||||
|
static Task _task;
|
||||||
|
static int frequency;
|
||||||
|
static void ChangeAutoSaveMode(int mode, bool log){
|
||||||
|
index = mode;
|
||||||
|
logging = log;
|
||||||
|
CancelTask();
|
||||||
|
enabled = true;
|
||||||
|
EditorApplication.playModeStateChanged -= AutoSaveWhenPlayModeStarts;
|
||||||
|
|
||||||
|
switch(index){
|
||||||
|
case 0:
|
||||||
|
enabled = false;
|
||||||
|
return;
|
||||||
|
case 1:
|
||||||
|
EditorApplication.playModeStateChanged += AutoSaveWhenPlayModeStarts;
|
||||||
|
return;
|
||||||
|
case 2:
|
||||||
|
frequency = 1 * 60 * 1000;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
frequency = 10 * 60 * 1000;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
frequency = 60 * 60 * 1000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
_tokenSource = new CancellationTokenSource();
|
||||||
|
_task = SaveInterval(_tokenSource.Token);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void AutoSaveWhenPlayModeStarts(PlayModeStateChange state){
|
||||||
|
if(state == PlayModeStateChange.ExitingEditMode){
|
||||||
|
EditorSceneManager.SaveOpenScenes();
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
if (logging) Debug.Log($"Auto-saved at {DateTime.Now:h:mm:ss tt}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CancelTask() {
|
||||||
|
if (_task == null) return;
|
||||||
|
_tokenSource.Cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
static async Task SaveInterval(CancellationToken token) {
|
||||||
|
while (!token.IsCancellationRequested) {
|
||||||
|
await Task.Delay(frequency, token);
|
||||||
|
|
||||||
|
if (token.IsCancellationRequested) break;
|
||||||
|
|
||||||
|
if (!enabled || Application.isPlaying || BuildPipeline.isBuildingPlayer || EditorApplication.isCompiling) return;
|
||||||
|
if (!UnityEditorInternal.InternalEditorUtility.isApplicationActive) return;
|
||||||
|
|
||||||
|
EditorSceneManager.SaveOpenScenes();
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
if (logging) Debug.Log($"Auto-saved at {DateTime.Now:h:mm:ss tt}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
11
Tools/AutoSave/AutoSaveConfig.cs.meta
Normal file
11
Tools/AutoSave/AutoSaveConfig.cs.meta
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e3f4095259fcc1f45991636604af9829
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -5,6 +5,7 @@ namespace SimpleTools.Cinemachine {
|
||||||
public class CMCameraTrigger : MonoBehaviour {
|
public class CMCameraTrigger : MonoBehaviour {
|
||||||
|
|
||||||
CinemachineVirtualCamera vcam;
|
CinemachineVirtualCamera vcam;
|
||||||
|
[SerializeField, Tooltip("Name of the collider's tag that will trigger the camera.")] string triggerTagName;
|
||||||
|
|
||||||
void Awake() {
|
void Awake() {
|
||||||
vcam = GetComponentInChildren<CinemachineVirtualCamera>(true);
|
vcam = GetComponentInChildren<CinemachineVirtualCamera>(true);
|
||||||
|
@ -13,12 +14,12 @@ namespace SimpleTools.Cinemachine {
|
||||||
|
|
||||||
#region 3D
|
#region 3D
|
||||||
void OnTriggerEnter(Collider col) {
|
void OnTriggerEnter(Collider col) {
|
||||||
if (col.CompareTag("Player")) {
|
if (col.CompareTag(triggerTagName)) {
|
||||||
vcam.gameObject.SetActive(true);
|
vcam.gameObject.SetActive(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void OnTriggerExit(Collider col) {
|
void OnTriggerExit(Collider col) {
|
||||||
if (col.CompareTag("Player")) {
|
if (col.CompareTag(triggerTagName)) {
|
||||||
vcam.gameObject.SetActive(true);
|
vcam.gameObject.SetActive(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,12 +27,12 @@ namespace SimpleTools.Cinemachine {
|
||||||
|
|
||||||
#region 2D
|
#region 2D
|
||||||
void OnTriggerEnter2D(Collider2D col) {
|
void OnTriggerEnter2D(Collider2D col) {
|
||||||
if (col.CompareTag("Player")) {
|
if (col.CompareTag(triggerTagName)) {
|
||||||
vcam.gameObject.SetActive(true);
|
vcam.gameObject.SetActive(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void OnTriggerExit2D(Collider2D col) {
|
void OnTriggerExit2D(Collider2D col) {
|
||||||
if (col.CompareTag("Player")) {
|
if (col.CompareTag(triggerTagName)) {
|
||||||
vcam.gameObject.SetActive(false);
|
vcam.gameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace SimpleTools.DialogueSystem {
|
||||||
Queue<Sprite> characterImages;
|
Queue<Sprite> characterImages;
|
||||||
bool talking;
|
bool talking;
|
||||||
|
|
||||||
public DialogueItems dialogueItems;
|
public DialogueManagerItems dialogueItems;
|
||||||
|
|
||||||
public static DialogueManager instance;
|
public static DialogueManager instance;
|
||||||
void Awake() {
|
void Awake() {
|
||||||
|
@ -27,10 +27,21 @@ namespace SimpleTools.DialogueSystem {
|
||||||
dialogueVertexAnimator = new DialogueVertexAnimator(dialogueItems.textBox);
|
dialogueVertexAnimator = new DialogueVertexAnimator(dialogueItems.textBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is the main function to call to start a dialogue.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dialogue">The dialogue to start.</param>
|
||||||
|
/// <returns>A bool that is false if the dialogue has finished and true if it hasn't.</returns>
|
||||||
public bool Dialogue(Dialogue dialogue) {
|
public bool Dialogue(Dialogue dialogue) {
|
||||||
return Dialogue(dialogue, string.Empty);
|
return Dialogue(dialogue, string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is the main function to call to start a dialogue.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dialogue">The dialogue to start.</param>
|
||||||
|
/// <param name="sounds">The sounds from the AudioManager that will be played on character reveal.</param>
|
||||||
|
/// <returns>A bool that is false if the dialogue has finished and true if it hasn't.</returns>
|
||||||
public bool Dialogue(Dialogue dialogue, params string[] sounds) {
|
public bool Dialogue(Dialogue dialogue, params string[] sounds) {
|
||||||
dialogueVertexAnimator.SetAudioSourceGroup(sounds);
|
dialogueVertexAnimator.SetAudioSourceGroup(sounds);
|
||||||
|
|
||||||
|
@ -49,6 +60,8 @@ namespace SimpleTools.DialogueSystem {
|
||||||
talking = true;
|
talking = true;
|
||||||
|
|
||||||
if (sentences.Count == 0) {
|
if (sentences.Count == 0) {
|
||||||
|
if (dialogueVertexAnimator.IsMessageAnimating())
|
||||||
|
return true;
|
||||||
talking = false;
|
talking = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -66,6 +79,8 @@ namespace SimpleTools.DialogueSystem {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (sentences.Count == 0) {
|
if (sentences.Count == 0) {
|
||||||
|
if (dialogueVertexAnimator.IsMessageAnimating())
|
||||||
|
return true;
|
||||||
talking = false;
|
talking = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -102,7 +117,7 @@ namespace SimpleTools.DialogueSystem {
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
public struct DialogueItems {
|
public struct DialogueManagerItems {
|
||||||
public Image characterImage;
|
public Image characterImage;
|
||||||
public TMP_Text characterName;
|
public TMP_Text characterName;
|
||||||
public TMP_Text textBox;
|
public TMP_Text textBox;
|
||||||
|
|
|
@ -11,6 +11,12 @@ namespace SimpleTools.DialogueSystem {
|
||||||
const string REMAINDER_REGEX = "(.*?((?=>)|(/|$)))";
|
const string REMAINDER_REGEX = "(.*?((?=>)|(/|$)))";
|
||||||
const string PAUSE_REGEX_STRING = "<p:(?<pause>" + REMAINDER_REGEX + ")>";
|
const string PAUSE_REGEX_STRING = "<p:(?<pause>" + REMAINDER_REGEX + ")>";
|
||||||
static readonly Regex pauseRegex = new Regex(PAUSE_REGEX_STRING);
|
static readonly Regex pauseRegex = new Regex(PAUSE_REGEX_STRING);
|
||||||
|
const string SOUND_REGEX_STRING = "<snd:(?<sound>" + REMAINDER_REGEX + ")>";
|
||||||
|
static readonly Regex soundRegex = new Regex(SOUND_REGEX_STRING);
|
||||||
|
const string PLAYMUSIC_REGEX_STRING = "<playmsc:(?<playmusic>" + REMAINDER_REGEX + ")>";
|
||||||
|
static readonly Regex playMusicRegex = new Regex(PLAYMUSIC_REGEX_STRING);
|
||||||
|
const string STOPMUSIC_REGEX_STRING = "<stopmsc:(?<stopmusic>" + REMAINDER_REGEX + ")>";
|
||||||
|
static readonly Regex stopMusicRegex = new Regex(STOPMUSIC_REGEX_STRING);
|
||||||
const string SPEED_REGEX_STRING = "<sp:(?<speed>" + REMAINDER_REGEX + ")>";
|
const string SPEED_REGEX_STRING = "<sp:(?<speed>" + REMAINDER_REGEX + ")>";
|
||||||
static readonly Regex speedRegex = new Regex(SPEED_REGEX_STRING);
|
static readonly Regex speedRegex = new Regex(SPEED_REGEX_STRING);
|
||||||
const string ANIM_START_REGEX_STRING = "<anim:(?<anim>" + REMAINDER_REGEX + ")>";
|
const string ANIM_START_REGEX_STRING = "<anim:(?<anim>" + REMAINDER_REGEX + ")>";
|
||||||
|
@ -31,6 +37,9 @@ namespace SimpleTools.DialogueSystem {
|
||||||
processedMessage = message;
|
processedMessage = message;
|
||||||
|
|
||||||
processedMessage = HandlePauseTags(processedMessage, result);
|
processedMessage = HandlePauseTags(processedMessage, result);
|
||||||
|
processedMessage = HandleSoundTags(processedMessage, result);
|
||||||
|
processedMessage = HandlePlayMusicTags(processedMessage, result);
|
||||||
|
processedMessage = HandleStopMusicTags(processedMessage, result);
|
||||||
processedMessage = HandleSpeedTags(processedMessage, result);
|
processedMessage = HandleSpeedTags(processedMessage, result);
|
||||||
processedMessage = HandleAnimStartTags(processedMessage, result);
|
processedMessage = HandleAnimStartTags(processedMessage, result);
|
||||||
processedMessage = HandleAnimEndTags(processedMessage, result);
|
processedMessage = HandleAnimEndTags(processedMessage, result);
|
||||||
|
@ -96,6 +105,48 @@ namespace SimpleTools.DialogueSystem {
|
||||||
processedMessage = Regex.Replace(processedMessage, PAUSE_REGEX_STRING, "");
|
processedMessage = Regex.Replace(processedMessage, PAUSE_REGEX_STRING, "");
|
||||||
return processedMessage;
|
return processedMessage;
|
||||||
}
|
}
|
||||||
|
static string HandleSoundTags(string processedMessage, List<DialogueCommand> result) {
|
||||||
|
MatchCollection soundMatches = soundRegex.Matches(processedMessage);
|
||||||
|
foreach (Match match in soundMatches) {
|
||||||
|
string val = match.Groups["sound"].Value;
|
||||||
|
string soundName = val;
|
||||||
|
result.Add(new DialogueCommand {
|
||||||
|
position = VisibleCharactersUpToIndex(processedMessage, match.Index),
|
||||||
|
type = DialogueCommandType.Sound,
|
||||||
|
stringValue = soundName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
processedMessage = Regex.Replace(processedMessage, SOUND_REGEX_STRING, "");
|
||||||
|
return processedMessage;
|
||||||
|
}
|
||||||
|
static string HandlePlayMusicTags(string processedMessage, List<DialogueCommand> result) {
|
||||||
|
MatchCollection playMatches = playMusicRegex.Matches(processedMessage);
|
||||||
|
foreach (Match match in playMatches) {
|
||||||
|
string val = match.Groups["playmusic"].Value;
|
||||||
|
string functionName = val;
|
||||||
|
result.Add(new DialogueCommand {
|
||||||
|
position = VisibleCharactersUpToIndex(processedMessage, match.Index),
|
||||||
|
type = DialogueCommandType.PlayMusic,
|
||||||
|
stringValue = functionName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
processedMessage = Regex.Replace(processedMessage, PLAYMUSIC_REGEX_STRING, "");
|
||||||
|
return processedMessage;
|
||||||
|
}
|
||||||
|
static string HandleStopMusicTags(string processedMessage, List<DialogueCommand> result) {
|
||||||
|
MatchCollection stopMatches = stopMusicRegex.Matches(processedMessage);
|
||||||
|
foreach (Match match in stopMatches) {
|
||||||
|
string val = match.Groups["stopmusic"].Value;
|
||||||
|
string functionName = val;
|
||||||
|
result.Add(new DialogueCommand {
|
||||||
|
position = VisibleCharactersUpToIndex(processedMessage, match.Index),
|
||||||
|
type = DialogueCommandType.StopMusic,
|
||||||
|
stringValue = functionName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
processedMessage = Regex.Replace(processedMessage, STOPMUSIC_REGEX_STRING, "");
|
||||||
|
return processedMessage;
|
||||||
|
}
|
||||||
|
|
||||||
static TextAnimationType GetTextAnimationType(string stringVal) {
|
static TextAnimationType GetTextAnimationType(string stringVal) {
|
||||||
TextAnimationType result;
|
TextAnimationType result;
|
||||||
|
@ -139,7 +190,10 @@ namespace SimpleTools.DialogueSystem {
|
||||||
Pause,
|
Pause,
|
||||||
TextSpeedChange,
|
TextSpeedChange,
|
||||||
AnimStart,
|
AnimStart,
|
||||||
AnimEnd
|
AnimEnd,
|
||||||
|
Sound,
|
||||||
|
PlayMusic,
|
||||||
|
StopMusic
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum TextAnimationType {
|
public enum TextAnimationType {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
@ -134,6 +135,20 @@ namespace SimpleTools.DialogueSystem {
|
||||||
case DialogueCommandType.TextSpeedChange:
|
case DialogueCommandType.TextSpeedChange:
|
||||||
secondsPerCharacter = 1f / command.floatValue;
|
secondsPerCharacter = 1f / command.floatValue;
|
||||||
break;
|
break;
|
||||||
|
case DialogueCommandType.Sound:
|
||||||
|
AudioManager.AudioManager.instance.PlayOneShot(command.stringValue);
|
||||||
|
break;
|
||||||
|
case DialogueCommandType.PlayMusic:
|
||||||
|
string[] split0 = command.stringValue.Split(',');
|
||||||
|
AudioManager.AudioManager.instance.FadeIn(split0[0], float.Parse(split0[1], CultureInfo.InvariantCulture));
|
||||||
|
break;
|
||||||
|
case DialogueCommandType.StopMusic:
|
||||||
|
string[] split1 = command.stringValue.Split(',');
|
||||||
|
for (int j = 0; j < split1.Length; j++) {
|
||||||
|
Debug.Log(split1[j]);
|
||||||
|
}
|
||||||
|
AudioManager.AudioManager.instance.FadeOut(split1[0], float.Parse(split1[1], CultureInfo.InvariantCulture));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
commands.RemoveAt(i);
|
commands.RemoveAt(i);
|
||||||
i--;
|
i--;
|
||||||
|
@ -191,7 +206,7 @@ namespace SimpleTools.DialogueSystem {
|
||||||
TextAnimInfo info = textAnimInfo[i];
|
TextAnimInfo info = textAnimInfo[i];
|
||||||
if (charIndex >= info.startIndex && charIndex < info.endIndex) {
|
if (charIndex >= info.startIndex && charIndex < info.endIndex) {
|
||||||
if (info.type == TextAnimationType.rainbow) {
|
if (info.type == TextAnimationType.rainbow) {
|
||||||
color = Color.HSVToRGB(Mathf.Repeat((time + destinationVertice.x * RAINBOW_LENGTH_ADJUSTMENT), 1f), .6f, 1);
|
color = Color.HSVToRGB(Mathf.Repeat((time + destinationVertice.x * RAINBOW_LENGTH_ADJUSTMENT), 1f), .75f, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "com.geri.simpletools",
|
"name": "com.geri.simpletools",
|
||||||
"version": "1.2.1",
|
"version": "1.3.0",
|
||||||
"displayName": "Simple Tools",
|
"displayName": "Simple Tools",
|
||||||
"description": "This package contains simple tools to use in your project.",
|
"description": "This package contains simple tools to use in your project.",
|
||||||
"unity": "2018.4",
|
"unity": "2018.4",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue