Esempio n. 1
0
        /// <summary>
        /// Подписывает элемент графического интерфейса на получение событий, которые для него доступны.
        ///
        /// Например, у стандартного грфического элемента Toggle есть событие onValueChanged, которое принимает делегат UnityAction&lt;bool&gt;
        /// Пусть у источника данных есть свойство MyToggle, которое связано с соответствующим GuiToggleBind. Тогда подписка на событие может выглядеть так:
        /// AddEventListener("MyToggle", "onValueChanged", (proxydata, args) => Debug.Log("MyToggle changed: " + (bool)args[0]));
        /// </summary>
        public GuiEventData AddEventListener(string bindName, string eventName, UniversalGuiEventDelegate callback)
        {
            GuiEventData guiEventData = null;

            IGuiBindable bindableData = _bindableGuiComponents.SingleOrDefault(data => data.GetBindName() == bindName);

            if (bindableData != null)
            {
                object unityEvent =
                    bindableData.GetGuiComponent()
                    .GetType()
                    .GetProperyOrFieldValue(bindableData.GetGuiComponent(), eventName);

                if (unityEvent != null)
                {
                    Type unityEventType = unityEvent.GetType();

                    UnityActionProxy proxyHandler = UnityActionProxy.Create(unityEventType, callback);
                    guiEventData = new GuiEventData(bindName, eventName, bindableData, proxyHandler);
                    RegisteredEvents.Add(guiEventData);


                    unityEventType.GetMethod("AddListener")
                    .Invoke(unityEvent, new object[] { proxyHandler.UnityActionDelegate });
                }
            }

            return(guiEventData);
        }
Esempio n. 2
0
 public GuiEventData(string bindName, string eventName, IGuiBindable guiBindableData, UnityActionProxy unityActionProxy)
 {
     BindName         = bindName;
     EventName        = eventName;
     GuiBindableData  = guiBindableData;
     UnityActionProxy = unityActionProxy;
 }