squishjs 0.6.43 → 0.7.1
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/.github/workflows/node.js.yml +1 -1
- package/LICENSE.md +21 -0
- package/README.md +116 -42
- package/index.js +11 -1
- package/oldsvgexport.js +89 -0
- package/package.json +1 -1
- package/render-tester.js +120 -0
- package/src/BaseNode.js +101 -0
- package/src/Game.js +15 -3
- package/src/GameNode.js +82 -79
- package/src/InternalGameNode.js +4 -3
- package/src/Squisher.js +224 -0
- package/src/ViewableGame.js +60 -0
- package/src/node-types.js +15 -0
- package/src/squish.js +90 -349
- package/src/squishHelpers/asset.js +63 -0
- package/src/squishHelpers/border.js +16 -0
- package/src/squishHelpers/color.js +16 -0
- package/src/squishHelpers/coordinates2d.js +98 -0
- package/src/squishHelpers/effect.js +55 -0
- package/src/squishHelpers/fill.js +16 -0
- package/src/squishHelpers/handleClick.js +16 -0
- package/src/squishHelpers/id.js +16 -0
- package/src/squishHelpers/input.js +22 -0
- package/src/squishHelpers/playerIds.js +12 -0
- package/src/squishHelpers/pos.js +23 -0
- package/src/squishHelpers/size.js +23 -0
- package/src/squishHelpers/subType.js +16 -0
- package/src/squishHelpers/text.js +154 -0
- package/src/subtype-mappings.js +10 -0
- package/src/subtypes.js +7 -0
- package/{dist/terrain/defs.d.ts → src/terrain/defs.ts} +7 -6
- package/src/terrain/index.ts +156 -0
- package/src/terrain/terrainFunctions.ts +142 -0
- package/src/util/geometry.js +45 -0
- package/src/util/index.ts +6 -0
- package/src/util/listenable.ts +20 -0
- package/src/util/shapes.ts +18 -0
- package/src/util/views.js +108 -0
- package/test/Layers.test.js +63 -0
- package/test/Scale.test.js +235 -0
- package/test/Squisher.test.js +49 -0
- package/test/StateUpdates.js +10 -0
- package/test/Terrain.test.js +0 -1
- package/test/main.test.js +55 -35
- package/test/utils.js +91 -0
- package/testapp.html +26 -0
- package/testapp.js +988 -0
- package/tsconfig.json +22 -0
- package/dist/Colors.d.ts +0 -7
- package/dist/Colors.js +0 -124
- package/dist/Game.d.ts +0 -20
- package/dist/Game.js +0 -48
- package/dist/GameNode.d.ts +0 -66
- package/dist/GameNode.js +0 -148
- package/dist/InternalGameNode.d.ts +0 -20
- package/dist/InternalGameNode.js +0 -32
- package/dist/Shapes.d.ts +0 -6
- package/dist/Shapes.js +0 -8
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -18
- package/dist/sharedDefs.d.ts +0 -72
- package/dist/sharedDefs.js +0 -13
- package/dist/squish.d.ts +0 -8
- package/dist/squish.js +0 -336
- package/dist/terrain/defs.js +0 -5
- package/dist/terrain/index.d.ts +0 -2
- package/dist/terrain/index.js +0 -151
- package/dist/terrain/terrainFunctions.d.ts +0 -6
- package/dist/terrain/terrainFunctions.js +0 -152
- package/dist/util/index.d.ts +0 -2
- package/dist/util/index.js +0 -11
- package/dist/util/listenable.d.ts +0 -3
- package/dist/util/listenable.js +0 -21
- package/dist/util/shapes.d.ts +0 -2
- package/dist/util/shapes.js +0 -23
- package/license.txt +0 -674
package/dist/squish.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { internalGameNodeDef } from './sharedDefs';
|
|
2
|
-
interface scaleDef {
|
|
3
|
-
x: number;
|
|
4
|
-
y: number;
|
|
5
|
-
}
|
|
6
|
-
export declare const unsquish: (squished: number[]) => internalGameNodeDef;
|
|
7
|
-
export declare const squish: (entity: Record<string, any>, scale?: scaleDef) => any[];
|
|
8
|
-
export {};
|
package/dist/squish.js
DELETED
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.squish = exports.unsquish = void 0;
|
|
4
|
-
const Colors_1 = require("./Colors");
|
|
5
|
-
const util_1 = require("./util");
|
|
6
|
-
const assert = require('assert');
|
|
7
|
-
const COLOR_SUBTYPE = 42;
|
|
8
|
-
const ID_SUBTYPE = 43;
|
|
9
|
-
const PLAYER_ID_SUBTYPE = 44;
|
|
10
|
-
const POS_SUBTYPE = 45;
|
|
11
|
-
const SIZE_SUBTYPE = 46;
|
|
12
|
-
const TEXT_SUBTYPE = 47;
|
|
13
|
-
const ASSET_SUBTYPE = 48;
|
|
14
|
-
const EFFECTS_SUBTYPE = 49;
|
|
15
|
-
const ONCLICK_SUBTYPE = 50;
|
|
16
|
-
const INPUT_SUBTYPE = 51;
|
|
17
|
-
const COORDINATES_2D_SUBTYPE = 52;
|
|
18
|
-
const FILL_SUBTYPE = 53;
|
|
19
|
-
const BORDER_SUBTYPE = 54;
|
|
20
|
-
;
|
|
21
|
-
;
|
|
22
|
-
const squishSpec = {
|
|
23
|
-
id: {
|
|
24
|
-
type: ID_SUBTYPE,
|
|
25
|
-
squish: (i) => {
|
|
26
|
-
return [i];
|
|
27
|
-
},
|
|
28
|
-
unsquish: (arr) => {
|
|
29
|
-
return arr[0];
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
color: {
|
|
33
|
-
type: COLOR_SUBTYPE,
|
|
34
|
-
squish: (c) => {
|
|
35
|
-
return [c[0], c[1], c[2], c[3]];
|
|
36
|
-
},
|
|
37
|
-
unsquish: (squished) => {
|
|
38
|
-
return [squished[0], squished[1], squished[2], squished[3]];
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
playerIds: {
|
|
42
|
-
type: PLAYER_ID_SUBTYPE,
|
|
43
|
-
squish: (i) => i,
|
|
44
|
-
unsquish: (squished) => squished
|
|
45
|
-
},
|
|
46
|
-
pos: {
|
|
47
|
-
type: POS_SUBTYPE,
|
|
48
|
-
squish: (p) => {
|
|
49
|
-
return [Math.floor(p.x), Math.round(100 * (p.x - Math.floor(p.x))), Math.floor(p.y), Math.round(100 * (p.y - Math.floor(p.y)))];
|
|
50
|
-
},
|
|
51
|
-
unsquish: (squished) => {
|
|
52
|
-
return {
|
|
53
|
-
x: squished[0] + squished[1] / 100,
|
|
54
|
-
y: squished[2] + squished[3] / 100
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
coordinates2d: {
|
|
59
|
-
type: COORDINATES_2D_SUBTYPE,
|
|
60
|
-
squish: (p, scale) => {
|
|
61
|
-
const originalCoords = p.flat();
|
|
62
|
-
const squished = new Array(originalCoords.length * 2);
|
|
63
|
-
originalCoords.forEach((val, i) => {
|
|
64
|
-
if (scale) {
|
|
65
|
-
const isX = i % 2 === 0;
|
|
66
|
-
const scaleValue = isX ? scale.x : scale.y;
|
|
67
|
-
const scaled = scaleValue * originalCoords[i];
|
|
68
|
-
const removedSpace = Math.round(100 * (1 - scaleValue));
|
|
69
|
-
const shifted = Number(scaled) + (removedSpace / 2);
|
|
70
|
-
squished[2 * i] = shifted;
|
|
71
|
-
squished[(2 * i) + 1] = util_1.getFractional(shifted);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
squished[2 * i] = Math.floor(originalCoords[i]);
|
|
75
|
-
squished[(2 * i) + 1] = Math.round(100 * (originalCoords[i] - Math.floor(originalCoords[i])));
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
return squished;
|
|
79
|
-
},
|
|
80
|
-
unsquish: (squished) => {
|
|
81
|
-
const unsquished = new Array(squished.length / 2);
|
|
82
|
-
for (let i = 0; i < squished.length; i += 2) {
|
|
83
|
-
const value = squished[i] + (squished[i + 1] / 100);
|
|
84
|
-
unsquished[i / 2] = value;
|
|
85
|
-
}
|
|
86
|
-
return unsquished;
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
fill: {
|
|
90
|
-
type: FILL_SUBTYPE,
|
|
91
|
-
squish: (c) => {
|
|
92
|
-
return [c[0], c[1], c[2], c[3]];
|
|
93
|
-
},
|
|
94
|
-
unsquish: (squished) => {
|
|
95
|
-
return [squished[0], squished[1], squished[2], squished[3]];
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
size: {
|
|
99
|
-
type: SIZE_SUBTYPE,
|
|
100
|
-
squish: (s) => {
|
|
101
|
-
return [Math.floor(s.x), Math.round(100 * (s.x - Math.floor(s.x))), Math.floor(s.y), Math.round(100 * (s.y - Math.floor(s.y)))];
|
|
102
|
-
},
|
|
103
|
-
unsquish: (squished) => {
|
|
104
|
-
return {
|
|
105
|
-
x: squished[0] + squished[1] / 100,
|
|
106
|
-
y: squished[2] + squished[3] / 100
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
text: {
|
|
111
|
-
type: TEXT_SUBTYPE,
|
|
112
|
-
squish: (t, scale) => {
|
|
113
|
-
const textX = scale ? (t.x * scale.x) + Math.round(100 * (1 - scale.x)) / 2 : t.x;
|
|
114
|
-
const textY = scale ? (t.y * scale.y) + Math.round(100 * (1 - scale.y)) / 2 : t.y;
|
|
115
|
-
const align = t.align || 'left';
|
|
116
|
-
const squishedText = new Array(t.text.length + 10 + align.length);
|
|
117
|
-
squishedText[0] = Math.floor(textX);
|
|
118
|
-
squishedText[1] = Math.round(100 * (textX - Math.floor(textX)));
|
|
119
|
-
squishedText[2] = Math.floor(textY);
|
|
120
|
-
squishedText[3] = Math.round(100 * (textY - Math.floor(textY)));
|
|
121
|
-
const textSize = t.size || 1;
|
|
122
|
-
const scaledTextSize = scale ? textSize * util_1.hypLength(scale.x, scale.y) : textSize;
|
|
123
|
-
squishedText[4] = Math.floor(scaledTextSize);
|
|
124
|
-
squishedText[5] = Math.round(100 * (scaledTextSize - Math.floor(scaledTextSize)));
|
|
125
|
-
const textColor = t.color || Colors_1.COLORS.BLACK;
|
|
126
|
-
const squishedTextColor = squishSpec.color.squish(textColor);
|
|
127
|
-
for (let i = 0; i < squishedTextColor.length; i++) {
|
|
128
|
-
squishedText[6 + i] = squishedTextColor[i];
|
|
129
|
-
}
|
|
130
|
-
squishedText[6 + squishedTextColor.length] = align.length;
|
|
131
|
-
for (let i = 0; i < align.length; i++) {
|
|
132
|
-
squishedText[6 + squishedTextColor.length + 1 + i] = align.codePointAt(i);
|
|
133
|
-
}
|
|
134
|
-
for (let i = 0; i < t.text.length; i++) {
|
|
135
|
-
squishedText[6 + squishedTextColor.length + align.length + 1 + i] = t.text.codePointAt(i);
|
|
136
|
-
}
|
|
137
|
-
return squishedText;
|
|
138
|
-
},
|
|
139
|
-
unsquish: (squished) => {
|
|
140
|
-
const textPosX = squished[0] + squished[1] / 100;
|
|
141
|
-
const textPosY = squished[2] + squished[3] / 100;
|
|
142
|
-
const textSize = squished[4] + squished[5] / 100;
|
|
143
|
-
const textColor = squished.slice(6, 10);
|
|
144
|
-
const textAlignLength = squished[10];
|
|
145
|
-
const align = String.fromCodePoint.apply(null, squished.slice(11, 11 + textAlignLength));
|
|
146
|
-
const text = String.fromCodePoint.apply(null, squished.slice(11 + textAlignLength));
|
|
147
|
-
return {
|
|
148
|
-
x: textPosX,
|
|
149
|
-
y: textPosY,
|
|
150
|
-
text: text,
|
|
151
|
-
size: textSize,
|
|
152
|
-
color: textColor,
|
|
153
|
-
align
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
asset: {
|
|
158
|
-
type: ASSET_SUBTYPE,
|
|
159
|
-
squish: (a, scale) => {
|
|
160
|
-
const assetKey = Object.keys(a)[0];
|
|
161
|
-
const squishedAssets = new Array(8 + assetKey.length);
|
|
162
|
-
const asset = a[assetKey];
|
|
163
|
-
const posX = scale ? ((scale.x * asset.pos.x) + Math.round(100 * (1 - scale.x)) / 2) : asset.pos.x;
|
|
164
|
-
const posY = scale ? ((scale.y * asset.pos.y) + Math.round(100 * (1 - scale.y)) / 2) : asset.pos.y;
|
|
165
|
-
const sizeX = scale ? scale.x * asset.size.x : asset.size.x;
|
|
166
|
-
const sizeY = scale ? scale.y * asset.size.y : asset.size.y;
|
|
167
|
-
squishedAssets[0] = Math.floor(posX);
|
|
168
|
-
squishedAssets[1] = util_1.getFractional(posX);
|
|
169
|
-
squishedAssets[2] = Math.floor(posY);
|
|
170
|
-
squishedAssets[3] = util_1.getFractional(posY);
|
|
171
|
-
squishedAssets[4] = Math.floor(sizeX);
|
|
172
|
-
squishedAssets[5] = util_1.getFractional(sizeX);
|
|
173
|
-
squishedAssets[6] = Math.floor(sizeY);
|
|
174
|
-
squishedAssets[7] = util_1.getFractional(sizeY);
|
|
175
|
-
for (let i = 0; i < assetKey.length; i++) {
|
|
176
|
-
squishedAssets[8 + i] = assetKey.codePointAt(i);
|
|
177
|
-
}
|
|
178
|
-
return squishedAssets;
|
|
179
|
-
},
|
|
180
|
-
unsquish: (squished) => {
|
|
181
|
-
const assetPosX = squished[0] + squished[1] / 100;
|
|
182
|
-
const assetPosY = squished[2] + squished[3] / 100;
|
|
183
|
-
const assetSizeX = squished[4] + squished[5] / 100;
|
|
184
|
-
const assetSizeY = squished[6] + squished[7] / 100;
|
|
185
|
-
const assetKey = String.fromCodePoint.apply(null, squished.slice(8));
|
|
186
|
-
return {
|
|
187
|
-
[assetKey]: {
|
|
188
|
-
pos: {
|
|
189
|
-
x: assetPosX,
|
|
190
|
-
y: assetPosY
|
|
191
|
-
},
|
|
192
|
-
size: {
|
|
193
|
-
x: assetSizeX,
|
|
194
|
-
y: assetSizeY
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
effects: {
|
|
201
|
-
type: EFFECTS_SUBTYPE,
|
|
202
|
-
squish: (a) => {
|
|
203
|
-
if (a['shadow']) {
|
|
204
|
-
const assetKey = 'shadow';
|
|
205
|
-
let squishedLength = assetKey.length + 4; // + 4 for color
|
|
206
|
-
if (a['shadow'].blur) {
|
|
207
|
-
squishedLength += 2;
|
|
208
|
-
}
|
|
209
|
-
const squishedEffects = new Array(squishedLength);
|
|
210
|
-
for (let i = 0; i < assetKey.length; i++) {
|
|
211
|
-
squishedEffects[i] = assetKey.codePointAt(i);
|
|
212
|
-
}
|
|
213
|
-
squishedEffects[assetKey.length] = a.shadow.color[0];
|
|
214
|
-
squishedEffects[assetKey.length + 1] = a.shadow.color[1];
|
|
215
|
-
squishedEffects[assetKey.length + 2] = a.shadow.color[2];
|
|
216
|
-
squishedEffects[assetKey.length + 3] = a.shadow.color[3];
|
|
217
|
-
if (a.shadow.blur) {
|
|
218
|
-
squishedEffects[assetKey.length + 4] = Math.floor(a.shadow.blur / 10);
|
|
219
|
-
squishedEffects[assetKey.length + 5] = a.shadow.blur % 10;
|
|
220
|
-
}
|
|
221
|
-
return squishedEffects;
|
|
222
|
-
}
|
|
223
|
-
},
|
|
224
|
-
unsquish: (squished) => {
|
|
225
|
-
// 'shadow' is all (for now)
|
|
226
|
-
const assetKey = String.fromCodePoint.apply(null, squished.slice(0, 6));
|
|
227
|
-
const color = squished.slice(6, 10);
|
|
228
|
-
let blur;
|
|
229
|
-
if (squished.length > 10) {
|
|
230
|
-
blur = squished[10] * 10 + squished[11];
|
|
231
|
-
}
|
|
232
|
-
const unsquished = {
|
|
233
|
-
[assetKey]: {
|
|
234
|
-
color
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
if (blur) {
|
|
238
|
-
unsquished[assetKey].blur = blur;
|
|
239
|
-
}
|
|
240
|
-
return unsquished;
|
|
241
|
-
}
|
|
242
|
-
},
|
|
243
|
-
handleClick: {
|
|
244
|
-
type: ONCLICK_SUBTYPE,
|
|
245
|
-
squish: (a) => {
|
|
246
|
-
return a ? [1] : [0];
|
|
247
|
-
},
|
|
248
|
-
unsquish: (a) => {
|
|
249
|
-
return a[0] === 1;
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
border: {
|
|
253
|
-
type: BORDER_SUBTYPE,
|
|
254
|
-
squish: (a) => {
|
|
255
|
-
return [a];
|
|
256
|
-
},
|
|
257
|
-
unsquish: (s) => {
|
|
258
|
-
return s[0];
|
|
259
|
-
}
|
|
260
|
-
},
|
|
261
|
-
input: {
|
|
262
|
-
type: INPUT_SUBTYPE,
|
|
263
|
-
squish: (a) => {
|
|
264
|
-
const squished = new Array(a.type.length);
|
|
265
|
-
for (let i = 0; i < a.type.length; i++) {
|
|
266
|
-
squished[i] = a.type.codePointAt(i);
|
|
267
|
-
}
|
|
268
|
-
return squished;
|
|
269
|
-
},
|
|
270
|
-
unsquish: (squished) => {
|
|
271
|
-
return {
|
|
272
|
-
type: String.fromCodePoint.apply(null, squished)
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
const squishSpecKeys = [
|
|
278
|
-
'id',
|
|
279
|
-
'color',
|
|
280
|
-
'playerIds',
|
|
281
|
-
'coordinates2d',
|
|
282
|
-
'fill',
|
|
283
|
-
'pos',
|
|
284
|
-
'size',
|
|
285
|
-
'text',
|
|
286
|
-
'asset',
|
|
287
|
-
'effects',
|
|
288
|
-
'border',
|
|
289
|
-
'handleClick',
|
|
290
|
-
'input'
|
|
291
|
-
];
|
|
292
|
-
const typeToSquishMap = {};
|
|
293
|
-
for (const key in squishSpec) {
|
|
294
|
-
typeToSquishMap[Number(squishSpec[key].type)] = key;
|
|
295
|
-
}
|
|
296
|
-
const unsquish = (squished) => {
|
|
297
|
-
assert(squished[0] == 3);
|
|
298
|
-
assert(squished.length === squished[1]);
|
|
299
|
-
let squishedIndex = 2;
|
|
300
|
-
let constructedGameNode = {};
|
|
301
|
-
while (squishedIndex < squished.length) {
|
|
302
|
-
const subFrameType = squished[squishedIndex];
|
|
303
|
-
const subFrameLength = squished[squishedIndex + 1];
|
|
304
|
-
const subFrame = squished.slice(squishedIndex + 2, squishedIndex + subFrameLength);
|
|
305
|
-
if (!typeToSquishMap[subFrameType]) {
|
|
306
|
-
console.warn(`Unknown sub frame type ${subFrameType}`);
|
|
307
|
-
break;
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
const objField = typeToSquishMap[subFrameType];
|
|
311
|
-
const unsquishFun = squishSpec[objField]['unsquish'];
|
|
312
|
-
const unsquishedVal = unsquishFun(subFrame);
|
|
313
|
-
constructedGameNode[objField] = unsquishedVal;
|
|
314
|
-
}
|
|
315
|
-
squishedIndex += subFrameLength;
|
|
316
|
-
}
|
|
317
|
-
return constructedGameNode;
|
|
318
|
-
};
|
|
319
|
-
exports.unsquish = unsquish;
|
|
320
|
-
const squish = (entity, scale = null) => {
|
|
321
|
-
let squishedPieces = [];
|
|
322
|
-
for (const keyIndex in squishSpecKeys) {
|
|
323
|
-
const key = squishSpecKeys[keyIndex];
|
|
324
|
-
if (key in entity) {
|
|
325
|
-
const attr = entity[key];
|
|
326
|
-
if (attr !== undefined && attr !== null) {
|
|
327
|
-
const squished = squishSpec[key].squish(attr, scale);
|
|
328
|
-
squishedPieces.push([squishSpec[key].type, squished.length + 2, ...squished]);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
const squished = squishedPieces.flat();
|
|
333
|
-
return [3, squished.length + 2, ...squished];
|
|
334
|
-
};
|
|
335
|
-
exports.squish = squish;
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1aXNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NxdWlzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBa0M7QUFDbEMsaUNBQWtEO0FBRWxELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVqQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBS3pCLENBQUM7QUFNRCxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQXdDO0lBQ3BELEVBQUUsRUFBRTtRQUNBLElBQUksRUFBRSxVQUFVO1FBQ2hCLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1YsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztLQUNKO0lBQ0QsS0FBSyxFQUFFO1FBQ0gsSUFBSSxFQUFFLGFBQWE7UUFDbkIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDVixP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Q0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVuRyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFNUQsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFeEMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFeEMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEs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
|
package/dist/terrain/defs.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
;
|
|
4
|
-
;
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXJyYWluL2RlZnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQyxDQUFDO0FBWUQsQ0FBQyJ9
|
package/dist/terrain/index.d.ts
DELETED
package/dist/terrain/index.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.terrainGenerator = void 0;
|
|
4
|
-
const terrainFunctions_1 = require("./terrainFunctions");
|
|
5
|
-
;
|
|
6
|
-
const terrainGenerator = (boardBounds = { x: 100, y: 100 }, terrainBounds = { x: 5, y: 5 }, numberOfTerrainElements = 5) => {
|
|
7
|
-
const { width, height } = getBoardDimensions(boardBounds, terrainBounds);
|
|
8
|
-
let board = initializeBoard(width, height);
|
|
9
|
-
const keyPoint = {
|
|
10
|
-
x: Math.floor(Math.random() * width),
|
|
11
|
-
y: Math.floor(Math.random() * height)
|
|
12
|
-
};
|
|
13
|
-
board = generateTerrain(board, keyPoint, numberOfTerrainElements, width, height);
|
|
14
|
-
return board;
|
|
15
|
-
};
|
|
16
|
-
exports.terrainGenerator = terrainGenerator;
|
|
17
|
-
const getBoardDimensions = (boardBounds, terrainBounds) => {
|
|
18
|
-
const boardX = boardBounds.x;
|
|
19
|
-
const boardY = boardBounds.y;
|
|
20
|
-
const terrainX = terrainBounds.x;
|
|
21
|
-
const terrainY = terrainBounds.y;
|
|
22
|
-
return {
|
|
23
|
-
width: Math.floor(boardX / terrainX),
|
|
24
|
-
height: Math.floor(boardY / terrainY)
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
const initializeBoard = (width, height) => {
|
|
28
|
-
const board = [];
|
|
29
|
-
const defaultInfo = {
|
|
30
|
-
filled: false,
|
|
31
|
-
north: true,
|
|
32
|
-
south: true,
|
|
33
|
-
east: true,
|
|
34
|
-
west: true
|
|
35
|
-
};
|
|
36
|
-
for (let i = 0; i < width; i++) {
|
|
37
|
-
board[i] = [];
|
|
38
|
-
for (let j = 0; j < height; j++) {
|
|
39
|
-
const info = Object.assign({}, defaultInfo);
|
|
40
|
-
if (i === 0) {
|
|
41
|
-
info.west = false;
|
|
42
|
-
}
|
|
43
|
-
else if (i === width - 1) {
|
|
44
|
-
info.east = false;
|
|
45
|
-
}
|
|
46
|
-
if (j === 0) {
|
|
47
|
-
info.north = false;
|
|
48
|
-
}
|
|
49
|
-
else if (j === height - 1) {
|
|
50
|
-
info.south = false;
|
|
51
|
-
}
|
|
52
|
-
board[i].push(info);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return board;
|
|
56
|
-
};
|
|
57
|
-
const deepClone = (toCopy) => {
|
|
58
|
-
const toReturn = [];
|
|
59
|
-
toCopy.forEach((row, rowNum) => {
|
|
60
|
-
toReturn[rowNum] = [];
|
|
61
|
-
row.forEach(elem => {
|
|
62
|
-
toReturn[rowNum].push(Object.assign({}, elem));
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
return toReturn;
|
|
66
|
-
};
|
|
67
|
-
const cleanUpBoard = (board) => {
|
|
68
|
-
for (let i = 0; i < board.length; i++) {
|
|
69
|
-
for (let j = 0; j < board[i].length; j++) {
|
|
70
|
-
board[i][j] = {
|
|
71
|
-
filled: board[i][j].filled,
|
|
72
|
-
north: board[i][j].north,
|
|
73
|
-
south: board[i][j].south,
|
|
74
|
-
east: board[i][j].east,
|
|
75
|
-
west: board[i][j].west
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
const verifyKeyPoint = (board, keyPoint, boardWidth, boardHeight) => {
|
|
81
|
-
const pointsVerified = [];
|
|
82
|
-
for (let x = 0; x < boardWidth; x++) {
|
|
83
|
-
for (let y = 0; y < boardHeight; y++) {
|
|
84
|
-
const pointsOnCurrentPath = [];
|
|
85
|
-
const currentPoint = { x, y };
|
|
86
|
-
while (true) {
|
|
87
|
-
const boardPoint = board[currentPoint.x][currentPoint.y];
|
|
88
|
-
if ((pointsVerified.findIndex(point => point.x === currentPoint.x && point.y === currentPoint.y) > -1) ||
|
|
89
|
-
(currentPoint.x === keyPoint.x && currentPoint.y === keyPoint.y) ||
|
|
90
|
-
(boardPoint.filled)) {
|
|
91
|
-
/*
|
|
92
|
-
if we already know we can reach the keyPoint from our test point or
|
|
93
|
-
if we are at the key point or
|
|
94
|
-
if we are in a filled point, just skip the iteration, no need to test this point further
|
|
95
|
-
*/
|
|
96
|
-
pointsVerified.push(...pointsOnCurrentPath);
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
else if ((!boardPoint.north || boardPoint.wentNorth) &&
|
|
100
|
-
(!boardPoint.south || boardPoint.wentSouth) &&
|
|
101
|
-
(!boardPoint.east || boardPoint.wentEast) &&
|
|
102
|
-
(!boardPoint.west || boardPoint.wentWest)) {
|
|
103
|
-
/*
|
|
104
|
-
if we have exhausted all possible movements for a point, and not reached the keypoint
|
|
105
|
-
then this possibleBoard is not workable
|
|
106
|
-
*/
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
pointsOnCurrentPath.push(Object.assign({}, currentPoint));
|
|
110
|
-
if (boardPoint.south && !boardPoint.wentSouth) {
|
|
111
|
-
boardPoint.wentSouth = true;
|
|
112
|
-
currentPoint.y = currentPoint.y + 1;
|
|
113
|
-
}
|
|
114
|
-
else if (boardPoint.east && !boardPoint.wentEast) {
|
|
115
|
-
boardPoint.wentEast = true;
|
|
116
|
-
currentPoint.x = currentPoint.x + 1;
|
|
117
|
-
}
|
|
118
|
-
else if (boardPoint.north && !boardPoint.wentNorth) {
|
|
119
|
-
boardPoint.wentNorth = true;
|
|
120
|
-
currentPoint.y = currentPoint.y - 1;
|
|
121
|
-
}
|
|
122
|
-
else if (boardPoint.west && !boardPoint.wentWest) {
|
|
123
|
-
boardPoint.wentWest = true;
|
|
124
|
-
currentPoint.x = currentPoint.x - 1;
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
cleanUpBoard(board);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return true;
|
|
134
|
-
};
|
|
135
|
-
const generateTerrain = (board, keyPoint, toPlace, boardWidth, boardHeight, numberOfIterations = 0) => {
|
|
136
|
-
if (toPlace === 0 || numberOfIterations === 3) {
|
|
137
|
-
return board;
|
|
138
|
-
}
|
|
139
|
-
const possibleBoard = deepClone(board);
|
|
140
|
-
const terrainFunction = terrainFunctions_1.getRandomTerrain();
|
|
141
|
-
const terrainStartPoint = terrainFunctions_1.getRandomStartPoint(boardWidth, boardHeight, keyPoint);
|
|
142
|
-
terrainFunction(possibleBoard, terrainStartPoint, boardWidth, boardHeight, keyPoint);
|
|
143
|
-
const temp = verifyKeyPoint(possibleBoard, keyPoint, boardWidth, boardHeight);
|
|
144
|
-
if (temp) {
|
|
145
|
-
return generateTerrain(possibleBoard, keyPoint, toPlace - 1, boardWidth, boardHeight, 0);
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
return generateTerrain(board, keyPoint, toPlace, boardWidth, boardHeight, numberOfIterations + 1);
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVycmFpbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFBMkU7QUFNMUUsQ0FBQztBQUVLLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxjQUF3QixFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLGdCQUEwQixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLHVCQUF1QixHQUFHLENBQUMsRUFBRSxFQUFFO0lBQ2xKLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3pFLElBQUksS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUc7UUFDYixDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDeEMsQ0FBQztJQUNGLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBVFcsUUFBQSxnQkFBZ0Isb0JBUzNCO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFdBQXFCLEVBQUUsYUFBdUIsRUFBZ0IsRUFBRTtJQUN4RixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFB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
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { pointDef, boardInfo } from './defs';
|
|
2
|
-
export declare const getRandomTerrain: () => (board: boardInfo[][], { x, y }: pointDef, boardWidth: number, boardHeight: number, keyPoint: pointDef) => void;
|
|
3
|
-
export declare const getRandomStartPoint: (boardWidth: number, boardHeight: number, keyPoint: pointDef) => {
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
};
|