示例#1
0
    public void AddEventHandler(string eventName, Element attachedTo, EventDelegate callbackDelegate)
    {
        if (!this.registeredEvents.ContainsKey(eventName))
        {
            return;
        }

        var registeredEvent        = this.registeredEvents[eventName];
        var registeredEventHandler = new RegisteredEventHandler()
        {
            EventName       = eventName,
            RegisteredEvent = registeredEvent,
            Delegate        = callbackDelegate,
            Element         = attachedTo,
        };

        this.registeredEventHandlers.Add(registeredEventHandler);

        foreach (var element in this.elementCollection.GetAll())
        {
            if (registeredEvent.ElementType.IsAssignableFrom(element.GetType()))
            {
                var actions = (EventHandlerActions <Element>)registeredEvent.Delegate.DynamicInvoke(element, callbackDelegate) !;
                actions.Add(element);
            }
        }
    }
示例#2
0
    public void AddEventHandler(string eventName, Element attachedTo, EventDelegate callbackDelegate)
    {
        if (!this.registeredEvents.ContainsKey(eventName))
        {
            return;
        }

        var registeredEvent        = this.registeredEvents[eventName];
        var registeredEventHandler = new RegisteredEventHandler()
        {
            EventName       = eventName,
            RegisteredEvent = registeredEvent,
            Delegate        = callbackDelegate,
            Element         = attachedTo,
        };

        this.registeredEventHandlers.Add(registeredEventHandler);

        void elementCheckingDelegate(object[] objects)
        {
            if (objects.First() is Element element)
            {
                if (element != attachedTo && !element.IsChildOf(attachedTo))
                {
                    return;
                }
            }

            if (objects.Length == 0)
            {
                callbackDelegate.DynamicInvoke(null, Array.Empty <object>());
            }
            else if (objects.Length == 1)
            {
                callbackDelegate.DynamicInvoke(objects.First(), Array.Empty <object>());
            }
            else
            {
                callbackDelegate.DynamicInvoke(objects.First(), objects.Skip(1));
            }
        }

        ScriptCallbackDelegateWrapper wrapper = new ScriptCallbackDelegateWrapper(elementCheckingDelegate, new());

        foreach (var element in this.elementRepository.GetAll())
        {
            if (registeredEvent.ElementType.IsAssignableFrom(element.GetType()))
            {
                var actions = (EventHandlerActions <Element>)registeredEvent.Delegate.DynamicInvoke(element, wrapper) !;
                actions.Add(element);
            }
        }
    }
 public Gesture_Listener(Gesture_Controler gestureControler,  Gesture_Event gesture)
 {
     registerHandler = new RegisteredEventHandler(RegisterGesture);
     continueHandler = new ContinuedEventHandler(ContinueGesture);
     terminateHandler = new TerminatedEventHandler(TerminateGesture);
     failHandler = new FailEventHandler(FailGesture);
     this.gestureEvent = gesture;
     this.gestureEvent.Registered += registerHandler;
     this.gestureEvent.Continued += continueHandler;
     this.gestureEvent.Terminated += terminateHandler;
     this.gestureEvent.Failed += failHandler;
     this.gestureControler = gestureControler;
 }
示例#4
0
 public Gesture_Listener(Gesture_Controler gestureControler, Gesture_Event gesture)
 {
     registerHandler               = new RegisteredEventHandler(RegisterGesture);
     continueHandler               = new ContinuedEventHandler(ContinueGesture);
     terminateHandler              = new TerminatedEventHandler(TerminateGesture);
     failHandler                   = new FailEventHandler(FailGesture);
     this.gestureEvent             = gesture;
     this.gestureEvent.Registered += registerHandler;
     this.gestureEvent.Continued  += continueHandler;
     this.gestureEvent.Terminated += terminateHandler;
     this.gestureEvent.Failed     += failHandler;
     this.gestureControler         = gestureControler;
 }
示例#5
0
 /// <summary>
 ///   Registers the given function to be run when the bots gets registered on the server (usually after MOTD).
 /// </summary>
 /// <param name = "handler">
 ///   The function to register.
 /// </param>
 public void RegisterOnRegisteredHook(RegisteredEventHandler handler)
 {
     AlarisBase.Instance.Connection.Listener.OnRegistered += handler;
 }