Files
2024-11-20 15:21:28 +01:00

92 lines
2.3 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using System;
using UnityEngine;
using System.Collections.Generic;
namespace HutongGames.PlayMaker.Actions
{
[Obsolete("This action is obsolete; use Send Event with Event Target instead.")]
[ActionCategory(ActionCategory.StateMachine)]
[Tooltip("Sends an Event to all FSMs in the scene or to all FSMs on a Game Object.\nNOTE: This action won't work on the very first frame of the game...")]
public class BroadcastEvent : FsmStateAction
{
[RequiredField]
public FsmString broadcastEvent;
[Tooltip("Optionally specify a game object to broadcast the event to all FSMs on that game object.")]
public FsmGameObject gameObject;
[Tooltip("Broadcast to all FSMs on the game object's children.")]
public FsmBool sendToChildren;
public FsmBool excludeSelf;
public override void Reset()
{
broadcastEvent = null;
gameObject = null;
sendToChildren = false;
excludeSelf = false;
}
public override void OnEnter()
{
if (!string.IsNullOrEmpty(broadcastEvent.Value))
{
if (gameObject.Value != null)
{
Fsm.BroadcastEventToGameObject(gameObject.Value, broadcastEvent.Value, sendToChildren.Value, excludeSelf.Value);
//BroadcastToGameObject(gameObject.Value);
}
else
{
Fsm.BroadcastEvent(broadcastEvent.Value, excludeSelf.Value);
//BroadcastToAll();
}
}
Finish();
}
/*
void BroadcastToAll()
{
// copy the list in case broadcast event changes Fsm.FsmList
var fsmList = new List<Fsm>(Fsm.FsmList);
//Debug.Log("BroadcastToAll");
foreach (var fsm in fsmList)
{
if (excludeSelf.Value && fsm == Fsm)
{
continue;
}
//Debug.Log("to: " + fsm.Name);
fsm.Event(broadcastEvent.Value);
}
}
void BroadcastToGameObject(GameObject go)
{
if (go == null) return;
Fsm.BroadcastEventToGameObject(go, broadcastEvent.Value, sendToChildren.Value, excludeSelf.Value);
if (go == null) return;
var fsmComponents = go.GetComponents<PlayMakerFSM>();
foreach (var fsmComponent in fsmComponents)
{
fsmComponent.Fsm.Event(broadcastEvent.Value);
}
if (sendToChildren.Value)
{
for (int i = 0; i < go.transform.childCount; i++)
{
BroadcastToGameObject(go.transform.GetChild(i).gameObject);
}
}
}*/
}
}