restore_graph_schema.bend
bendvy-ecs-core@0.1.0.0 · 41 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.0/change_tick.bend as Tick
3import bendvy-ecs-core@0.1.0.0/restore_schema.bend as Basic
4import bendvy-ecs-core@0.1.0.0/snapshot_schema.bend as Save
5import bendvy-ecs-core@0.1.0.0/restore_data.bend as R
6import bendvy-ecs-core@0.1.0.0/relation_commands.bend as Relation
7import bendvy-ecs-core@0.1.0.0/relation_types.bend as G
8import bendvy-ecs-core@0.1.0.0/owner_product.bend as Product
9import bendvy-ecs-core@0.1.0.0/ordinary_schema.bend as Ordinary
10import bendvy-ecs-core@0.1.0.0/world.bend as W
11import bendvy-ecs-core@0.1.0.0/decode_data.bend as D
12def cleared(~S:Data,~C:Type,graph:G.Graph<S>,result:C & List<&2,R.Change<S>>) -> Relation.Store<S,C> & List<&2,R.Change<S>>:
13 match result:
14 case (components,changes):(Relation.Store{components,graph},changes)
15def clear(~S:Data,~C:Type,~clearBase:C -> W.Handle<S> -> C & List<&2,R.Change<S>>,store:Relation.Store<S,C>,handle:W.Handle<S>) -> Relation.Store<S,C> & List<&2,R.Change<S>>:
16 match store:
17 case Relation.Store{components,graph}:cleared(~S,~C,graph,clearBase(components,handle))
18def inserted(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~State:Type,graph:G.Graph<S>,machines:Machines,result:(C & Resources) & State) -> (Relation.Store<S,C> & Product.Owner<Resources,Machines>) & State:
19 match result:
20 case ((components,resources),state):((Relation.Store{components,graph},Product.Owner{resources,machines}),state)
21def insert(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch<Custom>,~release:State -> State,~clearBase:C -> W.Handle<S> -> C & List<&2,R.Change<S>>,~insertBase:C -> Resources -> State -> List<&2,R.Binding<S>> -> Tick.Tick -> (C & Resources) & State,store:Relation.Store<S,C>,resources:Product.Owner<Resources,Machines>,state:State,bindings:List<&2,R.Binding<S>>,tick:Tick.Tick) -> (Relation.Store<S,C> & Product.Owner<Resources,Machines>) & State:
22 match store resources:
23 case Relation.Store{components,graph} Product.Owner{resource,machines}:inserted(~S,~C,~Resources,~Machines,~State,graph,machines,insertBase(components,resource,state,bindings,tick))
24def lift(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~State:Type,~Custom:Data,~stage:State -> R.Position -> D.Field -> State & R.Dispatch<Custom>,~release:State -> State,~clearBase:C -> W.Handle<S> -> C & List<&2,R.Change<S>>,~insertBase:C -> Resources -> State -> List<&2,R.Binding<S>> -> Tick.Tick -> (C & Resources) & State,~Recovery:Type,~commit:State -> State,~takeRecovery:State -> State & Recovery,schema:Basic.Schema<S,C,Resources,State,Custom,stage,release,clearBase,insertBase,Recovery,commit,takeRecovery>) -> Basic.Schema<S,Relation.Store<S,C>,Product.Owner<Resources,Machines>,State,Custom,stage,release,clear(~S,~C,~clearBase),insert(~S,~C,~Resources,~Machines,~State,~Custom,~stage,~release,~clearBase,~insertBase),Recovery,commit,takeRecovery>:
25 match schema:
26 case Basic.Schema{Ordinary.Schema{entries}}:Basic.Schema{Ordinary.Schema{entries}}
27def component_saved(~S:Data,~C:Type,graph:G.Graph<S>,result:C & List<&2,D.Field>) -> Relation.Store<S,C> & List<&2,D.Field>:
28 match result:
29 case (components,fields):(Relation.Store{components,graph},fields)
30def save_components(~S:Data,~C:Type,~components:U32 -> C -> C & List<&2,D.Field>,id:U32,store:Relation.Store<S,C>) -> Relation.Store<S,C> & List<&2,D.Field>:
31 match store:
32 case Relation.Store{owner,graph}:component_saved(~S,~C,graph,components(id,owner))
33def resource_saved(~Resources:Type,~Machines:Type,machines:Machines,result:Resources & List<&2,D.Field>) -> Product.Owner<Resources,Machines> & List<&2,D.Field>:
34 match result:
35 case (resources,fields):(Product.Owner{resources,machines},fields)
36def save_resources(~Resources:Type,~Machines:Type,~resources:Resources -> Resources & List<&2,D.Field>,owner:Product.Owner<Resources,Machines>) -> Product.Owner<Resources,Machines> & List<&2,D.Field>:
37 match owner:
38 case Product.Owner{owner,machines}:resource_saved(~Resources,~Machines,machines,resources(owner))
39def save_schema(~S:Data,~C:Type,~Resources:Type,~Machines:Type,~components:U32 -> C -> C & List<&2,D.Field>,~resources:Resources -> Resources & List<&2,D.Field>,schema:Save.Schema<S,C,Resources,True{},components,resources>) -> Save.Schema<S,Relation.Store<S,C>,Product.Owner<Resources,Machines>,True{},save_components(~S,~C,~components),save_resources(~Resources,~Machines,~resources)>:
40 match schema:
41 case Save.Schema{Ordinary.Schema{entries}}:Save.Schema{Ordinary.Schema{entries}}