mirror of
https://github.com/Ellpeck/Coroutine.git
synced 2024-11-24 22:28:34 +01:00
Compare commits
No commits in common. "4f09e640393641bcb8fb27c601f96c7dd4ea23f5" and "6bbe37cbb38cb9ba9257e09a2c14e8575fb2491f" have entirely different histories.
4f09e64039
...
6bbe37cbb3
3 changed files with 30 additions and 48 deletions
|
@ -13,7 +13,7 @@
|
|||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||
<PackageIcon>Logo.png</PackageIcon>
|
||||
<VersionPrefix>2.1.3</VersionPrefix>
|
||||
<VersionPrefix>2.1.2</VersionPrefix>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -16,26 +16,15 @@ namespace Coroutine {
|
|||
private readonly HashSet<ActiveCoroutine> outstandingEventCoroutines = new HashSet<ActiveCoroutine>();
|
||||
private readonly HashSet<ActiveCoroutine> outstandingTickingCoroutines = new HashSet<ActiveCoroutine>();
|
||||
private readonly Stopwatch stopwatch = new Stopwatch();
|
||||
private readonly object lockObject = new object();
|
||||
|
||||
/// <summary>
|
||||
/// The amount of <see cref="ActiveCoroutine"/> instances that are currently waiting for a tick (waiting for time to pass)
|
||||
/// </summary>
|
||||
public int TickingCount {
|
||||
get {
|
||||
lock (this.lockObject)
|
||||
return this.tickingCoroutines.Count;
|
||||
}
|
||||
}
|
||||
public int TickingCount => this.tickingCoroutines.Count;
|
||||
/// <summary>
|
||||
/// The amount of <see cref="ActiveCoroutine"/> instances that are currently waiting for an <see cref="Event"/>
|
||||
/// </summary>
|
||||
public int EventCount {
|
||||
get {
|
||||
lock (this.lockObject)
|
||||
return this.eventCoroutines.Sum(c => c.Value.Count);
|
||||
}
|
||||
}
|
||||
public int EventCount => this.eventCoroutines.Sum(c => c.Value.Count);
|
||||
|
||||
/// <summary>
|
||||
/// Starts the given coroutine, returning a <see cref="ActiveCoroutine"/> object for management.
|
||||
|
@ -58,10 +47,8 @@ namespace Coroutine {
|
|||
/// <returns>An active coroutine object representing this coroutine</returns>
|
||||
public ActiveCoroutine Start(IEnumerator<Wait> coroutine, string name = "", int priority = 0) {
|
||||
var inst = new ActiveCoroutine(coroutine, name, priority, this.stopwatch);
|
||||
if (inst.MoveNext()) {
|
||||
lock (this.lockObject)
|
||||
if (inst.MoveNext())
|
||||
this.GetOutstandingCoroutines(inst.IsWaitingForEvent).Add(inst);
|
||||
}
|
||||
return inst;
|
||||
}
|
||||
|
||||
|
@ -83,7 +70,6 @@ namespace Coroutine {
|
|||
/// </summary>
|
||||
/// <param name="deltaSeconds">The amount of seconds that have passed since the last time this method was invoked</param>
|
||||
public void Tick(double deltaSeconds) {
|
||||
lock (this.lockObject) {
|
||||
this.MoveOutstandingCoroutines(false);
|
||||
this.tickingCoroutines.RemoveAll(c => {
|
||||
if (c.Tick(deltaSeconds)) {
|
||||
|
@ -95,7 +81,6 @@ namespace Coroutine {
|
|||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ticks this coroutine handler, causing all time-based <see cref="Wait"/>s to be ticked.
|
||||
|
@ -111,7 +96,6 @@ namespace Coroutine {
|
|||
/// </summary>
|
||||
/// <param name="evt">The event to raise</param>
|
||||
public void RaiseEvent(Event evt) {
|
||||
lock (this.lockObject) {
|
||||
this.MoveOutstandingCoroutines(true);
|
||||
var coroutines = this.GetEventCoroutines(evt, false);
|
||||
if (coroutines != null) {
|
||||
|
@ -129,14 +113,12 @@ namespace Coroutine {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a list of all currently active <see cref="ActiveCoroutine"/> objects under this handler.
|
||||
/// </summary>
|
||||
/// <returns>All active coroutines</returns>
|
||||
public IEnumerable<ActiveCoroutine> GetActiveCoroutines() {
|
||||
lock (this.lockObject)
|
||||
return this.tickingCoroutines.Concat(this.eventCoroutines.Values.SelectMany(c => c));
|
||||
}
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@ There are two predefined ways to pause a coroutine:
|
|||
|
||||
Additionally, Coroutine provides the following features:
|
||||
- Creation of custom events to wait for
|
||||
- Creation of custom wait conditions
|
||||
- No multi-threading, which allows for any kind of process to be executed in a coroutine, including rendering
|
||||
- Thread-safety, which allows for coroutines to be started from different threads
|
||||
|
||||
# How to Use
|
||||
## Setting up the CoroutineHandler
|
||||
|
|
Loading…
Reference in a new issue