import successful, grid has visuals
cell values and grid lines are displayed. no interaction available yet.
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading the Code Monkey Utilities
|
||||
I hope you find them useful in your projects
|
||||
If you have any questions use the contact form
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CodeMonkey.Utils {
|
||||
|
||||
/*
|
||||
* Calls function on every Update until it returns true
|
||||
* */
|
||||
public class FunctionUpdater {
|
||||
|
||||
/*
|
||||
* Class to hook Actions into MonoBehaviour
|
||||
* */
|
||||
private class MonoBehaviourHook : MonoBehaviour {
|
||||
|
||||
public Action OnUpdate;
|
||||
|
||||
private void Update() {
|
||||
if (OnUpdate != null) OnUpdate();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static List<FunctionUpdater> updaterList; // Holds a reference to all active updaters
|
||||
private static GameObject initGameObject; // Global game object used for initializing class, is destroyed on scene change
|
||||
|
||||
private static void InitIfNeeded() {
|
||||
if (initGameObject == null) {
|
||||
initGameObject = new GameObject("FunctionUpdater_Global");
|
||||
updaterList = new List<FunctionUpdater>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static FunctionUpdater Create(Action updateFunc) {
|
||||
return Create(() => { updateFunc(); return false; }, "", true, false);
|
||||
}
|
||||
|
||||
public static FunctionUpdater Create(Action updateFunc, string functionName) {
|
||||
return Create(() => { updateFunc(); return false; }, functionName, true, false);
|
||||
}
|
||||
|
||||
public static FunctionUpdater Create(Func<bool> updateFunc) {
|
||||
return Create(updateFunc, "", true, false);
|
||||
}
|
||||
|
||||
public static FunctionUpdater Create(Func<bool> updateFunc, string functionName) {
|
||||
return Create(updateFunc, functionName, true, false);
|
||||
}
|
||||
|
||||
public static FunctionUpdater Create(Func<bool> updateFunc, string functionName, bool active) {
|
||||
return Create(updateFunc, functionName, active, false);
|
||||
}
|
||||
|
||||
public static FunctionUpdater Create(Func<bool> updateFunc, string functionName, bool active, bool stopAllWithSameName) {
|
||||
InitIfNeeded();
|
||||
|
||||
if (stopAllWithSameName) {
|
||||
StopAllUpdatersWithName(functionName);
|
||||
}
|
||||
|
||||
GameObject gameObject = new GameObject("FunctionUpdater Object " + functionName, typeof(MonoBehaviourHook));
|
||||
FunctionUpdater functionUpdater = new FunctionUpdater(gameObject, updateFunc, functionName, active);
|
||||
gameObject.GetComponent<MonoBehaviourHook>().OnUpdate = functionUpdater.Update;
|
||||
|
||||
updaterList.Add(functionUpdater);
|
||||
return functionUpdater;
|
||||
}
|
||||
|
||||
private static void RemoveUpdater(FunctionUpdater funcUpdater) {
|
||||
InitIfNeeded();
|
||||
updaterList.Remove(funcUpdater);
|
||||
}
|
||||
|
||||
public static void DestroyUpdater(FunctionUpdater funcUpdater) {
|
||||
InitIfNeeded();
|
||||
if (funcUpdater != null) {
|
||||
funcUpdater.DestroySelf();
|
||||
}
|
||||
}
|
||||
|
||||
public static void StopUpdaterWithName(string functionName) {
|
||||
InitIfNeeded();
|
||||
for (int i = 0; i < updaterList.Count; i++) {
|
||||
if (updaterList[i].functionName == functionName) {
|
||||
updaterList[i].DestroySelf();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void StopAllUpdatersWithName(string functionName) {
|
||||
InitIfNeeded();
|
||||
for (int i = 0; i < updaterList.Count; i++) {
|
||||
if (updaterList[i].functionName == functionName) {
|
||||
updaterList[i].DestroySelf();
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private GameObject gameObject;
|
||||
private string functionName;
|
||||
private bool active;
|
||||
private Func<bool> updateFunc; // Destroy Updater if return true;
|
||||
|
||||
public FunctionUpdater(GameObject gameObject, Func<bool> updateFunc, string functionName, bool active) {
|
||||
this.gameObject = gameObject;
|
||||
this.updateFunc = updateFunc;
|
||||
this.functionName = functionName;
|
||||
this.active = active;
|
||||
}
|
||||
|
||||
public void Pause() {
|
||||
active = false;
|
||||
}
|
||||
|
||||
public void Resume() {
|
||||
active = true;
|
||||
}
|
||||
|
||||
private void Update() {
|
||||
if (!active) return;
|
||||
if (updateFunc()) {
|
||||
DestroySelf();
|
||||
}
|
||||
}
|
||||
|
||||
public void DestroySelf() {
|
||||
RemoveUpdater(this);
|
||||
if (gameObject != null) {
|
||||
UnityEngine.Object.Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user