Browse Source
Intended to allow fungus to notify the outside world that it is doing something of priority so the outside world can pause -Tests -Commandsmaster
desktop-maesty/steve
7 years ago
14 changed files with 380 additions and 0 deletions
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 61d2004f0aa3f1847beb167296c897d8 |
||||
folderAsset: yes |
||||
timeCreated: 1523180219 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,32 @@
|
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using UnityEngine; |
||||
|
||||
namespace Fungus |
||||
{ |
||||
/// <summary> |
||||
/// </summary> |
||||
[CommandInfo("Scripting", |
||||
"Priority Count", |
||||
"Resets the FungusPriority count to zero. Useful if you are among logic that is hard to have matching increase and decreases.")] |
||||
public class FungusPrirorityCurrentCount : Command |
||||
{ |
||||
public FloatVar outVar; |
||||
|
||||
public override void OnEnter() |
||||
{ |
||||
outVar.Value = FungusPrioritySignals.CurrentPriorityDepth; |
||||
|
||||
Continue(); |
||||
} |
||||
|
||||
public override string GetSummary() |
||||
{ |
||||
if(outVar == null) |
||||
{ |
||||
return "Error: No out var supplied"; |
||||
} |
||||
return outVar.Key; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 9cf8648fa41dd274ea08513e0e09751a |
||||
timeCreated: 1523180726 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,22 @@
|
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using UnityEngine; |
||||
|
||||
namespace Fungus |
||||
{ |
||||
/// <summary> |
||||
/// </summary> |
||||
[CommandInfo("Scripting", |
||||
"Priority Down", |
||||
"Decrease the FungusPriority count, causing the related FungusPrioritySignals to fire. " + |
||||
"Intended to be used to notify external systems that fungus is doing something important and they should perhaps resume.")] |
||||
public class FungusPrirorityDecrease : Command |
||||
{ |
||||
public override void OnEnter() |
||||
{ |
||||
FungusPrioritySignals.DoDecreasePriorityDepth(); |
||||
|
||||
Continue(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 7c145feff04914a4381eed102db730f9 |
||||
timeCreated: 1523180528 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,22 @@
|
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using UnityEngine; |
||||
|
||||
namespace Fungus |
||||
{ |
||||
/// <summary> |
||||
/// </summary> |
||||
[CommandInfo("Scripting", |
||||
"Priority Up", |
||||
"Increases the FungusPriority count, causing the related FungusPrioritySignals to fire. " + |
||||
"Intended to be used to notify external systems that fungus is doing something important and they should perhaps pause.")] |
||||
public class FungusPrirorityIncrease : Command |
||||
{ |
||||
public override void OnEnter() |
||||
{ |
||||
FungusPrioritySignals.DoIncreasePriorityDepth(); |
||||
|
||||
Continue(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 5205fc5ce9948364994bf9075b2fa803 |
||||
timeCreated: 1523180260 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,21 @@
|
||||
using System.Collections; |
||||
using System.Collections.Generic; |
||||
using UnityEngine; |
||||
|
||||
namespace Fungus |
||||
{ |
||||
/// <summary> |
||||
/// </summary> |
||||
[CommandInfo("Scripting", |
||||
"Priority Reset", |
||||
"Resets the FungusPriority count to zero. Useful if you are among logic that is hard to have matching increase and decreases.")] |
||||
public class FungusPrirorityReset : Command |
||||
{ |
||||
public override void OnEnter() |
||||
{ |
||||
FungusPrioritySignals.DoResetPriority(); |
||||
|
||||
Continue(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 130c56669cb437d4d80996fba8aa50dd |
||||
timeCreated: 1523180528 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,96 @@
|
||||
namespace Fungus |
||||
{ |
||||
/// <summary> |
||||
/// Fungus Priority event signalling system. |
||||
/// A common point for Fungus core systems and user Commands to signal to external code that a |
||||
/// Fungus system is currently doing something important. |
||||
/// |
||||
/// One intended use case for this system is to have your code listen to this to know when to |
||||
/// stop player movement or camera movement etc. when the player is engaged in a conversation |
||||
/// with an NPC. |
||||
/// </summary> |
||||
public static class FungusPrioritySignals |
||||
{ |
||||
#region Public members |
||||
/// <summary> |
||||
/// used by increase and decrease active depth functions. |
||||
/// </summary> |
||||
private static int activeDepth; |
||||
|
||||
public static int CurrentPriorityDepth |
||||
{ |
||||
get |
||||
{ |
||||
return activeDepth; |
||||
} |
||||
} |
||||
|
||||
public static event FungusPriorityStartHandler OnFungusPriorityStart; |
||||
public delegate void FungusPriorityStartHandler(); |
||||
|
||||
public static event FungusPriorityEndHandler OnFungusPriorityEnd; |
||||
public delegate void FungusPriorityEndHandler(); |
||||
|
||||
|
||||
public static event FungusPriorityChangeHandler OnFungusPriorityChange; |
||||
public delegate void FungusPriorityChangeHandler(int previousActiveDepth, int newActiveDepth); |
||||
|
||||
/// <summary> |
||||
/// Adds 1 to the theactiveDepth. If it was zero causes the OnFungusPriorityStart |
||||
/// </summary> |
||||
public static void DoIncreasePriorityDepth() |
||||
{ |
||||
if(activeDepth == 0) |
||||
{ |
||||
if (OnFungusPriorityStart != null) |
||||
{ |
||||
OnFungusPriorityStart(); |
||||
} |
||||
} |
||||
if(OnFungusPriorityChange != null) |
||||
{ |
||||
OnFungusPriorityChange(activeDepth, activeDepth + 1); |
||||
} |
||||
activeDepth++; |
||||
} |
||||
|
||||
/// <summary> |
||||
/// Subtracts 1 to the theactiveDepth. If it reaches zero causes the OnFungusPriorityEnd |
||||
/// </summary> |
||||
public static void DoDecreasePriorityDepth() |
||||
{ |
||||
if (OnFungusPriorityChange != null) |
||||
{ |
||||
OnFungusPriorityChange(activeDepth, activeDepth - 1); |
||||
} |
||||
if(activeDepth == 1) |
||||
{ |
||||
if(OnFungusPriorityEnd != null) |
||||
{ |
||||
OnFungusPriorityEnd(); |
||||
} |
||||
} |
||||
activeDepth--; |
||||
} |
||||
|
||||
/// <summary> |
||||
/// Forces active depth back to 0. If already 0 fires no signals. |
||||
/// </summary> |
||||
public static void DoResetPriority() |
||||
{ |
||||
if (activeDepth == 0) |
||||
return; |
||||
|
||||
if (OnFungusPriorityChange != null) |
||||
{ |
||||
OnFungusPriorityChange(activeDepth, 0); |
||||
} |
||||
if (OnFungusPriorityEnd != null) |
||||
{ |
||||
OnFungusPriorityEnd(); |
||||
} |
||||
activeDepth = 0; |
||||
} |
||||
#endregion |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2 |
||||
guid: fd542ada4b268ba49bcab2fd4d8e465e |
||||
timeCreated: 1523173334 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2 |
||||
guid: b38a1b95ff88ff34abb4a8a15679fdf5 |
||||
folderAsset: yes |
||||
timeCreated: 1523182215 |
||||
licenseType: Free |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,89 @@
|
||||
using UnityEngine; |
||||
using UnityEditor; |
||||
using UnityEngine.TestTools; |
||||
using NUnit.Framework; |
||||
using System.Collections; |
||||
|
||||
public class FungusPrioritySignalsTest { |
||||
|
||||
private int changeCallCount, startCallCount, endCallCount; |
||||
|
||||
[Test] |
||||
public void CountsAndSignals() |
||||
{ |
||||
Fungus.FungusPrioritySignals.OnFungusPriorityStart += FungusPrioritySignals_OnFungusPriorityStart; |
||||
Fungus.FungusPrioritySignals.OnFungusPriorityEnd += FungusPrioritySignals_OnFungusPriorityEnd; |
||||
Fungus.FungusPrioritySignals.OnFungusPriorityChange += FungusPrioritySignals_OnFungusPriorityChange; |
||||
|
||||
Assert.Zero(Fungus.FungusPrioritySignals.CurrentPriorityDepth); |
||||
|
||||
Fungus.FungusPrioritySignals.DoIncreasePriorityDepth(); |
||||
//one start, one change, no end, 1 depth |
||||
Assert.AreEqual(0, endCallCount); |
||||
Assert.AreEqual(1, startCallCount); |
||||
Assert.AreEqual(1, changeCallCount); |
||||
Assert.AreEqual(1, Fungus.FungusPrioritySignals.CurrentPriorityDepth); |
||||
|
||||
|
||||
|
||||
Fungus.FungusPrioritySignals.DoIncreasePriorityDepth(); |
||||
//one start, 2 change, no end, 2 depth |
||||
Assert.AreEqual(0, endCallCount); |
||||
Assert.AreEqual(1, startCallCount); |
||||
Assert.AreEqual(2, changeCallCount); |
||||
Assert.AreEqual(2, Fungus.FungusPrioritySignals.CurrentPriorityDepth); |
||||
|
||||
|
||||
Fungus.FungusPrioritySignals.DoIncreasePriorityDepth(); |
||||
//one start, 3 change, no end, 3 depth |
||||
Assert.AreEqual(0, endCallCount); |
||||
Assert.AreEqual(1, startCallCount); |
||||
Assert.AreEqual(3, changeCallCount); |
||||
Assert.AreEqual(3, Fungus.FungusPrioritySignals.CurrentPriorityDepth); |
||||
|
||||
|
||||
Fungus.FungusPrioritySignals.DoDecreasePriorityDepth(); |
||||
//one start, 4 change, no end, 2 depth |
||||
Assert.AreEqual(0, endCallCount); |
||||
Assert.AreEqual(1, startCallCount); |
||||
Assert.AreEqual(4, changeCallCount); |
||||
Assert.AreEqual(2, Fungus.FungusPrioritySignals.CurrentPriorityDepth); |
||||
|
||||
|
||||
Fungus.FungusPrioritySignals.DoDecreasePriorityDepth(); |
||||
Fungus.FungusPrioritySignals.DoDecreasePriorityDepth(); |
||||
//one start, 6 change, 1 end, 0 depth |
||||
Assert.AreEqual(1, endCallCount); |
||||
Assert.AreEqual(1, startCallCount); |
||||
Assert.AreEqual(6, changeCallCount); |
||||
Assert.AreEqual(0, Fungus.FungusPrioritySignals.CurrentPriorityDepth); |
||||
|
||||
Fungus.FungusPrioritySignals.OnFungusPriorityStart -= FungusPrioritySignals_OnFungusPriorityStart; |
||||
Fungus.FungusPrioritySignals.OnFungusPriorityEnd -= FungusPrioritySignals_OnFungusPriorityEnd; |
||||
Fungus.FungusPrioritySignals.OnFungusPriorityChange -= FungusPrioritySignals_OnFungusPriorityChange; |
||||
|
||||
//unsubbed so all the same |
||||
Fungus.FungusPrioritySignals.DoIncreasePriorityDepth(); |
||||
Fungus.FungusPrioritySignals.DoDecreasePriorityDepth(); |
||||
//one start, 6 change, 1 end, 0 depth |
||||
Assert.AreEqual(1, endCallCount); |
||||
Assert.AreEqual(1, startCallCount); |
||||
Assert.AreEqual(6, changeCallCount); |
||||
Assert.AreEqual(0, Fungus.FungusPrioritySignals.CurrentPriorityDepth); |
||||
} |
||||
|
||||
private void FungusPrioritySignals_OnFungusPriorityChange(int previousActiveDepth, int newActiveDepth) |
||||
{ |
||||
changeCallCount++; |
||||
} |
||||
|
||||
private void FungusPrioritySignals_OnFungusPriorityEnd() |
||||
{ |
||||
endCallCount++; |
||||
} |
||||
|
||||
private void FungusPrioritySignals_OnFungusPriorityStart() |
||||
{ |
||||
startCallCount++; |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 4b20617e7666fda46bd85a41ce882f9d |
||||
timeCreated: 1523182238 |
||||
licenseType: Free |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
Loading…
Reference in new issue