Browse Source

Move TaskManager to Fungus namespace

master
chrisgregan 9 years ago
parent
commit
581f9ce171
  1. 2
      Assets/Fungus/FungusScript/Resources/Types/RegisterTypes.txt
  2. 314
      Assets/Fungus/FungusScript/Thirdparty/TaskManager/TaskManager.cs

2
Assets/Fungus/FungusScript/Resources/Types/RegisterTypes.txt

@ -21,6 +21,7 @@ Fungus.PortraitState, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicK
Fungus.SayDialog, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Fungus.SayDialog, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Fungus.SpriteVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Fungus.SpriteVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Fungus.StringVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Fungus.StringVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Fungus.Task, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Fungus.TextureVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Fungus.TextureVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Fungus.TransformVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Fungus.TransformVariable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Fungus.Variable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Fungus.Variable, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
@ -34,7 +35,6 @@ System.IntPtr, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c
System.Single, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Single, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Type, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Type, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.UInt32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.UInt32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Task, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
UnityEngine.AudioClip, UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null UnityEngine.AudioClip, UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
UnityEngine.AudioClipLoadType, UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null UnityEngine.AudioClipLoadType, UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
UnityEngine.AudioDataLoadState, UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null UnityEngine.AudioDataLoadState, UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

314
Assets/Fungus/FungusScript/Thirdparty/TaskManager/TaskManager.cs vendored

@ -56,159 +56,165 @@
using UnityEngine; using UnityEngine;
using System.Collections; using System.Collections;
/// A Task object represents a coroutine. Tasks can be started, paused, and stopped. // Using the Fungus namespace to minimize conflicts with other assets.
/// It is an error to attempt to start a task that has been stopped or which has namespace Fungus
/// naturally terminated.
public class Task
{ {
/// Returns true if and only if the coroutine is running. Paused tasks
/// are considered to be running. /// A Task object represents a coroutine. Tasks can be started, paused, and stopped.
public bool Running { /// It is an error to attempt to start a task that has been stopped or which has
get { /// naturally terminated.
return task.Running; public class Task
} {
} /// Returns true if and only if the coroutine is running. Paused tasks
/// are considered to be running.
/// Returns true if and only if the coroutine is currently paused. public bool Running {
public bool Paused { get {
get { return task.Running;
return task.Paused; }
} }
}
/// Returns true if and only if the coroutine is currently paused.
/// Delegate for termination subscribers. manual is true if and only if public bool Paused {
/// the coroutine was stopped with an explicit call to Stop(). get {
public delegate void FinishedHandler(bool manual); return task.Paused;
}
/// Termination event. Triggered when the coroutine completes execution. }
public event FinishedHandler Finished;
/// Delegate for termination subscribers. manual is true if and only if
/// Creates a new Task object for the given coroutine. /// the coroutine was stopped with an explicit call to Stop().
/// public delegate void FinishedHandler(bool manual);
/// If autoStart is true (default) the task is automatically started
/// upon construction. /// Termination event. Triggered when the coroutine completes execution.
public Task(IEnumerator c, bool autoStart = true) public event FinishedHandler Finished;
{
task = TaskManager.CreateTask(c); /// Creates a new Task object for the given coroutine.
task.Finished += TaskFinished; ///
if(autoStart) /// If autoStart is true (default) the task is automatically started
Start(); /// upon construction.
} public Task(IEnumerator c, bool autoStart = true)
{
/// Begins execution of the coroutine task = TaskManager.CreateTask(c);
public void Start() task.Finished += TaskFinished;
{ if(autoStart)
task.Start(); Start();
} }
/// Discontinues execution of the coroutine at its next yield. /// Begins execution of the coroutine
public void Stop() public void Start()
{ {
task.Stop(); task.Start();
} }
public void Pause() /// Discontinues execution of the coroutine at its next yield.
{ public void Stop()
task.Pause(); {
} task.Stop();
}
public void Unpause()
{ public void Pause()
task.Unpause(); {
} task.Pause();
}
void TaskFinished(bool manual)
{ public void Unpause()
FinishedHandler handler = Finished; {
if(handler != null) task.Unpause();
handler(manual); }
}
void TaskFinished(bool manual)
TaskManager.TaskState task; {
} FinishedHandler handler = Finished;
if(handler != null)
class TaskManager : MonoBehaviour handler(manual);
{ }
public class TaskState
{ TaskManager.TaskState task;
public bool Running { }
get {
return running; class TaskManager : MonoBehaviour
} {
} public class TaskState
{
public bool Paused { public bool Running {
get { get {
return paused; return running;
} }
} }
public delegate void FinishedHandler(bool manual); public bool Paused {
public event FinishedHandler Finished; get {
return paused;
IEnumerator coroutine; }
bool running; }
bool paused;
bool stopped; public delegate void FinishedHandler(bool manual);
public event FinishedHandler Finished;
public TaskState(IEnumerator c)
{ IEnumerator coroutine;
coroutine = c; bool running;
} bool paused;
bool stopped;
public void Pause()
{ public TaskState(IEnumerator c)
paused = true; {
} coroutine = c;
}
public void Unpause()
{ public void Pause()
paused = false; {
} paused = true;
}
public void Start()
{ public void Unpause()
running = true; {
singleton.StartCoroutine(CallWrapper()); paused = false;
} }
public void Stop() public void Start()
{ {
stopped = true; running = true;
running = false; singleton.StartCoroutine(CallWrapper());
} }
IEnumerator CallWrapper() public void Stop()
{ {
yield return null; stopped = true;
IEnumerator e = coroutine; running = false;
while(running) { }
if(paused)
yield return null; IEnumerator CallWrapper()
else { {
if(e != null && e.MoveNext()) { yield return null;
yield return e.Current; IEnumerator e = coroutine;
} while(running) {
else { if(paused)
running = false; yield return null;
} else {
} if(e != null && e.MoveNext()) {
} yield return e.Current;
}
FinishedHandler handler = Finished; else {
if(handler != null) running = false;
handler(stopped); }
} }
} }
static TaskManager singleton; FinishedHandler handler = Finished;
if(handler != null)
public static TaskState CreateTask(IEnumerator coroutine) handler(stopped);
{ }
if(singleton == null) { }
GameObject go = new GameObject("TaskManager");
singleton = go.AddComponent<TaskManager>(); static TaskManager singleton;
}
return new TaskState(coroutine); public static TaskState CreateTask(IEnumerator coroutine)
} {
if(singleton == null) {
GameObject go = new GameObject("TaskManager");
singleton = go.AddComponent<TaskManager>();
}
return new TaskState(coroutine);
}
}
} }
Loading…
Cancel
Save