lifetime_scope.bend
bendvy-ecs-core@0.1.0.3 · 29 lines · 7 definitions
1import Base
2import entity_key.bend as Key
3import bendvy-ecs-core@0.1.0.3/world.bend as W
4import bendvy-ecs-core@0.1.0.3/string_equality.bend as Text
5
6
7type Scope<-S:Data> is Data:
8 Scope{namespace:U32,name:String}
9type Member is Data:
10 Member{name:String,id:Key.Key}
11type Store<-S:Data,C:Type> is Type:
12 Store{components:C,members:List<&2,Member>}
13def empty(~S:Data,~C:Type,components:C) -> Store<S,C>:
14 Store{components,[]}
15def without(members:List<&2,Member>,+id:Key.Key) -> List<&2,Member>:
16 match members:
17 case []:[]
18 case Member{+name,+mid} <> rest:
19 +remaining = without(rest,id)
20 Bool.pick(List<&2,Member>,Key.equal(mid,id),remaining,Member{name,mid} <> remaining)
21def select(members:List<&2,Member>,+name:String) -> List<&2,Key.Key>:
22 match members:
23 case []:[]
24 case Member{+key,+id} <> rest:
25 +remaining = select(rest,name)
26 Bool.pick(List<&2,Key.Key>,Text.equal(key,name),id <> remaining,remaining)
27type SpawnResult<S:Data,P:Type> is Type:
28 Spawned{handle:W.Handle<S>}
29 SpawnRejected{payload:P,error:W.WorldError}