danoniplus 50.5.3 → 51.0.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/js/danoni_main.js +9 -4
- package/js/lib/danoni_constants.js +50 -23
- package/js/lib/dataLoader.js +15 -7
- package/js/lib/dosConverter.js +155 -177
- package/js/lib/keyconfig.js +40 -39
- package/js/lib/mainWindow.js +49 -22
- package/js/lib/result.js +25 -13
- package/js/lib/settings.js +261 -173
- package/js/lib/title.js +56 -36
- package/js/template/danoni_custom.js +2 -2
- package/package.json +1 -1
package/js/lib/settings.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Source by tickle
|
|
7
7
|
* Created : 2026/09/13
|
|
8
|
-
* Revised : 2026/09/23 (
|
|
8
|
+
* Revised : 2026/09/23 (v51.0.0)
|
|
9
9
|
*
|
|
10
10
|
* https://github.com/cwtickle/danoniplus
|
|
11
11
|
*/
|
|
@@ -115,11 +115,17 @@ const updateSettingSummary = () => {
|
|
|
115
115
|
if (document.getElementById(`settingSumSprite`) === null) return;
|
|
116
116
|
const orgShuffleFlg = getOrgShuffleFlg();
|
|
117
117
|
const settingData = getSelectedSettingList(orgShuffleFlg);
|
|
118
|
-
const estimatedHighscoreCondition =
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
const estimatedHighscoreCondition =
|
|
119
|
+
g_stateObj.dataSaveFlg &&
|
|
120
|
+
g_stateObj.autoPlay !== C_FLG_ALL &&
|
|
121
|
+
g_headerObj.playbackRate === 1 &&
|
|
122
|
+
g_stateObj.fadein < 10 &&
|
|
123
|
+
(g_stateObj.shuffle === C_FLG_OFF || (g_stateObj.shuffle.endsWith(`Mirror`) && orgShuffleFlg));
|
|
124
|
+
|
|
125
|
+
document.getElementById(`lblSummaryDifInfo`).innerHTML =
|
|
126
|
+
settingData.difData + `${estimatedHighscoreCondition ? '' : ` | <span class="common_auto common_bold">No Records</span>`}`;
|
|
127
|
+
document.getElementById(`lblSummaryPlaystyleInfo`).textContent =
|
|
128
|
+
settingData.playStyleData + `${g_stateObj.excessive === C_FLG_ON ? ' | Excessive' : ''}`;
|
|
123
129
|
document.getElementById(`lblSummaryDisplayInfo`).textContent = settingData.displayData;
|
|
124
130
|
document.getElementById(`lblSummaryDisplay2Info`).textContent = settingData.display2Data;
|
|
125
131
|
document.getElementById(`lblSummaryEnvironment`).textContent =
|
|
@@ -585,8 +591,12 @@ const drawDensityGraph = _scoreId => {
|
|
|
585
591
|
for (let j = 0; j < g_limitObj.densityDivision; j++) {
|
|
586
592
|
context.beginPath();
|
|
587
593
|
[``, `2Push`, `3Push`].forEach(val => {
|
|
588
|
-
context.fillStyle = (g_detailObj.maxDensity[_scoreId].includes(j)
|
|
589
|
-
|
|
594
|
+
context.fillStyle = (g_detailObj.maxDensity[_scoreId].includes(j)
|
|
595
|
+
? g_graphColorObj[`max${val}`]
|
|
596
|
+
: g_graphColorObj[`default${val}`]
|
|
597
|
+
);
|
|
598
|
+
context.fillRect(16 * j * 16 / g_limitObj.densityDivision + 30,
|
|
599
|
+
195 - 9 * g_detailObj[`density${val}Data`][_scoreId][j] / 10,
|
|
590
600
|
15.5 * 16 / g_limitObj.densityDivision, 9 * g_detailObj[`density${val}Diff`][_scoreId][j] / 10
|
|
591
601
|
);
|
|
592
602
|
});
|
|
@@ -610,7 +620,8 @@ const drawDensityGraph = _scoreId => {
|
|
|
610
620
|
updateScoreDetailLabel(`Density`, `APM`, obj.apm, 0, g_lblNameObj.s_apm);
|
|
611
621
|
updateScoreDetailLabel(`Density`, `Time`, obj.playingTime, 1, g_lblNameObj.s_time);
|
|
612
622
|
updateScoreDetailLabel(`Density`, `Arrow`, obj.arrowCnts, 3, g_lblNameObj.s_arrow);
|
|
613
|
-
updateScoreDetailLabel(`Density`, `Frz`, obj.frzCnts, 4,
|
|
623
|
+
updateScoreDetailLabel(`Density`, `Frz`, obj.frzCnts, 4,
|
|
624
|
+
`${g_lblNameObj.s_frz}${g_headerObj.frzStartjdgUse ? ' <span class="common_bold">(2x)</span>' : ''}`);
|
|
614
625
|
};
|
|
615
626
|
|
|
616
627
|
/**
|
|
@@ -759,7 +770,10 @@ const makeDifInfo = _scoreId => {
|
|
|
759
770
|
|
|
760
771
|
const arrowCnts = sumData(g_detailObj.arrowCnt[_scoreId]);
|
|
761
772
|
const frzCnts = sumData(g_detailObj.frzCnt[_scoreId].map(val => Math.floor(val)));
|
|
762
|
-
const push3CntStr = (g_detailObj.toolDif[_scoreId].push3.length === 0
|
|
773
|
+
const push3CntStr = (g_detailObj.toolDif[_scoreId].push3.length === 0
|
|
774
|
+
? `None`
|
|
775
|
+
: `(${g_detailObj.toolDif[_scoreId].push3.join(', ')})`
|
|
776
|
+
);
|
|
763
777
|
|
|
764
778
|
if (document.getElementById(`lblTooldif`) === null) {
|
|
765
779
|
makeDifInfoLabels(_scoreId);
|
|
@@ -769,8 +783,11 @@ const makeDifInfo = _scoreId => {
|
|
|
769
783
|
dataTate.textContent = g_detailObj.toolDif[_scoreId].tate;
|
|
770
784
|
lblArrowInfo2.innerHTML = g_lblNameObj.s_linecnts.split(`{0}`)
|
|
771
785
|
.join(`${makeDedupliArray(g_detailObj.toolDif[_scoreId].push3).length} /cnt:${g_detailObj.toolDif[_scoreId].push3cnt}`);
|
|
772
|
-
dataArrowInfo.innerHTML =
|
|
773
|
-
|
|
786
|
+
dataArrowInfo.innerHTML =
|
|
787
|
+
`${arrowCnts + frzCnts * (g_headerObj.frzStartjdgUse ? 2 : 1)} ` +
|
|
788
|
+
`<span style="font-size:${wUnit(g_limitObj.difSelectorSiz)};">` +
|
|
789
|
+
`(${arrowCnts} + ${frzCnts}${g_headerObj.frzStartjdgUse ? ' <span class="common_bold">x 2</span>' : ''})` +
|
|
790
|
+
`</span>`;
|
|
774
791
|
|
|
775
792
|
const makeArrowCntsView = (_cntlist) => {
|
|
776
793
|
const targetKey = g_headerObj.keyLabels[_scoreId];
|
|
@@ -789,8 +806,9 @@ const makeDifInfo = _scoreId => {
|
|
|
789
806
|
cntlistStr += `[ `;
|
|
790
807
|
array.forEach((val, j) => {
|
|
791
808
|
if (maxVal !== minVal) {
|
|
792
|
-
array[j] = (val === minVal
|
|
793
|
-
|
|
809
|
+
array[j] = (val === minVal
|
|
810
|
+
? `<span class="settings_minArrowCnts">${val}</span>`
|
|
811
|
+
: (val === maxVal ? `<span class="settings_maxArrowCnts common_bold">${val}</span>` : val));
|
|
794
812
|
}
|
|
795
813
|
if (val - Math.floor(val) > 0) {
|
|
796
814
|
array[j] = `<span class="keyconfig_warning">${val}</span>`;
|
|
@@ -840,7 +858,9 @@ const makeHighScore = _scoreId => {
|
|
|
840
858
|
}
|
|
841
859
|
}
|
|
842
860
|
|
|
843
|
-
const createScoreLabel = (_id, _text, {
|
|
861
|
+
const createScoreLabel = (_id, _text, {
|
|
862
|
+
xPos = 0, yPos = 0, dx = 0, w = 150, h = 17, colorName = _id, align = C_ALIGN_LEFT, overflow = `visible`
|
|
863
|
+
} = {}) =>
|
|
844
864
|
createDivCss2Label(`lblH${toCapitalize(_id)}`, _text, {
|
|
845
865
|
x: xPos * 150 + 130 + dx, y: yPos * 16 + 5, w, h, siz: 14, align, overflow,
|
|
846
866
|
}, g_cssObj[`common_${colorName}`]);
|
|
@@ -898,12 +918,24 @@ const makeHighScore = _scoreId => {
|
|
|
898
918
|
createScoreLabel(`lblHMarks`,
|
|
899
919
|
`${g_localStorage.highscores?.[scoreName]?.fullCombo ?? '' ? '<span class="result_FullCombo">◆</span>' : ''}` +
|
|
900
920
|
`${g_localStorage.highscores?.[scoreName]?.perfect ?? '' ? '<span class="result_Perfect">◆</span>' : ''}` +
|
|
901
|
-
`${g_localStorage.highscores?.[scoreName]?.allPerfect ?? '' ? '<span class="result_AllPerfect">◆</span>' : ''}`,
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
921
|
+
`${g_localStorage.highscores?.[scoreName]?.allPerfect ?? '' ? '<span class="result_AllPerfect">◆</span>' : ''}`,
|
|
922
|
+
{ xPos: 1, dx: 20, yPos: 12, w: 100, align: C_ALIGN_CENTER }),
|
|
923
|
+
createScoreLabel(`lblHClearLamps`,
|
|
924
|
+
`Cleared: ` + (g_localStorage.highscores?.[scoreName]?.clearLamps?.join(', ') ?? C_FLG_HYPHEN),
|
|
925
|
+
{ yPos: 13, overflow: C_DIS_AUTO, w: g_sWidth / 2 + 40, h: 37 }),
|
|
926
|
+
|
|
927
|
+
createScoreLabel(`lblHShuffle`,
|
|
928
|
+
g_stateObj.shuffle.indexOf(`Mirror`) < 0
|
|
929
|
+
? `` : `Shuffle: <span class="common_shuffle">${g_stateObj.shuffle}</span>`,
|
|
930
|
+
{ yPos: 11.5, dx: -130 }),
|
|
931
|
+
createScoreLabel(`lblHAssist`,
|
|
932
|
+
g_autoPlaysBase.includes(g_stateObj.autoPlay)
|
|
933
|
+
? `` : `Assist: <span class="common_assist">${g_stateObj.autoPlay}</span>`,
|
|
934
|
+
{ yPos: 12.5, dx: -130 }),
|
|
935
|
+
createScoreLabel(`lblHAnother`,
|
|
936
|
+
!hasVal(g_keyObj[`transKey${keyCtrlPtn}`])
|
|
937
|
+
? `` : `A.Keymode: <span class="common_another">${g_keyObj[`transKey${keyCtrlPtn}`]}</span>`,
|
|
938
|
+
{ yPos: 13.5, dx: -130 }),
|
|
907
939
|
);
|
|
908
940
|
|
|
909
941
|
// 結果をクリップボードへコピー (ハイスコア保存分)
|
|
@@ -1297,17 +1329,18 @@ const applyTransKeySelfPattern = () => {
|
|
|
1297
1329
|
* - [キーコン]->[初期化]->[名称設定]の順に配置する。
|
|
1298
1330
|
* 初期化処理にてキー数関連の設定を行っているため、この順序で無いとデータが正しく格納されない
|
|
1299
1331
|
*
|
|
1300
|
-
* @param {boolean}
|
|
1332
|
+
* @param {boolean} _chartChangeFlg
|
|
1301
1333
|
*/
|
|
1302
|
-
const setDifficulty = (
|
|
1334
|
+
const setDifficulty = (_chartChangeFlg) => {
|
|
1335
|
+
const scoreId = g_stateObj.scoreId;
|
|
1303
1336
|
|
|
1304
1337
|
// ---------------------------------------------------
|
|
1305
1338
|
// 1. キーコンフィグ設定 (KeyConfig)
|
|
1306
|
-
g_keyObj.currentKey = g_headerObj.keyLabels[
|
|
1339
|
+
g_keyObj.currentKey = g_headerObj.keyLabels[scoreId];
|
|
1307
1340
|
const isNotSameKey = (g_keyObj.prevKey !== g_keyObj.currentKey);
|
|
1308
1341
|
|
|
1309
1342
|
if (g_headerObj.dummyScoreNos !== undefined) {
|
|
1310
|
-
g_stateObj.dummyId = setIntVal(g_headerObj.dummyScoreNos[
|
|
1343
|
+
g_stateObj.dummyId = setIntVal(g_headerObj.dummyScoreNos[scoreId], ``);
|
|
1311
1344
|
}
|
|
1312
1345
|
// 特殊キーフラグ
|
|
1313
1346
|
g_stateObj.extraKeyFlg = g_headerObj.keyExtraList.includes(g_keyObj.currentKey);
|
|
@@ -1317,13 +1350,15 @@ const setDifficulty = (_initFlg) => {
|
|
|
1317
1350
|
|
|
1318
1351
|
// 保存した設定の再読込条件(設定画面切り替え時はスキップ)
|
|
1319
1352
|
// ローカルストレージで保存した設定を呼び出し
|
|
1320
|
-
|
|
1353
|
+
let keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
1354
|
+
if ((g_canLoadDifInfoFlg && (isNotSameKey && g_stateObj.dataSaveFlg)) || _chartChangeFlg) {
|
|
1321
1355
|
|
|
1322
1356
|
if (isNotSameKey && g_keyObj.prevKey !== `Dummy`) {
|
|
1323
1357
|
// キーパターン初期化
|
|
1324
1358
|
g_keyObj.currentPtn = 0;
|
|
1325
1359
|
g_keycons.keySwitchNum = 0;
|
|
1326
1360
|
}
|
|
1361
|
+
keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
1327
1362
|
const [storageObj, addKey] = getKeyStorageObjByName(g_keyObj.currentKey);
|
|
1328
1363
|
if (isNotSameKey) {
|
|
1329
1364
|
if (!g_stateObj.extraKeyFlg) {
|
|
@@ -1353,8 +1388,6 @@ const setDifficulty = (_initFlg) => {
|
|
|
1353
1388
|
g_keycons.colorTypes = g_keycons.colorTypes.filter(val => val !== g_keycons.colorSelf);
|
|
1354
1389
|
}
|
|
1355
1390
|
|
|
1356
|
-
const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
1357
|
-
|
|
1358
1391
|
// カラーグループ、シャッフルグループの設定
|
|
1359
1392
|
g_keycons.groups.forEach(type => {
|
|
1360
1393
|
resetGroupList(type, keyCtrlPtn);
|
|
@@ -1376,21 +1409,24 @@ const setDifficulty = (_initFlg) => {
|
|
|
1376
1409
|
|
|
1377
1410
|
// スクロール設定用の配列を入れ替え
|
|
1378
1411
|
g_settings.scrolls = structuredClone(
|
|
1379
|
-
typeof g_keyObj[`scrollDir${
|
|
1380
|
-
Object.keys(g_keyObj[`scrollDir${
|
|
1412
|
+
typeof g_keyObj[`scrollDir${keyCtrlPtn}`] === C_TYP_OBJECT
|
|
1413
|
+
? Object.keys(g_keyObj[`scrollDir${keyCtrlPtn}`])
|
|
1414
|
+
: g_keyObj.scrollName_def
|
|
1381
1415
|
);
|
|
1382
1416
|
|
|
1383
1417
|
// アシスト設定の配列を入れ替え
|
|
1384
|
-
g_settings.autoPlays = (
|
|
1385
|
-
|
|
1386
|
-
|
|
1418
|
+
g_settings.autoPlays = (
|
|
1419
|
+
typeof g_keyObj[`assistPos${keyCtrlPtn}`] === C_TYP_OBJECT
|
|
1420
|
+
? g_autoPlaysBase.concat(Object.keys(g_keyObj[`assistPos${keyCtrlPtn}`]))
|
|
1421
|
+
: g_autoPlaysBase.concat()
|
|
1422
|
+
);
|
|
1387
1423
|
|
|
1388
1424
|
// ゲージ設定及びカーソル位置調整
|
|
1389
1425
|
setGauge(0, !g_canLoadDifInfoFlg);
|
|
1390
1426
|
|
|
1391
1427
|
// 速度、スクロール、アシスト設定のカーソル位置調整
|
|
1392
|
-
if (
|
|
1393
|
-
g_stateObj.speed = g_headerObj.initSpeeds[
|
|
1428
|
+
if (_chartChangeFlg) {
|
|
1429
|
+
g_stateObj.speed = g_headerObj.initSpeeds[scoreId];
|
|
1394
1430
|
g_settings.speedNum = getCurrentNo(g_settings.speeds, g_stateObj.speed);
|
|
1395
1431
|
}
|
|
1396
1432
|
g_settings.scrollNum = getCurrentNo(g_settings.scrolls, g_stateObj.scroll);
|
|
@@ -1398,8 +1434,9 @@ const setDifficulty = (_initFlg) => {
|
|
|
1398
1434
|
|
|
1399
1435
|
|
|
1400
1436
|
// 選択中のキーのヘルプ表示
|
|
1401
|
-
const targetKeymode = hasVal(g_keyObj[`transKey${
|
|
1402
|
-
? g_keyObj[`transKey${
|
|
1437
|
+
const targetKeymode = hasVal(g_keyObj[`transKey${keyCtrlPtn}`])
|
|
1438
|
+
? g_keyObj[`transKey${keyCtrlPtn}`]
|
|
1439
|
+
: g_keyObj.currentKey;
|
|
1403
1440
|
btnKeymodeHelp.classList.remove(g_cssObj.button_Setting, g_cssObj.button_Tweet);
|
|
1404
1441
|
btnKeymodeHelp.classList.add(
|
|
1405
1442
|
g_cssObj[`button_${targetKeymode !== g_keyObj.currentKey
|
|
@@ -1419,14 +1456,14 @@ const setDifficulty = (_initFlg) => {
|
|
|
1419
1456
|
const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
|
|
1420
1457
|
|
|
1421
1458
|
const prefix = `${getKeyName(g_keyObj.currentKey)}${transKeyName} ${keyUnitName} / `;
|
|
1422
|
-
let difLabel = `${g_headerObj.difLabels[
|
|
1459
|
+
let difLabel = `${g_headerObj.difLabels[scoreId]}`;
|
|
1423
1460
|
|
|
1424
1461
|
const [difName, difSiz] = getFontSizeMulti(difLabel, difWidth, { maxSiz: g_limitObj.setLblSiz, prefix });
|
|
1425
1462
|
lnkDifficulty.style.fontSize = wUnit(difSiz);
|
|
1426
1463
|
|
|
1427
1464
|
const difNames = [difName];
|
|
1428
1465
|
if (g_headerObj.makerView) {
|
|
1429
|
-
difNames.push(`(${g_headerObj.creatorNames[
|
|
1466
|
+
difNames.push(`(${g_headerObj.creatorNames[scoreId]})`);
|
|
1430
1467
|
difNames.forEach((difName, j) => {
|
|
1431
1468
|
const tmpSize = getFontSize2(difName, difWidth);
|
|
1432
1469
|
difNames[j] = `<span style="font-size:${wUnit(tmpSize)}">${difName}</span>`;
|
|
@@ -1461,28 +1498,28 @@ const setDifficulty = (_initFlg) => {
|
|
|
1461
1498
|
lnkAutoPlay.textContent = getStgDetailName(g_stateObj.autoPlay);
|
|
1462
1499
|
|
|
1463
1500
|
// 譜面毎のExcessive再設定(意図的に変更した場合のみ元に戻さない)
|
|
1464
|
-
if (g_canLoadDifInfoFlg && (g_stateObj.excessiveScoreId !==
|
|
1465
|
-
g_headerObj.excessiveJdgUse = g_headerObj.excessiveJdgUses[
|
|
1501
|
+
if (g_canLoadDifInfoFlg && (g_stateObj.excessiveScoreId !== scoreId)) {
|
|
1502
|
+
g_headerObj.excessiveJdgUse = g_headerObj.excessiveJdgUses[scoreId];
|
|
1466
1503
|
g_stateObj.excessive = boolToSwitch(g_headerObj.excessiveJdgUse);
|
|
1467
1504
|
}
|
|
1468
|
-
g_headerObj.excessiveUse = g_headerObj.excessiveUses[
|
|
1505
|
+
g_headerObj.excessiveUse = g_headerObj.excessiveUses[scoreId];
|
|
1469
1506
|
if (g_headerObj.excessiveUse) {
|
|
1470
1507
|
setExcessive(document.getElementById(`lnkExcessive`), g_stateObj.excessive === C_FLG_ON);
|
|
1471
1508
|
lblExcessive.style.display = C_DIS_NONE;
|
|
1472
1509
|
lnkExcessive.style.display = C_DIS_INHERIT;
|
|
1473
1510
|
} else {
|
|
1474
1511
|
g_stateObj.excessiveChgFlg = false;
|
|
1475
|
-
lblExcessive.style.display = (g_headerObj.excessiveJdgUses[
|
|
1512
|
+
lblExcessive.style.display = (g_headerObj.excessiveJdgUses[scoreId] ? C_DIS_INHERIT : C_DIS_NONE);
|
|
1476
1513
|
lnkExcessive.style.display = C_DIS_NONE;
|
|
1477
1514
|
}
|
|
1478
1515
|
|
|
1479
1516
|
// 譜面明細画面の再描画
|
|
1480
1517
|
if (g_settings.scoreDetails.length > 0) {
|
|
1481
|
-
drawSpeedGraph(
|
|
1482
|
-
drawDensityGraph(
|
|
1483
|
-
makeDifInfo(
|
|
1484
|
-
makeHighScore(
|
|
1485
|
-
drawMinimap(
|
|
1518
|
+
drawSpeedGraph(scoreId);
|
|
1519
|
+
drawDensityGraph(scoreId);
|
|
1520
|
+
makeDifInfo(scoreId);
|
|
1521
|
+
makeHighScore(scoreId);
|
|
1522
|
+
drawMinimap(scoreId, { _initFlg: true });
|
|
1486
1523
|
}
|
|
1487
1524
|
|
|
1488
1525
|
// 楽曲データの表示
|
|
@@ -1490,7 +1527,7 @@ const setDifficulty = (_initFlg) => {
|
|
|
1490
1527
|
lblMusicInfo.style.fontSize = wUnit(getFontSize2(lblMusicInfo.textContent, g_btnWidth(3 / 4), { maxSiz: 12 }));
|
|
1491
1528
|
|
|
1492
1529
|
// ユーザカスタムイベント(初期)
|
|
1493
|
-
safeExecuteCustomHooks(`g_customJsObj.difficulty`, g_customJsObj.difficulty,
|
|
1530
|
+
safeExecuteCustomHooks(`g_customJsObj.difficulty`, g_customJsObj.difficulty, _chartChangeFlg, g_canLoadDifInfoFlg);
|
|
1494
1531
|
resolveKeyFamily();
|
|
1495
1532
|
|
|
1496
1533
|
// 設定サマリー表示の更新
|
|
@@ -1613,8 +1650,9 @@ const createOptionWindow = _sprite => {
|
|
|
1613
1650
|
}
|
|
1614
1651
|
multiAppend(difficultySprite,
|
|
1615
1652
|
createCss2Button(`btnKeymodeHelp`, `?`, () => {
|
|
1616
|
-
const
|
|
1617
|
-
|
|
1653
|
+
const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
1654
|
+
const targetKeymode = hasVal(g_keyObj[`transKey${keyCtrlPtn}`])
|
|
1655
|
+
? g_keyObj[`transKey${keyCtrlPtn}`] : g_keyObj.currentKey;
|
|
1618
1656
|
openLink(
|
|
1619
1657
|
g_keyObj.defaultKeyList.includes(targetKeymode)
|
|
1620
1658
|
? g_lblNameObj.keymodeUrl + targetKeymode
|
|
@@ -1698,7 +1736,8 @@ const createOptionWindow = _sprite => {
|
|
|
1698
1736
|
// 選択先を表示、ボタン色を選択中に変更
|
|
1699
1737
|
// Qキーを押したときのリンク先を次の明細へ変更
|
|
1700
1738
|
g_stateObj.scoreDetail = g_settings.scoreDetails[_val];
|
|
1701
|
-
[`option`, `difSelector`, `scoreDetail`].forEach(page =>
|
|
1739
|
+
[`option`, `difSelector`, `scoreDetail`].forEach(page =>
|
|
1740
|
+
g_shortcutObj[page].KeyQ.id = g_settings.scoreDetailCursors[nextPos(_val, 1, g_settings.scoreDetailCursors.length)]);
|
|
1702
1741
|
g_shortcutObj.scoreDetail.ArrowDown.id = g_settings.scoreDetailCursorsOrg[nextPos(_val, 1, g_settings.scoreDetailCursorsOrg.length)];
|
|
1703
1742
|
g_shortcutObj.scoreDetail.ArrowUp.id = g_settings.scoreDetailCursorsOrg[nextPos(_val, -1, g_settings.scoreDetailCursorsOrg.length)];
|
|
1704
1743
|
|
|
@@ -1858,8 +1897,10 @@ const createOptionWindow = _sprite => {
|
|
|
1858
1897
|
createDivCss2Label(`lnkAdjustment2`, ``, g_lblPosObj.lnkAdjustment2),
|
|
1859
1898
|
);
|
|
1860
1899
|
}
|
|
1861
|
-
document.getElementById(`lnkAdjustment1`).textContent =
|
|
1862
|
-
|
|
1900
|
+
document.getElementById(`lnkAdjustment1`).textContent =
|
|
1901
|
+
`${adjustmentVal}${g_lblNameObj.frame}`;
|
|
1902
|
+
document.getElementById(`lnkAdjustment2`).textContent =
|
|
1903
|
+
`(${g_stateObj.adjustment.toFixed(1)}${g_localStorage.adjustment === g_stateObj.adjustment ? '*' : ''})`;
|
|
1863
1904
|
}
|
|
1864
1905
|
};
|
|
1865
1906
|
viewAdjustment();
|
|
@@ -1984,8 +2025,10 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
|
|
|
1984
2025
|
// 右回し・左回しボタン(不可視)
|
|
1985
2026
|
if (hiddenBtn) {
|
|
1986
2027
|
multiAppend(_obj,
|
|
1987
|
-
makeMiniCssButton(linkId, `HR`, 0, () =>
|
|
1988
|
-
|
|
2028
|
+
makeMiniCssButton(linkId, `HR`, 0, () =>
|
|
2029
|
+
setSetting(1, _settingName, { func: () => addRFunc(), unitName, roundNum }), { visibility: `hidden` }),
|
|
2030
|
+
makeMiniCssButton(linkId, `HL`, 0, () =>
|
|
2031
|
+
setSetting(-1, _settingName, { func: () => addLFunc(), unitName, roundNum }), { visibility: `hidden` }),
|
|
1989
2032
|
);
|
|
1990
2033
|
}
|
|
1991
2034
|
|
|
@@ -2054,7 +2097,8 @@ const setSetting = (_scrollNum, _settingName, { func = () => true, unitName = ``
|
|
|
2054
2097
|
g_stateObj[_settingName] = settingList[settingNum];
|
|
2055
2098
|
g_settings[`${_settingName}Num`] = settingNum;
|
|
2056
2099
|
|
|
2057
|
-
const settingName = `${getStgDetailName(g_stateObj[_settingName])}${unitName}
|
|
2100
|
+
const settingName = `${getStgDetailName(g_stateObj[_settingName])}${unitName}` +
|
|
2101
|
+
`${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`;
|
|
2058
2102
|
const lnkName = `lnk${toCapitalize(_settingName)}`;
|
|
2059
2103
|
document.getElementById(lnkName).textContent = settingName;
|
|
2060
2104
|
$id(lnkName).fontSize = wUnit(getFontSize2(settingName, parseFloat($id(lnkName).width), { maxSiz }));
|
|
@@ -2120,107 +2164,119 @@ const setReverseView = _btn => {
|
|
|
2120
2164
|
}
|
|
2121
2165
|
};
|
|
2122
2166
|
|
|
2167
|
+
// ============================================================
|
|
2168
|
+
// ゲージ設定の適用パイプライン(wiki: ゲージ設定適用順仕様)
|
|
2169
|
+
// 優先度は「低→高」= 基本設定(g_gaugeDefObj) → 譜面ヘッダー(初期ゲージのみ) → ゲージ個別設定。
|
|
2170
|
+
// 下記のapply*/resolve*はsetGaugeから“この順番のまま”呼ばれ、後段が前段を上書きすることで
|
|
2171
|
+
// 優先度を表現する。順序の変更は仕様変更を意味する。
|
|
2172
|
+
// ============================================================
|
|
2173
|
+
|
|
2123
2174
|
/**
|
|
2124
2175
|
* ゲージ設定メイン
|
|
2125
|
-
* @param {number} _scrollNum
|
|
2126
|
-
* @param {boolean} _gaugeInitFlg
|
|
2176
|
+
* @param {number} _scrollNum
|
|
2127
2177
|
*/
|
|
2128
|
-
const setGauge = (
|
|
2178
|
+
const setGauge = (() => {
|
|
2129
2179
|
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
* @param {string} _val
|
|
2134
|
-
* @param {string} _defaultVal
|
|
2135
|
-
* @returns {number}
|
|
2136
|
-
*/
|
|
2137
|
-
const getGaugeCalc = (_val, _defaultVal) => {
|
|
2138
|
-
return setVal(convertStrToVal(
|
|
2139
|
-
replaceStr(_val, g_escapeStr.gaugeParamName)?.split(`{0}`).join(g_stateObj.scoreId)
|
|
2140
|
-
), _defaultVal, C_TYP_CALC);
|
|
2141
|
-
};
|
|
2142
|
-
/**
|
|
2143
|
-
* ゲージ詳細一括変更
|
|
2144
|
-
* @param {object} _baseObj
|
|
2145
|
-
* @param {number} object.magInit
|
|
2146
|
-
* @param {number} object.magRcv
|
|
2147
|
-
* @param {number} object.magDmg
|
|
2148
|
-
*/
|
|
2149
|
-
const setLifeCategory = (_baseObj, { _magInit = 1, _magRcv = 1, _magDmg = 1 } = {}) => {
|
|
2150
|
-
g_stateObj.lifeInit = getGaugeCalc(_baseObj.lifeInits[g_stateObj.scoreId], g_stateObj.lifeInit) * _magInit;
|
|
2151
|
-
g_stateObj.lifeRcv = getGaugeCalc(_baseObj.lifeRecoverys[g_stateObj.scoreId], g_stateObj.lifeRcv) * _magRcv;
|
|
2152
|
-
g_stateObj.lifeDmg = getGaugeCalc(_baseObj.lifeDamages[g_stateObj.scoreId], g_stateObj.lifeDmg) * _magDmg;
|
|
2153
|
-
};
|
|
2180
|
+
const getGaugeCalc = (_val, _defaultVal) => setVal(convertStrToVal(
|
|
2181
|
+
replaceStr(_val, g_escapeStr.gaugeParamName)?.split(`{0}`).join(g_stateObj.scoreId)
|
|
2182
|
+
), _defaultVal, C_TYP_CALC);
|
|
2154
2183
|
|
|
2155
|
-
/**
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
*/
|
|
2159
|
-
const changeLifeMode = (_baseObj) => {
|
|
2160
|
-
if (_baseObj.lifeBorders[g_stateObj.scoreId] === `x`) {
|
|
2184
|
+
/** Border値からライフ制/ノルマ制を切り替える */
|
|
2185
|
+
const applyLifeModeSwitch = (_border) => {
|
|
2186
|
+
if (_border === `x`) {
|
|
2161
2187
|
g_stateObj.lifeBorder = 0;
|
|
2162
2188
|
g_stateObj.lifeMode = C_LFE_SURVIVAL;
|
|
2163
2189
|
} else {
|
|
2164
|
-
g_stateObj.lifeBorder = getGaugeCalc(
|
|
2190
|
+
g_stateObj.lifeBorder = getGaugeCalc(_border, g_stateObj.lifeBorder);
|
|
2165
2191
|
g_stateObj.lifeMode = C_LFE_BORDER;
|
|
2166
2192
|
}
|
|
2167
2193
|
};
|
|
2168
2194
|
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
// カスタムゲージの設定取得
|
|
2172
|
-
const defaultCustomGauge = g_gaugeOptionObj.custom0 || g_gaugeOptionObj.customDefault;
|
|
2173
|
-
if (hasVal(defaultCustomGauge)) {
|
|
2174
|
-
g_gaugeOptionObj.custom = (g_gaugeOptionObj[`custom${g_stateObj.scoreId}`] || defaultCustomGauge).concat();
|
|
2175
|
-
g_gaugeOptionObj.varCustom = (g_gaugeOptionObj[`varCustom${g_stateObj.scoreId}`] || g_gaugeOptionObj.varCustom0 || g_gaugeOptionObj.varCustomDefault).concat();
|
|
2176
|
-
}
|
|
2177
|
-
|
|
2178
|
-
// ゲージタイプの設定
|
|
2179
|
-
changeLifeMode(g_headerObj);
|
|
2180
|
-
g_gaugeType = (g_gaugeOptionObj.custom.length > 0 ? C_LFE_CUSTOM : g_stateObj.lifeMode);
|
|
2181
|
-
|
|
2182
|
-
// ゲージ配列を入れ替え
|
|
2183
|
-
g_settings.gauges = structuredClone(g_gaugeOptionObj[g_gaugeType.toLowerCase()]);
|
|
2184
|
-
g_settings.gaugeNum = _gaugeInitFlg ? 0 : getCurrentNo(g_settings.gauges, g_stateObj.gauge);
|
|
2185
|
-
g_stateObj.gauge = g_settings.gauges[g_settings.gaugeNum];
|
|
2195
|
+
let currentGaugeSel = null;
|
|
2186
2196
|
|
|
2187
|
-
|
|
2188
|
-
|
|
2197
|
+
const resolveCustomGaugeSel = () => {
|
|
2198
|
+
currentGaugeSel = g_gaugeSelObj[g_stateObj.scoreId] || g_gaugeSelObj[0] || g_gaugeSelObj.default;
|
|
2199
|
+
};
|
|
2189
2200
|
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2201
|
+
/**
|
|
2202
|
+
* 【Step1】ゲージ種別(g_gaugeType)を確定し、ゲージ配列とカーソル位置を入れ替える
|
|
2203
|
+
* @param {number} _scrollNum
|
|
2204
|
+
* @param {boolean} _gaugeInitFlg true時は前回選択していたゲージ名を引き継がず、配列の先頭を強制的に使う
|
|
2205
|
+
*/
|
|
2206
|
+
const resolveGaugeType = (_scrollNum, _gaugeInitFlg) => {
|
|
2207
|
+
applyLifeModeSwitch(g_headerObj.lifeBorders[g_stateObj.scoreId]);
|
|
2208
|
+
g_gaugeType = (currentGaugeSel?.__order?.length > 0 ? C_LFE_CUSTOM : g_stateObj.lifeMode);
|
|
2209
|
+
|
|
2210
|
+
g_settings.gauges = structuredClone(g_gaugeType === C_LFE_CUSTOM
|
|
2211
|
+
? currentGaugeSel.__order
|
|
2212
|
+
: g_gaugeOptionObj[g_gaugeType.toLowerCase()]);
|
|
2213
|
+
g_settings.gaugeNum = (_gaugeInitFlg ? 0 : getCurrentNo(g_settings.gauges, g_stateObj.gauge));
|
|
2214
|
+
g_stateObj.gauge = g_settings.gauges[g_settings.gaugeNum];
|
|
2215
|
+
|
|
2216
|
+
setSetting(_scrollNum, `gauge`);
|
|
2217
|
+
g_stateObj.lifeVariable = currentGaugeSel?.[g_stateObj.gauge]?.Variable
|
|
2218
|
+
?? g_gaugeDefObj[g_stateObj.gauge]?.Variable
|
|
2219
|
+
?? C_FLG_OFF;
|
|
2220
|
+
};
|
|
2194
2221
|
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
const
|
|
2198
|
-
|
|
2199
|
-
g_stateObj.
|
|
2200
|
-
g_stateObj.
|
|
2201
|
-
g_stateObj.
|
|
2202
|
-
g_stateObj.
|
|
2203
|
-
|
|
2222
|
+
/** 【Step2:基本設定】g_gaugeDefObjのカーソル位置に対応する初期設定を適用 */
|
|
2223
|
+
const applyBaseGaugeSettings = () => {
|
|
2224
|
+
const def = g_gaugeDefObj[g_stateObj.gauge];
|
|
2225
|
+
if (!hasVal(def)) return;
|
|
2226
|
+
g_stateObj.lifeMode = (def.Border === `x` ? C_LFE_SURVIVAL : C_LFE_BORDER);
|
|
2227
|
+
g_stateObj.lifeBorder = (def.Border === `x` ? 0 : def.Border);
|
|
2228
|
+
g_stateObj.lifeInit = def.Init;
|
|
2229
|
+
g_stateObj.lifeRcv = def.Recovery;
|
|
2230
|
+
g_stateObj.lifeDmg = def.Damage;
|
|
2231
|
+
};
|
|
2204
2232
|
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2233
|
+
/** 【Step3:譜面ヘッダー】headerOverridable指定ゲージのみ、difData由来の値で上書き */
|
|
2234
|
+
const applyHeaderGaugeSettings = () => {
|
|
2235
|
+
const def = g_gaugeDefObj[g_stateObj.gauge];
|
|
2236
|
+
if (!def?.headerOverridable) return;
|
|
2237
|
+
if (g_gaugeType === C_LFE_CUSTOM) {
|
|
2238
|
+
// カスタム選択でOriginal/Normal等headerOverridable対象が複数混在する場合、
|
|
2239
|
+
// difDataは1つしか値を持たないため、選択順で最初に出てきた「系統」だけに適用する。
|
|
2240
|
+
// Light/EasyはOriginal/Normalの系統として扱う(deriveRecoveryFromで判定)
|
|
2241
|
+
const getGaugeRoot = _name => g_gaugeDefObj[_name]?.deriveRecoveryFrom ?? _name;
|
|
2242
|
+
const firstOverridableRoot = getGaugeRoot(
|
|
2243
|
+
g_settings.gauges.find(name => g_gaugeDefObj[name]?.headerOverridable)
|
|
2244
|
+
);
|
|
2245
|
+
if (getGaugeRoot(g_stateObj.gauge) !== firstOverridableRoot) return;
|
|
2246
|
+
}
|
|
2247
|
+
g_stateObj.lifeInit = getGaugeCalc(g_headerObj.lifeInits[g_stateObj.scoreId], g_stateObj.lifeInit);
|
|
2248
|
+
g_stateObj.lifeRcv = getGaugeCalc(g_headerObj.lifeRecoverys[g_stateObj.scoreId], g_stateObj.lifeRcv)
|
|
2249
|
+
* (hasVal(def.deriveRecoveryFrom) ? 2 : 1);
|
|
2250
|
+
g_stateObj.lifeDmg = getGaugeCalc(g_headerObj.lifeDamages[g_stateObj.scoreId], g_stateObj.lifeDmg);
|
|
2251
|
+
};
|
|
2209
2252
|
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2253
|
+
/**
|
|
2254
|
+
* 【Step4:ゲージ個別設定(最優先)】gaugeXXXで明示的に設定された値があれば上書き。
|
|
2255
|
+
* g_gaugeSelObj[scoreId][name]は既に単一譜面分の値なので、g_headerObj用の
|
|
2256
|
+
* applyLifeModeSwitch/applyLifeCategory(配列アクセス版)は使わず直接適用する
|
|
2257
|
+
*/
|
|
2258
|
+
const applyIndividualGaugeSettings = () => {
|
|
2259
|
+
const override = currentGaugeSel?.[g_stateObj.gauge];
|
|
2260
|
+
if (override?.Recovery === undefined) return; // gaugeXXXヘッダー由来の上書きが無い(overrideが無い/Variableのみの場合を含む)
|
|
2261
|
+
if (hasVal(override.Border)) {
|
|
2262
|
+
applyLifeModeSwitch(override.Border);
|
|
2216
2263
|
}
|
|
2217
|
-
|
|
2218
|
-
|
|
2264
|
+
g_stateObj.lifeInit = getGaugeCalc(override.Init, g_stateObj.lifeInit);
|
|
2265
|
+
g_stateObj.lifeRcv = getGaugeCalc(override.Recovery, g_stateObj.lifeRcv);
|
|
2266
|
+
g_stateObj.lifeDmg = getGaugeCalc(override.Damage, g_stateObj.lifeDmg);
|
|
2267
|
+
};
|
|
2219
2268
|
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2269
|
+
return (_scrollNum, _gaugeInitFlg = false) => {
|
|
2270
|
+
resolveCustomGaugeSel();
|
|
2271
|
+
resolveGaugeType(_scrollNum, _gaugeInitFlg);
|
|
2272
|
+
applyBaseGaugeSettings();
|
|
2273
|
+
applyHeaderGaugeSettings();
|
|
2274
|
+
applyIndividualGaugeSettings();
|
|
2275
|
+
|
|
2276
|
+
lblGauge2.innerHTML = gaugeFormat(g_stateObj.lifeMode,
|
|
2277
|
+
g_stateObj.lifeBorder, g_stateObj.lifeRcv, g_stateObj.lifeDmg, g_stateObj.lifeInit, g_stateObj.lifeVariable);
|
|
2278
|
+
};
|
|
2279
|
+
})();
|
|
2224
2280
|
|
|
2225
2281
|
/**
|
|
2226
2282
|
* ゲージ設定の詳細表示を整形
|
|
@@ -2321,7 +2377,9 @@ const getAccuracy = (_border, _rcv, _dmg, _init, _allCnt) => {
|
|
|
2321
2377
|
|
|
2322
2378
|
// 許容ミス数の計算
|
|
2323
2379
|
const allowableCnts = Math.min(_allCnt - minRecovery, _allCnt);
|
|
2324
|
-
let allowableCntsText = _allCnt > 0 && allowableCnts !== 0
|
|
2380
|
+
let allowableCntsText = _allCnt > 0 && allowableCnts !== 0
|
|
2381
|
+
? (allowableCnts > 0 ? `${allowableCnts}miss↓` : `(${allowableCnts}miss)`)
|
|
2382
|
+
: ``;
|
|
2325
2383
|
|
|
2326
2384
|
if ((_rcv === 0 && _dmg === 0) || _rcv < 0 || _dmg < 0) {
|
|
2327
2385
|
rateText = `----`;
|
|
@@ -2411,8 +2469,11 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
|
|
|
2411
2469
|
const makeSettingLblCssButton = (_id, _name, _heightPos, _func, {
|
|
2412
2470
|
x = g_limitObj.setLblLeft, y = g_limitObj.setLblHeight * _heightPos,
|
|
2413
2471
|
w = g_limitObj.setLblWidth, h = g_limitObj.setLblHeight, siz = g_limitObj.setLblSiz,
|
|
2414
|
-
cxtFunc = () => true, ...rest
|
|
2415
|
-
|
|
2472
|
+
cxtFunc = () => true, ...rest
|
|
2473
|
+
} = {}, ..._classes) =>
|
|
2474
|
+
createCss2Button(_id, _name, _func, {
|
|
2475
|
+
x, y, w, h, siz: getFontSize2(_name, w, { maxSiz: siz }), cxtFunc, ...rest
|
|
2476
|
+
}, g_cssObj.button_Default, ..._classes);
|
|
2416
2477
|
|
|
2417
2478
|
/**
|
|
2418
2479
|
* 譜面変更セレクター用ボタン
|
|
@@ -2430,7 +2491,8 @@ const makeSettingLblCssButton = (_id, _name, _heightPos, _func, {
|
|
|
2430
2491
|
*/
|
|
2431
2492
|
const makeDifLblCssButton = (_id, _name, _heightPos, _func, {
|
|
2432
2493
|
x = 0, h = g_limitObj.setLblHeight, y = h * _heightPos,
|
|
2433
|
-
w = g_limitObj.difSelectorWidth, siz = g_limitObj.difSelectorSiz, btnStyle = `Default
|
|
2494
|
+
w = g_limitObj.difSelectorWidth, siz = g_limitObj.difSelectorSiz, btnStyle = `Default`,
|
|
2495
|
+
} = {}) =>
|
|
2434
2496
|
createCss2Button(_id, _name, _func, {
|
|
2435
2497
|
x, y, w, h, siz, borderStyle: `solid`, title: g_msgObj[_id] ?? ``,
|
|
2436
2498
|
}, g_cssObj[`button_${btnStyle}`], g_cssObj.button_ON);
|
|
@@ -2449,7 +2511,9 @@ const makeDifLblCssButton = (_id, _name, _heightPos, _func, {
|
|
|
2449
2511
|
* @param {string} [object.visibility='visible']
|
|
2450
2512
|
* @returns {HTMLDivElement}
|
|
2451
2513
|
*/
|
|
2452
|
-
const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, {
|
|
2514
|
+
const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, {
|
|
2515
|
+
dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible`,
|
|
2516
|
+
} = {}) =>
|
|
2453
2517
|
createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, {
|
|
2454
2518
|
x: g_settingBtnObj.pos[_directionFlg] + dx, y: g_limitObj.setLblHeight * _heightPos + dy,
|
|
2455
2519
|
w: g_limitObj.setMiniWidth + dw, h: g_limitObj.setLblHeight + dh, siz: g_limitObj.setLblSiz + dsiz, visibility,
|
|
@@ -2826,7 +2890,8 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
2826
2890
|
} else {
|
|
2827
2891
|
const creditName = `Sample Music / Artist Name`;
|
|
2828
2892
|
const difName = `[7key / Normal]`;
|
|
2829
|
-
const checkMusicSiz = (_text, _siz) =>
|
|
2893
|
+
const checkMusicSiz = (_text, _siz) =>
|
|
2894
|
+
getFontSize2(_text, g_headerObj.playingWidth - g_headerObj.customViewWidth - 125, { maxSiz: _siz });
|
|
2830
2895
|
|
|
2831
2896
|
multiAppend(_frame,
|
|
2832
2897
|
createDivCss2Label(`previewCredit`, creditName, {
|
|
@@ -2835,9 +2900,7 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
2835
2900
|
createDivCss2Label(`previewDifName`, difName, {
|
|
2836
2901
|
...g_lblPosObj.lblDifName, siz: checkMusicSiz(difName, 12)
|
|
2837
2902
|
}),
|
|
2838
|
-
createDivCss2Label(`previewTime1`, `0:04 /`,
|
|
2839
|
-
...g_lblPosObj.lblTime1,
|
|
2840
|
-
}),
|
|
2903
|
+
createDivCss2Label(`previewTime1`, `0:04 /`, g_lblPosObj.lblTime1),
|
|
2841
2904
|
createDivCss2Label(`previewTime2`, `2:54`, g_lblPosObj.lblTime2),
|
|
2842
2905
|
|
|
2843
2906
|
// ゲージ設定名
|
|
@@ -2853,15 +2916,27 @@ const buildPreviewUI = (_frame, _playW, _playH) => {
|
|
|
2853
2916
|
y: _playH - 100 + g_diffObj.shortcutY, w: 80, h: 100, pointerEvents: C_DIS_AUTO,
|
|
2854
2917
|
});
|
|
2855
2918
|
multiAppend(scGroup,
|
|
2856
|
-
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, {
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
createDivCss2Label(`
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
createDivCss2Label(`
|
|
2864
|
-
|
|
2919
|
+
createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, {
|
|
2920
|
+
...g_lblPosObj.lblMainScHeader, x: 0, y: 0,
|
|
2921
|
+
}),
|
|
2922
|
+
createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry], {
|
|
2923
|
+
...g_lblPosObj.lblMainScKey, x: 0, y: 15,
|
|
2924
|
+
fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold`,
|
|
2925
|
+
}),
|
|
2926
|
+
createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, {
|
|
2927
|
+
...g_lblPosObj.lblMainScHeader, x: 0, y: 35,
|
|
2928
|
+
}),
|
|
2929
|
+
createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack], {
|
|
2930
|
+
...g_lblPosObj.lblMainScKey, x: 0, y: 50,
|
|
2931
|
+
fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold`,
|
|
2932
|
+
}),
|
|
2933
|
+
createDivCss2Label(`lblPause`, `[${g_lblNameObj.l_pause}]`, {
|
|
2934
|
+
...g_lblPosObj.lblMainScHeader, x: 0, y: 70,
|
|
2935
|
+
}),
|
|
2936
|
+
createDivCss2Label(`lblPauseSc`, g_kCd[g_headerObj.keyPause], {
|
|
2937
|
+
...g_lblPosObj.lblMainScKey, x: 0, y: 85,
|
|
2938
|
+
fontWeight: g_headerObj.keyPause === C_KEY_PAUSE ? `normal` : `bold`,
|
|
2939
|
+
}),
|
|
2865
2940
|
);
|
|
2866
2941
|
const scConfig = {
|
|
2867
2942
|
toastTitle: g_lblNameObj.shortcutUpdate,
|
|
@@ -3072,13 +3147,18 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
3072
3147
|
if (g_headerObj[`${_name}Use`]) {
|
|
3073
3148
|
|
|
3074
3149
|
// 設定名、CSS名(2種)、表示名
|
|
3075
|
-
const list = [C_FLG_OFF, C_FLG_ON]
|
|
3076
|
-
|
|
3077
|
-
const
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3150
|
+
const list = [C_FLG_OFF, C_FLG_ON]
|
|
3151
|
+
.concat(g_settings[`d_${_name}s`] || []);
|
|
3152
|
+
const cssBarList = [C_FLG_OFF, C_FLG_ON]
|
|
3153
|
+
.concat(Array(g_settings[`d_${_name}s`]?.length).fill(g_settings.d_cssBarExName) || []);
|
|
3154
|
+
const cssBgList = [g_settings.d_cssBgName, g_settings.d_cssBgName]
|
|
3155
|
+
.concat(Array(g_settings[`d_${_name}s`]?.length).fill(g_settings.d_cssBgExName) || []);
|
|
3156
|
+
const lbls = [toCapitalize(_name), toCapitalize(_name)]
|
|
3157
|
+
.concat(g_settings[`d_${_name}s`] || []);
|
|
3158
|
+
|
|
3159
|
+
const dispView = () => [C_FLG_OFF, C_FLG_ON].includes(g_stateObj[`d_${_name.toLowerCase()}`])
|
|
3160
|
+
? g_lblNameObj[`d_${toCapitalize(_name)}`]
|
|
3161
|
+
: getStgDetailName(lbls[g_settings.displayNum[_name]]);
|
|
3082
3162
|
|
|
3083
3163
|
const withShortCutDesc = () => createScText(document.getElementById(linkId), `${toCapitalize(_name)}`,
|
|
3084
3164
|
{ displayName: g_currentPage, targetLabel: linkId, x: -5 });
|
|
@@ -3111,8 +3191,7 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
3111
3191
|
displaySprite.appendChild(
|
|
3112
3192
|
makeSettingLblCssButton(linkId, dispView(), _heightPos, () => switchDisplay(), {
|
|
3113
3193
|
x: 30 + 180 * _widthPos, y: 20 * _heightPos, w: 170, h: 18,
|
|
3114
|
-
title: g_msgObj[`d_${_name.toLowerCase()}`], borderStyle: `solid`,
|
|
3115
|
-
cxtFunc: () => switchDisplay(-1),
|
|
3194
|
+
title: g_msgObj[`d_${_name.toLowerCase()}`], borderStyle: `solid`, cxtFunc: () => switchDisplay(-1),
|
|
3116
3195
|
}, `button_${cssBgList[g_settings.displayNum[_name]]}`, `button_${cssBarList[g_settings.displayNum[_name]]}`)
|
|
3117
3196
|
);
|
|
3118
3197
|
withShortCutDesc();
|
|
@@ -3154,8 +3233,11 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
3154
3233
|
|
|
3155
3234
|
// Hidden+/Sudden+初期値用スライダー、ロックボタン
|
|
3156
3235
|
multiAppend(spriteList.appearance,
|
|
3157
|
-
createDivCss2Label(`lblAppearancePos`,
|
|
3158
|
-
|
|
3236
|
+
createDivCss2Label(`lblAppearancePos`,
|
|
3237
|
+
`${g_hidSudObj.distH[g_stateObj.appearance](g_hidSudObj.filterPos)}`,
|
|
3238
|
+
g_lblPosObj.lblAppearancePos),
|
|
3239
|
+
createDivCss2Label(`lblAppearanceBar`,
|
|
3240
|
+
`<input id="appearanceSlider" type="range" value="${g_hidSudObj.filterPos}" min="0" max="100" step="1">`,
|
|
3159
3241
|
g_lblPosObj.lblAppearanceBar),
|
|
3160
3242
|
createCss2Button(`lnkLockBtn`, g_lblNameObj.filterLock, evt => setLockView(evt.target), {
|
|
3161
3243
|
...g_lblPosObj.lnkLockBtn, cxtFunc: evt => setLockView(evt.target),
|
|
@@ -3235,7 +3317,9 @@ const interlockingButton = (_headerObj, _name, _current, _next, _buttonFlg = fal
|
|
|
3235
3317
|
txtDisabled = `Disabled`;
|
|
3236
3318
|
document.getElementById(`lnk${defaultOption}`).textContent = `${toCapitalize(defaultOption)}:${_next}`;
|
|
3237
3319
|
}
|
|
3238
|
-
document.getElementById(`lnk${defaultOption}`).classList.replace(
|
|
3320
|
+
document.getElementById(`lnk${defaultOption}`).classList.replace(
|
|
3321
|
+
g_cssObj[`button_${txtDisabled}${_current}`], g_cssObj[`button_Disabled${_next}`]
|
|
3322
|
+
);
|
|
3239
3323
|
}
|
|
3240
3324
|
// さらに連動する場合は設定を反転
|
|
3241
3325
|
interlockingButton(_headerObj, defaultOption, _next, _current, _buttonFlg);
|
|
@@ -3297,8 +3381,8 @@ const exSettingInit = () => {
|
|
|
3297
3381
|
|
|
3298
3382
|
multiAppend(judgRangeSprite,
|
|
3299
3383
|
createDivCss2Label(`lblJudgRangeView`, getJudgRangeView(), {
|
|
3300
|
-
x: parseFloat($id(`lblJudgRange`).left) + 10, y: parseFloat($id(`lblJudgRange`).top) + 25,
|
|
3301
|
-
align: C_ALIGN_LEFT,
|
|
3384
|
+
x: parseFloat($id(`lblJudgRange`).left) + 10, y: parseFloat($id(`lblJudgRange`).top) + 25,
|
|
3385
|
+
w: 300, h: 30, siz: 13, align: C_ALIGN_LEFT,
|
|
3302
3386
|
}),
|
|
3303
3387
|
);
|
|
3304
3388
|
|
|
@@ -3345,7 +3429,9 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
|
|
|
3345
3429
|
$id(`lnk${camelH}`).width = wUnit(g_limitObj.setLblWidthShort);
|
|
3346
3430
|
}
|
|
3347
3431
|
const labelWidth = isDefault ? g_limitObj.setLblWidth : g_limitObj.setLblWidthShort - 10;
|
|
3348
|
-
$id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(
|
|
3432
|
+
$id(`lnk${camelH}`).fontSize = wUnit(getFontSize2(
|
|
3433
|
+
getStgDetailName(g_stateObj[_name]), labelWidth, { maxSiz: g_limitObj.setLblSiz }
|
|
3434
|
+
));
|
|
3349
3435
|
};
|
|
3350
3436
|
|
|
3351
3437
|
/**
|
|
@@ -3380,7 +3466,9 @@ const createGeneralSettingEx = (_spriteList, _name, { defaultList = [C_FLG_OFF],
|
|
|
3380
3466
|
});
|
|
3381
3467
|
}
|
|
3382
3468
|
document.getElementById(`lnk${settingLabel}`).classList.remove(g_cssObj.button_RevON, g_cssObj.button_RevOFF);
|
|
3383
|
-
document.getElementById(`lnk${settingLabel}`).classList.add(
|
|
3469
|
+
document.getElementById(`lnk${settingLabel}`).classList.add(
|
|
3470
|
+
g_cssObj[`button_Rev${boolToSwitch(g_stateObj[`${_name}Type`] !== C_FLG_HYPHEN)}`]
|
|
3471
|
+
);
|
|
3384
3472
|
};
|
|
3385
3473
|
|
|
3386
3474
|
// TypeUse 未定義時は true 扱いにする
|