using UnityEngine; using UnityEngine.Events; namespace Passer { /// A list of event handlers with GameObject parameters /// This is used to implement a list of functions /// which should be called with a GameObject as parameter. [System.Serializable] public class GameObjectEventHandlers : EventHandlers { public GameObject value { get { if (events == null || events.Count == 0) return null; return events[0].value; } set { foreach (GameObjectEvent goEvent in events) goEvent.value = value; } } public void SetMethod(EventHandler.Type eventType, UnityAction voidAction, int index = 0) { if (events != null && events.Count > index) events[index].SetMethod(EventHandler.Type.OnStart, voidAction); } } /// An EventHandler calling a function with a GameObject type parameter [System.Serializable] public class GameObjectEvent : EventHandler { public GameObjectEvent() { this.eventType = Type.OnChange; } public GameObjectEvent(Type eventType) { this.eventType = eventType; } public void SetMethod(Type newEventType, UnityAction voidAction) { eventType = newEventType; //boolEvent.AddListener(b => voidAction()); } public void SetMethod(Type newEventType, UnityAction boolAction) { eventType = newEventType; //boolEvent.AddListener(boolAction); } public void SetMethod(Type newEventType, UnityAction gameObjectAction) { eventType = newEventType; //gameObjectEvent.AddListener(gameObjectAction); } protected GameObject gameObject; protected bool objectChanged; /// The GameObject value for this event public GameObject value { get { return gameObject; } set { bool newBoolValue = boolInverse ? (value == null) : (value != null); boolChanged = newBoolValue != boolValue; // This is disabled because of ticket #2158070 (https://passervr.com/support/upload/scp/tickets.php?id=1273) //if (!initialized) { // boolChanged = true; // initialized = true; //} _boolValue = newBoolValue; objectChanged = (value != gameObject); gameObject = value; Update(); } } //override protected void Update() { // if (functionCall.parameters.Length == 0) // return; // switch (functionCall.parameters[0].type) { // case FunctionCall.ParameterType.Void: // UpdateVoid(); // break; // case FunctionCall.ParameterType.Float: // UpdateFloat(); // break; // case FunctionCall.ParameterType.Int: // UpdateInt(); // break; // case FunctionCall.ParameterType.Bool: // UpdateBool(); // break; // case FunctionCall.ParameterType.GameObject: // UpdateGameObject(); // break; // case FunctionCall.ParameterType.Rigidbody: // UpdateRigidbody(); // break; // } //} protected override void UpdateGameObject() { if (CheckCondition(boolValue, boolChanged, objectChanged)) { if (functionCall.parameters[0].fromEvent) functionCall.Execute(gameObject); else functionCall.Execute(functionCall.parameters[0].gameObjectConstant); } } protected override void UpdateBool() { if (CheckCondition(boolValue, boolChanged, boolChanged)) { if (functionCall.parameters[0].fromEvent) functionCall.Execute(boolValue); else functionCall.Execute(functionCall.parameters[0].boolConstant); } } } }