squishjs 0.6.43 → 0.7.3

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.
Files changed (77) hide show
  1. package/.github/workflows/node.js.yml +1 -1
  2. package/LICENSE.md +21 -0
  3. package/README.md +116 -42
  4. package/index.js +11 -1
  5. package/oldsvgexport.js +89 -0
  6. package/package.json +1 -1
  7. package/render-tester.js +120 -0
  8. package/src/BaseNode.js +101 -0
  9. package/src/Game.js +15 -3
  10. package/src/GameNode.js +82 -79
  11. package/src/InternalGameNode.js +4 -3
  12. package/src/Squisher.js +235 -0
  13. package/src/ViewableGame.js +60 -0
  14. package/src/node-types.js +15 -0
  15. package/src/squish.js +90 -349
  16. package/src/squishHelpers/asset.js +63 -0
  17. package/src/squishHelpers/border.js +16 -0
  18. package/src/squishHelpers/color.js +16 -0
  19. package/src/squishHelpers/coordinates2d.js +98 -0
  20. package/src/squishHelpers/effect.js +55 -0
  21. package/src/squishHelpers/fill.js +16 -0
  22. package/src/squishHelpers/handleClick.js +16 -0
  23. package/src/squishHelpers/id.js +16 -0
  24. package/src/squishHelpers/input.js +22 -0
  25. package/src/squishHelpers/playerIds.js +12 -0
  26. package/src/squishHelpers/pos.js +23 -0
  27. package/src/squishHelpers/size.js +23 -0
  28. package/src/squishHelpers/subType.js +16 -0
  29. package/src/squishHelpers/text.js +154 -0
  30. package/src/subtype-mappings.js +10 -0
  31. package/src/subtypes.js +7 -0
  32. package/{dist/terrain/defs.d.ts → src/terrain/defs.ts} +7 -6
  33. package/src/terrain/index.ts +156 -0
  34. package/src/terrain/terrainFunctions.ts +142 -0
  35. package/src/util/geometry.js +45 -0
  36. package/src/util/index.ts +6 -0
  37. package/src/util/listenable.ts +20 -0
  38. package/src/util/shapes.ts +18 -0
  39. package/src/util/views.js +108 -0
  40. package/test/Layers.test.js +63 -0
  41. package/test/Scale.test.js +235 -0
  42. package/test/Squisher.test.js +49 -0
  43. package/test/StateUpdates.js +10 -0
  44. package/test/Terrain.test.js +0 -1
  45. package/test/main.test.js +55 -35
  46. package/test/utils.js +91 -0
  47. package/testapp.html +26 -0
  48. package/testapp.js +988 -0
  49. package/tsconfig.json +22 -0
  50. package/dist/Colors.d.ts +0 -7
  51. package/dist/Colors.js +0 -124
  52. package/dist/Game.d.ts +0 -20
  53. package/dist/Game.js +0 -48
  54. package/dist/GameNode.d.ts +0 -66
  55. package/dist/GameNode.js +0 -148
  56. package/dist/InternalGameNode.d.ts +0 -20
  57. package/dist/InternalGameNode.js +0 -32
  58. package/dist/Shapes.d.ts +0 -6
  59. package/dist/Shapes.js +0 -8
  60. package/dist/index.d.ts +0 -7
  61. package/dist/index.js +0 -18
  62. package/dist/sharedDefs.d.ts +0 -72
  63. package/dist/sharedDefs.js +0 -13
  64. package/dist/squish.d.ts +0 -8
  65. package/dist/squish.js +0 -336
  66. package/dist/terrain/defs.js +0 -5
  67. package/dist/terrain/index.d.ts +0 -2
  68. package/dist/terrain/index.js +0 -151
  69. package/dist/terrain/terrainFunctions.d.ts +0 -6
  70. package/dist/terrain/terrainFunctions.js +0 -152
  71. package/dist/util/index.d.ts +0 -2
  72. package/dist/util/index.js +0 -11
  73. package/dist/util/listenable.d.ts +0 -3
  74. package/dist/util/listenable.js +0 -21
  75. package/dist/util/shapes.d.ts +0 -2
  76. package/dist/util/shapes.js +0 -23
  77. 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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
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- ;
4
- ;
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXJyYWluL2RlZnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQyxDQUFDO0FBWUQsQ0FBQyJ9
@@ -1,2 +0,0 @@
1
- import { pointDef, boardInfo } from './defs';
2
- export declare const terrainGenerator: (boardBounds?: pointDef, terrainBounds?: pointDef, numberOfTerrainElements?: number) => boardInfo[][];
@@ -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
- };