1 import Base 2 import ./entity_key.bend as Key 3 import ./world.bend as W 4 import ./decode_data.bend as D 5 import ./decode_construction.bend as Constructor 6 import ./snapshot_data.bend as Snapshot 7 8 type Binding is Data: 9 Binding{saved:Key.Key,target:W.Handle} 10 type Change is Data: 11 Removed{target:W.Handle,name:String} 12 Despawned{target:W.Handle} 13 Spawned{target:W.Handle} 14 type Position is Data: 15 Component{saved:Key.Key} 16 Resource{} 17 type Error 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} 24 InvalidResource{name:String,error:Constructor.Error} 25 UnvalidatedDescriptor{name:String} 26 Capacity{nextEntity:U32} 27 type Dispatch is Data: 28 Unhandled{} 29 Staged{} 30 Rejected{error:Constructor.Error} 31 type Prepared is Type: 32 Ready{state:State,snapshot:Snapshot.Snapshot} 33 Refused{state:State,input:Snapshot.Snapshot,error:Error} 34 def lookup_choose(~S:Data,equal:Bool,target:W.Handle,next:Unit -> Maybe<&2,W.Handle>) -> Maybe<&2,W.Handle>: 35 match equal: 36 case True{}:Some{target} 37 case False{}:next(Unit{}) 38 def lookup(~S:Data,+saved:Key.Key,bindings:List<&2,Binding>) -> Maybe<&2,W.Handle>: 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))