Пример #1
0
        public static void TriggerEventHandler <TArgs>(this GraphStack stack, Func <EventHook, bool> predicate, TArgs args, Func <IGraphParentElement, bool> recurse, bool force)
        {
            Ensure.That(nameof(stack)).IsNotNull(stack);

            GraphReference reference = null;

            foreach (var element in stack.graph.elements)
            {
                if (element is IGraphEventHandler <TArgs> handler)
                {
                    if (reference == null)
                    {
                        reference = stack.ToReference();
                    }

                    if (predicate == null || predicate.Invoke(handler.GetHook(reference)))
                    {
                        if (force || handler.IsListening(reference))
                        {
                            handler.Trigger(reference, args);
                        }
                    }
                }

                if (element is IGraphParentElement parentElement && recurse(parentElement))
                {
                    if (stack.TryEnterParentElementUnsafe(parentElement))
                    {
                        stack.TriggerEventHandler(predicate, args, recurse, force);
                        stack.ExitParentElement();
                    }
                }
            }
        }
Пример #2
0
 public override void StopListening(GraphStack stack)
 {
     if (AttemptUnregister())
     {
         base.StopListening(stack);
     }
 }
Пример #3
0
        public override void StopListening(GraphStack stack)
        {
            base.StopListening(stack);

            T currentVoidEvent = Flow.FetchValue <T>(_event, stack.ToReference());

            currentVoidEvent?.Unregister(_eventRaisedHandler);
        }
Пример #4
0
 public void StopListening(GraphStack stack)
 {
     if (stack.TryEnterParentElement(this))
     {
         nest.graph.StopListening(stack);
         stack.ExitParentElement();
     }
 }
        public override void StartListening(GraphStack stack)
        {
            base.StartListening(stack);
            var data = stack.GetElementData <Data>(this);

            data._previousValue = null;
            data.firstExecution = true;
        }
Пример #6
0
        public void StartListening(GraphStack stack)
        {
            stack.GetGraphData <FlowGraphData>().isListening = true;

            foreach (var unit in units)
            {
                (unit as IGraphEventListener)?.StartListening(stack);
            }
        }
Пример #7
0
        public override void StartListening(GraphStack stack)
        {
            base.StartListening(stack);

            var data = stack.GetElementData <Data>(this);

            data.triggered = false;
            data.time      = 0;
        }
Пример #8
0
        public void StopListening(GraphStack stack)
        {
            foreach (var unit in units)
            {
                (unit as IGraphEventListener)?.StopListening(stack);
            }

            stack.GetGraphData <FlowGraphData>().isListening = false;
        }
Пример #9
0
        public override void StopListening(GraphStack stack)
        {
            base.StopListening(stack);
            var data      = stack.GetElementData <Data>(this);
            var reference = stack.ToReference();
            Action <string, string> handler = (_storyOptionsName, eventName) => TriggerOption(reference, _storyOptionsName, eventName);

            data.handler = handler;
            dh           = handler;
        }
Пример #10
0
        public override void StartListening(GraphStack stack)
        {
            //m_machine = stack.machine;
            m_graphReference = stack.ToReference();

            if (startOn && AttemptRegister(Flow.New(graphReference)))
            {
                base.StartListening(stack);
            }
        }
Пример #11
0
        public void StartListening(GraphStack stack)
        {
            if (stack.TryEnterParentElement(this))
            {
                nest.graph.StartListening(stack);
                stack.ExitParentElement();
            }

            stack.GetElementData <Data>(this).isListening = true;
        }
Пример #12
0
        public void StopListening(GraphStack stack)
        {
            stack.GetElementData <Data>(this).isListening = false;

            if (stack.TryEnterParentElement(this))
            {
                nest.graph.StopListening(stack);
                stack.ExitParentElement();
            }
        }
Пример #13
0
    public void StopListening(GraphStack stack)
    {
        var data = stack.GetElementData<Data>(this);
        if (data.UpdateAction == null) return;

        var hook = new EventHook(EventHooks.Update, stack.machine);
        EventBus.Unregister(hook, data.UpdateAction);

        if (data.IsOpened) data.Close();
        data.UpdateAction = null;
    }
Пример #14
0
    public void StartListening(GraphStack stack)
    {
        var data = stack.GetElementData<Data>(this);
        if (data.UpdateAction != null) return;

        var reference = stack.ToReference();
        data.UpdateAction = args => OnUpdate(reference);

        var hook = new EventHook(EventHooks.Update, stack.machine);
        EventBus.Register(hook, data.UpdateAction);
    }
Пример #15
0
        public void StartListening(GraphStack stack)
        {
            Debug.Log("Start");
            isListening = true;

            var fm = selfReference.self.GetComponent <FlowMachine>();

            if (fm)
            {
                currCoroutine = fm.StartCoroutine(DoCoroutine());
            }
        }
Пример #16
0
 public void StopListening(GraphStack stack)
 {
     Debug.Log("Stop");
     isListening = false;
     if (currCoroutine != null)
     {
         var fm = selfReference.self.GetComponent <FlowMachine>();
         if (fm)
         {
             fm.StopCoroutine(currCoroutine);
         }
     }
 }
Пример #17
0
        public void StopListening(GraphStack stack)
        {
            var activeStates = GetActiveStatesNoAlloc(stack);

            foreach (var state in activeStates)
            {
                (state as IGraphEventListener)?.StopListening(stack);
            }

            activeStates.Free();

            stack.GetGraphData <StateGraphData>().isListening = false;
        }
Пример #18
0
        public void StopListening(GraphStack stack)
        {
            var data = stack.GetElementData <Data>(this);

            if (!data.isListening)
            {
                return;
            }

            var hook = new EventHook(EventHooks.Update, stack.machine);

            EventBus.Unregister(hook, data.update);
            data.update      = null;
            data.isListening = false;
        }
        public override void StartListening(GraphStack stack)
        {
            base.StartListening(stack);
            var graphReference = stack.ToReference();

            var pi          = Flow.FetchValue <PlayerInput>(Target, graphReference);
            var inputAction = Flow.FetchValue <InputAction>(InputAction, graphReference);

            if (inputAction == null)
            {
                return;
            }
            m_Action = pi
                ? pi.actions.FindAction(inputAction.id)
                : inputAction.actionMap != null ? inputAction : null;
        }
Пример #20
0
        public void StartListening(GraphStack stack)
        {
            var data = stack.GetElementData <Data>(this);

            if (data.isListening)
            {
                return;
            }

            var reference = stack.ToReference();
            var hook      = new EventHook(EventHooks.Update, stack.machine);
            Action <EmptyEventArgs> update = args => TriggerUpdate(reference);

            EventBus.Register(hook, update);
            data.update      = update;
            data.isListening = true;
        }
Пример #21
0
        public override void StartListening(GraphStack stack)
        {
            base.StartListening(stack);

            Flow flow         = Flow.New(stack.ToReference());
            T    currentEvent = flow.GetValue <T>(_event);

            _eventRaisedHandler = (value) =>
            {
                flow.Invoke(trigger);
                _currentValue = value;
            };

            if (currentEvent)
            {
                currentEvent.Unregister(_eventRaisedHandler);
                currentEvent.Register(_eventRaisedHandler);
            }
        }
Пример #22
0
        public virtual void StartListening(GraphStack stack)
        {
            var data = stack.GetElementData <Data>(this);

            if (data.isListening)
            {
                return;
            }

            if (register)
            {
                var            reference = stack.ToReference();
                var            hook      = GetHook(reference);
                Action <TArgs> handler   = args => Trigger(reference, args);
                EventBus.Register(hook, handler);

                data.hook    = hook;
                data.handler = handler;
            }

            data.isListening = true;
        }
Пример #23
0
        private void UpdateTarget(GraphStack stack)
        {
            var data = stack.GetElementData <Data>(this);

            var wasListening = data.isListening;

            var newTarget = Flow.FetchValue <GameObject>(target, stack.ToReference());

            if (newTarget != data.target)
            {
                if (wasListening)
                {
                    StopListening(stack);
                }

                data.target = newTarget;

                if (wasListening)
                {
                    StartListening(stack, false);
                }
            }
        }
Пример #24
0
        protected void StartListening(GraphStack stack, bool updateTarget)
        {
            if (updateTarget)
            {
                UpdateTarget(stack);
            }

            var data = stack.GetElementData <Data>(this);

            if (data.target == null)
            {
                return;
            }

            if (UnityThread.allowsAPI)
            {
                if (MessageListenerType != null) // can be null. CustomEvent doesn't need a message listener
                {
                    MessageListener.AddTo(MessageListenerType, data.target);
                }
            }

            base.StartListening(stack);
        }
Пример #25
0
        public virtual void StopListening(GraphStack stack)
        {
            var data = stack.GetElementData <Data>(this);

            if (!data.isListening)
            {
                return;
            }

            // The coroutine's flow will dispose at the next frame, letting us
            // keep the current flow for clean up operations if needed
            foreach (var activeCoroutine in data.activeCoroutines)
            {
                activeCoroutine.StopCoroutine(false);
            }

            if (register)
            {
                EventBus.Unregister(data.hook, data.handler);
                data.handler = null;
            }

            data.isListening = false;
        }
Пример #26
0
 public override void StartListening(GraphStack stack)
 {
     StartListening(stack, true);
 }
 public override void StopListening(GraphStack stack)
 {
     base.StopListening(stack);
     m_Action = null;
 }
Пример #28
0
 public void RestoreStack(GraphStack stack)
 {
     this.stack.CopyFrom(stack);
 }
Пример #29
0
 public void DisposePreservedStack(GraphStack stack)
 {
     stack.Dispose();
     preservedStacks.Remove(stack);
 }
Пример #30
0
        public override void StartListening(GraphStack stack)
        {
            base.StartListening(stack);

            var data = stack.GetElementData <Data>(this);
        }