private void InvokeOnStateChanged() { for (int i = 0; i < onStateChange.GetPersistentEventCount(); i++) { ((MonoBehaviour)onStateChange.GetPersistentTarget(i)).SendMessage(onStateChange.GetPersistentMethodName(i), currentState); } }
private void InitializationButton() { int index = 0; //Initialization for all entity state tags would be to clear the state //change event and rig it up to initialize itself with the dispatchers to //the object itself and a broadcast component if one exists gameObject.GetComponents(typeof(IEntityStateListener)) .Cast <IEntityStateListener>() .ToList() .ForEach(listener => { if (OnStateChanged.GetPersistentEventCount() <= index) { //We must call this internal method to expand the persistent listener collection before //attempting to hack register a new one OnStateChanged.CallMethod("AddPersistentListener", Flags.InstanceAnyVisibility); } //We can't easily register new persistent methods so this hack allows us to contrary to Unity //allows us to do. OnStateChanged.CallMethod("RegisterPersistentListener", Flags.InstanceAnyVisibility, index, listener, typeof(IEntityStateListener).Method(nameof(IEntityStateListener.OnEntityStateChanged))); index++; }); }