restore_data.bend
bendvy-ecs-core@0.1.0.0 · 42 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.0/entity_key.bend as Key
3import bendvy-ecs-core@0.1.0.0/world.bend as W
4import bendvy-ecs-core@0.1.0.0/decode_data.bend as D
5import bendvy-ecs-core@0.1.0.0/decode_construction.bend as Constructor
6import bendvy-ecs-core@0.1.0.0/snapshot_data.bend as Snapshot
7
8type Binding<S:Data> is Data:
9 Binding{saved:Key.Key,target:W.Handle<S>}
10type Change<S:Data> is Data:
11 Removed{target:W.Handle<S>,name:String}
12 Despawned{target:W.Handle<S>}
13 Spawned{target:W.Handle<S>}
14type Position is Data:
15 Component{saved:Key.Key}
16 Resource{}
17type Error<Custom:Data> is Data:
18 InvalidSnapshot{path:String}
19 UnsupportedVersion{version:D.Raw}
20 DuplicateEntity{saved:Key.Key}
21 UnknownComponent{saved:Key.Key,name:String}
22 UnknownResource{name:String}
23 InvalidComponent{saved:Key.Key,name:String,error:Constructor.Error<Custom>}
24 InvalidResource{name:String,error:Constructor.Error<Custom>}
25 UnvalidatedDescriptor{name:String}
26 Capacity{nextEntity:U32}
27type Dispatch<Custom:Data> is Data:
28 Unhandled{}
29 Staged{}
30 Rejected{error:Constructor.Error<Custom>}
31type Prepared<State:Type,Custom:Data> is Type:
32 Ready{state:State,snapshot:Snapshot.Snapshot}
33 Refused{state:State,input:Snapshot.Snapshot,error:Error<Custom>}
34def lookup_choose(~S:Data,equal:Bool,target:W.Handle<S>,next:Unit -> Maybe<&2,W.Handle<S>>) -> Maybe<&2,W.Handle<S>>:
35 match equal:
36 case True{}:Some{target}
37 case False{}:next(Unit{})
38def lookup(~S:Data,+saved:Key.Key,bindings:List<&2,Binding<S>>) -> Maybe<&2,W.Handle<S>>:
39 match bindings:
40 case []:None{}
41 case Binding{+key,+target} <> rest:
42 lookup_choose(~S,Key.equal(saved,key),target,_ => lookup(~S,saved,rest))