adofai-lib 1.0.8 → 1.1.0

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.
@@ -10,7 +10,60 @@ export default class LevelDict {
10
10
  private getFileDict;
11
11
  getAngles(): number[];
12
12
  setAngles(angles: number[]): void;
13
- getAnglesRelative(ignoreTwirls?: boolean, padMidspins?: boolean): number[];
13
+ /**
14
+ * Recalculates all pre-computed tile metadata (relative angles, rotation flips, etc.)
15
+ * Should be called whenever tiles or actions are modified
16
+ */
17
+ private recalculateTileMetadata;
18
+ /**
19
+ * Calculates rotation direction flips based on Twirl events
20
+ */
21
+ private calculateRotationFlips;
22
+ /**
23
+ * Calculates pause angles for each tile based on Pause events
24
+ * Each pause adds duration * 180 degrees to the tile's relative angle
25
+ */
26
+ private calculatePauseAngle;
27
+ /**
28
+ * Calculates relative angles for each tile based on rotation direction and multiplanet mode
29
+ *
30
+ * Multiplanet formula:
31
+ * - In N-planet mode, planets are spaced 360/N degrees apart
32
+ * - The inner offset is: 180 - (360/N) = 180(N-2)/N
33
+ * - If adjusted angle < planet spacing, it wraps to 360 - original relative angle
34
+ */
35
+ private calculateRelativeAngles;
36
+ /**
37
+ * Calculates duration in milliseconds for each tile
38
+ * Duration represents the time between hitting this tile and the next tile
39
+ * Formula: (relativeAngle / 180) * (60000 / BPM)
40
+ * Since 180 degrees = 1 beat, and 1 beat = 60000ms / BPM
41
+ */
42
+ private calculateDurationMs;
43
+ /**
44
+ * Calculates multiplanet state for each tile based on MultiPlanet events
45
+ * Tracks planet count changes (2, 3, 4, 5+ planets) throughout the level
46
+ * Like Twirl events, the change applies to the tile where the event is and all subsequent tiles
47
+ */
48
+ private calculateMultiplanet;
49
+ private calculateHitmargin;
50
+ /**
51
+ * Calculates current BPM at each tile based on SetSpeed events
52
+ * Tracks BPM changes throughout the level, considering angleOffset for mid-tile changes
53
+ *
54
+ * When angleOffset > 0, the tile with the speed change gets an effective BPM calculated as:
55
+ * - First `offset` degrees rotate at current BPM
56
+ * - Remaining `(relativeAngle - offset)` degrees rotate at transitional speed
57
+ * - Formula: effectiveBpm considers both portions to create smooth transition
58
+ */
59
+ private calculateCurrentBpm;
60
+ /**
61
+ * Gets relative angles for all tiles
62
+ * @param ignoreTwirls If true, ignores rotation flips from Twirl events (legacy parameter for compatibility)
63
+ * @param padMidspins If true, includes midspins (999) as 0 in the output
64
+ * @returns Array of relative angles
65
+ */
66
+ getAnglesRelative(): number[];
14
67
  /**
15
68
  * Gets actions from the level
16
69
  * @param condition Filter condition for actions
@@ -39,6 +92,29 @@ export default class LevelDict {
39
92
  * @throws Error if any index is invalid
40
93
  */
41
94
  getTiles(indices: number[]): Tile[];
95
+ /**
96
+ * Gets rotation flip states for all tiles
97
+ * @returns Array of boolean values indicating if rotation is flipped at each tile
98
+ */
99
+ getRotationFlips(): boolean[];
100
+ /**
101
+ * Gets duration in milliseconds for all tiles
102
+ * @returns Array of duration values in milliseconds (undefined if not yet implemented)
103
+ */
104
+ getDurations(): (number | undefined)[];
105
+ /**
106
+ * Gets multiplanet states for all tiles
107
+ * @returns Array of boolean values indicating triple ball state (undefined if not yet implemented)
108
+ */
109
+ getMultiplanetStates(): (number | undefined)[];
110
+ getPurePerfectMargins(): (number | undefined)[];
111
+ getPerfectMargins(): (number | undefined)[];
112
+ getPassMargins(): (number | undefined)[];
113
+ /**
114
+ * Gets current BPM values for all tiles
115
+ * @returns Array of BPM values (undefined if not yet implemented)
116
+ */
117
+ getCurrentBpms(): (number | undefined)[];
42
118
  writeToFile(filename?: string): void;
43
119
  toJSON(): LevelJSON;
44
120
  static fromJSON(json: string): LevelDict;
@@ -1 +1 @@
1
- {"version":3,"file":"LevelDict.d.ts","sourceRoot":"","sources":["../src/LevelDict.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LevelDict.d.ts","sourceRoot":"","sources":["../src/LevelDict.ts"],"names":[],"mappings":"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"}
package/dist/LevelDict.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as fs from 'fs';
2
2
  import * as utils from './utils/levelUtils.js';
3
3
  import { InvalidLevelDictException } from './types/index.js';
4
+ import { pathchars, perfectAngle, passAngle, purePerfectAngle } from './constants.js';
4
5
  export default class LevelDict {
5
6
  constructor(filename = '', encoding = 'utf-8') {
6
7
  this.tiles = [];
@@ -17,12 +18,6 @@ export default class LevelDict {
17
18
  angleData = leveldict.angleData;
18
19
  }
19
20
  else {
20
- const pathchars = {
21
- 'R': 0, 'p': 15, 'J': 30, 'E': 45, 'T': 60, 'o': 75, 'U': 90,
22
- 'q': 105, 'G': 120, 'Q': 135, 'H': 150, 'W': 165, 'L': 180,
23
- 'x': 195, 'N': 210, 'Z': 225, 'F': 240, 'V': 255, 'D': 270,
24
- 'Y': 285, 'B': 300, 'C': 315, 'M': 330, 'A': 345, '!': 999
25
- };
26
21
  angleData = Array.from(leveldict.pathData).map(char => pathchars[char]);
27
22
  }
28
23
  const actions = leveldict.actions;
@@ -52,6 +47,8 @@ export default class LevelDict {
52
47
  }
53
48
  }
54
49
  });
50
+ // Pre-calculate all tile metadata
51
+ this.recalculateTileMetadata();
55
52
  }
56
53
  getFileString(filename) {
57
54
  if (!filename)
@@ -85,34 +82,248 @@ export default class LevelDict {
85
82
  this.tiles.forEach((tile, i) => {
86
83
  tile.angle = angles[i];
87
84
  });
85
+ this.recalculateTileMetadata();
86
+ }
87
+ /**
88
+ * Recalculates all pre-computed tile metadata (relative angles, rotation flips, etc.)
89
+ * Should be called whenever tiles or actions are modified
90
+ */
91
+ recalculateTileMetadata() {
92
+ this.calculateRotationFlips();
93
+ this.calculatePauseAngle();
94
+ this.calculateMultiplanet();
95
+ this.calculateRelativeAngles();
96
+ this.calculateCurrentBpm();
97
+ this.calculateDurationMs();
98
+ this.calculateHitmargin();
88
99
  }
89
- getAnglesRelative(ignoreTwirls = false, padMidspins = false) {
90
- const absangles = this.getAngles();
91
- if (!ignoreTwirls) {
92
- const twirls = this.getActions((action) => action.eventType === 'Twirl')
93
- .map(event => event.floor);
94
- for (const twirl of twirls.reverse()) {
95
- absangles.splice(twirl, absangles.length - twirl, ...absangles.slice(twirl).map(angle => angle !== 999 ? (2 * absangles[twirl - 1] - angle) % 360 : 999));
100
+ /**
101
+ * Calculates rotation direction flips based on Twirl events
102
+ */
103
+ calculateRotationFlips() {
104
+ // Get twirl positions
105
+ const twirls = this.tiles
106
+ .flatMap((tile, idx) => tile.actions
107
+ .filter(action => action.eventType === 'Twirl')
108
+ .map(() => idx))
109
+ .sort((a, b) => a - b);
110
+ // Track cumulative direction changes
111
+ let currentlyFlipped = false;
112
+ let twirlIdx = 0;
113
+ for (let i = 0; i < this.tiles.length; i++) {
114
+ if (twirlIdx < twirls.length && i === twirls[twirlIdx]) {
115
+ currentlyFlipped = !currentlyFlipped;
116
+ twirlIdx++;
96
117
  }
118
+ this.tiles[i].rotationFlipped = currentlyFlipped;
119
+ }
120
+ }
121
+ /**
122
+ * Calculates pause angles for each tile based on Pause events
123
+ * Each pause adds duration * 180 degrees to the tile's relative angle
124
+ */
125
+ calculatePauseAngle() {
126
+ for (let i = 0; i < this.tiles.length; i++) {
127
+ // Find all Pause events on this tile and sum their durations
128
+ const totalPauseDuration = this.tiles[i].actions
129
+ .filter(action => action.eventType === 'Pause')
130
+ .reduce((sum, action) => sum + (action.duration || 0), 0);
131
+ this.tiles[i].pauseAngle = totalPauseDuration * 180;
97
132
  }
98
- const midspins = absangles.map((angle, idx) => angle === 999 ? idx : -1).filter(idx => idx !== -1);
99
- for (const midspin of midspins.reverse()) {
100
- absangles.splice(midspin + 1, absangles.length - (midspin + 1), ...absangles.slice(midspin + 1).map(angle => angle !== 999 ? (angle + 180) % 360 : 999));
133
+ }
134
+ /**
135
+ * Calculates relative angles for each tile based on rotation direction and multiplanet mode
136
+ *
137
+ * Multiplanet formula:
138
+ * - In N-planet mode, planets are spaced 360/N degrees apart
139
+ * - The inner offset is: 180 - (360/N) = 180(N-2)/N
140
+ * - If adjusted angle < planet spacing, it wraps to 360 - original relative angle
141
+ */
142
+ calculateRelativeAngles() {
143
+ for (let i = 0; i < this.tiles.length; i++) {
144
+ const currentAngle = this.tiles[i].angle;
145
+ // Handle midspins specially
146
+ if (currentAngle === 999) {
147
+ // Regular midspin: relative angle of 0
148
+ this.tiles[i].relativeAngle = 0;
149
+ continue;
150
+ }
151
+ // Find previous non-midspin tile
152
+ let prevAngle = 0;
153
+ let hasMidspinWithTwirl = false;
154
+ if (i > 0) {
155
+ let prevIdx = i - 1;
156
+ while (prevIdx >= 0 && this.tiles[prevIdx].angle === 999) {
157
+ // Check if this midspin has a Twirl event
158
+ if (this.tiles[prevIdx].actions.some(action => action.eventType === 'Twirl')) {
159
+ hasMidspinWithTwirl = true;
160
+ }
161
+ prevIdx--;
162
+ }
163
+ if (prevIdx >= 0) {
164
+ prevAngle = this.tiles[prevIdx].angle;
165
+ }
166
+ }
167
+ // Calculate base relative angle
168
+ const angleCalculation = prevAngle - currentAngle + 180 - 1;
169
+ // JavaScript modulo doesn't handle negatives correctly, so normalize first
170
+ let relative = ((angleCalculation % 360) + 360) % 360 + 1;
171
+ // If there was a midspin with Twirl before this tile, apply "kick back" effect
172
+ if (hasMidspinWithTwirl) {
173
+ // The "kick back" effect means the travel direction is reversed
174
+ // This is equivalent to flipping the relative angle
175
+ relative = 360 - relative;
176
+ }
177
+ // Apply rotation flip by negating the angle
178
+ if (this.tiles[i].rotationFlipped) {
179
+ relative = 360 - relative;
180
+ }
181
+ // Apply multiplanet offset
182
+ const multiplanetCount = this.tiles[i].multiplanet || 2;
183
+ if (multiplanetCount > 2) {
184
+ // Calculate planet spacing: 360 / N
185
+ const planetSpacing = 360 / multiplanetCount;
186
+ // Calculate inner offset: 180 - (360 / N) = 180(N - 2) / N
187
+ const innerOffset = 180 - planetSpacing;
188
+ // Subtract the inner offset from the relative angle
189
+ const adjustedAngle = relative - innerOffset;
190
+ // If the adjusted angle is less than planet spacing, wrap around the outside
191
+ // This happens when the tile appears "behind" the next planet
192
+ if (adjustedAngle < planetSpacing) {
193
+ relative = 360 - relative;
194
+ }
195
+ else {
196
+ relative = adjustedAngle;
197
+ }
198
+ }
199
+ this.tiles[i].relativeAngle = relative + (this.tiles[i].pauseAngle || 0);
101
200
  }
102
- if (!padMidspins) {
103
- absangles.splice(0, absangles.length, ...absangles.filter(angle => angle !== 999));
201
+ }
202
+ /**
203
+ * Calculates duration in milliseconds for each tile
204
+ * Duration represents the time between hitting this tile and the next tile
205
+ * Formula: (relativeAngle / 180) * (60000 / BPM)
206
+ * Since 180 degrees = 1 beat, and 1 beat = 60000ms / BPM
207
+ */
208
+ calculateDurationMs() {
209
+ for (let i = 0; i < this.tiles.length; i++) {
210
+ const relativeAngle = this.tiles[i].relativeAngle || 180;
211
+ const currentBpm = this.tiles[i].currentBpm || 100;
212
+ // Calculate duration: angle in degrees / 180 = beats, beats * ms per beat = duration
213
+ const beatsPerMs = 60000 / currentBpm;
214
+ const beats = relativeAngle / 180;
215
+ const duration = beats * beatsPerMs;
216
+ this.tiles[i].durationMs = duration;
104
217
  }
105
- return absangles.map((angle, idx) => {
106
- if (angle === 999)
107
- return 0;
108
- if (idx === 0)
109
- return ((0 - angle + 180 - 1) % 360) + 1;
110
- if (absangles[idx - 1] === 999) {
111
- return ((absangles[idx - 2] - angle + 180 - 1) % 360) + 1;
218
+ }
219
+ /**
220
+ * Calculates multiplanet state for each tile based on MultiPlanet events
221
+ * Tracks planet count changes (2, 3, 4, 5+ planets) throughout the level
222
+ * Like Twirl events, the change applies to the tile where the event is and all subsequent tiles
223
+ */
224
+ calculateMultiplanet() {
225
+ let currentPlanetCount = 2; // Default to 2 planets
226
+ for (let i = 0; i < this.tiles.length; i++) {
227
+ // Set the planet count BEFORE checking for events on this tile
228
+ this.tiles[i].multiplanet = currentPlanetCount;
229
+ // Check for MultiPlanet events on this tile
230
+ const multiPlanetEvents = this.tiles[i].actions.filter(action => action.eventType === 'MultiPlanet');
231
+ // Update planet count for subsequent tiles if there's a MultiPlanet event
232
+ for (const event of multiPlanetEvents) {
233
+ if (event.planets === 'TwoPlanets') {
234
+ currentPlanetCount = 2;
235
+ }
236
+ else if (event.planets === 'ThreePlanets') {
237
+ currentPlanetCount = 3;
238
+ }
239
+ else if (event.planets === 'FourPlanets') {
240
+ currentPlanetCount = 4;
241
+ }
242
+ else if (event.planets === 'FivePlanets') {
243
+ currentPlanetCount = 5;
244
+ }
245
+ else if (event.planets === 'SixPlanets') {
246
+ currentPlanetCount = 6;
247
+ }
248
+ // Can extend for more planets as needed
249
+ // Apply the change to this tile as well
250
+ this.tiles[i].multiplanet = currentPlanetCount;
112
251
  }
113
- return ((absangles[idx - 1] - angle + 180 - 1) % 360) + 1;
252
+ }
253
+ }
254
+ calculateHitmargin() {
255
+ // Placeholder implementation
256
+ this.tiles.forEach(tile => {
257
+ const crotchet = (60000 / (tile.currentBpm || 100));
258
+ tile.purePerfectMargin = Math.max((purePerfectAngle / 180) * crotchet * 2, 25);
259
+ tile.perfectMargin = Math.max((perfectAngle / 180) * crotchet * 2, 25);
260
+ tile.passMargin = Math.max((passAngle / 180) * crotchet * 2, 25);
114
261
  });
115
262
  }
263
+ /**
264
+ * Calculates current BPM at each tile based on SetSpeed events
265
+ * Tracks BPM changes throughout the level, considering angleOffset for mid-tile changes
266
+ *
267
+ * When angleOffset > 0, the tile with the speed change gets an effective BPM calculated as:
268
+ * - First `offset` degrees rotate at current BPM
269
+ * - Remaining `(relativeAngle - offset)` degrees rotate at transitional speed
270
+ * - Formula: effectiveBpm considers both portions to create smooth transition
271
+ */
272
+ calculateCurrentBpm() {
273
+ // Get base BPM from settings
274
+ const baseBpm = this.settings.bpm ? parseFloat(this.settings.bpm) : 100;
275
+ let currentBpm = baseBpm;
276
+ for (let i = 0; i < this.tiles.length; i++) {
277
+ // Set the BPM at the start of this tile
278
+ this.tiles[i].currentBpm = currentBpm;
279
+ // Check for SetSpeed events on this tile
280
+ const speedEvents = this.tiles[i].actions.filter(action => action.eventType === 'SetSpeed' && action.speedType === 'Bpm');
281
+ // Process speed events (in order they appear in the actions array)
282
+ for (const event of speedEvents) {
283
+ const newBpm = event.beatsPerMinute || baseBpm;
284
+ const multiplier = event.bpmMultiplier || 1;
285
+ const angleOffset = event.angleOffset || 0;
286
+ // Calculate the actual BPM with multiplier
287
+ const targetBpm = newBpm * multiplier;
288
+ if (angleOffset === 0) {
289
+ // Change applies immediately at this tile
290
+ this.tiles[i].currentBpm = targetBpm;
291
+ currentBpm = targetBpm;
292
+ }
293
+ else {
294
+ // Change happens mid-tile - calculate effective BPM for this tile
295
+ const relativeAngle = this.tiles[i].relativeAngle || 180;
296
+ // The tile rotates in two parts:
297
+ // 1. First `angleOffset` degrees at currentBpm
298
+ // 2. Remaining `(relativeAngle - angleOffset)` degrees transitioning to targetBpm
299
+ //
300
+ // The effective BPM is calculated based on the weighted timing:
301
+ // Time for offset portion: offset / currentBpm
302
+ // Time for remaining portion: (relativeAngle - offset) / (targetBpm / currentBpm) * currentBpm
303
+ // = (relativeAngle - offset) * (currentBpm / targetBpm)
304
+ //
305
+ // Effective BPM = relativeAngle / totalTime
306
+ const timeForOffset = angleOffset / currentBpm;
307
+ const timeForRemaining = (relativeAngle - angleOffset) * (currentBpm / targetBpm);
308
+ const totalTime = timeForOffset + timeForRemaining;
309
+ const effectiveBpm = relativeAngle / totalTime;
310
+ this.tiles[i].currentBpm = effectiveBpm;
311
+ currentBpm = targetBpm; // Next tile uses target BPM
312
+ }
313
+ }
314
+ }
315
+ }
316
+ /**
317
+ * Gets relative angles for all tiles
318
+ * @param ignoreTwirls If true, ignores rotation flips from Twirl events (legacy parameter for compatibility)
319
+ * @param padMidspins If true, includes midspins (999) as 0 in the output
320
+ * @returns Array of relative angles
321
+ */
322
+ getAnglesRelative() {
323
+ return this.tiles
324
+ .filter(tile => tile.angle !== 999)
325
+ .map(tile => tile.relativeAngle || 0);
326
+ }
116
327
  /**
117
328
  * Gets actions from the level
118
329
  * @param condition Filter condition for actions
@@ -148,6 +359,43 @@ export default class LevelDict {
148
359
  }
149
360
  return indices.map(i => this.tiles[i]);
150
361
  }
362
+ /**
363
+ * Gets rotation flip states for all tiles
364
+ * @returns Array of boolean values indicating if rotation is flipped at each tile
365
+ */
366
+ getRotationFlips() {
367
+ return this.tiles.map(tile => tile.rotationFlipped || false);
368
+ }
369
+ /**
370
+ * Gets duration in milliseconds for all tiles
371
+ * @returns Array of duration values in milliseconds (undefined if not yet implemented)
372
+ */
373
+ getDurations() {
374
+ return this.tiles.map(tile => tile.durationMs);
375
+ }
376
+ /**
377
+ * Gets multiplanet states for all tiles
378
+ * @returns Array of boolean values indicating triple ball state (undefined if not yet implemented)
379
+ */
380
+ getMultiplanetStates() {
381
+ return this.tiles.map(tile => tile.multiplanet);
382
+ }
383
+ getPurePerfectMargins() {
384
+ return this.tiles.map(tile => tile.purePerfectMargin);
385
+ }
386
+ getPerfectMargins() {
387
+ return this.tiles.map(tile => tile.perfectMargin);
388
+ }
389
+ getPassMargins() {
390
+ return this.tiles.map(tile => tile.passMargin);
391
+ }
392
+ /**
393
+ * Gets current BPM values for all tiles
394
+ * @returns Array of BPM values (undefined if not yet implemented)
395
+ */
396
+ getCurrentBpms() {
397
+ return this.tiles.map(tile => tile.currentBpm);
398
+ }
151
399
  writeToFile(filename) {
152
400
  const final = {
153
401
  angleData: this.getAngles(),
@@ -177,6 +425,7 @@ export default class LevelDict {
177
425
  level.settings = data.settings;
178
426
  level.setActions(data.actions);
179
427
  level.setDecorations(data.decorations);
428
+ // Note: setActions and setDecorations already call recalculateTileMetadata
180
429
  return level;
181
430
  }
182
431
  compareWith(other) {
@@ -242,6 +491,7 @@ export default class LevelDict {
242
491
  return deco;
243
492
  });
244
493
  });
494
+ this.recalculateTileMetadata();
245
495
  }
246
496
  removeTile(index) {
247
497
  if (index < 0 || index >= this.tiles.length) {
@@ -268,6 +518,7 @@ export default class LevelDict {
268
518
  return deco;
269
519
  });
270
520
  });
521
+ this.recalculateTileMetadata();
271
522
  }
272
523
  copy() {
273
524
  const copy = new LevelDict();
@@ -280,6 +531,7 @@ export default class LevelDict {
280
531
  }));
281
532
  copy.nonFloorDecos = this.nonFloorDecos.map(deco => ({ ...deco }));
282
533
  copy.settings = { ...this.settings };
534
+ copy.recalculateTileMetadata();
283
535
  return copy;
284
536
  }
285
537
  // Action manipulation methods
@@ -292,6 +544,7 @@ export default class LevelDict {
292
544
  this.tiles[action.floor].actions.push({ ...action });
293
545
  }
294
546
  });
547
+ this.recalculateTileMetadata();
295
548
  }
296
549
  /**
297
550
  * Inserts a new action at the specified floor. The new action will be added to the end of the actions array
@@ -305,6 +558,7 @@ export default class LevelDict {
305
558
  throw new Error('Invalid floor index');
306
559
  }
307
560
  this.tiles[floor].actions.push({ ...action, floor });
561
+ this.recalculateTileMetadata();
308
562
  }
309
563
  removeAction(floor, actionIndex) {
310
564
  if (floor < 0 || floor >= this.tiles.length) {
@@ -314,6 +568,7 @@ export default class LevelDict {
314
568
  throw new Error('Invalid action index');
315
569
  }
316
570
  this.tiles[floor].actions.splice(actionIndex, 1);
571
+ this.recalculateTileMetadata();
317
572
  }
318
573
  updateAction(floor, actionIndex, newAction) {
319
574
  if (floor < 0 || floor >= this.tiles.length) {
@@ -326,6 +581,7 @@ export default class LevelDict {
326
581
  ...this.tiles[floor].actions[actionIndex],
327
582
  ...newAction
328
583
  };
584
+ this.recalculateTileMetadata();
329
585
  }
330
586
  // Decoration manipulation methods
331
587
  setDecorations(decorations) {
@@ -421,6 +677,7 @@ export default class LevelDict {
421
677
  throw new Error('Invalid action index');
422
678
  }
423
679
  this.tiles[floor].actions.splice(actionIndex, 0, { ...action, floor });
680
+ this.recalculateTileMetadata();
424
681
  }
425
682
  /**
426
683
  * Inserts a new decoration at a specific position in the decorations array for a floor.
@@ -483,6 +740,9 @@ export default class LevelDict {
483
740
  */
484
741
  setSetting(key, value) {
485
742
  this.settings[key] = value;
743
+ if (key === 'bpm') {
744
+ this.recalculateTileMetadata();
745
+ }
486
746
  }
487
747
  /**
488
748
  * Removes a specific setting
@@ -1 +1 @@
1
- {"version":3,"file":"LevelDict.js","sourceRoot":"","sources":["../src/LevelDict.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LevelDict.js","sourceRoot":"","sources":["../src/LevelDict.ts"],"names":[],"mappings":"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"}