FSM для C#
Доделал пакет для Shardy: реализацию машины состояний (finite state machine). Все стейты и триггеры добавляются через билдер, цепочкой.
Finite state machine
Finite state machine
Для перехода на стейт надо активировать триггер(ы):
fsm.Trigger(Action.Down);
fsm.Trigger(Action.Down);
В таком случае получится такой результат:
initial is standing
on exit standing
on enter sitting
on exit sitting
on enter lying
Ещё подсмотрел, как сгенерить описание для UML диаграммы и отрендерить её на сайте или на этом, по-моему у них один движок:
FSM UML diagram
FSM UML diagram
Чтобы сделать диаграмму более «интуитивной», вместо слова state используется ключевое слово agent, этом случае можно рисовать разные линии.
@startuml
skin rose
title TestFSM
left to right direction
agent Standing
agent Sitting
agent Lying
agent Jumping
note left of Jumping
some help message here
end note
Start --> Standing
Standing --> Sitting : Down
Standing ~~> Jumping : Space
Sitting --> Lying : Down
Sitting --> Standing : Up
Lying --> Sitting : Up
Jumping --> Standing : Down
@enduml
Ещё к каждому переходу можно добавлять условия, (на картинке выше их нет) об этом подробнее в документации.
Если у перехода между состояниями есть условие(я), то линия будет рисоваться пунктирной, а если нет триггера — то с крестиком на конце. Актуально когда состояний и переходов много, можно сгенерить диаграмму и посмотреть нет ли косяков.