Giter VIP home page Giter VIP logo

Comments (5)

ursenzler avatar ursenzler commented on May 21, 2024

A transition on a superstate is only called when there is no transition lower in the hierarchy that matches the event and its guard returns true.

I suggest that you add the action to be executed in the transition actions lower in the hierarchy.

from statemachine.

muisje avatar muisje commented on May 21, 2024

Yeah, but how do you know what the super states are?

I've looked it doing it with extensions at the firing event but I'm unable to see what the super state is. Maybe i don't get it, but i like to access https://github.com/appccelerate/statemachine/blob/master/source/Appccelerate.StateMachine/Machine/States/IStateDefinition.cs because there i can see what the super state is. And the events and actions. Like that i could just do recursively for each super state call the action which has the same event.

I cannot do it in a pretty way either at definition since i can't access the hierarchy when building the state machine.

The least favorable way to do this is having an hierarchy defined as a copy, but I don't think that that is a great solution.

Do you've any other suggestions or am i understanding somethings not correctly?

from statemachine.

ursenzler avatar ursenzler commented on May 21, 2024

I see only the way to do this, but as I understood you, that is what you want to prevent:

(pseudo code)
DefineHierarchyOn(Superstate).WithInitialSubState(A).AndChildren(B);

In(SuperState).On(E).Execute(Action);
In(A).On(E).Execute(Action, AnotherAction)
In(B).On(E).Execute(Action, YetAnotherAction)

or call Action from inside AnotherAction and YetAnotherAction.

I thought about adding a possibility to specify whether a transition should be passed from superstates to its children, but I don't really like that idea. I think that calling the action explicitly, makes the state machine easier to understand.

from statemachine.

muisje avatar muisje commented on May 21, 2024

So what I thought would work before you told me that the deepest event would get fired on duplicate event:

In(SuperState).On(E).Execute(Action);
In(A).On(E).Execute(Action, AnotherAction);
In(B).On(E).Execute(Action, YetAnotherAction);

I think that is pretty explicit. And you could maybe in the define hierarchy choose then what behaviour you want on duplicate event. So by default it would only call the lowest in hierarchy (to preserve backwards compatibility) and if you do define it would call all actions in the hierarchy on the event.

And the second option sounds less favorable to me when using it, because you do have to know which other actions you need to call in the sub state actions.

from statemachine.

ursenzler avatar ursenzler commented on May 21, 2024

As I understand your idea, it wouldn't work. I understand that you assume that transitions in super states for the same event would have the same target state. However, that is not true. A child state could point to Foo, a superstate to Bar.
Please correct me if I didn't understand your idea.

from statemachine.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.