Ejemplo n.º 1
0
 private void InvokeOnStateChanged()
 {
     for (int i = 0; i < onStateChange.GetPersistentEventCount(); i++)
     {
         ((MonoBehaviour)onStateChange.GetPersistentTarget(i)).SendMessage(onStateChange.GetPersistentMethodName(i), currentState);
     }
 }
Ejemplo n.º 2
0
        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++;
            });
        }