machine_handler_phases_context.bend
bendvy-ecs-core@0.1.0.1 · 21 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/world.bend as W
3import bendvy-ecs-core@0.1.0.1/system.bend as Sys
4import bendvy-ecs-core@0.1.0.1/machine.bend as M
5import bendvy-ecs-core@0.1.0.1/machine_handlers.bend as H
6import bendvy-ecs-core@0.1.0.1/machine_handler_phases.bend as Phase
7import bendvy-ecs-core@0.1.0.1/machine_handler_context.bend as Handler
8import bendvy-ecs-core@0.1.0.1/execution_context.bend as Ctx
9import bendvy-ecs-core@0.1.0.1/trace_facts.bend as Facts
10
11def framed(~S:Data,~C:Type,~R:Type,~E:Data,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,context:Ctx.Context<W.World<S,C,R,E>>) -> Ctx.Context<W.World<S,C,R,E>>:
12 match context:
13 case Ctx.Context{world,trace}:Ctx.Context{frame(world),trace}
14def apply(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~observed:Facts.State -> W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit> & Facts.State,~name:String,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Phase.Owners<S,K,V,C,R,E,runner>,world:Ctx.Context<W.World<S,C,R,E>>) -> Phase.Owners<S,K,V,C,R,E,runner> & Sys.Outcome<Ctx.Context<W.World<S,C,R,E>>,String,Unit>:
15 Phase.apply_with(~S,~K,~V,~C,~R,~E,~runner,~Ctx.Context<W.World<S,C,R,E>>,~Handler.invoke(~S,~C,~R,~E,~V,~runner,~observed),~Handler.initial(~S,~C,~R,~E,~V,~runner,~observed),~Handler.context_take(~S,~C,~R,~E,~V,~runner,~K,~take),~Handler.context_put(~S,~C,~R,~E,~V,~runner,~K,~put),~Handler.context_publish(~S,~C,~R,~E,~V,~runner,~publish,~name),~same,~framed(~S,~C,~R,~E,~frame),owners,world)
16def exit(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~observed:Facts.State -> W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit> & Facts.State,~name:String,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Phase.Owners<S,K,V,C,R,E,runner>,world:Ctx.Context<W.World<S,C,R,E>>) -> Phase.Owners<S,K,V,C,R,E,runner> & Sys.Outcome<Ctx.Context<W.World<S,C,R,E>>,String,Unit>:
17 Phase.exit_with(~S,~K,~V,~C,~R,~E,~runner,~Ctx.Context<W.World<S,C,R,E>>,~Handler.invoke(~S,~C,~R,~E,~V,~runner,~observed),~Handler.initial(~S,~C,~R,~E,~V,~runner,~observed),~Handler.context_take(~S,~C,~R,~E,~V,~runner,~K,~take),~Handler.context_put(~S,~C,~R,~E,~V,~runner,~K,~put),~Handler.context_publish(~S,~C,~R,~E,~V,~runner,~publish,~name),~same,~framed(~S,~C,~R,~E,~frame),owners,world)
18def transition(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~observed:Facts.State -> W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit> & Facts.State,~name:String,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Phase.Owners<S,K,V,C,R,E,runner>,world:Ctx.Context<W.World<S,C,R,E>>) -> Phase.Owners<S,K,V,C,R,E,runner> & Sys.Outcome<Ctx.Context<W.World<S,C,R,E>>,String,Unit>:
19 Phase.transition_with(~S,~K,~V,~C,~R,~E,~runner,~Ctx.Context<W.World<S,C,R,E>>,~Handler.invoke(~S,~C,~R,~E,~V,~runner,~observed),~Handler.initial(~S,~C,~R,~E,~V,~runner,~observed),~Handler.context_take(~S,~C,~R,~E,~V,~runner,~K,~take),~Handler.context_put(~S,~C,~R,~E,~V,~runner,~K,~put),~Handler.context_publish(~S,~C,~R,~E,~V,~runner,~publish,~name),~same,~framed(~S,~C,~R,~E,~frame),owners,world)
20def enter(~S:Data,~K:Data,~V:Data,~C:Type,~R:Type,~E:Data,~runner:W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit>,~observed:Facts.State -> W.World<S,C,R,E> -> H.Invocation<V> -> Sys.Outcome<W.World<S,C,R,E>,String,Unit> & Facts.State,~name:String,~take:W.World<S,C,R,E> -> W.World<S,C,R,E> & M.Slot<S,K,V>,~put:W.World<S,C,R,E> -> M.Slot<S,K,V> -> W.World<S,C,R,E>,~publish:W.World<S,C,R,E> -> M.Transition<V> -> W.World<S,C,R,E>,~same:V -> V -> Bool,~frame:W.World<S,C,R,E> -> W.World<S,C,R,E>,owners:Phase.Owners<S,K,V,C,R,E,runner>,world:Ctx.Context<W.World<S,C,R,E>>) -> Phase.Owners<S,K,V,C,R,E,runner> & Sys.Outcome<Ctx.Context<W.World<S,C,R,E>>,String,Unit>:
21 Phase.enter_with(~S,~K,~V,~C,~R,~E,~runner,~Ctx.Context<W.World<S,C,R,E>>,~Handler.invoke(~S,~C,~R,~E,~V,~runner,~observed),~Handler.initial(~S,~C,~R,~E,~V,~runner,~observed),~Handler.context_take(~S,~C,~R,~E,~V,~runner,~K,~take),~Handler.context_put(~S,~C,~R,~E,~V,~runner,~K,~put),~Handler.context_publish(~S,~C,~R,~E,~V,~runner,~publish,~name),~same,~framed(~S,~C,~R,~E,~frame),owners,world)