@nativewrappers/common 0.0.49 → 0.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Kvp.d.ts +51 -65
- package/Kvp.js +120 -114
- package/package.json +1 -1
- package/utils/Vector.d.ts +20 -17
- package/utils/Vector.js +28 -18
package/Kvp.d.ts
CHANGED
|
@@ -1,91 +1,77 @@
|
|
|
1
|
-
|
|
1
|
+
interface Schema {
|
|
2
|
+
[key: string]: "string" | "number" | "float" | object;
|
|
3
|
+
}
|
|
4
|
+
export declare class Kvp<T extends Schema> {
|
|
5
|
+
private schema;
|
|
6
|
+
constructor(schema: T);
|
|
2
7
|
/**
|
|
3
|
-
*
|
|
4
|
-
* @param key the key string
|
|
5
|
-
* @param value the value to set the key to
|
|
8
|
+
* Returns the type associated with a schema key.
|
|
6
9
|
*/
|
|
7
|
-
|
|
10
|
+
getType(key: keyof T): "string" | "number" | "float" | "object";
|
|
8
11
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @param key the key string
|
|
11
|
-
* @param value the value to set the key to
|
|
12
|
+
* Returns the value associated with a key as a number.
|
|
12
13
|
*/
|
|
13
|
-
|
|
14
|
+
getNumber(key: string): number;
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
* This can error if given an invalid object
|
|
17
|
-
* @param key the key string
|
|
18
|
-
* @param value the value to set the key to
|
|
16
|
+
* Returns the value associated with a key as a float.
|
|
19
17
|
*/
|
|
20
|
-
|
|
18
|
+
getFloat(key: string): number;
|
|
21
19
|
/**
|
|
22
|
-
*
|
|
23
|
-
* @param key the key of the value to get
|
|
24
|
-
* @returns a string, or null if there is no value
|
|
20
|
+
* Returns the value associated with a key as a string.
|
|
25
21
|
*/
|
|
26
|
-
|
|
22
|
+
getString(key: string): string | null;
|
|
27
23
|
/**
|
|
28
|
-
*
|
|
29
|
-
* @param key the key of the value to get
|
|
30
|
-
* @returns the value stored, as a number, or 0 if there is no value
|
|
24
|
+
* Returns the value associated with a key as a parsed JSON string.
|
|
31
25
|
*/
|
|
32
|
-
|
|
26
|
+
getJson<T>(key: string): T | null;
|
|
33
27
|
/**
|
|
34
|
-
*
|
|
35
|
-
* @param
|
|
36
|
-
* @returns the value stored as a float, or 0.0 if there is no value
|
|
28
|
+
* Sets the value associated with a key as a number.
|
|
29
|
+
* @param async set the value using an async operation.
|
|
37
30
|
*/
|
|
38
|
-
|
|
39
|
-
getKvpJson<T>(key: string): T;
|
|
31
|
+
setNumber(key: string, value: number, async?: boolean): void;
|
|
40
32
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @param
|
|
33
|
+
* Sets the value associated with a key as a float.
|
|
34
|
+
* @param async set the value using an async operation.
|
|
43
35
|
*/
|
|
44
|
-
|
|
36
|
+
setFloat(key: string, value: number, async?: boolean): void;
|
|
45
37
|
/**
|
|
46
|
-
*
|
|
47
|
-
* @param
|
|
38
|
+
* Sets the value associated with a key as a string.
|
|
39
|
+
* @param async set the value using an async operation.
|
|
48
40
|
*/
|
|
49
|
-
|
|
41
|
+
setString(key: string, value: string, async?: boolean): void;
|
|
50
42
|
/**
|
|
51
|
-
*
|
|
43
|
+
* Sets the value associated with a key as a JSON string.
|
|
44
|
+
* @param async set the value using an async operation.
|
|
52
45
|
*/
|
|
53
|
-
|
|
54
|
-
private handleKvp;
|
|
46
|
+
setJson(key: string, value: object, async?: boolean): void;
|
|
55
47
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* ```typescript
|
|
59
|
-
* for (const value of Kvp.getKvpsAsString("native:")) {
|
|
60
|
-
* console.log(value);
|
|
61
|
-
* }
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @param prefix the prefix to search for
|
|
48
|
+
* Returns the value associated with a key, determining the type using the declared Kvp schema.
|
|
65
49
|
*/
|
|
66
|
-
|
|
50
|
+
get<K extends keyof T>(key: K): T[K] extends "number" | "float" ? number : T[K] extends object ? T[K] | null : string | null;
|
|
67
51
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* ```typescript
|
|
71
|
-
* for (const value of Kvp.getKvpsAsNumber("native:")) {
|
|
72
|
-
* console.log(value);
|
|
73
|
-
* }
|
|
74
|
-
* ```
|
|
75
|
-
*
|
|
76
|
-
* @param prefix the prefix to search for
|
|
52
|
+
* Sets the value associated with a key as a value, using its type from the declared Kvp stricture.
|
|
53
|
+
* @param async set the value using an async operation.
|
|
77
54
|
*/
|
|
78
|
-
|
|
55
|
+
set<K extends string>(key: K extends keyof T ? K : never, value: T[K] extends "number" | "float" ? number : T[K] extends object ? T[K] | null : string | null, async?: boolean): void;
|
|
79
56
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
*
|
|
86
|
-
* ```
|
|
57
|
+
* Deletes the specified value for key.
|
|
58
|
+
* @param async remove the value using an async operation
|
|
59
|
+
*/
|
|
60
|
+
delete(key: string, async?: boolean): void;
|
|
61
|
+
/**
|
|
62
|
+
* Commits pending asynchronous operations to disk, ensuring data consistency.
|
|
87
63
|
*
|
|
88
|
-
*
|
|
64
|
+
* Should be called after calling set methods using the async flag.
|
|
65
|
+
*/
|
|
66
|
+
flush(): void;
|
|
67
|
+
private getAllKeys;
|
|
68
|
+
/**
|
|
69
|
+
* Returns an array of keys which match or contain the given keys.
|
|
70
|
+
*/
|
|
71
|
+
getKeys(prefix: string | string[]): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Get all values from keys in an array as the specified type.
|
|
89
74
|
*/
|
|
90
|
-
|
|
75
|
+
getValuesAsType(prefix: string[], type: "string" | "number" | "float" | "object"): unknown[];
|
|
91
76
|
}
|
|
77
|
+
export {};
|
package/Kvp.js
CHANGED
|
@@ -1,161 +1,167 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
1
|
export class Kvp {
|
|
3
|
-
|
|
2
|
+
schema;
|
|
3
|
+
constructor(schema) {
|
|
4
|
+
this.schema = { ...schema };
|
|
5
|
+
for (const key in this.schema) {
|
|
6
|
+
if (typeof this.schema[key] === "object")
|
|
7
|
+
this.schema[key] = Object;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
4
10
|
/**
|
|
5
|
-
*
|
|
6
|
-
* @param key the key string
|
|
7
|
-
* @param value the value to set the key to
|
|
11
|
+
* Returns the type associated with a schema key.
|
|
8
12
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (type === "string") {
|
|
12
|
-
SetResourceKvp(key, value);
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
if (Number.isInteger(value)) {
|
|
16
|
-
SetResourceKvpInt(key, value);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
SetResourceKvpFloat(key, value);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
13
|
+
getType(key) {
|
|
14
|
+
return typeof this.schema[key] === "object" ? "object" : this.schema[key];
|
|
22
15
|
}
|
|
23
16
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @param key the key string
|
|
26
|
-
* @param value the value to set the key to
|
|
17
|
+
* Returns the value associated with a key as a number.
|
|
27
18
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (type === "string") {
|
|
31
|
-
SetResourceKvpNoSync(key, value);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
if (Number.isInteger(value)) {
|
|
35
|
-
SetResourceKvpIntNoSync(key, value);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
SetResourceKvpFloatNoSync(key, value);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
19
|
+
getNumber(key) {
|
|
20
|
+
return GetResourceKvpInt(key);
|
|
41
21
|
}
|
|
42
22
|
/**
|
|
43
|
-
*
|
|
44
|
-
* This can error if given an invalid object
|
|
45
|
-
* @param key the key string
|
|
46
|
-
* @param value the value to set the key to
|
|
23
|
+
* Returns the value associated with a key as a float.
|
|
47
24
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
this.setKvp(key, stringified);
|
|
25
|
+
getFloat(key) {
|
|
26
|
+
return GetResourceKvpFloat(key);
|
|
51
27
|
}
|
|
52
28
|
/**
|
|
53
|
-
*
|
|
54
|
-
* @param key the key of the value to get
|
|
55
|
-
* @returns a string, or null if there is no value
|
|
29
|
+
* Returns the value associated with a key as a string.
|
|
56
30
|
*/
|
|
57
|
-
|
|
31
|
+
getString(key) {
|
|
58
32
|
return GetResourceKvpString(key);
|
|
59
33
|
}
|
|
60
34
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @param key the key of the value to get
|
|
63
|
-
* @returns the value stored, as a number, or 0 if there is no value
|
|
35
|
+
* Returns the value associated with a key as a parsed JSON string.
|
|
64
36
|
*/
|
|
65
|
-
|
|
66
|
-
|
|
37
|
+
getJson(key) {
|
|
38
|
+
const str = GetResourceKvpString(key);
|
|
39
|
+
return str ? JSON.parse(str) : null;
|
|
67
40
|
}
|
|
68
41
|
/**
|
|
69
|
-
*
|
|
70
|
-
* @param
|
|
71
|
-
* @returns the value stored as a float, or 0.0 if there is no value
|
|
42
|
+
* Sets the value associated with a key as a number.
|
|
43
|
+
* @param async set the value using an async operation.
|
|
72
44
|
*/
|
|
73
|
-
|
|
74
|
-
return
|
|
45
|
+
setNumber(key, value, async = false) {
|
|
46
|
+
return async
|
|
47
|
+
? SetResourceKvpIntNoSync(key, value)
|
|
48
|
+
: SetResourceKvpInt(key, value);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sets the value associated with a key as a float.
|
|
52
|
+
* @param async set the value using an async operation.
|
|
53
|
+
*/
|
|
54
|
+
setFloat(key, value, async = false) {
|
|
55
|
+
return async
|
|
56
|
+
? SetResourceKvpFloatNoSync(key, value)
|
|
57
|
+
: SetResourceKvpFloat(key, value);
|
|
75
58
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Sets the value associated with a key as a string.
|
|
61
|
+
* @param async set the value using an async operation.
|
|
62
|
+
*/
|
|
63
|
+
setString(key, value, async = false) {
|
|
64
|
+
return async
|
|
65
|
+
? SetResourceKvpNoSync(key, value)
|
|
66
|
+
: SetResourceKvp(key, value);
|
|
79
67
|
}
|
|
80
68
|
/**
|
|
81
|
-
*
|
|
82
|
-
* @param
|
|
69
|
+
* Sets the value associated with a key as a JSON string.
|
|
70
|
+
* @param async set the value using an async operation.
|
|
83
71
|
*/
|
|
84
|
-
|
|
85
|
-
|
|
72
|
+
setJson(key, value, async = false) {
|
|
73
|
+
const str = JSON.stringify(value);
|
|
74
|
+
return async ? SetResourceKvpNoSync(key, str) : SetResourceKvp(key, str);
|
|
86
75
|
}
|
|
87
76
|
/**
|
|
88
|
-
*
|
|
89
|
-
* @param key the key to delete
|
|
77
|
+
* Returns the value associated with a key, determining the type using the declared Kvp schema.
|
|
90
78
|
*/
|
|
91
|
-
|
|
92
|
-
|
|
79
|
+
get(key) {
|
|
80
|
+
const type = this.getType(key);
|
|
81
|
+
switch (type) {
|
|
82
|
+
case "number":
|
|
83
|
+
return this.getNumber(key);
|
|
84
|
+
case "float":
|
|
85
|
+
return this.getFloat(key);
|
|
86
|
+
case "object":
|
|
87
|
+
return this.getJson(key);
|
|
88
|
+
default:
|
|
89
|
+
return this.getString(key);
|
|
90
|
+
}
|
|
93
91
|
}
|
|
94
92
|
/**
|
|
95
|
-
*
|
|
93
|
+
* Sets the value associated with a key as a value, using its type from the declared Kvp stricture.
|
|
94
|
+
* @param async set the value using an async operation.
|
|
95
|
+
*/
|
|
96
|
+
set(key, value, async = false) {
|
|
97
|
+
const type = this.getType(key);
|
|
98
|
+
const valueType = typeof value;
|
|
99
|
+
if (valueType !== type && type !== "float" && valueType === "number")
|
|
100
|
+
throw new Error(`Expected '${key}' to be type '${type}' but received '${valueType}'`);
|
|
101
|
+
switch (type) {
|
|
102
|
+
case "number":
|
|
103
|
+
return this.setNumber(key, value, async);
|
|
104
|
+
case "float":
|
|
105
|
+
return this.setFloat(key, value, async);
|
|
106
|
+
case "object":
|
|
107
|
+
return this.setJson(key, value, async);
|
|
108
|
+
default:
|
|
109
|
+
return this.setString(key, value, async);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Deletes the specified value for key.
|
|
114
|
+
* @param async remove the value using an async operation
|
|
115
|
+
*/
|
|
116
|
+
delete(key, async = false) {
|
|
117
|
+
return async ? DeleteResourceKvpNoSync(key) : DeleteResourceKvp(key);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Commits pending asynchronous operations to disk, ensuring data consistency.
|
|
121
|
+
*
|
|
122
|
+
* Should be called after calling set methods using the async flag.
|
|
96
123
|
*/
|
|
97
124
|
flush() {
|
|
98
125
|
FlushResourceKvp();
|
|
99
126
|
}
|
|
100
|
-
|
|
127
|
+
getAllKeys(prefix) {
|
|
128
|
+
const keys = [];
|
|
101
129
|
const handle = StartFindKvp(prefix);
|
|
102
130
|
if (handle === -1)
|
|
103
|
-
return;
|
|
131
|
+
return keys;
|
|
104
132
|
let key;
|
|
105
133
|
do {
|
|
106
134
|
key = FindKvp(handle);
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
else if (iterType === "number") {
|
|
111
|
-
yield GetResourceKvpInt(key);
|
|
112
|
-
}
|
|
113
|
-
else if (iterType === "float") {
|
|
114
|
-
yield GetResourceKvpFloat(key);
|
|
115
|
-
}
|
|
135
|
+
if (key)
|
|
136
|
+
keys.push(key);
|
|
116
137
|
} while (key);
|
|
117
138
|
EndFindKvp(handle);
|
|
139
|
+
return keys;
|
|
118
140
|
}
|
|
119
141
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* ```typescript
|
|
123
|
-
* for (const value of Kvp.getKvpsAsString("native:")) {
|
|
124
|
-
* console.log(value);
|
|
125
|
-
* }
|
|
126
|
-
* ```
|
|
127
|
-
*
|
|
128
|
-
* @param prefix the prefix to search for
|
|
129
|
-
*/
|
|
130
|
-
getKvpsAsString(prefix) {
|
|
131
|
-
return this.handleKvp(prefix, "string");
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* enumerates over any kvp prefixed with the prefix
|
|
135
|
-
*
|
|
136
|
-
* ```typescript
|
|
137
|
-
* for (const value of Kvp.getKvpsAsNumber("native:")) {
|
|
138
|
-
* console.log(value);
|
|
139
|
-
* }
|
|
140
|
-
* ```
|
|
141
|
-
*
|
|
142
|
-
* @param prefix the prefix to search for
|
|
142
|
+
* Returns an array of keys which match or contain the given keys.
|
|
143
143
|
*/
|
|
144
|
-
|
|
145
|
-
return
|
|
144
|
+
getKeys(prefix) {
|
|
145
|
+
return typeof prefix === "string"
|
|
146
|
+
? this.getAllKeys(prefix)
|
|
147
|
+
: prefix.flatMap((key) => this.getAllKeys(key));
|
|
146
148
|
}
|
|
147
149
|
/**
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* ```typescript
|
|
151
|
-
* for (const value of Kvp.getKvpsAsFloat("native:")) {
|
|
152
|
-
* console.log(value);
|
|
153
|
-
* }
|
|
154
|
-
* ```
|
|
155
|
-
*
|
|
156
|
-
* @param prefix the prefix to search for
|
|
150
|
+
* Get all values from keys in an array as the specified type.
|
|
157
151
|
*/
|
|
158
|
-
|
|
159
|
-
|
|
152
|
+
getValuesAsType(prefix, type) {
|
|
153
|
+
const values = this.getKeys(prefix);
|
|
154
|
+
return values.map((key) => {
|
|
155
|
+
switch (type) {
|
|
156
|
+
case "number":
|
|
157
|
+
return this.getNumber(key);
|
|
158
|
+
case "float":
|
|
159
|
+
return this.getFloat(key);
|
|
160
|
+
case "object":
|
|
161
|
+
return this.getJson(key);
|
|
162
|
+
default:
|
|
163
|
+
return this.getString(key);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
160
166
|
}
|
|
161
167
|
}
|
package/package.json
CHANGED
package/utils/Vector.d.ts
CHANGED
|
@@ -50,20 +50,20 @@ type InferVector<T> = T extends Vec4 | VectorN<4> ? Vector4 : T extends Vec3 | V
|
|
|
50
50
|
/**
|
|
51
51
|
* A base vector class inherited by all vector classes.
|
|
52
52
|
*/
|
|
53
|
-
declare class Vector {
|
|
54
|
-
protected static create(x: number | Vec, y?: number, z?: number, w?: number):
|
|
53
|
+
declare abstract class Vector {
|
|
54
|
+
protected static create<T>(this: T, x: number | Vec, y?: number, z?: number, w?: number): Vector4 | Vector3 | Vector2;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a deep copy of the provided vector.
|
|
57
|
+
* @param obj The vector to clone.
|
|
58
|
+
* @returns A new vector instance that is a copy of the provided vector.
|
|
59
|
+
*/
|
|
60
|
+
static clone<T extends VectorType, U extends VectorLike>(this: T, obj: U): Vector4 | Vector3 | Vector2;
|
|
55
61
|
/**
|
|
56
62
|
* Creates a vector from binary data in a MsgpackBuffer.
|
|
57
63
|
* @param msgpackBuffer The buffer containing binary data.
|
|
58
64
|
* @returns A new vector instance.
|
|
59
65
|
*/
|
|
60
66
|
static fromBuffer<T extends VectorType>(this: T, { buffer, type }: MsgpackBuffer): InstanceType<T>;
|
|
61
|
-
/**
|
|
62
|
-
* Creates a deep copy of the provided vector.
|
|
63
|
-
* @param obj The vector to clone.
|
|
64
|
-
* @returns A new vector instance that is a copy of the provided vector.
|
|
65
|
-
*/
|
|
66
|
-
static clone<T extends VectorType, U extends VectorLike>(this: T, obj: U): InstanceType<T>;
|
|
67
67
|
/**
|
|
68
68
|
* Performs an operation between a vector and either another vector or scalar value.
|
|
69
69
|
* @param a - The first vector.
|
|
@@ -92,21 +92,21 @@ declare class Vector {
|
|
|
92
92
|
* @param y - The value to add to the y-component.
|
|
93
93
|
* @returns A new vector with the y-component incremented.
|
|
94
94
|
*/
|
|
95
|
-
static addY<T extends VectorType, U extends VectorLike>(this: T, obj: U, y: number):
|
|
95
|
+
static addY<T extends VectorType, U extends VectorLike>(this: T, obj: U, y: number): U;
|
|
96
96
|
/**
|
|
97
97
|
* Adds a scalar value to the z-component of a vector.
|
|
98
98
|
* @param obj - The vector.
|
|
99
99
|
* @param z - The value to add to the z-component.
|
|
100
100
|
* @returns A new vector with the z-component incremented.
|
|
101
101
|
*/
|
|
102
|
-
static addZ<T extends VectorType, U extends Vec3 | Vec4>(this: T, obj: U, z: number):
|
|
102
|
+
static addZ<T extends VectorType, U extends Vec3 | Vec4>(this: T, obj: U, z: number): U;
|
|
103
103
|
/**
|
|
104
104
|
* Adds a scalar value to the w-component of a vector.
|
|
105
105
|
* @param obj - The vector.
|
|
106
106
|
* @param w - The value to add to the w-component.
|
|
107
107
|
* @returns A new vector with the w-component incremented.
|
|
108
108
|
*/
|
|
109
|
-
static addW<T extends VectorType, U extends Vec4>(this: T, obj: U, w: number):
|
|
109
|
+
static addW<T extends VectorType, U extends Vec4>(this: T, obj: U, w: number): U;
|
|
110
110
|
/**
|
|
111
111
|
* Subtracts one vector from another or subtracts a scalar value from a vector.
|
|
112
112
|
* @param a - The vector.
|
|
@@ -205,8 +205,8 @@ declare class Vector {
|
|
|
205
205
|
* @returns The magnitude of the vector.
|
|
206
206
|
*/
|
|
207
207
|
static Length<T extends VectorType, U extends VectorLike>(this: T, obj: U): number;
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
type: unknown;
|
|
209
|
+
[size]: number;
|
|
210
210
|
x: number;
|
|
211
211
|
y: number;
|
|
212
212
|
z: number | undefined;
|
|
@@ -259,7 +259,7 @@ declare class Vector {
|
|
|
259
259
|
/**
|
|
260
260
|
* @see Vector.addY
|
|
261
261
|
*/
|
|
262
|
-
addY(y: number):
|
|
262
|
+
addY(y: number): this;
|
|
263
263
|
/**
|
|
264
264
|
* @see Vector.subtract
|
|
265
265
|
*/
|
|
@@ -308,6 +308,7 @@ declare class Vector {
|
|
|
308
308
|
*/
|
|
309
309
|
export declare class Vector2 extends Vector {
|
|
310
310
|
readonly type = ClassTypes.Vector2;
|
|
311
|
+
readonly [size]: number;
|
|
311
312
|
static readonly Zero: Vector2;
|
|
312
313
|
/**
|
|
313
314
|
* Constructs a new 2D vector.
|
|
@@ -328,6 +329,7 @@ export declare class Vector2 extends Vector {
|
|
|
328
329
|
*/
|
|
329
330
|
export declare class Vector3 extends Vector implements Vec3 {
|
|
330
331
|
readonly type = ClassTypes.Vector3;
|
|
332
|
+
readonly [size]: number;
|
|
331
333
|
z: number;
|
|
332
334
|
static readonly Zero: Vector3;
|
|
333
335
|
static readonly UnitX: Vector3;
|
|
@@ -361,7 +363,7 @@ export declare class Vector3 extends Vector implements Vec3 {
|
|
|
361
363
|
/**
|
|
362
364
|
* @see Vector.addZ
|
|
363
365
|
*/
|
|
364
|
-
addZ(z: number):
|
|
366
|
+
addZ(z: number): this;
|
|
365
367
|
/**
|
|
366
368
|
* @see Vector.crossProduct
|
|
367
369
|
*/
|
|
@@ -376,6 +378,7 @@ export declare class Vector3 extends Vector implements Vec3 {
|
|
|
376
378
|
*/
|
|
377
379
|
export declare class Vector4 extends Vector {
|
|
378
380
|
readonly type = ClassTypes.Vector4;
|
|
381
|
+
readonly [size]: number;
|
|
379
382
|
z: number;
|
|
380
383
|
w: number;
|
|
381
384
|
static readonly Zero: Vector4;
|
|
@@ -399,11 +402,11 @@ export declare class Vector4 extends Vector {
|
|
|
399
402
|
/**
|
|
400
403
|
* @see Vector.addZ
|
|
401
404
|
*/
|
|
402
|
-
addZ(z: number):
|
|
405
|
+
addZ(z: number): this;
|
|
403
406
|
/**
|
|
404
407
|
* @see Vector.addW
|
|
405
408
|
*/
|
|
406
|
-
addW(w: number):
|
|
409
|
+
addW(w: number): this;
|
|
407
410
|
/**
|
|
408
411
|
* @see Vector.crossProduct
|
|
409
412
|
*/
|
package/utils/Vector.js
CHANGED
|
@@ -10,8 +10,28 @@ const size = Symbol("size");
|
|
|
10
10
|
class Vector {
|
|
11
11
|
static create(x, y = x, z, w) {
|
|
12
12
|
if (typeof x === "object")
|
|
13
|
-
({ x, y, z
|
|
14
|
-
|
|
13
|
+
({ x, y, z, w } = x);
|
|
14
|
+
const size = (this instanceof Vector && this.size) ||
|
|
15
|
+
[x, y, z, w].filter((arg) => arg !== undefined).length;
|
|
16
|
+
switch (size) {
|
|
17
|
+
case 1:
|
|
18
|
+
case 2:
|
|
19
|
+
return new Vector2(x, y);
|
|
20
|
+
case 3:
|
|
21
|
+
return new Vector3(x, y, z);
|
|
22
|
+
case 4:
|
|
23
|
+
return new Vector4(x, y, z, w);
|
|
24
|
+
default:
|
|
25
|
+
throw new Error(`Cannot instantiate Vector with size of ${size}.`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a deep copy of the provided vector.
|
|
30
|
+
* @param obj The vector to clone.
|
|
31
|
+
* @returns A new vector instance that is a copy of the provided vector.
|
|
32
|
+
*/
|
|
33
|
+
static clone(obj) {
|
|
34
|
+
return this.create(obj);
|
|
15
35
|
}
|
|
16
36
|
/**
|
|
17
37
|
* Creates a vector from binary data in a MsgpackBuffer.
|
|
@@ -26,14 +46,6 @@ class Vector {
|
|
|
26
46
|
arr[i] = Number(buffer.readFloatLE(i * 4).toPrecision(7));
|
|
27
47
|
return this.fromArray(arr);
|
|
28
48
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Creates a deep copy of the provided vector.
|
|
31
|
-
* @param obj The vector to clone.
|
|
32
|
-
* @returns A new vector instance that is a copy of the provided vector.
|
|
33
|
-
*/
|
|
34
|
-
static clone(obj) {
|
|
35
|
-
return this.create(obj);
|
|
36
|
-
}
|
|
37
49
|
/**
|
|
38
50
|
* Performs an operation between a vector and either another vector or scalar value.
|
|
39
51
|
* @param a - The first vector.
|
|
@@ -286,14 +298,6 @@ class Vector {
|
|
|
286
298
|
}
|
|
287
299
|
this.x = x;
|
|
288
300
|
this.y = y;
|
|
289
|
-
if (z !== undefined) {
|
|
290
|
-
this.z = z;
|
|
291
|
-
++this[size];
|
|
292
|
-
}
|
|
293
|
-
if (w !== undefined) {
|
|
294
|
-
this.w = w;
|
|
295
|
-
++this[size];
|
|
296
|
-
}
|
|
297
301
|
}
|
|
298
302
|
*[Symbol.iterator]() {
|
|
299
303
|
yield this.x;
|
|
@@ -440,6 +444,7 @@ export class Vector2 extends Vector {
|
|
|
440
444
|
// DO NOT USE, ONLY EXPOSED BECAUSE TS IS TRASH, THIS TYPE IS NOT GUARANTEED
|
|
441
445
|
// TO EXIST, CHANGING IT WILL BREAK STUFF
|
|
442
446
|
type = ClassTypes.Vector2;
|
|
447
|
+
[size] = 2;
|
|
443
448
|
static Zero = new Vector2(0, 0);
|
|
444
449
|
/**
|
|
445
450
|
* Constructs a new 2D vector.
|
|
@@ -468,6 +473,7 @@ export class Vector3 extends Vector {
|
|
|
468
473
|
// DO NOT USE, ONLY EXPOSED BECAUSE TS IS TRASH, THIS TYPE IS NOT GUARANTEED
|
|
469
474
|
// TO EXIST, CHANGING IT WILL BREAK STUFF
|
|
470
475
|
type = ClassTypes.Vector3;
|
|
476
|
+
[size] = 3;
|
|
471
477
|
z = 0;
|
|
472
478
|
static Zero = new Vector3(0, 0, 0);
|
|
473
479
|
static UnitX = new Vector3(1.0, 0.0, 0.0);
|
|
@@ -491,6 +497,7 @@ export class Vector3 extends Vector {
|
|
|
491
497
|
*/
|
|
492
498
|
constructor(x, y = x, z = y) {
|
|
493
499
|
super(x, y, z);
|
|
500
|
+
this.z = z;
|
|
494
501
|
}
|
|
495
502
|
/**
|
|
496
503
|
* Creates a new vector based on the provided parameters.
|
|
@@ -530,6 +537,7 @@ export class Vector4 extends Vector {
|
|
|
530
537
|
// DO NOT USE, ONLY EXPOSED BECAUSE TS IS TRASH, THIS TYPE IS NOT GUARANTEED
|
|
531
538
|
// TO EXIST, CHANGING IT WILL BREAK STUFF
|
|
532
539
|
type = ClassTypes.Vector4;
|
|
540
|
+
[size] = 4;
|
|
533
541
|
z = 0;
|
|
534
542
|
w = 0;
|
|
535
543
|
static Zero = new Vector4(0, 0, 0, 0);
|
|
@@ -542,6 +550,8 @@ export class Vector4 extends Vector {
|
|
|
542
550
|
*/
|
|
543
551
|
constructor(x, y = x, z = y, w = z) {
|
|
544
552
|
super(x, y, z, w);
|
|
553
|
+
this.z = w;
|
|
554
|
+
this.w = w;
|
|
545
555
|
}
|
|
546
556
|
/**
|
|
547
557
|
* Creates a new vector based on the provided parameters.
|