ordinary_component_binding.bend
bendvy-ecs-core@0.1.0.4 · 26 lines · 4 definitions
1import Base
2import bendvy-ecs-core@0.1.0.4/ordinary_declaration.bend as Identity
3import bendvy-ecs-core@0.1.0.4/component.bend as C
4import bendvy-ecs-core@0.1.0.4/column.bend as Col
5
6
7type Binding<-S:Data,-Store:Type,-Rest:Type,-P:Type,-V:Data,-Token:Data,-take:Store -> Rest & Col.Column<S,P>,-put:Rest -> Col.Column<S,P> -> Store,-view:P -> P & V> is Data:
8 Binding{identity:Identity.Declaration<S,P>,family:C.Family<S,Store,Rest,P,V,Token,take,put,view>}
9
10
11
12
13
14def bind(~S:Data,~Store:Type,~Rest:Type,~P:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column<S,P>,~put:Rest -> Col.Column<S,P> -> Store,~view:P -> P & V,+identity:Identity.Declaration<S,P>) -> Binding<S,Store,Rest,P,V,Token,take,put,view>:
15 Binding{identity,C.Family{Identity.key(~S,~P,identity)}}
16
17
18def identity(~S:Data,~Store:Type,~Rest:Type,~P:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column<S,P>,~put:Rest -> Col.Column<S,P> -> Store,~view:P -> P & V,binding:Binding<S,Store,Rest,P,V,Token,take,put,view>) -> Identity.Declaration<S,P>:
19 match binding:
20 case Binding{identity,_}:identity
21
22
23
24def family(~S:Data,~Store:Type,~Rest:Type,~P:Type,~V:Data,~Token:Data,~take:Store -> Rest & Col.Column<S,P>,~put:Rest -> Col.Column<S,P> -> Store,~view:P -> P & V,binding:Binding<S,Store,Rest,P,V,Token,take,put,view>) -> C.Family<S,Store,Rest,P,V,Token,take,put,view>:
25 match binding:
26 case Binding{_,family}:family