SEC.DispatchSmartEvent CreateDispatchSmartEvent(SED.EventVar s) { var go = new GameObject("DISPATCHER"); var w = go.AddComponent <SEC.DispatchSmartEvent>(); var sow = new SerializedObject(w); sow.FindProperty("_event").FindPropertyRelative("_smartEvent").objectReferenceValue = s; sow.ApplyModifiedProperties(); sow.Update(); return(w); }
SEC.ListenSmartEvent CreateListenSmartEvent(SED.EventVar s) { var go = new GameObject("LISTENER"); var l = go.AddComponent <SEC.ListenSmartEvent>(); var sol = new SerializedObject(l); var arr = sol.FindProperty("_data"); arr.arraySize++; var el = arr.GetArrayElementAtIndex(0); el.FindPropertyRelative("_smartEvent").objectReferenceValue = s; sol.ApplyModifiedProperties(); sol.Update(); var evt = ((UnityEvent)el.FindPropertyRelative("_onEvent").GetObject()); evt.AddListener(OnEvent); var fr = (SmartEvent.EventListener)el.GetObject(); fr.GetType().GetField("_useMulti", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(fr, false); fr.unityEventOnReceive = true; return(l); }