sonolus-next-rush-engine 1.0.1 → 1.0.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.
Binary file
Binary file
Binary file
@@ -143,6 +143,9 @@ function getNum(e, name, def = 0) {
143
143
  const val = getField(e, name);
144
144
  return typeof val === 'number' ? val : def;
145
145
  }
146
+ function nearlyEqual(a, b) {
147
+ return Math.abs(a - b) < 1e-6;
148
+ }
146
149
  function resolveOriginal(ext, ref) {
147
150
  if (typeof ref === 'number')
148
151
  return ext.get(ref);
@@ -234,12 +237,28 @@ export const extendedToLevelData = (data, offset = 0) => {
234
237
  return notesByName.get(ref);
235
238
  return undefined;
236
239
  }
240
+ function shouldUseStartAsHead(startRef, headRef) {
241
+ if (startRef === headRef)
242
+ return false;
243
+ const start = resolveOriginal(ext, startRef);
244
+ const head = resolveOriginal(ext, headRef);
245
+ if (!start || !head)
246
+ return false;
247
+ if (head.archetype !== 'HiddenSlideStartNote')
248
+ return false;
249
+ if (!['NormalSlideStartNote', 'CriticalSlideStartNote'].includes(start.archetype))
250
+ return false;
251
+ return (nearlyEqual(getNum(start, '#BEAT'), getNum(head, '#BEAT')) &&
252
+ nearlyEqual(getNum(start, 'lane'), getNum(head, 'lane')) &&
253
+ nearlyEqual(getNum(start, 'size'), getNum(head, 'size')));
254
+ }
237
255
  for (const { idx, e } of ext.connectors) {
238
256
  const startRef = getField(e, 'start');
239
257
  const headRef = getField(e, 'head');
240
- const head = getNote(headRef);
258
+ const rawHead = getNote(headRef);
241
259
  const tail = getNote(getField(e, 'tail'));
242
260
  const segmentHead = getNote(startRef);
261
+ const head = shouldUseStartAsHead(startRef, headRef) ? segmentHead : rawHead;
243
262
  const endRef = getField(e, 'end');
244
263
  let segmentTail = getNote(endRef);
245
264
  if (!segmentTail) {
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { USC } from './usc/index.js';
7
7
  export * from './usc/index.js';
8
8
  export { type ExtendedEntityData, type ExtendedEntityDataField, extendedToLevelData, mmwsToUSC, susToUSC, ucmmwsToLevelData, uscToLevelData, };
9
9
  export declare const convertToLevelData: (input: string | Uint8Array | USC | LevelData, offset?: number) => LevelData;
10
- export declare const version = "1.0.1";
10
+ export declare const version = "1.0.3";
11
11
  export declare const databaseEngineItem: {
12
12
  readonly name: "next-rush";
13
13
  readonly version: 13;
package/dist/index.js CHANGED
@@ -65,7 +65,7 @@ export const convertToLevelData = (input, offset = 0) => {
65
65
  }
66
66
  return uscToLevelData(usc, offset, true, true);
67
67
  };
68
- export const version = '1.0.1';
68
+ export const version = '1.0.3';
69
69
  export const databaseEngineItem = {
70
70
  name: 'next-rush',
71
71
  version: 13,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonolus-next-rush-engine",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Perspective-lane rhythm game for Sonolus",
5
5
  "author": "Hyeon2",
6
6
  "repository": {