sonolus-next-rush-engine 1.0.16 → 1.0.17
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/dist/EnginePlayData +0 -0
- package/dist/extended/convert.js +56 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/EnginePlayData
CHANGED
|
Binary file
|
package/dist/extended/convert.js
CHANGED
|
@@ -60,6 +60,13 @@ const activeConnectorKindMapping = {
|
|
|
60
60
|
NormalSlideConnector: ConnectorKind.ACTIVE_NORMAL,
|
|
61
61
|
CriticalSlideConnector: ConnectorKind.ACTIVE_CRITICAL,
|
|
62
62
|
};
|
|
63
|
+
const activeSlideStartArchetypes = new Set([
|
|
64
|
+
'NormalSlideStartNote',
|
|
65
|
+
'CriticalSlideStartNote',
|
|
66
|
+
'HiddenSlideStartNote',
|
|
67
|
+
'NormalTraceSlideStartNote',
|
|
68
|
+
'CriticalTraceSlideStartNote',
|
|
69
|
+
]);
|
|
63
70
|
const flickDirectionMapping = {
|
|
64
71
|
[-1]: FlickDirection.UP_LEFT,
|
|
65
72
|
0: FlickDirection.UP_OMNI,
|
|
@@ -378,7 +385,7 @@ export const extendedToLevelData = (data, offset = 0) => {
|
|
|
378
385
|
return false;
|
|
379
386
|
if (head.archetype !== 'HiddenSlideStartNote')
|
|
380
387
|
return false;
|
|
381
|
-
if (!
|
|
388
|
+
if (!activeSlideStartArchetypes.has(start.archetype))
|
|
382
389
|
return false;
|
|
383
390
|
return (nearlyEqual(getNum(start, '#BEAT'), getNum(head, '#BEAT')) &&
|
|
384
391
|
nearlyEqual(getNum(start, 'lane'), getNum(head, 'lane')) &&
|
|
@@ -483,16 +490,45 @@ export const extendedToLevelData = (data, offset = 0) => {
|
|
|
483
490
|
return ultimateTailRef;
|
|
484
491
|
}
|
|
485
492
|
function setInferredActiveHead(note, activeHead) {
|
|
486
|
-
if (note === activeHead)
|
|
487
|
-
return;
|
|
488
493
|
if (note.refs.activeHead)
|
|
489
494
|
return;
|
|
490
495
|
note.set('activeHead', activeHead);
|
|
491
496
|
}
|
|
497
|
+
function isIgnoredSlideTickRef(ref) {
|
|
498
|
+
return resolveOriginal(ext, ref)?.archetype === 'IgnoredSlideTickNote';
|
|
499
|
+
}
|
|
500
|
+
function getNextConnectorWithHead(startRef, headRef) {
|
|
501
|
+
return ext.connectors.find(({ e }) => getField(e, 'start') === startRef && getField(e, 'head') === headRef);
|
|
502
|
+
}
|
|
503
|
+
function resolveConnectorTailRef(startRef, tailRef) {
|
|
504
|
+
const skippedNoteRefs = [];
|
|
505
|
+
const skippedConnectors = [];
|
|
506
|
+
const visited = new Set();
|
|
507
|
+
let resolvedTailRef = tailRef;
|
|
508
|
+
while (isIgnoredSlideTickRef(resolvedTailRef)) {
|
|
509
|
+
if (resolvedTailRef === undefined)
|
|
510
|
+
break;
|
|
511
|
+
const key = String(resolvedTailRef);
|
|
512
|
+
if (visited.has(key))
|
|
513
|
+
break;
|
|
514
|
+
visited.add(key);
|
|
515
|
+
skippedNoteRefs.push(resolvedTailRef);
|
|
516
|
+
const nextConnector = getNextConnectorWithHead(startRef, resolvedTailRef);
|
|
517
|
+
if (!nextConnector)
|
|
518
|
+
break;
|
|
519
|
+
skippedConnectors.push(nextConnector);
|
|
520
|
+
resolvedTailRef = getField(nextConnector.e, 'tail');
|
|
521
|
+
}
|
|
522
|
+
return { tailRef: resolvedTailRef, skippedNoteRefs, skippedConnectors };
|
|
523
|
+
}
|
|
492
524
|
for (const { idx, e } of ext.connectors) {
|
|
493
525
|
const startRef = getField(e, 'start');
|
|
494
526
|
const headRef = getField(e, 'head');
|
|
495
|
-
|
|
527
|
+
if (isIgnoredSlideTickRef(headRef))
|
|
528
|
+
continue;
|
|
529
|
+
const { tailRef, skippedNoteRefs, skippedConnectors } = resolveConnectorTailRef(startRef, getField(e, 'tail'));
|
|
530
|
+
if (isIgnoredSlideTickRef(tailRef))
|
|
531
|
+
continue;
|
|
496
532
|
const tail = getNote(tailRef);
|
|
497
533
|
const rawHeadOriginal = resolveOriginal(ext, headRef);
|
|
498
534
|
const tailOriginal = resolveOriginal(ext, tailRef);
|
|
@@ -504,7 +540,7 @@ export const extendedToLevelData = (data, offset = 0) => {
|
|
|
504
540
|
const endRef = getField(e, 'end');
|
|
505
541
|
let activeTail = getNote(endRef);
|
|
506
542
|
if (!activeTail) {
|
|
507
|
-
activeTail = getNote(getUltimateTailRef(startRef,
|
|
543
|
+
activeTail = getNote(getUltimateTailRef(startRef, tailRef));
|
|
508
544
|
}
|
|
509
545
|
if (!activeTail) {
|
|
510
546
|
activeTail = tail;
|
|
@@ -532,6 +568,7 @@ export const extendedToLevelData = (data, offset = 0) => {
|
|
|
532
568
|
connector.set('activeHead', activeHead);
|
|
533
569
|
connector.set('activeTail', activeTail);
|
|
534
570
|
finalEntities.push(connector);
|
|
571
|
+
setInferredActiveHead(segmentHead, activeHead);
|
|
535
572
|
segments.push({ head: segmentHead, tail });
|
|
536
573
|
}
|
|
537
574
|
else {
|
|
@@ -568,9 +605,23 @@ export const extendedToLevelData = (data, offset = 0) => {
|
|
|
568
605
|
setInferredActiveHead(segmentNote, activeHead);
|
|
569
606
|
}
|
|
570
607
|
setInferredActiveHead(activeTail, activeHead);
|
|
608
|
+
for (const skippedNoteRef of skippedNoteRefs) {
|
|
609
|
+
const skippedNote = getNote(skippedNoteRef);
|
|
610
|
+
if (!skippedNote)
|
|
611
|
+
continue;
|
|
612
|
+
skippedNote.set('attachHead', head);
|
|
613
|
+
skippedNote.set('attachTail', tail);
|
|
614
|
+
skippedNote.set('isAttached', 1);
|
|
615
|
+
setInferredActiveHead(skippedNote, activeHead);
|
|
616
|
+
}
|
|
571
617
|
connectorsByIndex.set(idx, connectorLink);
|
|
572
618
|
if (e.name)
|
|
573
619
|
connectorsByName.set(e.name, connectorLink);
|
|
620
|
+
for (const skippedConnector of skippedConnectors) {
|
|
621
|
+
connectorsByIndex.set(skippedConnector.idx, connectorLink);
|
|
622
|
+
if (skippedConnector.e.name)
|
|
623
|
+
connectorsByName.set(skippedConnector.e.name, connectorLink);
|
|
624
|
+
}
|
|
574
625
|
}
|
|
575
626
|
function getConn(ref) {
|
|
576
627
|
if (typeof ref === 'number')
|
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.
|
|
10
|
+
export declare const version = "1.0.17";
|
|
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.
|
|
68
|
+
export const version = '1.0.17';
|
|
69
69
|
export const databaseEngineItem = {
|
|
70
70
|
name: 'next-rush',
|
|
71
71
|
version: 13,
|