Browse Source

Added Fungus Priority Signals

Intended to allow fungus to notify the outside world that it is doing something of priority so the outside world can pause
-Tests
-Commands
master
desktop-maesty/steve 7 years ago
parent
commit
7334a463c8
  1. 10
      Assets/Fungus/Scripts/Commands/Priority.meta
  2. 32
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityCurrentCount.cs
  3. 13
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityCurrentCount.cs.meta
  4. 22
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityDecrease.cs
  5. 13
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityDecrease.cs.meta
  6. 22
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityIncrease.cs
  7. 13
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityIncrease.cs.meta
  8. 21
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityReset.cs
  9. 13
      Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityReset.cs.meta
  10. 96
      Assets/Fungus/Scripts/Signals/FungusActiveSignals.cs
  11. 13
      Assets/Fungus/Scripts/Signals/FungusActiveSignals.cs.meta
  12. 10
      Assets/Tests/Signals/Editor.meta
  13. 89
      Assets/Tests/Signals/Editor/FungusPrioritySignalsTest.cs
  14. 13
      Assets/Tests/Signals/Editor/FungusPrioritySignalsTest.cs.meta

10
Assets/Fungus/Scripts/Commands/Priority.meta

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 61d2004f0aa3f1847beb167296c897d8
folderAsset: yes
timeCreated: 1523180219
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

32
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityCurrentCount.cs

@ -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;
}
}
}

13
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityCurrentCount.cs.meta

@ -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:

22
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityDecrease.cs

@ -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();
}
}
}

13
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityDecrease.cs.meta

@ -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:

22
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityIncrease.cs

@ -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();
}
}
}

13
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityIncrease.cs.meta

@ -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:

21
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityReset.cs

@ -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();
}
}
}

13
Assets/Fungus/Scripts/Commands/Priority/FungusPrirorityReset.cs.meta

@ -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:

96
Assets/Fungus/Scripts/Signals/FungusActiveSignals.cs

@ -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
}
}

13
Assets/Fungus/Scripts/Signals/FungusActiveSignals.cs.meta

@ -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:

10
Assets/Tests/Signals/Editor.meta

@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: b38a1b95ff88ff34abb4a8a15679fdf5
folderAsset: yes
timeCreated: 1523182215
licenseType: Free
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

89
Assets/Tests/Signals/Editor/FungusPrioritySignalsTest.cs

@ -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++;
}
}

13
Assets/Tests/Signals/Editor/FungusPrioritySignalsTest.cs.meta

@ -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…
Cancel
Save