@@ -46,78 +46,136 @@ type NumberToVec2<TNum extends NumType> = `${NumberToVec[TNum]}2`;
4646type NumberToVec3 < TNum extends NumType > = `${NumberToVec [ TNum ] } 3`;
4747type NumberToVec4 < TNum extends NumType > = `${NumberToVec [ TNum ] } 4`;
4848
49- type Number < TNum extends NumType > = AnyNumber ; // FIXME Number <TNum> | number
49+ type Number < TNum extends NumType > = Node < TNum > | number ;
5050type Vec2OrLessOrNumber < TNum extends NumType > = Number < TNum > | Node < NumberToVec2 < TNum > > ;
5151type Vec3OrLessOrNumber < TNum extends NumType > = Vec2OrLessOrNumber < TNum > | Node < NumberToVec3 < TNum > > ;
5252type Vec4OrLessOrNumber < TNum extends NumType > = Vec3OrLessOrNumber < TNum > | Node < NumberToVec4 < TNum > > ;
5353
54- type AnyNumber = Node < "float" > | Node < "int" > | Node < "uint" > | number ;
54+ interface NodeParameterForNumType {
55+ float : Node < "float" > | Node < "int" > | Node < "uint" > ;
56+ int : Node < "int" > ;
57+ uint : Node < "uint" > ;
58+ }
59+ type NumberParameterForNumType < TNum extends NumType > = NodeParameterForNumType [ TNum ] | number ;
60+
61+ interface Vec2NodeParameterForNumType {
62+ float : Node < "vec2" > | Node < "ivec2" > | Node < "uvec2" > ;
63+ int : Node < "ivec2" > ;
64+ uint : Node < "uvec2" > ;
65+ }
66+ type Vec2OrLessOrNumberParameterForNumType < TNum extends NumType > =
67+ | Vec2NodeParameterForNumType [ TNum ]
68+ | NumberParameterForNumType < TNum > ;
69+
70+ interface Vec3NodeParameterForNumType {
71+ float : Node < "vec3" > | Node < "ivec3" > | Node < "uvec3" > ;
72+ int : Node < "ivec3" > ;
73+ uint : Node < "uvec3" > ;
74+ }
75+ type Vec3OrLessOrNumberParameterForNumType < TNum extends NumType > =
76+ | Vec3NodeParameterForNumType [ TNum ]
77+ | Vec2OrLessOrNumberParameterForNumType < TNum > ;
78+
79+ interface Vec4NodeParameterForNumType {
80+ float : Node < "vec4" > | Node < "ivec4" > | Node < "uvec4" > ;
81+ int : Node < "ivec4" > ;
82+ uint : Node < "uvec4" > ;
83+ }
84+ type Vec4OrLessOrNumberParameterForNumType < TNum extends NumType > =
85+ | Vec4NodeParameterForNumType [ TNum ]
86+ | Vec3OrLessOrNumberParameterForNumType < TNum > ;
5587
5688// add/sub/mul/div
5789
5890// add/sub/mul/div numbers and/or vecs
5991// Every parameter gets converted to the longest type
6092// If the parameters are the same length, it gets converted to the first type
61- // FIXME We handle the case of converting number types, but not converting between vectors of different number types
6293
6394interface AddSubMulDivNumberVec < TNum extends NumType > {
64- ( a : Number < TNum > , b : AnyNumber , ...params : AnyNumber [ ] ) : Node < TNum > ;
95+ ( a : Number < TNum > , b : NumberParameterForNumType < TNum > , ...params : NumberParameterForNumType < TNum > [ ] ) : Node < TNum > ;
6596 (
6697 a : Vec2OrLessOrNumber < TNum > ,
67- b : Vec2OrLessOrNumber < TNum > ,
68- ...params : Vec2OrLessOrNumber < TNum > [ ]
98+ b : Vec2OrLessOrNumberParameterForNumType < TNum > ,
99+ ...params : Vec2OrLessOrNumberParameterForNumType < TNum > [ ]
69100 ) : Node < NumberToVec2 < TNum > > ;
70101 (
71102 a : Vec3OrLessOrNumber < TNum > ,
72- b : Vec3OrLessOrNumber < TNum > ,
73- ...params : Vec3OrLessOrNumber < TNum > [ ]
103+ b : Vec3OrLessOrNumberParameterForNumType < TNum > ,
104+ ...params : Vec3OrLessOrNumberParameterForNumType < TNum > [ ]
74105 ) : Node < NumberToVec3 < TNum > > ;
75106 (
76107 a : Vec4OrLessOrNumber < TNum > ,
77- b : Vec4OrLessOrNumber < TNum > ,
78- ...params : Vec4OrLessOrNumber < TNum > [ ]
108+ b : Vec4OrLessOrNumberParameterForNumType < TNum > ,
109+ ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ]
79110 ) : Node < NumberToVec4 < TNum > > ;
80111}
81112
82113interface AddSubMulDivNumberVecNumExtensions < TNum extends NumType > {
83- ( b : AnyNumber , ...params : AnyNumber [ ] ) : Node < TNum > ;
84- ( b : Vec2OrLessOrNumber < TNum > , ...params : Vec2OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec2 < TNum > > ;
85- ( b : Vec3OrLessOrNumber < TNum > , ...params : Vec3OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec3 < TNum > > ;
86- ( b : Vec4OrLessOrNumber < TNum > , ...params : Vec4OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec4 < TNum > > ;
114+ ( b : NumberParameterForNumType < TNum > , ...params : NumberParameterForNumType < TNum > [ ] ) : Node < TNum > ;
115+ (
116+ b : Vec2OrLessOrNumberParameterForNumType < TNum > ,
117+ ...params : Vec2OrLessOrNumberParameterForNumType < TNum > [ ]
118+ ) : Node < NumberToVec2 < TNum > > ;
119+ (
120+ b : Vec3OrLessOrNumberParameterForNumType < TNum > ,
121+ ...params : Vec3OrLessOrNumberParameterForNumType < TNum > [ ]
122+ ) : Node < NumberToVec3 < TNum > > ;
123+ (
124+ b : Vec4OrLessOrNumberParameterForNumType < TNum > ,
125+ ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ]
126+ ) : Node < NumberToVec4 < TNum > > ;
87127}
88128
89- interface AddSubMulDivNumberVecNumberAssignExtensions {
129+ interface AddSubMulDivNumberVecNumberAssignExtensions < TNum extends NumType > {
90130 (
91- b : Vec4OrLessOrNumber < "float" > | Vec4OrLessOrNumber < "int" > | Vec4OrLessOrNumber < "uint" > ,
92- ...params : ( Vec4OrLessOrNumber < "float" > | Vec4OrLessOrNumber < "int" > | Vec4OrLessOrNumber < "uint" > ) [ ]
131+ b : Vec4OrLessOrNumberParameterForNumType < TNum > ,
132+ ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ]
93133 ) : this;
94134}
95135
96136interface AddSubMulDivNumberVecVec2Extensions < TNum extends NumType > {
97- ( b : Vec2OrLessOrNumber < TNum > , ...params : Vec2OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec2 < TNum > > ;
98- ( b : Vec3OrLessOrNumber < TNum > , ...params : Vec3OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec3 < TNum > > ;
99- ( b : Vec4OrLessOrNumber < TNum > , ...params : Vec4OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec4 < TNum > > ;
137+ (
138+ b : Vec2OrLessOrNumberParameterForNumType < TNum > ,
139+ ...params : Vec2OrLessOrNumberParameterForNumType < TNum > [ ]
140+ ) : Node < NumberToVec2 < TNum > > ;
141+ (
142+ b : Vec3OrLessOrNumberParameterForNumType < TNum > ,
143+ ...params : Vec3OrLessOrNumberParameterForNumType < TNum > [ ]
144+ ) : Node < NumberToVec3 < TNum > > ;
145+ (
146+ b : Vec4OrLessOrNumberParameterForNumType < TNum > ,
147+ ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ]
148+ ) : Node < NumberToVec4 < TNum > > ;
100149}
101150
102151interface AddSubMulDivNumberVecVec2AssignExtensions < TNum extends NumType > {
103- ( b : Vec4OrLessOrNumber < TNum > , ...params : Vec4OrLessOrNumber < TNum > [ ] ) : this;
152+ ( b : Vec4OrLessOrNumberParameterForNumType < TNum > , ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ] ) : this;
104153}
105154
106155interface AddSubMulDivNumberVecVec3Extensions < TNum extends NumType > {
107- ( b : Vec3OrLessOrNumber < TNum > , ...params : Vec3OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec3 < TNum > > ;
108- ( b : Vec4OrLessOrNumber < TNum > , ...params : Vec4OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec4 < TNum > > ;
156+ (
157+ b : Vec3OrLessOrNumberParameterForNumType < TNum > ,
158+ ...params : Vec3OrLessOrNumberParameterForNumType < TNum > [ ]
159+ ) : Node < NumberToVec3 < TNum > > ;
160+ (
161+ b : Vec4OrLessOrNumberParameterForNumType < TNum > ,
162+ ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ]
163+ ) : Node < NumberToVec4 < TNum > > ;
109164}
110165
111166interface AddSubMulDivNumberVecVec3AssignExtensions < TNum extends NumType > {
112- ( b : Vec4OrLessOrNumber < TNum > , ...params : Vec4OrLessOrNumber < TNum > [ ] ) : this;
167+ ( b : Vec4OrLessOrNumberParameterForNumType < TNum > , ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ] ) : this;
113168}
114169
115170interface AddSubMulDivNumberVecVec4Extensions < TNum extends NumType > {
116- ( b : Vec4OrLessOrNumber < TNum > , ...params : Vec4OrLessOrNumber < TNum > [ ] ) : Node < NumberToVec4 < TNum > > ;
171+ (
172+ b : Vec4OrLessOrNumberParameterForNumType < TNum > ,
173+ ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ]
174+ ) : Node < NumberToVec4 < TNum > > ;
117175}
118176
119177interface AddSubMulDivNumberVecVec4AssignExtensions < TNum extends NumType > {
120- ( b : Vec4OrLessOrNumber < TNum > , ...params : Vec4OrLessOrNumber < TNum > [ ] ) : this;
178+ ( b : Vec4OrLessOrNumberParameterForNumType < TNum > , ...params : Vec4OrLessOrNumberParameterForNumType < TNum > [ ] ) : this;
121179}
122180
123181// add/sub/mul mats
@@ -242,10 +300,10 @@ declare module "../core/Node.js" {
242300 mul : AddSubMulDivNumberVecNumExtensions < TNum > ;
243301 div : AddSubMulDivNumberVecNumExtensions < TNum > ;
244302
245- addAssign : AddSubMulDivNumberVecNumberAssignExtensions ;
246- subAssign : AddSubMulDivNumberVecNumberAssignExtensions ;
247- mulAssign : AddSubMulDivNumberVecNumberAssignExtensions ;
248- divAssign : AddSubMulDivNumberVecNumberAssignExtensions ;
303+ addAssign : AddSubMulDivNumberVecNumberAssignExtensions < TNum > ;
304+ subAssign : AddSubMulDivNumberVecNumberAssignExtensions < TNum > ;
305+ mulAssign : AddSubMulDivNumberVecNumberAssignExtensions < TNum > ;
306+ divAssign : AddSubMulDivNumberVecNumberAssignExtensions < TNum > ;
249307 }
250308
251309 interface Vec2Extensions {
0 commit comments