Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Help: hierarchical state machine #31

Open
KammutierSpule opened this issue May 6, 2020 · 2 comments
Open

Help: hierarchical state machine #31

KammutierSpule opened this issue May 6, 2020 · 2 comments

Comments

@KammutierSpule
Copy link

Hello!
Thanks for this nice project and well documented!
I didn't tried it yet, I'm learning how could I use it.
I am trying to implement the following hierarchical state machine, that I will try explain with ascii code:

A)L0S0->B)L0S1->C)L0S2->...
A)L1S0  B)L1S0  C)L1S0
A)L1S1  B)L1S1  C)L1S1
A)L1S2  B)L1S2  C)L1S2

So I have at L0 State0 that can switch to L0 S1 (or L0 State N-1), ..
but then on each L0 State, I can switch to a new L1 state for each
On L1 I will have L1 S0 ->S1->S2->S0.. and then can return to L0 from any point

From this library, there are Entry and Exit callbacks for each state.
But I would like to implement an Entry/Exit for each Level
So when it enter or exit a Level it will call a function to prepare things for that level

How can I implement an Entry/Exit for a Level?

@kiishor
Copy link
Owner

kiishor commented May 7, 2020

Hi Mario Luzeiro,

The UML state machine explained in Wikipedia or other resources don't have a concept of entry and exit callback for level. The entry and exit actions are for the State.

I couldn't understand the complete hierarchy of your states from your description.
Does the below diagram matches with your description? If yes you can explain your specific requirement based on the below diagram. However, if you post your state diagram it will be useful to understand your requirement.

State Diagram

As shown in the diagram, the state transition from L1S1to L1S4 will be L1S1->L0S0->L1S1->L1S4.
And their entry-exit actions flow will be,

L1S1->Exit()
L0S0->Entry()
L0S0->Exit()
L1S1->Entry()
L1S1->Exit()
L1S4->Entry()
  1. Do you need a common entry and exit callback for Level? e.g. a single entry and exit callback for L1S0 to L1S8. Also a common entry and exit callback for L0S0, L0S1, and L0S2.
    OR
  2. Do you need an additional entry action for each state? This entry action will be triggered whenever there a is state transition between different levels.
    In both cases, I don't think it conforms to the UML hierarchical state machine specification. It is possible to fork and modify the framework to suit your requirement. However, I would recommend you to stick to the standard state machine philosophy.

Will it be possible to implement your requirement by adding logic inside the entry action of each state?
OR
Can we solve your problem by rearranging the states and their hierarchy?

@KammutierSpule
Copy link
Author

Thanks for your answer!
I'm not familiar with the UML notation. I made a small change on your diagram:
image

Each L1 is specific for each L0Sx, there wont be transitions between L1 for different L0Sx states

Will it be possible to implement your requirement by adding logic inside the entry action of each state?
OR
Can we solve your problem by rearranging the states and their hierarchy?

I have that in mind
A possibility would be to implement some internal logic (bool flags etc) that I can use to enter/exit of L0
Another possibility I think would be to use separate and additional State Machines.. like one state machine with just 1 state so I can add the Entry/Exit from Level. So each Level is implemented with a 1 single state State Machine

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants