Browse Source
Messages are a simple way to notify other sequences to start executing when something happens. You can specify if the message should only be sent to the same Fungus Script, or to all Fungus Scripts in the scene.master
chrisgregan
10 years ago
5 changed files with 146 additions and 8 deletions
@ -0,0 +1,66 @@ |
|||||||
|
using UnityEngine; |
||||||
|
using System.Collections; |
||||||
|
|
||||||
|
namespace Fungus |
||||||
|
{ |
||||||
|
[CommandInfo("Scripting", |
||||||
|
"Send Message", |
||||||
|
"Sends a message to either the owner Fungus Script or all Fungus Scripts in the scene. Sequences can listen for this message to start execution.")] |
||||||
|
public class SendMessage : Command |
||||||
|
{ |
||||||
|
public enum MessageTarget |
||||||
|
{ |
||||||
|
SameScript, |
||||||
|
AllScripts |
||||||
|
} |
||||||
|
|
||||||
|
public MessageTarget messageTarget; |
||||||
|
public string message; |
||||||
|
|
||||||
|
public override void OnEnter() |
||||||
|
{ |
||||||
|
if (message.Length == 0) |
||||||
|
{ |
||||||
|
Continue(); |
||||||
|
} |
||||||
|
|
||||||
|
FungusScript fungusScript = GetFungusScript(); |
||||||
|
|
||||||
|
ReceiveMessage[] receivers = null; |
||||||
|
if (messageTarget == MessageTarget.SameScript) |
||||||
|
{ |
||||||
|
receivers = fungusScript.GetComponentsInChildren<ReceiveMessage>(); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
receivers = GameObject.FindObjectsOfType<ReceiveMessage>(); |
||||||
|
} |
||||||
|
|
||||||
|
if (receivers != null) |
||||||
|
{ |
||||||
|
foreach (ReceiveMessage receiver in receivers) |
||||||
|
{ |
||||||
|
receiver.OnSendFungusMessage(message); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Continue(); |
||||||
|
} |
||||||
|
|
||||||
|
public override string GetSummary() |
||||||
|
{ |
||||||
|
if (message.Length == 0) |
||||||
|
{ |
||||||
|
return "Error: No message specified"; |
||||||
|
} |
||||||
|
|
||||||
|
return message; |
||||||
|
} |
||||||
|
|
||||||
|
public override Color GetButtonColor() |
||||||
|
{ |
||||||
|
return new Color32(235, 191, 217, 255); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
fileFormatVersion: 2 |
||||||
|
guid: c43743931d28f43f89eced820d907351 |
||||||
|
MonoImporter: |
||||||
|
serializedVersion: 2 |
||||||
|
defaultReferences: [] |
||||||
|
executionOrder: 0 |
||||||
|
icon: {instanceID: 0} |
||||||
|
userData: |
@ -0,0 +1,22 @@ |
|||||||
|
using UnityEngine; |
||||||
|
using System.Collections; |
||||||
|
|
||||||
|
namespace Fungus |
||||||
|
{ |
||||||
|
[EventHandlerInfo("", |
||||||
|
"Receive Message", |
||||||
|
"The sequence will execute when the specified message is received from a SendFungusMessage command.")] |
||||||
|
public class ReceiveMessage : EventHandler |
||||||
|
{ |
||||||
|
public string message; |
||||||
|
|
||||||
|
public void OnSendFungusMessage(string message) |
||||||
|
{ |
||||||
|
if (this.message == message) |
||||||
|
{ |
||||||
|
ExecuteSequence(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue