inspector_query_world.bend
bendvy-ecs-core@0.1.0.0 · 34 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.0/change_tick.bend as Tick
3import inspector_query.bend as Q
4import inspector.bend as I
5import check.bend as K
6import world.bend as W
7def inspect_handles_joined(~S:Data,~Store:Type,~R:Type,~E:Data,cursor:Maybe<&2,Tick.Tick>,observed:W.World<S,Store,R,E> & List<&2,W.Handle<S>>) -> I.Frame<S,Store,R,E> & List<&2,W.Handle<S>>:
8 (world,value)=observed
9 (I.Frame{world,cursor},value)
10def inspect_handles(~S:Data,~Store:Type,~R:Type,~E:Data,frame:I.Frame<S,Store,R,E>) -> I.Frame<S,Store,R,E> & List<&2,W.Handle<S>>:
11 match frame:
12 case I.Frame{world,cursor}:inspect_handles_joined(~S,~Store,~R,~E,cursor,W.handles(~S,~Store,~R,~E,world))
13def inspect_valid_joined(~S:Data,~Store:Type,~R:Type,~E:Data,cursor:Maybe<&2,Tick.Tick>,observed:W.World<S,Store,R,E> & Bool) -> I.Frame<S,Store,R,E> & Bool:
14 (world,value)=observed
15 (I.Frame{world,cursor},value)
16def inspect_valid(~S:Data,~Store:Type,~R:Type,~E:Data,frame:I.Frame<S,Store,R,E>,target:W.Handle<S>) -> I.Frame<S,Store,R,E> & Bool:
17 match frame:
18 case I.Frame{world,cursor}:inspect_valid_joined(~S,~Store,~R,~E,cursor,W.valid(~S,~Store,~R,~E,world,target))
19def inspect_world(~S:Data,~Store:Type,~R:Type,~E:Data) -> Q.WorldRead<I.Frame<S,Store,R,E>,S>:
20 Q.WorldRead{inspect_handles(~S,~Store,~R,~E),inspect_valid(~S,~Store,~R,~E)}
21def check_handles_joined(~S:Data,~Store:Type,~R:Type,~E:Data,observed:W.World<S,Store,R,E> & List<&2,W.Handle<S>>) -> K.Frame<S,Store,R,E> & List<&2,W.Handle<S>>:
22 (world,value)=observed
23 (K.Frame{world},value)
24def check_handles(~S:Data,~Store:Type,~R:Type,~E:Data,frame:K.Frame<S,Store,R,E>) -> K.Frame<S,Store,R,E> & List<&2,W.Handle<S>>:
25 match frame:
26 case K.Frame{world}:check_handles_joined(~S,~Store,~R,~E,W.handles(~S,~Store,~R,~E,world))
27def check_valid_joined(~S:Data,~Store:Type,~R:Type,~E:Data,observed:W.World<S,Store,R,E> & Bool) -> K.Frame<S,Store,R,E> & Bool:
28 (world,value)=observed
29 (K.Frame{world},value)
30def check_valid(~S:Data,~Store:Type,~R:Type,~E:Data,frame:K.Frame<S,Store,R,E>,target:W.Handle<S>) -> K.Frame<S,Store,R,E> & Bool:
31 match frame:
32 case K.Frame{world}:check_valid_joined(~S,~Store,~R,~E,W.valid(~S,~Store,~R,~E,world,target))
33def check_world(~S:Data,~Store:Type,~R:Type,~E:Data) -> Q.WorldRead<K.Frame<S,Store,R,E>,S>:
34 Q.WorldRead{check_handles(~S,~Store,~R,~E),check_valid(~S,~Store,~R,~E)}