You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.0 KiB
96 lines
3.0 KiB
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 |
|
} |
|
}
|
|
|