restore_data.bend

bendvy-ecs-core@0.1.0.1 · 42 lines · 0 definitions

1import Base
2import bendvy-ecs-core@0.1.0.1/entity_key.bend as Key
3import bendvy-ecs-core@0.1.0.1/world.bend as W
4import bendvy-ecs-core@0.1.0.1/decode_data.bend as D
5import bendvy-ecs-core@0.1.0.1/decode_construction.bend as Constructor
6import bendvy-ecs-core@0.1.0.1/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  BendvyReady{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))