execution_lifecycle_access.bend
bendvy-ecs-core@0.1.0.3 · 20 lines · 6 definitions
1import Base
2import bendvy-ecs-core@0.1.0.3/execution_lifecycle_notices.bend as Notice
3import bendvy-ecs-core@0.1.0.3/execution_composer_layout.bend as Layout
4import bendvy-ecs-core@0.1.0.3/execution_state.bend as State
5import bendvy-ecs-core@0.1.0.3/execution_declaration.bend as D
6
7type Next<-S:Data,-H:Type,-origin:Layout.Layout,-selector:Notice.Selector> is Type:
8 Next{next:H -> Notice.Reader<S,origin,selector> -> H & Notice.Reading<S,origin,selector>}
9def Ops(~S:Data,~origin:Layout.Layout,~selector:Notice.Selector,H:Type) -> Type:
10 Next<S,H,origin,selector>
11def next(~S:Data,~H:Type,~origin:Layout.Layout,~selector:Notice.Selector,cap:Next<S,H,origin,selector>,owner:H,reader:Notice.Reader<S,origin,selector>) -> H & Notice.Reading<S,origin,selector>:
12 match cap:
13 case Next{invoke}:invoke(owner,reader)
14def read(~S:Data,~C:Type,~R:Type,~origin:Layout.Layout,~selector:Notice.Selector,scope:State.Scope<S,C,R>,reader:Notice.Reader<S,origin,selector>) -> State.Scope<S,C,R> & Notice.Reading<S,origin,selector>:
15 match scope:
16 case State.Scope{store,resource,handles,tick,prior,+view}:(State.Scope{store,resource,handles,tick,prior,view},Notice.read(~S,~origin,~selector,view,reader))
17def removed(~S:Data,~WC:Type,~C:Type,~R:Type,~layout:Layout.Layout,~route:Layout.Route,~same:{WC == Layout.columns(~S,layout) : Type},~valid:{Layout.grant_valid(~layout,~route) == True{} : Bool}) -> D.Declaration<S,C,R,Ops(~S,~(Layout.origin(layout,route)),~(Notice.Removed{Layout.key(layout,route)}))>:
18 D.Declaration{Next{read(~S,~C,~R,~(Layout.origin(layout,route)),~(Notice.Removed{Layout.key(layout,route)}))},[D.Access{"removed/" ++ Layout.key(layout,route),D.LifecycleAccess{},D.SharedView{},D.ReadOnly{}}]}
19def despawned(~S:Data,~C:Type,~R:Type) -> D.Declaration<S,C,R,Ops(~S,~(Layout.EmptyLayout{}),~(Notice.Despawned{}))>:
20 D.Declaration{Next{read(~S,~C,~R,~(Layout.EmptyLayout{}),~(Notice.Despawned{}))},[D.Access{"despawn",D.LifecycleAccess{},D.SharedView{},D.ReadOnly{}}]}