danoniplus 37.6.0 → 37.6.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 +516 -293
- package/js/lib/danoni_constants.js +107 -209
- package/package.json +1 -1
package/js/danoni_main.js
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Source by tickle
|
|
6
6
|
* Created : 2018/10/08
|
|
7
|
-
* Revised : 2024/09/
|
|
7
|
+
* Revised : 2024/09/25
|
|
8
8
|
*
|
|
9
9
|
* https://github.com/cwtickle/danoniplus
|
|
10
10
|
*/
|
|
11
|
-
const g_version = `Ver 37.6.
|
|
12
|
-
const g_revisedDate = `2024/09/
|
|
11
|
+
const g_version = `Ver 37.6.1`;
|
|
12
|
+
const g_revisedDate = `2024/09/25`;
|
|
13
13
|
|
|
14
14
|
// カスタム用バージョン (danoni_custom.js 等で指定可)
|
|
15
15
|
let g_localVersion = ``;
|
|
@@ -29,7 +29,7 @@ let g_localVersion2 = ``;
|
|
|
29
29
|
* clearWindow()で[divRoot]以外の全てのスプライトを削除。
|
|
30
30
|
* 特定のスプライトに限り削除する場合は deleteChildspriteAll() 。
|
|
31
31
|
*/
|
|
32
|
-
const current =
|
|
32
|
+
const current = () => {
|
|
33
33
|
if (document.currentScript) {
|
|
34
34
|
return document.currentScript.src;
|
|
35
35
|
}
|
|
@@ -212,7 +212,7 @@ const multiAppend = (_baseObj, ...rest) => _baseObj.append(...rest);
|
|
|
212
212
|
/**
|
|
213
213
|
* 複数の属性をまとめて設定
|
|
214
214
|
* @param {object} _baseObj
|
|
215
|
-
* @param {
|
|
215
|
+
* @param {...any} rest
|
|
216
216
|
*/
|
|
217
217
|
const setAttrs = (_baseObj, { ...rest } = {}) =>
|
|
218
218
|
Object.keys(rest).forEach(property => _baseObj.setAttribute(property, rest[property]));
|
|
@@ -250,13 +250,15 @@ const trimStr = _str => _str?.split(`\t`).join(``).replace(/^ +| +$/g, ``);
|
|
|
250
250
|
|
|
251
251
|
/**
|
|
252
252
|
* 変数が存在するかどうかをチェック
|
|
253
|
-
* @param {string} _data
|
|
253
|
+
* @param {string} _data
|
|
254
|
+
* @param {...any} strs
|
|
254
255
|
*/
|
|
255
256
|
const hasVal = (_data, ...strs) => _data !== undefined && _data !== `` && (!strs || strs.every(str => _data !== str));
|
|
256
257
|
|
|
257
258
|
/**
|
|
258
259
|
* 変数が存在するかどうかをチェック(null無しを含む)
|
|
259
260
|
* @param {string} _data
|
|
261
|
+
* @param {...any} strs
|
|
260
262
|
*/
|
|
261
263
|
const hasValN = (_data, ...strs) => hasVal(_data, ...strs) && _data !== null;
|
|
262
264
|
|
|
@@ -347,7 +349,7 @@ const getCurrentNo = (_list, _target) => roundZero(_list.indexOf(_target));
|
|
|
347
349
|
* 配列内に存在するかどうかをチェック
|
|
348
350
|
* @param {string} _val
|
|
349
351
|
* @param {array} _array
|
|
350
|
-
* @param {
|
|
352
|
+
* @param {number} _pos
|
|
351
353
|
*/
|
|
352
354
|
const hasValInArray = (_val, _array, _pos = 0) =>
|
|
353
355
|
_array.findIndex(data => data[_pos] === _val) !== -1;
|
|
@@ -355,7 +357,7 @@ const hasValInArray = (_val, _array, _pos = 0) =>
|
|
|
355
357
|
/**
|
|
356
358
|
* 配列が既定長以上かどうかをチェック
|
|
357
359
|
* @param {array} _data
|
|
358
|
-
* @param {
|
|
360
|
+
* @param {number} _length
|
|
359
361
|
*/
|
|
360
362
|
const hasArrayList = (_data, _length = 1) => _data?.length >= _length;
|
|
361
363
|
|
|
@@ -460,8 +462,8 @@ const getMaxValIdxs = (_array, _num = 1) => {
|
|
|
460
462
|
* 部分一致検索(リストのいずれかに合致、大小文字問わず)
|
|
461
463
|
* @param {string} _str 検索文字
|
|
462
464
|
* @param {array} _list 検索リスト (英字は小文字にする必要あり)
|
|
463
|
-
* @param {string} prefix 前方一致条件 (前方一致時は ^)
|
|
464
|
-
* @param {string} suffix 後方一致条件 (後方一致時は $)
|
|
465
|
+
* @param {string} object.prefix 前方一致条件 (前方一致時は ^)
|
|
466
|
+
* @param {string} object.suffix 後方一致条件 (後方一致時は $)
|
|
465
467
|
*/
|
|
466
468
|
const listMatching = (_str, _list, { prefix = ``, suffix = `` } = {}) =>
|
|
467
469
|
_list.findIndex(value => _str.toLowerCase().match(new RegExp(String.raw`${prefix}${value}${suffix}`, 'i'))) !== -1;
|
|
@@ -596,7 +598,13 @@ const commonKeyUp = _evt => {
|
|
|
596
598
|
* ショートカットキー表示
|
|
597
599
|
* @param {object} _obj
|
|
598
600
|
* @param {string} _settingLabel
|
|
599
|
-
* @param {
|
|
601
|
+
* @param {string} object.displayName
|
|
602
|
+
* @param {string} object.dfLabel ショートカットキーの表示名
|
|
603
|
+
* @param {string} object.targetLabel ショートカットキーを押したときのボタン名
|
|
604
|
+
* @param {number} object.x
|
|
605
|
+
* @param {number} object.y
|
|
606
|
+
* @param {number} object.w
|
|
607
|
+
* @param {number} object.siz
|
|
600
608
|
*/
|
|
601
609
|
const createScText = (_obj, _settingLabel, { displayName = `option`, dfLabel = ``, targetLabel = `lnk${_settingLabel}R`,
|
|
602
610
|
x = g_scViewObj.x, y = g_scViewObj.y, w = g_scViewObj.w, siz = g_scViewObj.siz } = {}) => {
|
|
@@ -628,19 +636,21 @@ const createScTextCommon = _displayName =>
|
|
|
628
636
|
* ショートカットキー有効化
|
|
629
637
|
* @param {string} _displayName
|
|
630
638
|
* @param {function} _func
|
|
639
|
+
* @param {boolean} object.displayFlg
|
|
640
|
+
* @param {boolean} object.dfEvtFlg
|
|
631
641
|
*/
|
|
632
|
-
const setShortcutEvent = (_displayName, _func =
|
|
642
|
+
const setShortcutEvent = (_displayName, _func = () => true, { displayFlg = true, dfEvtFlg = false } = {}) => {
|
|
633
643
|
if (displayFlg) {
|
|
634
644
|
createScTextCommon(_displayName);
|
|
635
645
|
}
|
|
636
|
-
const evList =
|
|
646
|
+
const evList = () => {
|
|
637
647
|
document.onkeydown = evt => commonKeyDown(evt, _displayName, _func, dfEvtFlg);
|
|
638
648
|
document.onkeyup = evt => commonKeyUp(evt);
|
|
639
649
|
};
|
|
640
650
|
if (g_initialFlg && g_btnWaitFrame[_displayName].initial) {
|
|
641
651
|
evList();
|
|
642
652
|
} else {
|
|
643
|
-
setTimeout(
|
|
653
|
+
setTimeout(() => {
|
|
644
654
|
if (g_currentPage === _displayName) {
|
|
645
655
|
evList();
|
|
646
656
|
}
|
|
@@ -718,7 +728,7 @@ const loadScript2 = (_url, _requiredFlg = true, _charset = `UTF-8`) => {
|
|
|
718
728
|
script.type = `text/javascript`;
|
|
719
729
|
script.src = _url;
|
|
720
730
|
script.charset = _charset;
|
|
721
|
-
script.onload =
|
|
731
|
+
script.onload = () => {
|
|
722
732
|
g_loadObj[baseUrl] = true;
|
|
723
733
|
resolve(script);
|
|
724
734
|
};
|
|
@@ -738,6 +748,7 @@ const loadScript2 = (_url, _requiredFlg = true, _charset = `UTF-8`) => {
|
|
|
738
748
|
* CSSファイルの読み込み (Promise)
|
|
739
749
|
* デフォルトは danoni_skin_default.css を読み込む
|
|
740
750
|
* @param {url} _href
|
|
751
|
+
* @param {string} object.crossOrigin
|
|
741
752
|
*/
|
|
742
753
|
const importCssFile2 = (_href, { crossOrigin = `anonymous` } = {}) => {
|
|
743
754
|
const baseUrl = _href.split(`?`)[0];
|
|
@@ -750,11 +761,11 @@ const importCssFile2 = (_href, { crossOrigin = `anonymous` } = {}) => {
|
|
|
750
761
|
if (!g_isFile) {
|
|
751
762
|
link.crossOrigin = crossOrigin;
|
|
752
763
|
}
|
|
753
|
-
link.onload =
|
|
764
|
+
link.onload = () => {
|
|
754
765
|
g_loadObj[baseUrl] = true;
|
|
755
766
|
resolve(link);
|
|
756
767
|
};
|
|
757
|
-
link.onerror =
|
|
768
|
+
link.onerror = () => {
|
|
758
769
|
makeWarningWindow(g_msgInfoObj.E_0041.split(`{0}`).join(getFullPath(baseUrl)), { resetFlg: `title` });
|
|
759
770
|
resolve(link);
|
|
760
771
|
};
|
|
@@ -803,9 +814,9 @@ const getFilePath = (_fileName, _directory = ``) => {
|
|
|
803
814
|
|
|
804
815
|
/**
|
|
805
816
|
* 画像ファイルの存在チェック後、プリロードする処理
|
|
806
|
-
* @param {string} _imgPath
|
|
807
|
-
* @param {string} directory
|
|
808
|
-
* @param {boolean} syncBackPath
|
|
817
|
+
* @param {string} _imgPath
|
|
818
|
+
* @param {string} object.directory
|
|
819
|
+
* @param {boolean} object.syncBackPath
|
|
809
820
|
* @returns
|
|
810
821
|
*/
|
|
811
822
|
const preloadImgFile = (_imgPath, { directory = ``, syncBackPath = true } = {}) => {
|
|
@@ -917,11 +928,10 @@ const colorCdPadding = (_useFlg, _colorStr) => _useFlg ? `#${_colorStr.slice(1).
|
|
|
917
928
|
/**
|
|
918
929
|
* グラデーション用のカラーフォーマットを作成
|
|
919
930
|
* @param {string} _colorStr
|
|
920
|
-
* @param {
|
|
921
|
-
*
|
|
922
|
-
*
|
|
923
|
-
*
|
|
924
|
-
* shadowFlg
|
|
931
|
+
* @param {array} object._defaultColorgrd
|
|
932
|
+
* @param {boolean} object._colorCdPaddingUse
|
|
933
|
+
* @param {string} object._objType (normal: 汎用, titleMusic: タイトル曲名, titleArrow: タイトル矢印)
|
|
934
|
+
* @param {boolean} object._shadowFlg
|
|
925
935
|
*/
|
|
926
936
|
const makeColorGradation = (_colorStr, { _defaultColorgrd = g_headerObj.defaultColorgrd,
|
|
927
937
|
_colorCdPaddingUse = false, _objType = `normal`, _shadowFlg = false } = {}) => {
|
|
@@ -1023,7 +1033,8 @@ const getFontSize = (_str, _maxWidth, _font = getBasicFont(), _maxFontsize = 64,
|
|
|
1023
1033
|
* 補足説明部分のラベル作成
|
|
1024
1034
|
* @param {string} _id
|
|
1025
1035
|
* @param {string} _str
|
|
1026
|
-
* @param {string}
|
|
1036
|
+
* @param {string} object.altId
|
|
1037
|
+
* @param {number} object.siz
|
|
1027
1038
|
*/
|
|
1028
1039
|
const createDescDiv = (_id, _str, { altId = _id, siz = g_limitObj.mainSiz } = {}) =>
|
|
1029
1040
|
createDivCss2Label(_id, _str, Object.assign(g_lblPosObj[altId], {
|
|
@@ -1076,7 +1087,13 @@ const setUserSelect = (_style, _value = C_DIS_NONE) => {
|
|
|
1076
1087
|
* 子div要素のラベル文字作成 (CSS版・拡張属性対応)
|
|
1077
1088
|
* @param {string} _id
|
|
1078
1089
|
* @param {string} _text
|
|
1079
|
-
* @param {
|
|
1090
|
+
* @param {number} object.x
|
|
1091
|
+
* @param {number} object.y
|
|
1092
|
+
* @param {number} object.w
|
|
1093
|
+
* @param {number} object.h
|
|
1094
|
+
* @param {number} object.siz
|
|
1095
|
+
* @param {number} object.align
|
|
1096
|
+
* @param {...any} object.rest
|
|
1080
1097
|
* @param {...any} _classes
|
|
1081
1098
|
*/
|
|
1082
1099
|
const createDivCss2Label = (_id, _text, { x = 0, y = 0, w = g_limitObj.setLblWidth, h = g_limitObj.setLblHeight,
|
|
@@ -1114,7 +1131,8 @@ const createImg = (_id, _imgPath, _x, _y, _width, _height) => {
|
|
|
1114
1131
|
* @param {string} _parentObj
|
|
1115
1132
|
* @param {string} _id
|
|
1116
1133
|
* @param {function} _func
|
|
1117
|
-
* @param {
|
|
1134
|
+
* @param {number} object.x
|
|
1135
|
+
* @param {number} object.y
|
|
1118
1136
|
*/
|
|
1119
1137
|
const createColorPicker = (_parentObj, _id, _func, { x = 0, y = 0 } = {}) => {
|
|
1120
1138
|
const picker = document.createElement(`input`);
|
|
@@ -1131,7 +1149,14 @@ const createColorPicker = (_parentObj, _id, _func, { x = 0, y = 0 } = {}) => {
|
|
|
1131
1149
|
/**
|
|
1132
1150
|
* 色付きオブジェクトの作成 (拡張属性対応)
|
|
1133
1151
|
* @param {string} _id
|
|
1134
|
-
* @param {
|
|
1152
|
+
* @param {number} object.x
|
|
1153
|
+
* @param {number} object.y
|
|
1154
|
+
* @param {number} object.w
|
|
1155
|
+
* @param {number} object.h
|
|
1156
|
+
* @param {number} object.color
|
|
1157
|
+
* @param {string} object.rotate
|
|
1158
|
+
* @param {string} object.styleName
|
|
1159
|
+
* @param {...any} object.rest
|
|
1135
1160
|
* @param {...any} _classes
|
|
1136
1161
|
*/
|
|
1137
1162
|
const createColorObject2 = (_id,
|
|
@@ -1166,7 +1191,12 @@ const createColorObject2 = (_id,
|
|
|
1166
1191
|
* - 作成済みの場合はすでに作成済のスプライトを返却する
|
|
1167
1192
|
* @param {object} _parentObj 親スプライト
|
|
1168
1193
|
* @param {string} _newObjId 作成する子スプライト名
|
|
1169
|
-
* @param {
|
|
1194
|
+
* @param {number} object.x
|
|
1195
|
+
* @param {number} object.y
|
|
1196
|
+
* @param {number} object.w
|
|
1197
|
+
* @param {number} object.h
|
|
1198
|
+
* @param {string} object.title
|
|
1199
|
+
* @param {...any} object.rest
|
|
1170
1200
|
* @param {...any} _classes
|
|
1171
1201
|
*/
|
|
1172
1202
|
const createEmptySprite = (_parentObj, _newObjId, { x = 0, y = 0, w = g_sWidth, h = g_sHeight, title = ``, ...rest } = {}, ..._classes) => {
|
|
@@ -1188,6 +1218,7 @@ const createEmptySprite = (_parentObj, _newObjId, { x = 0, y = 0, w = g_sWidth,
|
|
|
1188
1218
|
* 階層スプライト(全体)の作成
|
|
1189
1219
|
* @param {string} _baseName
|
|
1190
1220
|
* @param {number} _num
|
|
1221
|
+
* @param {number} object.x
|
|
1191
1222
|
*/
|
|
1192
1223
|
const createMultipleSprite = (_baseName, _num, { x = 0 } = {}) => {
|
|
1193
1224
|
const sprite = createEmptySprite(divRoot, _baseName);
|
|
@@ -1204,7 +1235,7 @@ const createMultipleSprite = (_baseName, _num, { x = 0 } = {}) => {
|
|
|
1204
1235
|
* - イベントリスナー作成時にリスナーキー(key)を発行する
|
|
1205
1236
|
* - 削除時は発行したリスナーキーを指定して削除する
|
|
1206
1237
|
*/
|
|
1207
|
-
const g_handler = (
|
|
1238
|
+
const g_handler = (() => {
|
|
1208
1239
|
const events = {};
|
|
1209
1240
|
let key = 0;
|
|
1210
1241
|
|
|
@@ -1259,13 +1290,24 @@ const deleteDiv = (_parentId, _idName) => {
|
|
|
1259
1290
|
* @param {string} _id
|
|
1260
1291
|
* @param {string} _text
|
|
1261
1292
|
* @param {function} _func
|
|
1262
|
-
* @param {
|
|
1293
|
+
* @param {number} object.x
|
|
1294
|
+
* @param {number} object.y
|
|
1295
|
+
* @param {number} object.w
|
|
1296
|
+
* @param {number} object.h
|
|
1297
|
+
* @param {number} object.siz
|
|
1298
|
+
* @param {string} object.align
|
|
1299
|
+
* @param {string} object.title ボタンオンマウス時のコメント
|
|
1300
|
+
* @param {string} object.groupName 画面名 (g_btnWaitFrameで定義しているプロパティ名を指定)
|
|
1301
|
+
* @param {boolean} object.initDisabledFlg ボタン有効化までの時間を設けるかどうか
|
|
1302
|
+
* @param {function} object.resetFunc カスタム処理後に実行する処理
|
|
1303
|
+
* @param {function} object.cxtFunc 右クリック時に実行する処理
|
|
1304
|
+
* @param {...any} object.rest
|
|
1263
1305
|
* @param {...any} _classes
|
|
1264
1306
|
*/
|
|
1265
|
-
const createCss2Button = (_id, _text, _func =
|
|
1307
|
+
const createCss2Button = (_id, _text, _func = () => true, {
|
|
1266
1308
|
x = 0, y = g_sHeight - 100, w = g_btnWidth() / 3, h = g_limitObj.btnHeight,
|
|
1267
1309
|
siz = g_limitObj.btnSiz, align = C_ALIGN_CENTER, title = ``, groupName = g_currentPage, initDisabledFlg = true,
|
|
1268
|
-
resetFunc =
|
|
1310
|
+
resetFunc = () => true, cxtFunc = () => true, ...rest } = {}, ..._classes) => {
|
|
1269
1311
|
|
|
1270
1312
|
const div = createDiv(_id, x, y, w, h, [`button_common`, ..._classes]);
|
|
1271
1313
|
div.innerHTML = _text;
|
|
@@ -1285,7 +1327,7 @@ const createCss2Button = (_id, _text, _func = _ => true, {
|
|
|
1285
1327
|
if (g_initialFlg && g_btnWaitFrame[groupName].initial) {
|
|
1286
1328
|
} else {
|
|
1287
1329
|
style.pointerEvents = C_DIS_NONE;
|
|
1288
|
-
setTimeout(
|
|
1330
|
+
setTimeout(() => style.pointerEvents = rest.pointerEvents ?? `auto`,
|
|
1289
1331
|
g_btnWaitFrame[groupName].b_frame * 1000 / g_fps);
|
|
1290
1332
|
}
|
|
1291
1333
|
}
|
|
@@ -1331,7 +1373,13 @@ const createCss2Button = (_id, _text, _func = _ => true, {
|
|
|
1331
1373
|
/**
|
|
1332
1374
|
* オブジェクトのスタイル一括変更
|
|
1333
1375
|
* @param {string} _id
|
|
1334
|
-
* @param {
|
|
1376
|
+
* @param {number} object.x
|
|
1377
|
+
* @param {number} object.y
|
|
1378
|
+
* @param {number} object.w
|
|
1379
|
+
* @param {number} object.h
|
|
1380
|
+
* @param {string} object.align
|
|
1381
|
+
* @param {string} object.title
|
|
1382
|
+
* @param {...any} object.rest
|
|
1335
1383
|
*/
|
|
1336
1384
|
const changeStyle = (_id, { x, y, w, h, siz, align, title, ...rest } = {}) => {
|
|
1337
1385
|
const div = document.getElementById(_id);
|
|
@@ -1362,6 +1410,7 @@ const changeStyle = (_id, { x, y, w, h, siz, align, title, ...rest } = {}) => {
|
|
|
1362
1410
|
* @param {string} _titlename
|
|
1363
1411
|
* @param {number} _x
|
|
1364
1412
|
* @param {number} _y
|
|
1413
|
+
* @param {...any} _classes
|
|
1365
1414
|
*/
|
|
1366
1415
|
const getTitleDivLabel = (_id, _titlename, _x, _y, ..._classes) =>
|
|
1367
1416
|
createDivCss2Label(_id, _titlename, { x: _x, y: _y, w: g_sWidth, h: 50, siz: g_limitObj.btnSiz }, ..._classes);
|
|
@@ -1369,8 +1418,8 @@ const getTitleDivLabel = (_id, _titlename, _x, _y, ..._classes) =>
|
|
|
1369
1418
|
/**
|
|
1370
1419
|
* キーコントロールの初期化
|
|
1371
1420
|
*/
|
|
1372
|
-
const resetKeyControl =
|
|
1373
|
-
document.onkeyup =
|
|
1421
|
+
const resetKeyControl = () => {
|
|
1422
|
+
document.onkeyup = () => { };
|
|
1374
1423
|
document.onkeydown = evt => {
|
|
1375
1424
|
evt.preventDefault();
|
|
1376
1425
|
return blockCode(transCode(evt));
|
|
@@ -1380,7 +1429,9 @@ const resetKeyControl = _ => {
|
|
|
1380
1429
|
|
|
1381
1430
|
/**
|
|
1382
1431
|
* Canvasのベース背景を作成
|
|
1383
|
-
* @param {
|
|
1432
|
+
* @param {object} _ctx
|
|
1433
|
+
* @param {number} object.w
|
|
1434
|
+
* @param {number} object.h
|
|
1384
1435
|
*/
|
|
1385
1436
|
const makeBgCanvas = (_ctx, { w = g_sWidth, h = g_sHeight } = {}) => {
|
|
1386
1437
|
const grd = _ctx.createLinearGradient(0, 0, 0, h);
|
|
@@ -1395,6 +1446,8 @@ const makeBgCanvas = (_ctx, { w = g_sWidth, h = g_sHeight } = {}) => {
|
|
|
1395
1446
|
* - divオブジェクト(ボタンなど)はdivRoot配下で管理しているため、子要素のみを全削除している。
|
|
1396
1447
|
* - dicRoot自体を削除しないよう注意すること。
|
|
1397
1448
|
* - 再描画時に共通で表示する箇所はここで指定している。
|
|
1449
|
+
* @param {boolean} _redrawFlg 画面横幅を再定義し、Canvas背景を再描画するかどうか
|
|
1450
|
+
* @param {string} _customDisplayName 画面名(メイン画面: 'Main', それ以外: 空)
|
|
1398
1451
|
*/
|
|
1399
1452
|
const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
|
|
1400
1453
|
resetKeyControl();
|
|
@@ -1485,7 +1538,7 @@ const getCssCustomProperty = (_prop, _propData) =>
|
|
|
1485
1538
|
/**
|
|
1486
1539
|
* CSSカスタムプロパティの値をオブジェクトへ退避
|
|
1487
1540
|
*/
|
|
1488
|
-
const getCssCustomProperties =
|
|
1541
|
+
const getCssCustomProperties = () => {
|
|
1489
1542
|
try {
|
|
1490
1543
|
const htmlStyle = document.documentElement.computedStyleMap();
|
|
1491
1544
|
for (const [propertyName, value] of htmlStyle.entries()) {
|
|
@@ -1521,6 +1574,15 @@ const getCssCustomProperties = _ => {
|
|
|
1521
1574
|
/**
|
|
1522
1575
|
* 背景・マスク用画像の描画
|
|
1523
1576
|
* @param {object} _obj
|
|
1577
|
+
* @param {string} _obj.path 画像のパス
|
|
1578
|
+
* @param {string} _obj.class 画像を装飾するCSSクラス名
|
|
1579
|
+
* @param {string} _obj.left 画像の位置(x座標)
|
|
1580
|
+
* @param {string} _obj.top 画像の位置(y座標)
|
|
1581
|
+
* @param {number} _obj.width 画像の幅
|
|
1582
|
+
* @param {string} _obj.height 画像の高さ (他との共用項目のため、stringで受ける)
|
|
1583
|
+
* @param {string} _obj.animationName アニメーション名
|
|
1584
|
+
* @param {string} _obj.animationDuration アニメーションを動かす間隔(秒)
|
|
1585
|
+
* @param {number} _obj.opacity 画像の不透明度
|
|
1524
1586
|
*/
|
|
1525
1587
|
const makeSpriteImage = _obj => {
|
|
1526
1588
|
let tmpInnerHTML = `<img src=${_obj.path} class="${_obj.class}" style="position:absolute;left:${wUnit(_obj.left)};top:${wUnit(_obj.top)}`;
|
|
@@ -1537,6 +1599,15 @@ const makeSpriteImage = _obj => {
|
|
|
1537
1599
|
/**
|
|
1538
1600
|
* 背景・マスク用テキストの描画
|
|
1539
1601
|
* @param {object} _obj
|
|
1602
|
+
* @param {string} _obj.path テキスト本体
|
|
1603
|
+
* @param {string} _obj.class テキストを装飾するCSSクラス名
|
|
1604
|
+
* @param {string} _obj.left テキストの位置(x座標)
|
|
1605
|
+
* @param {string} _obj.top テキストの位置(y座標)
|
|
1606
|
+
* @param {number} _obj.width テキストのフォントサイズ (font-size)
|
|
1607
|
+
* @param {string} _obj.height テキストの色 (color)
|
|
1608
|
+
* @param {string} _obj.animationName アニメーション名
|
|
1609
|
+
* @param {string} _obj.animationDuration アニメーションを動かす間隔(秒)
|
|
1610
|
+
* @param {number} _obj.opacity テキストの不透明度
|
|
1540
1611
|
*/
|
|
1541
1612
|
const makeSpriteText = _obj => {
|
|
1542
1613
|
let tmpInnerHTML = `<span class="${_obj.class}" style="display:inline-block;position:absolute;left:${wUnit(_obj.left)};top:${wUnit(_obj.top)}`;
|
|
@@ -1699,7 +1770,7 @@ const checkImage = _str => listMatching(_str, g_imgExtensions, { prefix: `[.]`,
|
|
|
1699
1770
|
|
|
1700
1771
|
/**
|
|
1701
1772
|
* back/masktitle(result)において、ジャンプ先のフレーム数を取得
|
|
1702
|
-
* @param {string} _frames
|
|
1773
|
+
* @param {string} _frames ジャンプ先のフレーム数情報。コロン指定でジャンプ先を確率で分岐 (ex. 300:1500:1500)
|
|
1703
1774
|
*/
|
|
1704
1775
|
const getSpriteJumpFrame = _frames => {
|
|
1705
1776
|
const jumpFrames = _frames.split(`:`);
|
|
@@ -1930,7 +2001,7 @@ const getQueryParamVal = _name => {
|
|
|
1930
2001
|
/**
|
|
1931
2002
|
* ローディング文字用ラベルの作成
|
|
1932
2003
|
*/
|
|
1933
|
-
const getLoadingLabel =
|
|
2004
|
+
const getLoadingLabel = () => createDivCss2Label(`lblLoading`, g_lblNameObj.nowLoading, {
|
|
1934
2005
|
x: 0, y: g_sHeight - 40, w: g_sWidth, h: g_limitObj.setLblHeight,
|
|
1935
2006
|
siz: g_limitObj.setLblSiz, align: C_ALIGN_RIGHT,
|
|
1936
2007
|
});
|
|
@@ -2139,7 +2210,7 @@ const initialControl = async () => {
|
|
|
2139
2210
|
/**
|
|
2140
2211
|
* 作品別ローカルストレージの読み込み・初期設定
|
|
2141
2212
|
*/
|
|
2142
|
-
const loadLocalStorage =
|
|
2213
|
+
const loadLocalStorage = () => {
|
|
2143
2214
|
// URLからscoreId, h(高さ)を削除
|
|
2144
2215
|
const url = new URL(location.href);
|
|
2145
2216
|
url.searchParams.delete(`scoreId`);
|
|
@@ -2421,6 +2492,8 @@ const storeBaseData = (_scoreId, _scoreObj, _keyCtrlPtn) => {
|
|
|
2421
2492
|
/**
|
|
2422
2493
|
* ツール計算
|
|
2423
2494
|
* @param {object} _scoreObj
|
|
2495
|
+
* @param {array} _scoreObj.arrowData
|
|
2496
|
+
* @param {array} _scoreObj.frzData
|
|
2424
2497
|
*/
|
|
2425
2498
|
const calcLevel = _scoreObj => {
|
|
2426
2499
|
//--------------------------------------------------------------
|
|
@@ -3320,7 +3393,10 @@ const getDifSelectorUse = (_headerFlg, _viewLists = g_headerObj.viewLists) => se
|
|
|
3320
3393
|
|
|
3321
3394
|
/**
|
|
3322
3395
|
* カラーセットの格納
|
|
3323
|
-
* @param {
|
|
3396
|
+
* @param {string} object._from コピー元矢印カラーセット(の譜面番号)
|
|
3397
|
+
* @param {string} object._to コピー先矢印のカラーセット(の譜面番号)
|
|
3398
|
+
* @param {object} object._fromObj コピー元オブジェクト
|
|
3399
|
+
* @param {object} object._toObj コピー先オブジェクト
|
|
3324
3400
|
*/
|
|
3325
3401
|
const resetColorType = ({ _from = ``, _to = ``, _fromObj = g_headerObj, _toObj = g_headerObj } = {}) => {
|
|
3326
3402
|
_toObj[`setColor${_to}`] = structuredClone(_fromObj[`setColor${_from}`]);
|
|
@@ -3358,7 +3434,10 @@ const getMusicNameMultiLine = _musicName => {
|
|
|
3358
3434
|
|
|
3359
3435
|
/**
|
|
3360
3436
|
* 画像セットの入れ替え処理
|
|
3361
|
-
* @param {
|
|
3437
|
+
* @param {object} _imgType
|
|
3438
|
+
* @param {string} _imgType.name
|
|
3439
|
+
* @param {string} _imgType.extension
|
|
3440
|
+
* @param {boolean} _initFlg
|
|
3362
3441
|
*/
|
|
3363
3442
|
const updateImgType = (_imgType, _initFlg = false) => {
|
|
3364
3443
|
if (_initFlg) {
|
|
@@ -3386,7 +3465,7 @@ const addGaugeFulls = _obj => _obj.map(key => g_gaugeOptionObj.customFulls[key]
|
|
|
3386
3465
|
* 矢印・フリーズアロー色のデータ変換
|
|
3387
3466
|
* @param {object} _baseObj
|
|
3388
3467
|
* @param {object} _dosObj
|
|
3389
|
-
* @param {
|
|
3468
|
+
* @param {string} object.scoreId
|
|
3390
3469
|
* @returns オブジェクト ※Object.assign(obj, resetBaseColorList(...))の形で呼び出しが必要
|
|
3391
3470
|
*/
|
|
3392
3471
|
const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
|
|
@@ -3462,7 +3541,11 @@ const resetBaseColorList = (_baseObj, _dosObj, { scoreId = `` } = {}) => {
|
|
|
3462
3541
|
* @param {string} _data
|
|
3463
3542
|
* @param {array} _colorInit
|
|
3464
3543
|
* @param {number} _colorInitLength
|
|
3465
|
-
* @param {
|
|
3544
|
+
* @param {array} object._defaultColorgrd
|
|
3545
|
+
* @param {boolean} object._colorCdPaddingUse
|
|
3546
|
+
* @param {boolean} object._defaultFrzColorUse
|
|
3547
|
+
* @param {string} object._objType
|
|
3548
|
+
* @param {boolean} object._shadowFlg
|
|
3466
3549
|
*/
|
|
3467
3550
|
const setColorList = (_data, _colorInit, _colorInitLength,
|
|
3468
3551
|
{ _defaultColorgrd = g_headerObj.defaultColorgrd, _colorCdPaddingUse = false,
|
|
@@ -3532,7 +3615,7 @@ const setColorList = (_data, _colorInit, _colorInitLength,
|
|
|
3532
3615
|
* 複合カスタムゲージの定義設定
|
|
3533
3616
|
* |customGauge=Original::F,Normal::V,Escape::V|
|
|
3534
3617
|
* @param {object} _dosObj
|
|
3535
|
-
* @param {
|
|
3618
|
+
* @param {string} object.scoreId
|
|
3536
3619
|
* @returns オブジェクト ※Object.assign(obj, resetCustomGauge(...))の形で呼び出しが必要
|
|
3537
3620
|
*/
|
|
3538
3621
|
const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
|
|
@@ -3574,7 +3657,7 @@ const resetCustomGauge = (_dosObj, { scoreId = 0 } = {}) => {
|
|
|
3574
3657
|
* @param {object} _dosObj
|
|
3575
3658
|
* @param {string} _name
|
|
3576
3659
|
* @param {number} _difLength
|
|
3577
|
-
* @param {
|
|
3660
|
+
* @param {string} object.scoreId
|
|
3578
3661
|
*/
|
|
3579
3662
|
const getGaugeSetting = (_dosObj, _name, _difLength, { scoreId = 0 } = {}) => {
|
|
3580
3663
|
|
|
@@ -3687,6 +3770,7 @@ const getKeyCtrlVal = _kCdN => {
|
|
|
3687
3770
|
/**
|
|
3688
3771
|
* 一時的な追加キーの設定
|
|
3689
3772
|
* @param {object} _dosObj
|
|
3773
|
+
* @param {array} object.keyExtraList
|
|
3690
3774
|
*/
|
|
3691
3775
|
const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`) } = {}) => {
|
|
3692
3776
|
|
|
@@ -3796,10 +3880,12 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
|
|
|
3796
3880
|
* @param {string} _key キー数
|
|
3797
3881
|
* @param {string} _name 名前
|
|
3798
3882
|
* @param {function} _convFunc マッピング関数
|
|
3799
|
-
* @param {
|
|
3883
|
+
* @param {string} object.errCd エラーコード
|
|
3884
|
+
* @param {boolean} object.baseCopyFlg コピー配列の準備可否
|
|
3885
|
+
* @param {function} object.loopFunc パターン別に処理する個別関数
|
|
3800
3886
|
* @returns 最小パターン数
|
|
3801
3887
|
*/
|
|
3802
|
-
const newKeyMultiParam = (_key, _name, _convFunc, { errCd = ``, baseCopyFlg = false, loopFunc =
|
|
3888
|
+
const newKeyMultiParam = (_key, _name, _convFunc, { errCd = ``, baseCopyFlg = false, loopFunc = () => true } = {}) => {
|
|
3803
3889
|
let tmpMinPatterns = 1;
|
|
3804
3890
|
const keyheader = _name + _key;
|
|
3805
3891
|
const dfPtn = setIntVal(g_keyObj.dfPtnNum);
|
|
@@ -4083,7 +4169,7 @@ const setKeyDfVal = _ptnName => {
|
|
|
4083
4169
|
/**
|
|
4084
4170
|
* タイトル画面初期化
|
|
4085
4171
|
*/
|
|
4086
|
-
const titleInit =
|
|
4172
|
+
const titleInit = () => {
|
|
4087
4173
|
|
|
4088
4174
|
clearWindow(true);
|
|
4089
4175
|
g_currentPage = `title`;
|
|
@@ -4236,19 +4322,19 @@ const titleInit = _ => {
|
|
|
4236
4322
|
* @param {string} _url
|
|
4237
4323
|
*/
|
|
4238
4324
|
const createCreditBtn = (_id, _text, _url) =>
|
|
4239
|
-
createCss2Button(_id, _text,
|
|
4240
|
-
Object.assign(g_lblPosObj[_id], { siz: getLinkSiz(_text), whiteSpace: `normal`, resetFunc:
|
|
4325
|
+
createCss2Button(_id, _text, () => true,
|
|
4326
|
+
Object.assign(g_lblPosObj[_id], { siz: getLinkSiz(_text), whiteSpace: `normal`, resetFunc: () => openLink(_url) }), g_cssObj.button_Default);
|
|
4241
4327
|
|
|
4242
4328
|
// ボタン描画
|
|
4243
4329
|
multiAppend(divRoot,
|
|
4244
4330
|
|
|
4245
4331
|
// Click Here
|
|
4246
|
-
createCss2Button(`btnStart`, g_lblNameObj.clickHere,
|
|
4247
|
-
x: g_btnX(), w: g_btnWidth(), siz: g_limitObj.titleSiz, resetFunc:
|
|
4332
|
+
createCss2Button(`btnStart`, g_lblNameObj.clickHere, () => clearTimeout(g_timeoutEvtTitleId), {
|
|
4333
|
+
x: g_btnX(), w: g_btnWidth(), siz: g_limitObj.titleSiz, resetFunc: () => optionInit(),
|
|
4248
4334
|
}, g_cssObj.button_Start),
|
|
4249
4335
|
|
|
4250
4336
|
// Reset
|
|
4251
|
-
createCss2Button(`btnReset`, g_lblNameObj.dataReset,
|
|
4337
|
+
createCss2Button(`btnReset`, g_lblNameObj.dataReset, () => {
|
|
4252
4338
|
reloadFlg = false;
|
|
4253
4339
|
if (window.confirm(g_msgObj.dataResetConfirm)) {
|
|
4254
4340
|
g_localStorage = {
|
|
@@ -4260,7 +4346,7 @@ const titleInit = _ => {
|
|
|
4260
4346
|
reloadFlg = true;
|
|
4261
4347
|
}
|
|
4262
4348
|
}, Object.assign(g_lblPosObj.btnReset, {
|
|
4263
|
-
resetFunc:
|
|
4349
|
+
resetFunc: () => {
|
|
4264
4350
|
if (reloadFlg) {
|
|
4265
4351
|
location.reload();
|
|
4266
4352
|
}
|
|
@@ -4268,9 +4354,9 @@ const titleInit = _ => {
|
|
|
4268
4354
|
}), g_cssObj.button_Reset),
|
|
4269
4355
|
|
|
4270
4356
|
// ロケール切替
|
|
4271
|
-
createCss2Button(`btnReload`, g_localeObj.val,
|
|
4357
|
+
createCss2Button(`btnReload`, g_localeObj.val, () => true,
|
|
4272
4358
|
Object.assign(g_lblPosObj.btnReload, {
|
|
4273
|
-
resetFunc:
|
|
4359
|
+
resetFunc: () => {
|
|
4274
4360
|
g_localeObj.num = (++g_localeObj.num) % g_localeObj.list.length;
|
|
4275
4361
|
g_langStorage.locale = g_localeObj.list[g_localeObj.num];
|
|
4276
4362
|
localStorage.setItem(`danoni-locale`, JSON.stringify(g_langStorage));
|
|
@@ -4279,9 +4365,9 @@ const titleInit = _ => {
|
|
|
4279
4365
|
}), g_cssObj.button_Start),
|
|
4280
4366
|
|
|
4281
4367
|
// ヘルプ
|
|
4282
|
-
createCss2Button(`btnHelp`, `?`,
|
|
4368
|
+
createCss2Button(`btnHelp`, `?`, () => true,
|
|
4283
4369
|
Object.assign(g_lblPosObj.btnHelp, {
|
|
4284
|
-
resetFunc:
|
|
4370
|
+
resetFunc: () => openLink(g_lblNameObj.helpUrl),
|
|
4285
4371
|
}), g_cssObj.button_Setting),
|
|
4286
4372
|
|
|
4287
4373
|
// 製作者表示
|
|
@@ -4291,16 +4377,16 @@ const titleInit = _ => {
|
|
|
4291
4377
|
createCreditBtn(`lnkArtist`, `${g_lblNameObj.artist}: ${g_headerObj.artistName}`, g_headerObj.artistUrl),
|
|
4292
4378
|
|
|
4293
4379
|
// バージョン描画
|
|
4294
|
-
createCss2Button(`lnkVersion`, versionName,
|
|
4380
|
+
createCss2Button(`lnkVersion`, versionName, () => true,
|
|
4295
4381
|
Object.assign(g_lblPosObj.lnkVersion, {
|
|
4296
4382
|
siz: getFontSize(versionName, g_sWidth * 3 / 4 - 20, getBasicFont(), 12),
|
|
4297
|
-
resetFunc:
|
|
4383
|
+
resetFunc: () => openLink(`https://github.com/cwtickle/danoniplus`),
|
|
4298
4384
|
}), g_cssObj.button_Tweet),
|
|
4299
4385
|
|
|
4300
4386
|
// セキュリティリンク
|
|
4301
|
-
createCss2Button(`lnkComparison`, `🛡`,
|
|
4387
|
+
createCss2Button(`lnkComparison`, `🛡`, () => true,
|
|
4302
4388
|
Object.assign(g_lblPosObj.lnkComparison, {
|
|
4303
|
-
resetFunc:
|
|
4389
|
+
resetFunc: () => openLink(g_lblNameObj.securityUrl),
|
|
4304
4390
|
}), g_cssObj.button_Tweet),
|
|
4305
4391
|
);
|
|
4306
4392
|
|
|
@@ -4316,7 +4402,7 @@ const titleInit = _ => {
|
|
|
4316
4402
|
} else {
|
|
4317
4403
|
multiAppend(divRoot,
|
|
4318
4404
|
createDivCss2Label(`lblComment`, convCommentVal, g_lblPosObj.lblComment),
|
|
4319
|
-
createCss2Button(`btnComment`, g_lblNameObj.comment,
|
|
4405
|
+
createCss2Button(`btnComment`, g_lblNameObj.comment, () => {
|
|
4320
4406
|
const lblCommentDef = lblComment.style.display;
|
|
4321
4407
|
lblComment.style.display = (lblCommentDef === C_DIS_NONE ? C_DIS_INHERIT : C_DIS_NONE);
|
|
4322
4408
|
}, g_lblPosObj.btnComment, g_cssObj.button_Default),
|
|
@@ -4334,7 +4420,7 @@ const titleInit = _ => {
|
|
|
4334
4420
|
/**
|
|
4335
4421
|
* タイトルのモーション設定
|
|
4336
4422
|
*/
|
|
4337
|
-
const flowTitleTimeline =
|
|
4423
|
+
const flowTitleTimeline = () => {
|
|
4338
4424
|
|
|
4339
4425
|
// ユーザカスタムイベント(フレーム毎)
|
|
4340
4426
|
g_customJsObj.titleEnterFrame.forEach(func => func());
|
|
@@ -4353,10 +4439,10 @@ const titleInit = _ => {
|
|
|
4353
4439
|
g_timeoutEvtTitleId = setTimeout(flowTitleTimeline, 1000 / g_fps);
|
|
4354
4440
|
|
|
4355
4441
|
// キー操作イベント(デフォルト)
|
|
4356
|
-
setShortcutEvent(g_currentPage,
|
|
4442
|
+
setShortcutEvent(g_currentPage, () => true, { dfEvtFlg: true });
|
|
4357
4443
|
|
|
4358
|
-
document.oncontextmenu =
|
|
4359
|
-
divRoot.oncontextmenu =
|
|
4444
|
+
document.oncontextmenu = () => true;
|
|
4445
|
+
divRoot.oncontextmenu = () => false;
|
|
4360
4446
|
|
|
4361
4447
|
g_skinJsObj.title.forEach(func => func());
|
|
4362
4448
|
};
|
|
@@ -4364,7 +4450,8 @@ const titleInit = _ => {
|
|
|
4364
4450
|
/**
|
|
4365
4451
|
* 警告用ウィンドウ(汎用)を表示
|
|
4366
4452
|
* @param {string} _text
|
|
4367
|
-
* @param {
|
|
4453
|
+
* @param {boolean} object.resetFlg 警告リストをクリアして再作成
|
|
4454
|
+
* @param {boolean} object.backBtnUse Backボタンを付与
|
|
4368
4455
|
*/
|
|
4369
4456
|
const makeWarningWindow = (_text = ``, { resetFlg = false, backBtnUse = false } = {}) => {
|
|
4370
4457
|
const displayName = (g_currentPage === `initial` ? `title` : g_currentPage);
|
|
@@ -4381,8 +4468,8 @@ const makeWarningWindow = (_text = ``, { resetFlg = false, backBtnUse = false }
|
|
|
4381
4468
|
}
|
|
4382
4469
|
if (backBtnUse) {
|
|
4383
4470
|
// タイトルバック用ボタン
|
|
4384
|
-
divRoot.appendChild(createCss2Button(`btnBack`, g_lblNameObj.b_back,
|
|
4385
|
-
resetFunc:
|
|
4471
|
+
divRoot.appendChild(createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true, {
|
|
4472
|
+
resetFunc: () => titleInit(),
|
|
4386
4473
|
}, g_cssObj.button_Back));
|
|
4387
4474
|
}
|
|
4388
4475
|
};
|
|
@@ -4390,6 +4477,8 @@ const makeWarningWindow = (_text = ``, { resetFlg = false, backBtnUse = false }
|
|
|
4390
4477
|
/**
|
|
4391
4478
|
* お知らせウィンドウ(汎用)を表示
|
|
4392
4479
|
* @param {string} _text
|
|
4480
|
+
* @param {string} _animationName
|
|
4481
|
+
* @param {string} object._backColor
|
|
4393
4482
|
*/
|
|
4394
4483
|
const makeInfoWindow = (_text, _animationName = ``, { _backColor = `#ccccff` } = {}) => {
|
|
4395
4484
|
const lblWarning = setWindowStyle(`<p>${_text}</p>`, _backColor, `#000066`, C_ALIGN_CENTER);
|
|
@@ -4410,6 +4499,9 @@ const makeInfoWindow = (_text, _animationName = ``, { _backColor = `#ccccff` } =
|
|
|
4410
4499
|
* @param {string} _bkColor
|
|
4411
4500
|
* @param {string} _textColor
|
|
4412
4501
|
* @param {string} _align
|
|
4502
|
+
* @param {number} object._x
|
|
4503
|
+
* @param {number} object._y
|
|
4504
|
+
* @param {number} object._w
|
|
4413
4505
|
*/
|
|
4414
4506
|
const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT, { _x = g_btnX(), _y = 0, _w = g_btnWidth() } = {}) => {
|
|
4415
4507
|
|
|
@@ -4460,24 +4552,24 @@ const commonSettingBtn = _labelName => {
|
|
|
4460
4552
|
multiAppend(divRoot,
|
|
4461
4553
|
|
|
4462
4554
|
// タイトル画面へ戻る
|
|
4463
|
-
createCss2Button(`btnBack`, g_lblNameObj.b_back,
|
|
4555
|
+
createCss2Button(`btnBack`, g_lblNameObj.b_back, () => true,
|
|
4464
4556
|
Object.assign(g_lblPosObj.btnBack, {
|
|
4465
|
-
animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc:
|
|
4557
|
+
animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc: () => titleInit(),
|
|
4466
4558
|
}), g_cssObj.button_Back),
|
|
4467
4559
|
|
|
4468
4560
|
// キーコンフィグ画面へ移動
|
|
4469
|
-
createCss2Button(`btnKeyConfig`, g_lblNameObj.b_keyConfig,
|
|
4561
|
+
createCss2Button(`btnKeyConfig`, g_lblNameObj.b_keyConfig, () => true,
|
|
4470
4562
|
Object.assign(g_lblPosObj.btnKeyConfig, {
|
|
4471
|
-
animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc:
|
|
4563
|
+
animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc: () => keyConfigInit(`Main`),
|
|
4472
4564
|
}), g_cssObj.button_Setting),
|
|
4473
4565
|
|
|
4474
4566
|
// プレイ開始
|
|
4475
|
-
makePlayButton(
|
|
4567
|
+
makePlayButton(() => loadMusic()),
|
|
4476
4568
|
|
|
4477
4569
|
// Display設定へ移動
|
|
4478
|
-
createCss2Button(`btn${_labelName}`, `>`,
|
|
4570
|
+
createCss2Button(`btn${_labelName}`, `>`, () => true,
|
|
4479
4571
|
Object.assign(g_lblPosObj.btnSwitchSetting, {
|
|
4480
|
-
title: g_msgObj[`to${_labelName}`], resetFunc:
|
|
4572
|
+
title: g_msgObj[`to${_labelName}`], resetFunc: () => g_jumpSettingWindow[g_currentPage](),
|
|
4481
4573
|
}), g_cssObj.button_Mini),
|
|
4482
4574
|
|
|
4483
4575
|
// データセーブフラグの切替
|
|
@@ -4492,7 +4584,7 @@ const commonSettingBtn = _labelName => {
|
|
|
4492
4584
|
* PLAYボタンの作成
|
|
4493
4585
|
* @param {function} _func
|
|
4494
4586
|
*/
|
|
4495
|
-
const makePlayButton = _func => createCss2Button(`btnPlay`, g_lblNameObj.b_play,
|
|
4587
|
+
const makePlayButton = _func => createCss2Button(`btnPlay`, g_lblNameObj.b_play, () => true,
|
|
4496
4588
|
Object.assign(g_lblPosObj.btnPlay, {
|
|
4497
4589
|
animationName: (g_initialFlg ? `` : `smallToNormalY`), resetFunc: _func,
|
|
4498
4590
|
}), g_cssObj.button_Next);
|
|
@@ -4500,7 +4592,7 @@ const makePlayButton = _func => createCss2Button(`btnPlay`, g_lblNameObj.b_play,
|
|
|
4500
4592
|
/**
|
|
4501
4593
|
* 設定・オプション画面初期化
|
|
4502
4594
|
*/
|
|
4503
|
-
const optionInit =
|
|
4595
|
+
const optionInit = () => {
|
|
4504
4596
|
|
|
4505
4597
|
clearWindow(true);
|
|
4506
4598
|
const divRoot = document.getElementById(`divRoot`);
|
|
@@ -4521,8 +4613,8 @@ const optionInit = _ => {
|
|
|
4521
4613
|
commonSettingBtn(`Display`);
|
|
4522
4614
|
|
|
4523
4615
|
// キー操作イベント(デフォルト)
|
|
4524
|
-
setShortcutEvent(g_currentPage,
|
|
4525
|
-
document.oncontextmenu =
|
|
4616
|
+
setShortcutEvent(g_currentPage, () => true, { dfEvtFlg: true });
|
|
4617
|
+
document.oncontextmenu = () => true;
|
|
4526
4618
|
g_initialFlg = true;
|
|
4527
4619
|
|
|
4528
4620
|
g_skinJsObj.option.forEach(func => func());
|
|
@@ -4568,12 +4660,12 @@ const inputSliderAppearance = (_slider, _link) => {
|
|
|
4568
4660
|
/**
|
|
4569
4661
|
* 譜面変更セレクターの削除
|
|
4570
4662
|
*/
|
|
4571
|
-
const resetDifWindow =
|
|
4663
|
+
const resetDifWindow = () => {
|
|
4572
4664
|
if (document.getElementById(`difList`) !== null) {
|
|
4573
4665
|
deleteChildspriteAll(`difList`);
|
|
4574
4666
|
[`difList`, `difCover`, `btnDifU`, `btnDifD`].forEach(obj => document.getElementById(obj).remove());
|
|
4575
4667
|
g_currentPage = `option`;
|
|
4576
|
-
setShortcutEvent(g_currentPage,
|
|
4668
|
+
setShortcutEvent(g_currentPage, () => true, { displayFlg: false, dfEvtFlg: true });
|
|
4577
4669
|
}
|
|
4578
4670
|
};
|
|
4579
4671
|
|
|
@@ -4613,7 +4705,7 @@ const makeDifList = (_difList, _targetKey = ``) => {
|
|
|
4613
4705
|
if (g_headerObj.makerView) {
|
|
4614
4706
|
text += ` (${g_headerObj.creatorNames[j]})`;
|
|
4615
4707
|
}
|
|
4616
|
-
_difList.appendChild(makeDifLblCssButton(`dif${k}`, text, k,
|
|
4708
|
+
_difList.appendChild(makeDifLblCssButton(`dif${k}`, text, k, () => nextDifficulty(j - g_stateObj.scoreId),
|
|
4617
4709
|
{ btnStyle: (j === g_stateObj.scoreId ? `Setting` : `Default`) }));
|
|
4618
4710
|
if (j === g_stateObj.scoreId) {
|
|
4619
4711
|
pos = k + 6.5 * (g_sHeight - 239) / 261;
|
|
@@ -4640,7 +4732,7 @@ const makeDifList = (_difList, _targetKey = ``) => {
|
|
|
4640
4732
|
*/
|
|
4641
4733
|
const makeDifBtn = (_scrollNum = 1) => {
|
|
4642
4734
|
const dir = _scrollNum === 1 ? `D` : `U`;
|
|
4643
|
-
return createCss2Button(`btnDif${dir}`, g_settingBtnObj.chara[dir],
|
|
4735
|
+
return createCss2Button(`btnDif${dir}`, g_settingBtnObj.chara[dir], () => {
|
|
4644
4736
|
do {
|
|
4645
4737
|
g_stateObj.scoreId = getNextDifficulty(g_stateObj.scoreId, _scrollNum);
|
|
4646
4738
|
} while (g_stateObj.filterKeys !== `` && g_stateObj.filterKeys !== g_headerObj.keyLabels[g_stateObj.scoreId]);
|
|
@@ -4669,14 +4761,14 @@ const createDifWindow = (_key = ``) => {
|
|
|
4669
4761
|
|
|
4670
4762
|
// ランダム選択
|
|
4671
4763
|
difCover.appendChild(
|
|
4672
|
-
makeDifLblCssButton(`difRandom`, `RANDOM`, 0,
|
|
4764
|
+
makeDifLblCssButton(`difRandom`, `RANDOM`, 0, () => {
|
|
4673
4765
|
nextDifficulty(Math.floor(Math.random() * g_headerObj.keyLabels.length));
|
|
4674
4766
|
}, { w: g_limitObj.difCoverWidth })
|
|
4675
4767
|
);
|
|
4676
4768
|
|
|
4677
4769
|
// 全リスト
|
|
4678
4770
|
difCover.appendChild(
|
|
4679
|
-
makeDifLblCssButton(`keyFilter`, `ALL`, 1.9,
|
|
4771
|
+
makeDifLblCssButton(`keyFilter`, `ALL`, 1.9, () => {
|
|
4680
4772
|
resetDifWindow();
|
|
4681
4773
|
g_stateObj.filterKeys = ``;
|
|
4682
4774
|
createDifWindow();
|
|
@@ -4687,7 +4779,7 @@ const createDifWindow = (_key = ``) => {
|
|
|
4687
4779
|
let pos = 0;
|
|
4688
4780
|
g_headerObj.viewKeyLists.forEach((targetKey, m) => {
|
|
4689
4781
|
difFilter.appendChild(
|
|
4690
|
-
makeDifLblCssButton(`keyFilter${m}`, `${getKeyName(targetKey)} ${getStgDetailName(getKeyUnitName(targetKey))}`, m,
|
|
4782
|
+
makeDifLblCssButton(`keyFilter${m}`, `${getKeyName(targetKey)} ${getStgDetailName(getKeyUnitName(targetKey))}`, m, () => {
|
|
4691
4783
|
resetDifWindow();
|
|
4692
4784
|
g_stateObj.filterKeys = targetKey;
|
|
4693
4785
|
createDifWindow(targetKey);
|
|
@@ -4702,6 +4794,10 @@ const createDifWindow = (_key = ``) => {
|
|
|
4702
4794
|
multiAppend(optionsprite, makeDifBtn(-1), makeDifBtn());
|
|
4703
4795
|
};
|
|
4704
4796
|
|
|
4797
|
+
/**
|
|
4798
|
+
* 譜面変更ボタンを押したときの処理
|
|
4799
|
+
* @param {number} _num
|
|
4800
|
+
*/
|
|
4705
4801
|
const changeDifficulty = (_num = 1) => {
|
|
4706
4802
|
if (g_headerObj.difSelectorUse) {
|
|
4707
4803
|
g_stateObj.filterKeys = ``;
|
|
@@ -4883,7 +4979,13 @@ const updateScoreDetailLabel = (_name, _label, _value, _pos = 0, _labelname = _l
|
|
|
4883
4979
|
/**
|
|
4884
4980
|
* グラフの縦軸を描画
|
|
4885
4981
|
* @param {object} _context
|
|
4886
|
-
* @param {number}
|
|
4982
|
+
* @param {number} object._fixed y座標)目盛表記する小数桁数
|
|
4983
|
+
* @param {string} object._mark y座標)目盛の単位
|
|
4984
|
+
* @param {number} object._resolution y座標)明細分割数
|
|
4985
|
+
* @param {number} object._a
|
|
4986
|
+
* @param {number} object._b
|
|
4987
|
+
* @param {number} object._min y座標)目盛の下限値
|
|
4988
|
+
* @param {number} object._max y座標)目盛の上限値
|
|
4887
4989
|
*/
|
|
4888
4990
|
const drawBaseLine = (_context, { _fixed = 2, _mark = ``, _resolution = 10, _a = -90, _b = 105, _min = 0, _max = 2 } = {}) => {
|
|
4889
4991
|
_context.clearRect(0, 0, g_limitObj.graphWidth, g_limitObj.graphHeight);
|
|
@@ -4904,7 +5006,10 @@ const drawBaseLine = (_context, { _fixed = 2, _mark = ``, _resolution = 10, _a =
|
|
|
4904
5006
|
* @param {object} _context
|
|
4905
5007
|
* @param {number} _y
|
|
4906
5008
|
* @param {string} _lineType
|
|
4907
|
-
* @param {number} _fixed
|
|
5009
|
+
* @param {number} object._fixed y座標)目盛表記する小数桁数
|
|
5010
|
+
* @param {string} object._mark y座標)目盛の単位
|
|
5011
|
+
* @param {number} object._a
|
|
5012
|
+
* @param {number} object._b
|
|
4908
5013
|
*/
|
|
4909
5014
|
const drawLine = (_context, _y, _lineType, { _fixed, _mark, _a, _b } = {}) => {
|
|
4910
5015
|
const lineY = (_y - 1) * _a + _b;
|
|
@@ -4977,7 +5082,7 @@ const makeDifInfoLabels = _scoreId => {
|
|
|
4977
5082
|
makeDifInfoLabel(`dataArrowInfo`, ``, g_lblPosObj.dataArrowInfo),
|
|
4978
5083
|
makeDifInfoLabel(`lblArrowInfo2`, ``, g_lblPosObj.lblArrowInfo2),
|
|
4979
5084
|
makeDifInfoLabel(`dataArrowInfo2`, ``, g_lblPosObj.dataArrowInfo2),
|
|
4980
|
-
makeDifLblCssButton(`lnkDifInfo`, g_lblNameObj.s_print, 8,
|
|
5085
|
+
makeDifLblCssButton(`lnkDifInfo`, g_lblNameObj.s_print, 8, () => {
|
|
4981
5086
|
copyTextToClipboard(
|
|
4982
5087
|
`****** ${g_lblNameObj.s_printTitle} [${g_version}] ******\r\n\r\n`
|
|
4983
5088
|
+ `\t${g_lblNameObj.s_printHeader}\r\n\r\n${printData}`, g_msgInfoObj.I_0003
|
|
@@ -5162,13 +5267,13 @@ const makeHighScore = _scoreId => {
|
|
|
5162
5267
|
}
|
|
5163
5268
|
const resultText = `${unEscapeHtml(tweetResultTmp)}`;
|
|
5164
5269
|
multiAppend(detailHighScore,
|
|
5165
|
-
makeDifLblCssButton(`lnkResetHighScore`, g_lblNameObj.s_resetResult, 7,
|
|
5270
|
+
makeDifLblCssButton(`lnkResetHighScore`, g_lblNameObj.s_resetResult, 7, () => {
|
|
5166
5271
|
if (window.confirm(g_msgObj.highscResetConfirm)) {
|
|
5167
5272
|
delete g_localStorage.highscores[scoreName];
|
|
5168
5273
|
makeHighScore(_scoreId);
|
|
5169
5274
|
}
|
|
5170
5275
|
}, Object.assign({ btnStyle: `Reset` }, g_lblPosObj.lnkHighScore)),
|
|
5171
|
-
makeDifLblCssButton(`lnkHighScore`, g_lblNameObj.s_result, 8,
|
|
5276
|
+
makeDifLblCssButton(`lnkHighScore`, g_lblNameObj.s_result, 8, () => {
|
|
5172
5277
|
copyTextToClipboard(keyIsShift() ? resultCommon : resultText, g_msgInfoObj.I_0001);
|
|
5173
5278
|
}, g_lblPosObj.lnkHighScore),
|
|
5174
5279
|
);
|
|
@@ -5183,6 +5288,8 @@ const makeHighScore = _scoreId => {
|
|
|
5183
5288
|
* この関数を実行後、このフラグはONに戻るようになっている
|
|
5184
5289
|
* - [キーコン]->[初期化]->[名称設定]の順に配置する。
|
|
5185
5290
|
* 初期化処理にてキー数関連の設定を行っているため、この順序で無いとデータが正しく格納されない
|
|
5291
|
+
*
|
|
5292
|
+
* @param {boolean} _initFlg
|
|
5186
5293
|
*/
|
|
5187
5294
|
const setDifficulty = (_initFlg) => {
|
|
5188
5295
|
|
|
@@ -5378,15 +5485,15 @@ const createOptionWindow = _sprite => {
|
|
|
5378
5485
|
// 縦位置: 0
|
|
5379
5486
|
spriteList.difficulty.appendChild(createLblSetting(`Difficulty`, -5));
|
|
5380
5487
|
|
|
5381
|
-
const lnkDifficulty = makeSettingLblCssButton(`lnkDifficulty`, ``, 0,
|
|
5382
|
-
y: -10, h: g_limitObj.setLblHeight + 10, cxtFunc:
|
|
5488
|
+
const lnkDifficulty = makeSettingLblCssButton(`lnkDifficulty`, ``, 0, () => changeDifficulty(), {
|
|
5489
|
+
y: -10, h: g_limitObj.setLblHeight + 10, cxtFunc: () => changeDifficulty(-1),
|
|
5383
5490
|
});
|
|
5384
5491
|
|
|
5385
5492
|
// 譜面選択ボタン(メイン、右回し、左回し)
|
|
5386
5493
|
multiAppend(spriteList.difficulty,
|
|
5387
5494
|
lnkDifficulty,
|
|
5388
|
-
makeMiniCssButton(`lnkDifficulty`, `R`, 0,
|
|
5389
|
-
makeMiniCssButton(`lnkDifficulty`, `L`, 0,
|
|
5495
|
+
makeMiniCssButton(`lnkDifficulty`, `R`, 0, () => nextDifficulty(), { dy: -10, dh: 10 }),
|
|
5496
|
+
makeMiniCssButton(`lnkDifficulty`, `L`, 0, () => nextDifficulty(-1), { dy: -10, dh: 10 }),
|
|
5390
5497
|
);
|
|
5391
5498
|
createScText(spriteList.difficulty, `Difficulty`);
|
|
5392
5499
|
if (g_headerObj.difSelectorUse) {
|
|
@@ -5440,12 +5547,12 @@ const createOptionWindow = _sprite => {
|
|
|
5440
5547
|
|
|
5441
5548
|
if (g_settings.scoreDetails.length > 0) {
|
|
5442
5549
|
multiAppend(spriteList.speed,
|
|
5443
|
-
createCss2Button(`btnGraphB`, ``,
|
|
5444
|
-
x: -25, y: -60, w: 0, h: 0, opacity: 0, resetFunc:
|
|
5550
|
+
createCss2Button(`btnGraphB`, ``, () => true, {
|
|
5551
|
+
x: -25, y: -60, w: 0, h: 0, opacity: 0, resetFunc: () => setScoreDetail(true),
|
|
5445
5552
|
}, g_cssObj.button_Mini),
|
|
5446
|
-
createCss2Button(`btnGraph`, `i`,
|
|
5553
|
+
createCss2Button(`btnGraph`, `i`, () => true, {
|
|
5447
5554
|
x: -25, y: -60, w: 30, h: 30, siz: g_limitObj.jdgCharaSiz, title: g_msgObj.graph,
|
|
5448
|
-
resetFunc:
|
|
5555
|
+
resetFunc: () => setScoreDetail(), cxtFunc: () => setScoreDetail(),
|
|
5449
5556
|
}, g_cssObj.button_Mini)
|
|
5450
5557
|
);
|
|
5451
5558
|
g_stateObj.scoreDetailViewFlg = false;
|
|
@@ -5483,7 +5590,7 @@ const createOptionWindow = _sprite => {
|
|
|
5483
5590
|
);
|
|
5484
5591
|
g_settings.scoreDetails.forEach((sd, j) => {
|
|
5485
5592
|
scoreDetail.appendChild(
|
|
5486
|
-
makeDifLblCssButton(`lnk${sd}G`, getStgDetailName(sd), j,
|
|
5593
|
+
makeDifLblCssButton(`lnk${sd}G`, getStgDetailName(sd), j, () => changeScoreDetail(j), {
|
|
5487
5594
|
w: g_limitObj.difCoverWidth, h: 20, title: g_msgObj[`s_${sd}`],
|
|
5488
5595
|
btnStyle: (g_stateObj.scoreDetail === sd ? `Setting` : `Default`),
|
|
5489
5596
|
})
|
|
@@ -5494,6 +5601,7 @@ const createOptionWindow = _sprite => {
|
|
|
5494
5601
|
|
|
5495
5602
|
/**
|
|
5496
5603
|
* 譜面明細表示/非表示ボタンの処理
|
|
5604
|
+
* @param {boolean} _resetFlg
|
|
5497
5605
|
*/
|
|
5498
5606
|
const setScoreDetail = (_resetFlg = false) => {
|
|
5499
5607
|
if (g_currentPage === `difSelector`) {
|
|
@@ -5524,7 +5632,7 @@ const createOptionWindow = _sprite => {
|
|
|
5524
5632
|
// リバース (Reverse) / スクロール (Scroll)
|
|
5525
5633
|
// 縦位置: 4
|
|
5526
5634
|
createGeneralSetting(spriteList.reverse, `reverse`, {
|
|
5527
|
-
addRFunc:
|
|
5635
|
+
addRFunc: () => {
|
|
5528
5636
|
if (g_headerObj.scrollUse && g_settings.scrolls.length > 1) {
|
|
5529
5637
|
setReverseView(document.getElementById(`btnReverse`));
|
|
5530
5638
|
}
|
|
@@ -5551,14 +5659,14 @@ const createOptionWindow = _sprite => {
|
|
|
5551
5659
|
// ミラー・ランダム (Shuffle)
|
|
5552
5660
|
// 縦位置: 5.5
|
|
5553
5661
|
createGeneralSetting(spriteList.shuffle, `shuffle`, g_settings.scoreDetails.length > 0 ? {
|
|
5554
|
-
addRFunc:
|
|
5662
|
+
addRFunc: () => makeHighScore(g_stateObj.scoreId),
|
|
5555
5663
|
} : {});
|
|
5556
5664
|
|
|
5557
5665
|
// ---------------------------------------------------
|
|
5558
5666
|
// 鑑賞モード設定 (AutoPlay)
|
|
5559
5667
|
// 縦位置: 6.5
|
|
5560
5668
|
createGeneralSetting(spriteList.autoPlay, `autoPlay`, g_settings.scoreDetails.length > 0 ? {
|
|
5561
|
-
addRFunc:
|
|
5669
|
+
addRFunc: () => makeHighScore(g_stateObj.scoreId),
|
|
5562
5670
|
} : {});
|
|
5563
5671
|
|
|
5564
5672
|
// ---------------------------------------------------
|
|
@@ -5571,9 +5679,9 @@ const createOptionWindow = _sprite => {
|
|
|
5571
5679
|
|
|
5572
5680
|
if (g_headerObj.gaugeUse) {
|
|
5573
5681
|
multiAppend(spriteList.gauge,
|
|
5574
|
-
makeSettingLblCssButton(`lnkGauge`, ``, 0,
|
|
5575
|
-
makeMiniCssButton(`lnkGauge`, `R`, 0,
|
|
5576
|
-
makeMiniCssButton(`lnkGauge`, `L`, 0,
|
|
5682
|
+
makeSettingLblCssButton(`lnkGauge`, ``, 0, () => setGauge(1), { cxtFunc: () => setGauge(-1) }),
|
|
5683
|
+
makeMiniCssButton(`lnkGauge`, `R`, 0, () => setGauge(1)),
|
|
5684
|
+
makeMiniCssButton(`lnkGauge`, `L`, 0, () => setGauge(-1)),
|
|
5577
5685
|
);
|
|
5578
5686
|
createScText(spriteList.gauge, `Gauge`);
|
|
5579
5687
|
} else {
|
|
@@ -5602,10 +5710,10 @@ const createOptionWindow = _sprite => {
|
|
|
5602
5710
|
// 縦位置: 10.5 短縮ショートカットあり
|
|
5603
5711
|
createGeneralSetting(spriteList.adjustment, `adjustment`, {
|
|
5604
5712
|
skipTerms: g_settings.adjustmentTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_adjustment, roundNum: 5,
|
|
5605
|
-
unitName: g_lblNameObj.frame, addRFunc:
|
|
5713
|
+
unitName: g_lblNameObj.frame, addRFunc: () => viewAdjustment(),
|
|
5606
5714
|
});
|
|
5607
5715
|
|
|
5608
|
-
const viewAdjustment =
|
|
5716
|
+
const viewAdjustment = () => {
|
|
5609
5717
|
if (g_headerObj.playbackRate !== 1) {
|
|
5610
5718
|
const adjustmentVal = isLocalMusicFile(g_stateObj.scoreId) ?
|
|
5611
5719
|
Math.round(g_stateObj.adjustment / g_headerObj.playbackRate) :
|
|
@@ -5636,8 +5744,8 @@ const createOptionWindow = _sprite => {
|
|
|
5636
5744
|
multiAppend(spriteList.fadein,
|
|
5637
5745
|
|
|
5638
5746
|
// 右回し・左回しボタン
|
|
5639
|
-
makeMiniCssButton(`lnkFadein`, `R`, 0,
|
|
5640
|
-
makeMiniCssButton(`lnkFadein`, `L`, 0,
|
|
5747
|
+
makeMiniCssButton(`lnkFadein`, `R`, 0, () => setFadein(1)),
|
|
5748
|
+
makeMiniCssButton(`lnkFadein`, `L`, 0, () => setFadein(-1)),
|
|
5641
5749
|
|
|
5642
5750
|
// フェードインのスライダー処理
|
|
5643
5751
|
createDivCss2Label(`lblFadeinBar`, `<input id="fadeinSlider" type="range" value="${g_stateObj.fadein}" min="0" max="99" step="1">`,
|
|
@@ -5646,7 +5754,7 @@ const createOptionWindow = _sprite => {
|
|
|
5646
5754
|
);
|
|
5647
5755
|
|
|
5648
5756
|
const fadeinSlider = document.getElementById(`fadeinSlider`);
|
|
5649
|
-
fadeinSlider.addEventListener(`input`,
|
|
5757
|
+
fadeinSlider.addEventListener(`input`, () =>
|
|
5650
5758
|
g_stateObj.fadein = inputSlider(fadeinSlider, lnkFadein), false);
|
|
5651
5759
|
|
|
5652
5760
|
// ---------------------------------------------------
|
|
@@ -5662,17 +5770,26 @@ const createOptionWindow = _sprite => {
|
|
|
5662
5770
|
|
|
5663
5771
|
// 設定画面の一通りのオブジェクトを作成後に譜面・速度・ゲージ設定をまとめて行う
|
|
5664
5772
|
setDifficulty(false);
|
|
5665
|
-
optionsprite.oncontextmenu =
|
|
5773
|
+
optionsprite.oncontextmenu = () => false;
|
|
5666
5774
|
};
|
|
5667
5775
|
|
|
5668
5776
|
/**
|
|
5669
5777
|
* 汎用設定
|
|
5670
5778
|
* @param {object} _obj
|
|
5671
5779
|
* @param {string} _settingName
|
|
5672
|
-
* @param {
|
|
5780
|
+
* @param {string} object.unitName 設定名の単位
|
|
5781
|
+
* @param {array} object.skipTerms ボタンの設定スキップ間隔(デフォルト:[1(外側), 1(内側), 1(最内側)])
|
|
5782
|
+
* @param {boolean} object.hiddenBtn 隠しボタン(ショートカットキーのみ)の利用有無
|
|
5783
|
+
* @param {function} object.addRFunc 右側のボタンを押したときの追加処理
|
|
5784
|
+
* @param {function} object.addLFunc 左側のボタンを押したときの追加処理
|
|
5785
|
+
* @param {string} object.settingLabel 設定名
|
|
5786
|
+
* @param {string} object.displayName 画面名
|
|
5787
|
+
* @param {string} object.scLabel ショートカットキーの表示名
|
|
5788
|
+
* @param {number} object.roundNum 設定スキップ間隔の丸め基準数
|
|
5789
|
+
* @param {number} object.adjY 設定ボタンのY座標位置
|
|
5673
5790
|
*/
|
|
5674
5791
|
const createGeneralSetting = (_obj, _settingName, { unitName = ``,
|
|
5675
|
-
skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc =
|
|
5792
|
+
skipTerms = fillArray(3, 1), hiddenBtn = false, addRFunc = () => { }, addLFunc = addRFunc,
|
|
5676
5793
|
settingLabel = _settingName, displayName = g_currentPage, scLabel = ``, roundNum = 0, adjY = 0 } = {}) => {
|
|
5677
5794
|
|
|
5678
5795
|
const settingUpper = toCapitalize(_settingName);
|
|
@@ -5684,39 +5801,39 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
|
|
|
5684
5801
|
|
|
5685
5802
|
multiAppend(_obj,
|
|
5686
5803
|
makeSettingLblCssButton(linkId, `${initName}${g_localStorage[_settingName] === g_stateObj[_settingName] ? ' *' : ''}`, 0,
|
|
5687
|
-
|
|
5688
|
-
setSetting(skipTerms[1], _settingName, unitName, roundNum, { func:
|
|
5804
|
+
() => {
|
|
5805
|
+
setSetting(skipTerms[1], _settingName, unitName, roundNum, { func: () => addRFunc() });
|
|
5689
5806
|
}, {
|
|
5690
|
-
cxtFunc:
|
|
5691
|
-
setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func:
|
|
5807
|
+
cxtFunc: () => {
|
|
5808
|
+
setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func: () => addLFunc() });
|
|
5692
5809
|
}
|
|
5693
5810
|
}),
|
|
5694
5811
|
|
|
5695
5812
|
// 右回し・左回しボタン(外側)
|
|
5696
|
-
makeMiniCssButton(linkId, `R`, 0,
|
|
5697
|
-
setSetting(skipTerms[0], _settingName, unitName, roundNum, { func:
|
|
5698
|
-
makeMiniCssButton(linkId, `L`, 0,
|
|
5699
|
-
setSetting(skipTerms[0] * (-1), _settingName, unitName, roundNum, { func:
|
|
5813
|
+
makeMiniCssButton(linkId, `R`, 0, () =>
|
|
5814
|
+
setSetting(skipTerms[0], _settingName, unitName, roundNum, { func: () => addRFunc() })),
|
|
5815
|
+
makeMiniCssButton(linkId, `L`, 0, () =>
|
|
5816
|
+
setSetting(skipTerms[0] * (-1), _settingName, unitName, roundNum, { func: () => addLFunc() })),
|
|
5700
5817
|
);
|
|
5701
5818
|
|
|
5702
5819
|
// 右回し・左回しボタン(内側)
|
|
5703
5820
|
if (skipTerms[1] > 1) {
|
|
5704
5821
|
multiAppend(_obj,
|
|
5705
|
-
makeMiniCssButton(linkId, `RR`, 0,
|
|
5706
|
-
setSetting(skipTerms[1], _settingName, unitName, roundNum, { func:
|
|
5707
|
-
makeMiniCssButton(linkId, `LL`, 0,
|
|
5708
|
-
setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func:
|
|
5822
|
+
makeMiniCssButton(linkId, `RR`, 0, () =>
|
|
5823
|
+
setSetting(skipTerms[1], _settingName, unitName, roundNum, { func: () => addRFunc() })),
|
|
5824
|
+
makeMiniCssButton(linkId, `LL`, 0, () =>
|
|
5825
|
+
setSetting(skipTerms[1] * (-1), _settingName, unitName, roundNum, { func: () => addLFunc() })),
|
|
5709
5826
|
);
|
|
5710
5827
|
}
|
|
5711
5828
|
|
|
5712
5829
|
// 右回し・左回しボタン(最内側)
|
|
5713
5830
|
if (skipTerms[2] > 1) {
|
|
5714
5831
|
multiAppend(_obj,
|
|
5715
|
-
makeMiniCssButton(linkId, `RRR`, 0,
|
|
5716
|
-
setSetting(skipTerms[2], _settingName, unitName, roundNum, { func:
|
|
5832
|
+
makeMiniCssButton(linkId, `RRR`, 0, () =>
|
|
5833
|
+
setSetting(skipTerms[2], _settingName, unitName, roundNum, { func: () => addRFunc() })
|
|
5717
5834
|
, { dw: -g_limitObj.setMiniWidth / 2 }),
|
|
5718
|
-
makeMiniCssButton(linkId, `LLL`, 0,
|
|
5719
|
-
setSetting(skipTerms[2] * (-1), _settingName, unitName, roundNum, { func:
|
|
5835
|
+
makeMiniCssButton(linkId, `LLL`, 0, () =>
|
|
5836
|
+
setSetting(skipTerms[2] * (-1), _settingName, unitName, roundNum, { func: () => addLFunc() })
|
|
5720
5837
|
, { dw: -g_limitObj.setMiniWidth / 2 }),
|
|
5721
5838
|
);
|
|
5722
5839
|
}
|
|
@@ -5724,8 +5841,8 @@ const createGeneralSetting = (_obj, _settingName, { unitName = ``,
|
|
|
5724
5841
|
// 右回し・左回しボタン(不可視)
|
|
5725
5842
|
if (hiddenBtn) {
|
|
5726
5843
|
multiAppend(_obj,
|
|
5727
|
-
makeMiniCssButton(linkId, `HR`, 0,
|
|
5728
|
-
makeMiniCssButton(linkId, `HL`, 0,
|
|
5844
|
+
makeMiniCssButton(linkId, `HR`, 0, () => setSetting(1, _settingName, unitName, roundNum, { func: () => addRFunc() }), { visibility: `hidden` }),
|
|
5845
|
+
makeMiniCssButton(linkId, `HL`, 0, () => setSetting(-1, _settingName, unitName, roundNum, { func: () => addLFunc() }), { visibility: `hidden` }),
|
|
5729
5846
|
);
|
|
5730
5847
|
}
|
|
5731
5848
|
|
|
@@ -5765,10 +5882,11 @@ const getStgDetailName = _name => {
|
|
|
5765
5882
|
* 設定メイン・汎用
|
|
5766
5883
|
* @param {number} _scrollNum
|
|
5767
5884
|
* @param {string} _settingName
|
|
5768
|
-
* @param {string} _unitName
|
|
5769
|
-
* @param {number} _roundNum
|
|
5885
|
+
* @param {string} _unitName 設定の単位名
|
|
5886
|
+
* @param {number} _roundNum 設定スキップ間隔の丸め基準数
|
|
5887
|
+
* @param {function} object.func 設定ボタンを押した後の追加処理
|
|
5770
5888
|
*/
|
|
5771
|
-
const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { func =
|
|
5889
|
+
const setSetting = (_scrollNum, _settingName, _unitName = ``, _roundNum = 0, { func = () => true } = {}) => {
|
|
5772
5890
|
let settingNum = g_settings[`${_settingName}Num`];
|
|
5773
5891
|
const settingList = g_settings[`${_settingName}s`];
|
|
5774
5892
|
const settingMax = settingList.length - 1;
|
|
@@ -5820,7 +5938,7 @@ const getKeyReverse = (_localStorage, _extraKeyName = ``) => {
|
|
|
5820
5938
|
/**
|
|
5821
5939
|
* リバースのデフォルト化処理
|
|
5822
5940
|
*/
|
|
5823
|
-
const setReverseDefault =
|
|
5941
|
+
const setReverseDefault = () => {
|
|
5824
5942
|
g_stateObj.reverse = C_FLG_OFF;
|
|
5825
5943
|
g_settings.reverseNum = 0;
|
|
5826
5944
|
};
|
|
@@ -5847,13 +5965,16 @@ const setReverseView = _btn => {
|
|
|
5847
5965
|
/**
|
|
5848
5966
|
* ゲージ設定メイン
|
|
5849
5967
|
* @param {number} _scrollNum
|
|
5968
|
+
* @param {boolean} _gaugeInitFlg
|
|
5850
5969
|
*/
|
|
5851
5970
|
const setGauge = (_scrollNum, _gaugeInitFlg = false) => {
|
|
5852
5971
|
|
|
5853
5972
|
/**
|
|
5854
5973
|
* ゲージ詳細一括変更
|
|
5855
5974
|
* @param {object} _baseObj
|
|
5856
|
-
* @param {
|
|
5975
|
+
* @param {number} object.magInit
|
|
5976
|
+
* @param {number} object.magRcv
|
|
5977
|
+
* @param {number} object.magDmg
|
|
5857
5978
|
*/
|
|
5858
5979
|
const setLifeCategory = (_baseObj, { _magInit = 1, _magRcv = 1, _magDmg = 1 } = {}) => {
|
|
5859
5980
|
if (hasVal(_baseObj.lifeInits[g_stateObj.scoreId])) {
|
|
@@ -6042,6 +6163,7 @@ const getAccuracy = (_border, _rcv, _dmg, _init, _allCnt) => {
|
|
|
6042
6163
|
|
|
6043
6164
|
/**
|
|
6044
6165
|
* 空押し判定の設定
|
|
6166
|
+
* @param {object} _btn
|
|
6045
6167
|
*/
|
|
6046
6168
|
const setExcessive = _btn => {
|
|
6047
6169
|
g_settings.excessiveNum = (g_settings.excessiveNum + 1) % 2;
|
|
@@ -6064,8 +6186,8 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
|
|
|
6064
6186
|
const prevPtn = g_keyObj.currentPtn;
|
|
6065
6187
|
g_keyObj.currentPtn = -1;
|
|
6066
6188
|
const copyPtn = `${g_keyObj.currentKey}_-1`;
|
|
6067
|
-
g_keyObj[`keyCtrl${copyPtn}`] = [...Array(baseKeyNum)].map(
|
|
6068
|
-
g_keyObj[`keyCtrl${copyPtn}d`] = [...Array(baseKeyNum)].map(
|
|
6189
|
+
g_keyObj[`keyCtrl${copyPtn}`] = [...Array(baseKeyNum)].map(() => []);
|
|
6190
|
+
g_keyObj[`keyCtrl${copyPtn}d`] = [...Array(baseKeyNum)].map(() => []);
|
|
6069
6191
|
|
|
6070
6192
|
for (let j = 0; j < baseKeyNum; j++) {
|
|
6071
6193
|
for (let k = 0; k < g_keyObj[`keyCtrl${basePtn}`][j].length; k++) {
|
|
@@ -6097,17 +6219,23 @@ const getKeyCtrl = (_localStorage, _extraKeyName = ``) => {
|
|
|
6097
6219
|
* @param {string} _name 初期設定文字
|
|
6098
6220
|
* @param {number} _heightPos 上からの配置順
|
|
6099
6221
|
* @param {function} _func 通常ボタン処理
|
|
6100
|
-
* @param {
|
|
6222
|
+
* @param {number} object.x
|
|
6223
|
+
* @param {number} object.y
|
|
6224
|
+
* @param {number} object.w
|
|
6225
|
+
* @param {number} object.h
|
|
6226
|
+
* @param {number} object.siz
|
|
6227
|
+
* @param {function} object.cxtFunc 右クリック時の処理
|
|
6228
|
+
* @param {...any} object.rest
|
|
6101
6229
|
* @param {...any} _classes 追加するクラス
|
|
6102
6230
|
*/
|
|
6103
|
-
const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, siz, cxtFunc =
|
|
6231
|
+
const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, siz, cxtFunc = () => true, ...rest } = {}, ..._classes) => {
|
|
6104
6232
|
const tmpObj = {
|
|
6105
6233
|
x: x ?? g_limitObj.setLblLeft,
|
|
6106
6234
|
y: y ?? g_limitObj.setLblHeight * _heightPos,
|
|
6107
6235
|
w: w ?? g_limitObj.setLblWidth,
|
|
6108
6236
|
h: h ?? g_limitObj.setLblHeight,
|
|
6109
6237
|
siz: siz ?? g_limitObj.setLblSiz,
|
|
6110
|
-
cxtFunc: cxtFunc ?? (
|
|
6238
|
+
cxtFunc: cxtFunc ?? (() => true),
|
|
6111
6239
|
};
|
|
6112
6240
|
return createCss2Button(_id, _name, _func, { ...tmpObj, ...rest }, g_cssObj.button_Default, ..._classes);
|
|
6113
6241
|
};
|
|
@@ -6118,6 +6246,10 @@ const makeSettingLblCssButton = (_id, _name, _heightPos, _func, { x, y, w, h, si
|
|
|
6118
6246
|
* @param {string} _name 初期設定文字
|
|
6119
6247
|
* @param {number} _heightPos 上からの配置順
|
|
6120
6248
|
* @param {function} _func
|
|
6249
|
+
* @param {number} object.x
|
|
6250
|
+
* @param {number} object.w
|
|
6251
|
+
* @param {number} object.h
|
|
6252
|
+
* @param {string} object.btnStyle
|
|
6121
6253
|
*/
|
|
6122
6254
|
const makeDifLblCssButton = (_id, _name, _heightPos, _func,
|
|
6123
6255
|
{ x = 0, w = g_limitObj.difSelectorWidth, h = g_limitObj.setLblHeight, btnStyle = `Default` } = {}) =>
|
|
@@ -6131,6 +6263,12 @@ const makeDifLblCssButton = (_id, _name, _heightPos, _func,
|
|
|
6131
6263
|
* @param {string} _directionFlg 表示用ボタンのどちら側に置くかを設定。(R, RR:右、L, LL:左)
|
|
6132
6264
|
* @param {number} _heightPos 上からの配置順
|
|
6133
6265
|
* @param {function} _func
|
|
6266
|
+
* @param {number} object.dx
|
|
6267
|
+
* @param {number} object.dy
|
|
6268
|
+
* @param {number} object.dw
|
|
6269
|
+
* @param {number} object.dh
|
|
6270
|
+
* @param {number} object.dsiz
|
|
6271
|
+
* @param {string} object.visibility
|
|
6134
6272
|
*/
|
|
6135
6273
|
const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy = 0, dw = 0, dh = 0, dsiz = 0, visibility = `visible` } = {}) =>
|
|
6136
6274
|
createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, {
|
|
@@ -6141,6 +6279,7 @@ const makeMiniCssButton = (_id, _directionFlg, _heightPos, _func, { dx = 0, dy =
|
|
|
6141
6279
|
/**
|
|
6142
6280
|
* カラーグループ、シャッフルグループの再設定
|
|
6143
6281
|
* @param {string} _type
|
|
6282
|
+
* @param {string} _keyCtrlPtn
|
|
6144
6283
|
*/
|
|
6145
6284
|
const resetGroupList = (_type, _keyCtrlPtn) => {
|
|
6146
6285
|
let k = 1;
|
|
@@ -6160,7 +6299,7 @@ const resetGroupList = (_type, _keyCtrlPtn) => {
|
|
|
6160
6299
|
/* Scene : SETTINGS-DISPLAY [lemon] */
|
|
6161
6300
|
/*-----------------------------------------------------------*/
|
|
6162
6301
|
|
|
6163
|
-
const settingsDisplayInit =
|
|
6302
|
+
const settingsDisplayInit = () => {
|
|
6164
6303
|
|
|
6165
6304
|
clearWindow(true);
|
|
6166
6305
|
const divRoot = document.getElementById(`divRoot`);
|
|
@@ -6187,7 +6326,7 @@ const settingsDisplayInit = _ => {
|
|
|
6187
6326
|
|
|
6188
6327
|
// キー操作イベント(デフォルト)
|
|
6189
6328
|
setShortcutEvent(g_currentPage);
|
|
6190
|
-
document.oncontextmenu =
|
|
6329
|
+
document.oncontextmenu = () => true;
|
|
6191
6330
|
|
|
6192
6331
|
g_skinJsObj.settingsDisplay.forEach(func => func());
|
|
6193
6332
|
};
|
|
@@ -6200,9 +6339,9 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
6200
6339
|
|
|
6201
6340
|
/**
|
|
6202
6341
|
* Display表示/非表示ボタン
|
|
6203
|
-
* @param {
|
|
6204
|
-
* @param {
|
|
6205
|
-
* @param {
|
|
6342
|
+
* @param {string} _name
|
|
6343
|
+
* @param {number} _heightPos 縦位置
|
|
6344
|
+
* @param {number} _widthPos 横位置
|
|
6206
6345
|
*/
|
|
6207
6346
|
const makeDisplayButton = (_name, _heightPos, _widthPos) => {
|
|
6208
6347
|
|
|
@@ -6217,10 +6356,10 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
6217
6356
|
const cssBgList = [g_settings.d_cssBgName, g_settings.d_cssBgName].concat(Array(g_settings[`d_${_name}s`]?.length).fill(g_settings.d_cssBgExName) || []);
|
|
6218
6357
|
const lbls = [toCapitalize(_name), toCapitalize(_name)].concat(g_settings[`d_${_name}s`] || []);
|
|
6219
6358
|
|
|
6220
|
-
const dispView =
|
|
6359
|
+
const dispView = () => [C_FLG_OFF, C_FLG_ON].includes(g_stateObj[`d_${_name.toLowerCase()}`]) ?
|
|
6221
6360
|
g_lblNameObj[`d_${toCapitalize(_name)}`] : getStgDetailName(lbls[g_settings.displayNum[_name]]);
|
|
6222
6361
|
|
|
6223
|
-
const withShortCutDesc =
|
|
6362
|
+
const withShortCutDesc = () => createScText(document.getElementById(linkId), `${toCapitalize(_name)}`,
|
|
6224
6363
|
{ displayName: g_currentPage, targetLabel: linkId, x: -5 });
|
|
6225
6364
|
|
|
6226
6365
|
/**
|
|
@@ -6248,10 +6387,10 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
6248
6387
|
// Displayボタン初期化
|
|
6249
6388
|
g_settings.displayNum[_name] = list.findIndex(flg => flg === g_stateObj[`d_${_name.toLowerCase()}`]);
|
|
6250
6389
|
displaySprite.appendChild(
|
|
6251
|
-
makeSettingLblCssButton(linkId, dispView(), _heightPos,
|
|
6390
|
+
makeSettingLblCssButton(linkId, dispView(), _heightPos, () => switchDisplay(), {
|
|
6252
6391
|
x: 30 + 180 * _widthPos, w: 170,
|
|
6253
6392
|
title: g_msgObj[`d_${_name.toLowerCase()}`], borderStyle: `solid`,
|
|
6254
|
-
cxtFunc:
|
|
6393
|
+
cxtFunc: () => switchDisplay(-1),
|
|
6255
6394
|
}, `button_${cssBgList[g_settings.displayNum[_name]]}`, `button_${cssBarList[g_settings.displayNum[_name]]}`)
|
|
6256
6395
|
);
|
|
6257
6396
|
withShortCutDesc();
|
|
@@ -6259,7 +6398,7 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
6259
6398
|
// Display切替ボタン(ON/OFF以外用)
|
|
6260
6399
|
if (g_settings[`d_${_name}s`] !== undefined) {
|
|
6261
6400
|
displaySprite.appendChild(
|
|
6262
|
-
makeSettingLblCssButton(`${linkId}R`, `>`, _heightPos,
|
|
6401
|
+
makeSettingLblCssButton(`${linkId}R`, `>`, _heightPos, () => switchDisplay(1, false), {
|
|
6263
6402
|
x: 175 + 180 * _widthPos, w: 25,
|
|
6264
6403
|
}, g_cssObj.button_Mini)
|
|
6265
6404
|
);
|
|
@@ -6288,7 +6427,7 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
6288
6427
|
// 矢印の見え方 (Appearance)
|
|
6289
6428
|
// 縦位置: 7.4
|
|
6290
6429
|
createGeneralSetting(spriteList.appearance, `appearance`, {
|
|
6291
|
-
addRFunc:
|
|
6430
|
+
addRFunc: () => dispAppearanceSlider(),
|
|
6292
6431
|
});
|
|
6293
6432
|
|
|
6294
6433
|
// Hidden+/Sudden+初期値用スライダー、ロックボタン
|
|
@@ -6312,10 +6451,10 @@ const createSettingsDisplayWindow = _sprite => {
|
|
|
6312
6451
|
};
|
|
6313
6452
|
|
|
6314
6453
|
const appearanceSlider = document.getElementById(`appearanceSlider`);
|
|
6315
|
-
appearanceSlider.addEventListener(`input`,
|
|
6454
|
+
appearanceSlider.addEventListener(`input`, () =>
|
|
6316
6455
|
g_hidSudObj.filterPos = inputSliderAppearance(appearanceSlider, lblAppearancePos), false);
|
|
6317
6456
|
|
|
6318
|
-
const dispAppearanceSlider =
|
|
6457
|
+
const dispAppearanceSlider = () => {
|
|
6319
6458
|
[`lblAppearanceBar`, `lnkLockBtn`, `lnkfilterLine`].forEach(obj =>
|
|
6320
6459
|
$id(obj).visibility = g_appearanceRanges.includes(g_stateObj.appearance) ? `Visible` : `Hidden`);
|
|
6321
6460
|
inputSliderAppearance(appearanceSlider, lblAppearancePos);
|
|
@@ -6387,6 +6526,7 @@ const interlockingButton = (_headerObj, _name, _current, _next, _buttonFlg = fal
|
|
|
6387
6526
|
|
|
6388
6527
|
/**
|
|
6389
6528
|
* キーコンフィグ画面初期化
|
|
6529
|
+
* @param {string} _kcType
|
|
6390
6530
|
*/
|
|
6391
6531
|
const keyConfigInit = (_kcType = g_kcType) => {
|
|
6392
6532
|
|
|
@@ -6443,6 +6583,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6443
6583
|
|
|
6444
6584
|
/**
|
|
6445
6585
|
* キーコンフィグ用の矢印色を取得
|
|
6586
|
+
* @param {number} _j
|
|
6446
6587
|
* @param {number} _colorPos
|
|
6447
6588
|
*/
|
|
6448
6589
|
const getKeyConfigColor = (_j, _colorPos) => {
|
|
@@ -6519,9 +6660,9 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6519
6660
|
const arrowColor = getKeyConfigColor(j, colorPos);
|
|
6520
6661
|
|
|
6521
6662
|
keyconSprite.appendChild(
|
|
6522
|
-
createCss2Button(`color${j}`, ``,
|
|
6663
|
+
createCss2Button(`color${j}`, ``, () => changeTmpColor(j), {
|
|
6523
6664
|
x: keyconX, y: keyconY, w: C_ARW_WIDTH, h: C_ARW_WIDTH,
|
|
6524
|
-
cxtFunc:
|
|
6665
|
+
cxtFunc: () => changeTmpColor(j, -1),
|
|
6525
6666
|
}, g_cssObj.button_Default_NoColor, g_cssObj.title_base)
|
|
6526
6667
|
);
|
|
6527
6668
|
// キーコンフィグ表示用の矢印・おにぎりを表示
|
|
@@ -6538,10 +6679,10 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6538
6679
|
);
|
|
6539
6680
|
if (g_headerObj.shuffleUse && g_keyObj[`shuffle${keyCtrlPtn}`] !== undefined) {
|
|
6540
6681
|
keyconSprite.appendChild(
|
|
6541
|
-
createCss2Button(`sArrow${j}`, ``,
|
|
6682
|
+
createCss2Button(`sArrow${j}`, ``, () => changeTmpShuffleNum(j), {
|
|
6542
6683
|
x: keyconX, y: keyconY - 12, w: C_ARW_WIDTH, h: 15, siz: 12, fontWeight: `bold`,
|
|
6543
6684
|
pointerEvents: (g_settings.shuffles.filter(val => val.endsWith(`+`)).length > 0 ? `auto` : `none`),
|
|
6544
|
-
cxtFunc:
|
|
6685
|
+
cxtFunc: () => changeTmpShuffleNum(j, -1),
|
|
6545
6686
|
}, g_cssObj.button_Default_NoColor, g_cssObj.title_base)
|
|
6546
6687
|
);
|
|
6547
6688
|
}
|
|
@@ -6552,7 +6693,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6552
6693
|
g_keyObj[`keyCtrl${keyCtrlPtn}d`][j][k] = setIntVal(g_keyObj[`keyCtrl${keyCtrlPtn}d`][j][k]);
|
|
6553
6694
|
|
|
6554
6695
|
keyconSprite.appendChild(
|
|
6555
|
-
createCss2Button(`keycon${j}_${k}`, g_kCd[g_keyObj[`keyCtrl${keyCtrlPtn}`][j][k]],
|
|
6696
|
+
createCss2Button(`keycon${j}_${k}`, g_kCd[g_keyObj[`keyCtrl${keyCtrlPtn}`][j][k]], () => {
|
|
6556
6697
|
g_currentj = j;
|
|
6557
6698
|
g_currentk = k;
|
|
6558
6699
|
g_prevKey = -1;
|
|
@@ -6633,7 +6774,13 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6633
6774
|
* キーコンフィグ用設定ラベル
|
|
6634
6775
|
* @param {string} _id
|
|
6635
6776
|
* @param {string} _name
|
|
6636
|
-
* @param {
|
|
6777
|
+
* @param {number} object.x
|
|
6778
|
+
* @param {number} object.y
|
|
6779
|
+
* @param {number} object.w
|
|
6780
|
+
* @param {number} object.h
|
|
6781
|
+
* @param {number} object.siz
|
|
6782
|
+
* @param {string} object.align
|
|
6783
|
+
* @param {...any} object.rest
|
|
6637
6784
|
* @param {...any} _classes
|
|
6638
6785
|
* @returns ラベル
|
|
6639
6786
|
*/
|
|
@@ -6646,7 +6793,14 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6646
6793
|
* @param {string} _id
|
|
6647
6794
|
* @param {string} _text
|
|
6648
6795
|
* @param {function} _func
|
|
6649
|
-
* @param {
|
|
6796
|
+
* @param {number} object.x
|
|
6797
|
+
* @param {number} object.y
|
|
6798
|
+
* @param {number} object.w
|
|
6799
|
+
* @param {number} object.h
|
|
6800
|
+
* @param {number} object.siz
|
|
6801
|
+
* @param {string} object.borderStyle
|
|
6802
|
+
* @param {function} object.cxtFunc
|
|
6803
|
+
* @param {...any} object.rest
|
|
6650
6804
|
* @param {string} _mainClass
|
|
6651
6805
|
* @param {...any} _classes
|
|
6652
6806
|
* @returns ボタン
|
|
@@ -6660,7 +6814,11 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6660
6814
|
* @param {string} _id
|
|
6661
6815
|
* @param {string} _directionFlg
|
|
6662
6816
|
* @param {function} _func
|
|
6663
|
-
* @param {
|
|
6817
|
+
* @param {number} object.x (x, y, w, h, siz)
|
|
6818
|
+
* @param {number} object.y
|
|
6819
|
+
* @param {number} object.w
|
|
6820
|
+
* @param {number} object.h
|
|
6821
|
+
* @param {number} object.siz
|
|
6664
6822
|
*/
|
|
6665
6823
|
const makeMiniKCButton = (_id, _directionFlg, _func, { x = g_btnX(5 / 6) - 30, y = 15, w = 15, h = 20, siz = g_limitObj.mainSiz } = {}) =>
|
|
6666
6824
|
createCss2Button(`${_id}${_directionFlg}`, g_settingBtnObj.chara[_directionFlg], _func, { x, y, w, h, siz }, g_cssObj.button_Mini);
|
|
@@ -6668,18 +6826,20 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6668
6826
|
/**
|
|
6669
6827
|
* キーコンフィグ用グループ設定ラベル・ボタンの作成
|
|
6670
6828
|
* @param {string} _type
|
|
6671
|
-
* @param {
|
|
6829
|
+
* @param {number} object.baseX
|
|
6830
|
+
* @param {number} object.baseY
|
|
6831
|
+
* @param {string} object.cssName
|
|
6672
6832
|
*/
|
|
6673
6833
|
const makeGroupButton = (_type, { baseX = g_btnX(5 / 6) - 20, baseY = 0, cssName } = {}) => {
|
|
6674
6834
|
if (g_headerObj[`${_type}Use`] && g_keycons[`${_type}Groups`].length > 1) {
|
|
6675
6835
|
const typeName = toCapitalize(_type);
|
|
6676
6836
|
multiAppend(divRoot,
|
|
6677
6837
|
makeKCButtonHeader(`lbl${_type}Group`, `${typeName}Group`, { x: baseX - 10, y: baseY }, cssName),
|
|
6678
|
-
makeKCButton(`lnk${typeName}Group`, ``,
|
|
6679
|
-
x: baseX, y: baseY + 13, w: g_btnWidth(1 / 18), title: g_msgObj[`${_type}Group`], cxtFunc:
|
|
6838
|
+
makeKCButton(`lnk${typeName}Group`, ``, () => setGroup(_type), {
|
|
6839
|
+
x: baseX, y: baseY + 13, w: g_btnWidth(1 / 18), title: g_msgObj[`${_type}Group`], cxtFunc: () => setGroup(_type, -1),
|
|
6680
6840
|
}),
|
|
6681
|
-
makeMiniKCButton(`lnk${typeName}Group`, `L`,
|
|
6682
|
-
makeMiniKCButton(`lnk${typeName}Group`, `R`,
|
|
6841
|
+
makeMiniKCButton(`lnk${typeName}Group`, `L`, () => setGroup(_type, -1), { x: baseX - 10, y: baseY + 13 }),
|
|
6842
|
+
makeMiniKCButton(`lnk${typeName}Group`, `R`, () => setGroup(_type), { x: baseX + g_btnWidth(1 / 18), y: baseY + 13 }),
|
|
6683
6843
|
);
|
|
6684
6844
|
} else {
|
|
6685
6845
|
g_keycons[`${_type}GroupNum`] = 0;
|
|
@@ -6703,11 +6863,11 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6703
6863
|
|
|
6704
6864
|
// キーカラータイプ切替ボタン
|
|
6705
6865
|
makeKCButtonHeader(`lblcolorType`, `ColorType`, { x: 10 + g_btnX() }, g_cssObj.keyconfig_ColorType),
|
|
6706
|
-
makeKCButton(`lnkColorType`, g_colorType,
|
|
6707
|
-
x: 20 + g_btnX(), title: g_msgObj.colorType, cxtFunc:
|
|
6866
|
+
makeKCButton(`lnkColorType`, g_colorType, () => setColorType(), {
|
|
6867
|
+
x: 20 + g_btnX(), title: g_msgObj.colorType, cxtFunc: () => setColorType(-1),
|
|
6708
6868
|
}),
|
|
6709
|
-
makeMiniKCButton(`lnkColorType`, `L`,
|
|
6710
|
-
makeMiniKCButton(`lnkColorType`, `R`,
|
|
6869
|
+
makeMiniKCButton(`lnkColorType`, `L`, () => setColorType(-1), { x: 10 + g_btnX() }),
|
|
6870
|
+
makeMiniKCButton(`lnkColorType`, `R`, () => setColorType(), { x: 20 + g_btnX(1 / 6) }),
|
|
6711
6871
|
);
|
|
6712
6872
|
|
|
6713
6873
|
if (g_headerObj.imgType.length > 1) {
|
|
@@ -6715,11 +6875,11 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6715
6875
|
multiAppend(divRoot,
|
|
6716
6876
|
// オブジェクトタイプの切り替え(リロードあり)
|
|
6717
6877
|
makeKCButtonHeader(`lblImgType`, `ImgType`, { x: imgBaseX - 10, y: 37 }, g_cssObj.keyconfig_ConfigType),
|
|
6718
|
-
makeKCButton(`lnkImgType`, g_imgType,
|
|
6719
|
-
x: imgBaseX, y: imgBaseY, title: g_msgObj.imgType, cxtFunc:
|
|
6878
|
+
makeKCButton(`lnkImgType`, g_imgType, () => setImgType(), {
|
|
6879
|
+
x: imgBaseX, y: imgBaseY, title: g_msgObj.imgType, cxtFunc: () => setImgType(-1),
|
|
6720
6880
|
}),
|
|
6721
|
-
makeMiniKCButton(`lnkImgType`, `L`,
|
|
6722
|
-
makeMiniKCButton(`lnkImgType`, `R`,
|
|
6881
|
+
makeMiniKCButton(`lnkImgType`, `L`, () => setImgType(-1), { x: imgBaseX - 10, y: imgBaseY }),
|
|
6882
|
+
makeMiniKCButton(`lnkImgType`, `R`, () => setImgType(), { x: imgBaseX + g_btnWidth(1 / 6), y: imgBaseY }),
|
|
6723
6883
|
);
|
|
6724
6884
|
}
|
|
6725
6885
|
|
|
@@ -6731,7 +6891,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6731
6891
|
/**
|
|
6732
6892
|
* カーソル位置の設定
|
|
6733
6893
|
*/
|
|
6734
|
-
const setKeyConfigCursor =
|
|
6894
|
+
const setKeyConfigCursor = () => {
|
|
6735
6895
|
const posj = g_keyObj[`pos${keyCtrlPtn}`][g_currentj];
|
|
6736
6896
|
const stdPos = posj - ((posj > divideCnt ? posMax : 0) + divideCnt) / 2;
|
|
6737
6897
|
|
|
@@ -6854,7 +7014,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6854
7014
|
/**
|
|
6855
7015
|
* ColorPicker(一式)の切替
|
|
6856
7016
|
*/
|
|
6857
|
-
const changeColorPickers =
|
|
7017
|
+
const changeColorPickers = () => {
|
|
6858
7018
|
lnkColorR.innerHTML = `[${g_keycons.colorCursorNum + 1} /`;
|
|
6859
7019
|
for (let j = 0; j < g_limitObj.kcColorPickerNum; j++) {
|
|
6860
7020
|
const m = getGroupNum(j);
|
|
@@ -6868,6 +7028,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6868
7028
|
/**
|
|
6869
7029
|
* ColorTypeの制御
|
|
6870
7030
|
* @param {number} _scrollNum
|
|
7031
|
+
* @param {boolean} _reloadFlg
|
|
6871
7032
|
*/
|
|
6872
7033
|
const setColorType = (_scrollNum = 1, _reloadFlg = true) => {
|
|
6873
7034
|
const nextNum = getNextNum(_scrollNum, `colorTypes`, g_colorType);
|
|
@@ -6885,6 +7046,10 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6885
7046
|
}
|
|
6886
7047
|
};
|
|
6887
7048
|
|
|
7049
|
+
/**
|
|
7050
|
+
* ImgTypeの制御
|
|
7051
|
+
* @param {number} _scrollNum
|
|
7052
|
+
*/
|
|
6888
7053
|
const setImgType = (_scrollNum = 1) => {
|
|
6889
7054
|
const nextNum = getNextNum(_scrollNum, `imgTypes`, g_imgType);
|
|
6890
7055
|
g_imgType = g_keycons.imgTypes[nextNum];
|
|
@@ -6902,13 +7067,13 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6902
7067
|
multiAppend(colorPickSprite,
|
|
6903
7068
|
|
|
6904
7069
|
// ColorPickerの切替
|
|
6905
|
-
createCss2Button(`lnkColorR`, `[${g_keycons.colorCursorNum + 1} /`,
|
|
7070
|
+
createCss2Button(`lnkColorR`, `[${g_keycons.colorCursorNum + 1} /`, () => {
|
|
6906
7071
|
g_keycons.colorCursorNum = (g_keycons.colorCursorNum + 1) % Math.ceil(g_headerObj.setColor.length / g_limitObj.kcColorPickerNum);
|
|
6907
7072
|
changeColorPickers();
|
|
6908
7073
|
}, g_lblPosObj.lnkColorR, g_cssObj.button_Start),
|
|
6909
7074
|
|
|
6910
7075
|
// 矢印の配色をフリーズアローへ反映
|
|
6911
|
-
createCss2Button(`lnkColorCopy`, `↓]`,
|
|
7076
|
+
createCss2Button(`lnkColorCopy`, `↓]`, () => {
|
|
6912
7077
|
if (window.confirm(g_msgObj.colorCopyConfirm)) {
|
|
6913
7078
|
for (let j = 0; j < g_headerObj.setColor.length; j++) {
|
|
6914
7079
|
g_headerObj.frzColor[j] = g_headerObj[`frzColor${g_colorType}`][j] =
|
|
@@ -6926,7 +7091,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6926
7091
|
createDivCss2Label(`lblPickFrz`, g_lblNameObj.s_frz, Object.assign({ y: 140 }, g_lblPosObj.pickPos)),
|
|
6927
7092
|
|
|
6928
7093
|
// ColorPickerの色を元に戻す
|
|
6929
|
-
createCss2Button(`lnkColorReset`, g_lblNameObj.b_cReset,
|
|
7094
|
+
createCss2Button(`lnkColorReset`, g_lblNameObj.b_cReset, () => {
|
|
6930
7095
|
if (window.confirm(g_msgObj.colorResetConfirm)) {
|
|
6931
7096
|
resetColorType({ _from: g_colorType, _to: ``, _fromObj: g_dfColorObj });
|
|
6932
7097
|
resetColorType({ _from: g_colorType, _to: g_colorType, _fromObj: g_dfColorObj });
|
|
@@ -6950,24 +7115,25 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6950
7115
|
* @param {number} _j
|
|
6951
7116
|
* @param {string} _type
|
|
6952
7117
|
* @param {function} _func
|
|
6953
|
-
* @param {
|
|
7118
|
+
* @param {number} object.x
|
|
7119
|
+
* @param {number} object.y
|
|
6954
7120
|
*/
|
|
6955
7121
|
const createColorPickWindow = (_j, _type, _func, { x = 0, y = 15 } = {}) =>
|
|
6956
7122
|
createColorPicker(colorPickSprite, `pick${_type}${_j}`, _func, { x, y: y + 25 * _j });
|
|
6957
7123
|
|
|
6958
7124
|
for (let j = 0; j < g_limitObj.kcColorPickerNum; j++) {
|
|
6959
|
-
createColorPickWindow(j, `arrow`,
|
|
7125
|
+
createColorPickWindow(j, `arrow`, () => {
|
|
6960
7126
|
g_headerObj[`setColor${g_colorType}`][getGroupNum(j)] = document.getElementById(`pickarrow${j}`).value;
|
|
6961
7127
|
setColorType(0, false);
|
|
6962
7128
|
});
|
|
6963
7129
|
|
|
6964
|
-
createColorPickWindow(j, `arrowShadow`,
|
|
7130
|
+
createColorPickWindow(j, `arrowShadow`, () => {
|
|
6965
7131
|
g_headerObj[`setShadowColor${g_colorType}`][getGroupNum(j)] = `${document.getElementById(`pickarrowShadow${j}`).value}80`;
|
|
6966
7132
|
setColorType(0, false);
|
|
6967
7133
|
}, { x: 25 });
|
|
6968
7134
|
|
|
6969
7135
|
[``, `Bar`].forEach((val, k) =>
|
|
6970
|
-
createColorPickWindow(j, `frz${val}`,
|
|
7136
|
+
createColorPickWindow(j, `frz${val}`, () => {
|
|
6971
7137
|
g_headerObj[`frzColor${g_colorType}`][getGroupNum(j)][k] = document.getElementById(`pickfrz${val}${j}`).value;
|
|
6972
7138
|
}, { x: 25 * k, y: 155 }));
|
|
6973
7139
|
}
|
|
@@ -6985,12 +7151,13 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
6985
7151
|
* @param {number} _tempPtn
|
|
6986
7152
|
* @param {number} _sign
|
|
6987
7153
|
* @param {boolean} _transKeyUse
|
|
7154
|
+
* @param {boolean} _skipFlg
|
|
6988
7155
|
*/
|
|
6989
7156
|
const searchPattern = (_tempPtn, _sign, _transKeyUse = false, _skipFlg = false) => {
|
|
6990
7157
|
let nextPtn = _tempPtn + _sign;
|
|
6991
7158
|
const initialPtn = hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_-1`]) ? -1 : 0;
|
|
6992
7159
|
|
|
6993
|
-
const searchStart =
|
|
7160
|
+
const searchStart = () => {
|
|
6994
7161
|
if (!hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
|
|
6995
7162
|
nextPtn = 0;
|
|
6996
7163
|
while (hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
|
|
@@ -7000,7 +7167,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
7000
7167
|
}
|
|
7001
7168
|
};
|
|
7002
7169
|
|
|
7003
|
-
const searchNextGroup =
|
|
7170
|
+
const searchNextGroup = () => {
|
|
7004
7171
|
while (nextPtn !== initialPtn &&
|
|
7005
7172
|
g_keyObj[`transKey${g_keyObj.currentKey}_${_tempPtn}`] === g_keyObj[`transKey${g_keyObj.currentKey}_${nextPtn}`] &&
|
|
7006
7173
|
hasVal(g_keyObj[`keyCtrl${g_keyObj.currentKey}_${nextPtn}`])) {
|
|
@@ -7054,7 +7221,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
7054
7221
|
createDivCss2Label(`lblkey`, `KeySwitch`, g_lblPosObj.lblkey));
|
|
7055
7222
|
configKeyGroupList.forEach((val, j) =>
|
|
7056
7223
|
divRoot.appendChild(
|
|
7057
|
-
createCss2Button(`key${j}`, `${j + 1}`,
|
|
7224
|
+
createCss2Button(`key${j}`, `${j + 1}`, () => appearConfigSteps(j),
|
|
7058
7225
|
Object.assign({ y: 110 + j * 20 }, g_lblPosObj.lnkKeySwitch), g_cssObj.button_Mini),
|
|
7059
7226
|
));
|
|
7060
7227
|
}
|
|
@@ -7066,39 +7233,39 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
7066
7233
|
multiAppend(divRoot,
|
|
7067
7234
|
|
|
7068
7235
|
// 設定画面へ戻る
|
|
7069
|
-
createCss2Button(`btnBack`, g_lblNameObj.b_settings,
|
|
7236
|
+
createCss2Button(`btnBack`, g_lblNameObj.b_settings, () => {
|
|
7070
7237
|
g_currentj = 0;
|
|
7071
7238
|
g_currentk = 0;
|
|
7072
7239
|
g_prevKey = 0;
|
|
7073
7240
|
}, Object.assign(g_lblPosObj.btnKcBack, {
|
|
7074
|
-
resetFunc:
|
|
7241
|
+
resetFunc: () => (g_baseDisp === `Settings` ? optionInit() : settingsDisplayInit()),
|
|
7075
7242
|
}), g_cssObj.button_Back),
|
|
7076
7243
|
|
|
7077
7244
|
createDivCss2Label(`lblPattern`, `${g_lblNameObj.KeyPattern}: ${g_keyObj.currentPtn === -1 ?
|
|
7078
7245
|
'Self' : g_keyObj.currentPtn + 1}${lblTransKey}`, g_lblPosObj.lblPattern),
|
|
7079
7246
|
|
|
7080
7247
|
// パターン変更ボタン描画(右回り)
|
|
7081
|
-
createCss2Button(`btnPtnChangeR`, `>`,
|
|
7082
|
-
resetFunc:
|
|
7248
|
+
createCss2Button(`btnPtnChangeR`, `>`, () => true, Object.assign(g_lblPosObj.btnPtnChangeR, {
|
|
7249
|
+
resetFunc: () => changePattern(),
|
|
7083
7250
|
}), g_cssObj.button_Mini),
|
|
7084
7251
|
|
|
7085
7252
|
// パターン変更ボタン描画(左回り)
|
|
7086
|
-
createCss2Button(`btnPtnChangeL`, `<`,
|
|
7087
|
-
resetFunc:
|
|
7253
|
+
createCss2Button(`btnPtnChangeL`, `<`, () => true, Object.assign(g_lblPosObj.btnPtnChangeL, {
|
|
7254
|
+
resetFunc: () => changePattern(-1),
|
|
7088
7255
|
}), g_cssObj.button_Mini),
|
|
7089
7256
|
|
|
7090
7257
|
// パターン変更ボタン描画(右回り/別キーモード間スキップ)
|
|
7091
|
-
createCss2Button(`btnPtnChangeRR`, `|>`,
|
|
7092
|
-
resetFunc:
|
|
7258
|
+
createCss2Button(`btnPtnChangeRR`, `|>`, () => true, Object.assign(g_lblPosObj.btnPtnChangeRR, {
|
|
7259
|
+
resetFunc: () => changePattern(1, true),
|
|
7093
7260
|
}), g_cssObj.button_Setting),
|
|
7094
7261
|
|
|
7095
7262
|
// パターン変更ボタン描画(左回り/別キーモード間スキップ)
|
|
7096
|
-
createCss2Button(`btnPtnChangeLL`, `<|`,
|
|
7097
|
-
resetFunc:
|
|
7263
|
+
createCss2Button(`btnPtnChangeLL`, `<|`, () => true, Object.assign(g_lblPosObj.btnPtnChangeLL, {
|
|
7264
|
+
resetFunc: () => changePattern(-1, true),
|
|
7098
7265
|
}), g_cssObj.button_Setting),
|
|
7099
7266
|
|
|
7100
7267
|
// キーコンフィグリセットボタン描画
|
|
7101
|
-
createCss2Button(`btnReset`, g_lblNameObj.b_reset,
|
|
7268
|
+
createCss2Button(`btnReset`, g_lblNameObj.b_reset, () => {
|
|
7102
7269
|
if (window.confirm(g_msgObj.keyResetConfirm)) {
|
|
7103
7270
|
const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
7104
7271
|
|
|
@@ -7115,7 +7282,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
7115
7282
|
}, g_lblPosObj.btnKcReset, g_cssObj.button_Reset),
|
|
7116
7283
|
|
|
7117
7284
|
// プレイ開始
|
|
7118
|
-
makePlayButton(
|
|
7285
|
+
makePlayButton(() => loadMusic())
|
|
7119
7286
|
);
|
|
7120
7287
|
|
|
7121
7288
|
// キーボード押下時処理
|
|
@@ -7167,7 +7334,7 @@ const keyConfigInit = (_kcType = g_kcType) => {
|
|
|
7167
7334
|
|
|
7168
7335
|
g_skinJsObj.keyconfig.forEach(func => func());
|
|
7169
7336
|
document.onkeyup = evt => commonKeyUp(evt);
|
|
7170
|
-
document.oncontextmenu =
|
|
7337
|
+
document.oncontextmenu = () => false;
|
|
7171
7338
|
};
|
|
7172
7339
|
|
|
7173
7340
|
/**
|
|
@@ -7181,7 +7348,7 @@ const getShadowColor = (_colorPos, _arrowColor) => g_headerObj.setShadowColor[_c
|
|
|
7181
7348
|
/**
|
|
7182
7349
|
* キー数基礎情報の取得
|
|
7183
7350
|
*/
|
|
7184
|
-
const getKeyInfo =
|
|
7351
|
+
const getKeyInfo = () => {
|
|
7185
7352
|
const keyCtrlPtn = `${g_keyObj.currentKey}_${g_keyObj.currentPtn}`;
|
|
7186
7353
|
const keyNum = g_keyObj[`${g_keyObj.defaultProp}${keyCtrlPtn}`].length;
|
|
7187
7354
|
const posMax = g_keyObj[`divMax${keyCtrlPtn}`] ?? Math.max(...g_keyObj[`pos${keyCtrlPtn}`]) + 1;
|
|
@@ -7207,7 +7374,7 @@ const updateKeyInfo = (_header, _keyCtrlPtn) => {
|
|
|
7207
7374
|
/**
|
|
7208
7375
|
* 初期矢印色・フリーズアロー色の変更
|
|
7209
7376
|
*/
|
|
7210
|
-
const changeSetColor =
|
|
7377
|
+
const changeSetColor = () => {
|
|
7211
7378
|
const isDefault = [`Default`, `Type0`].includes(g_colorType);
|
|
7212
7379
|
const idHeader = setScoreIdHeader(g_stateObj.scoreId);
|
|
7213
7380
|
const defaultType = idHeader + g_colorType;
|
|
@@ -7268,7 +7435,7 @@ const changeShuffleConfigColor = (_keyCtrlPtn, _vals, _j = -1) => {
|
|
|
7268
7435
|
/* Scene : LOADING [strawberry] */
|
|
7269
7436
|
/*-----------------------------------------------------------*/
|
|
7270
7437
|
|
|
7271
|
-
const loadMusic =
|
|
7438
|
+
const loadMusic = () => {
|
|
7272
7439
|
|
|
7273
7440
|
clearWindow(true);
|
|
7274
7441
|
g_currentPage = `loading`;
|
|
@@ -7300,7 +7467,7 @@ const loadMusic = _ => {
|
|
|
7300
7467
|
request.responseType = `blob`;
|
|
7301
7468
|
|
|
7302
7469
|
// 読み込み完了時
|
|
7303
|
-
request.addEventListener(`load`,
|
|
7470
|
+
request.addEventListener(`load`, () => {
|
|
7304
7471
|
if (request.status >= 200 && request.status < 300) {
|
|
7305
7472
|
const blobUrl = URL.createObjectURL(request.response);
|
|
7306
7473
|
createEmptySprite(divRoot, `loader`, g_windowObj.loader);
|
|
@@ -7327,8 +7494,8 @@ const loadMusic = _ => {
|
|
|
7327
7494
|
});
|
|
7328
7495
|
|
|
7329
7496
|
// エラー処理
|
|
7330
|
-
request.addEventListener(`timeout`,
|
|
7331
|
-
request.addEventListener(`error`,
|
|
7497
|
+
request.addEventListener(`timeout`, () => makeWarningWindow(g_msgInfoObj.E_0033, { backBtnUse: true }));
|
|
7498
|
+
request.addEventListener(`error`, () => makeWarningWindow(g_msgInfoObj.E_0034, { backBtnUse: true }));
|
|
7332
7499
|
|
|
7333
7500
|
request.send();
|
|
7334
7501
|
};
|
|
@@ -7340,7 +7507,7 @@ const loadMusic = _ => {
|
|
|
7340
7507
|
*/
|
|
7341
7508
|
const setAudio = async (_url) => {
|
|
7342
7509
|
|
|
7343
|
-
const loadMp3 =
|
|
7510
|
+
const loadMp3 = () => {
|
|
7344
7511
|
if (g_isFile) {
|
|
7345
7512
|
g_audio.src = _url;
|
|
7346
7513
|
musicAfterLoaded();
|
|
@@ -7369,13 +7536,13 @@ const setAudio = async (_url) => {
|
|
|
7369
7536
|
await loadScript2(_url);
|
|
7370
7537
|
if (typeof musicInit === C_TYP_FUNCTION) {
|
|
7371
7538
|
musicInit();
|
|
7372
|
-
readyToStart(
|
|
7539
|
+
readyToStart(() => initWebAudioAPIfromBase64(g_musicdata));
|
|
7373
7540
|
} else {
|
|
7374
7541
|
makeWarningWindow(g_msgInfoObj.E_0031);
|
|
7375
7542
|
musicAfterLoaded();
|
|
7376
7543
|
}
|
|
7377
7544
|
} else {
|
|
7378
|
-
readyToStart(
|
|
7545
|
+
readyToStart(() => loadMp3());
|
|
7379
7546
|
}
|
|
7380
7547
|
};
|
|
7381
7548
|
|
|
@@ -7396,7 +7563,7 @@ const initWebAudioAPIfromURL = async (_url) => {
|
|
|
7396
7563
|
await g_audio.init(arrayBuffer);
|
|
7397
7564
|
};
|
|
7398
7565
|
|
|
7399
|
-
const musicAfterLoaded =
|
|
7566
|
+
const musicAfterLoaded = () => {
|
|
7400
7567
|
g_audio.load();
|
|
7401
7568
|
|
|
7402
7569
|
if (g_audio.readyState === 4) {
|
|
@@ -7404,13 +7571,13 @@ const musicAfterLoaded = _ => {
|
|
|
7404
7571
|
loadingScoreInit();
|
|
7405
7572
|
} else {
|
|
7406
7573
|
// 読込中の状態
|
|
7407
|
-
g_audio.addEventListener(`canplaythrough`, (
|
|
7574
|
+
g_audio.addEventListener(`canplaythrough`, (() => function f() {
|
|
7408
7575
|
g_audio.removeEventListener(`canplaythrough`, f, false);
|
|
7409
7576
|
loadingScoreInit();
|
|
7410
7577
|
})(), false);
|
|
7411
7578
|
|
|
7412
7579
|
// エラー時
|
|
7413
|
-
g_audio.addEventListener(`error`, (
|
|
7580
|
+
g_audio.addEventListener(`error`, (() => function f() {
|
|
7414
7581
|
g_audio.removeEventListener(`error`, f, false);
|
|
7415
7582
|
makeWarningWindow(g_msgInfoObj.E_0041.split(`{0}`).join(g_audio.src), { backBtnUse: true });
|
|
7416
7583
|
})(), false);
|
|
@@ -7616,6 +7783,7 @@ const applyShuffle = (_keyNum, _shuffleGroup, _style) => {
|
|
|
7616
7783
|
* Mirrorの適用
|
|
7617
7784
|
* @param {number} _keyNum
|
|
7618
7785
|
* @param {array} _shuffleGroup
|
|
7786
|
+
* @param {boolean} _swapFlg
|
|
7619
7787
|
*/
|
|
7620
7788
|
const applyMirror = (_keyNum, _shuffleGroup, _swapFlg = false) => {
|
|
7621
7789
|
|
|
@@ -7680,11 +7848,13 @@ const applyRandom = (_keyNum, _shuffleGroup) => {
|
|
|
7680
7848
|
* S-Randomの適用
|
|
7681
7849
|
* @param {number} _keyNum
|
|
7682
7850
|
* @param {array} _shuffleGroup
|
|
7851
|
+
* @param {string} _arrowHeader
|
|
7852
|
+
* @param {string} _frzHeader
|
|
7683
7853
|
*/
|
|
7684
7854
|
const applySRandom = (_keyNum, _shuffleGroup, _arrowHeader, _frzHeader) => {
|
|
7685
7855
|
|
|
7686
|
-
const tmpArrowData = [...Array(_keyNum)].map(
|
|
7687
|
-
const tmpFrzData = [...Array(_keyNum)].map(
|
|
7856
|
+
const tmpArrowData = [...Array(_keyNum)].map(() => []);
|
|
7857
|
+
const tmpFrzData = [...Array(_keyNum)].map(() => []);
|
|
7688
7858
|
const scatterFrame = 10;
|
|
7689
7859
|
|
|
7690
7860
|
// シャッフルグループごとに処理
|
|
@@ -8053,7 +8223,8 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
8053
8223
|
];
|
|
8054
8224
|
|
|
8055
8225
|
/**
|
|
8056
|
-
* 歌詞表示、背景・マスクデータの優先順取得
|
|
8226
|
+
* 歌詞表示、背景・マスクデータの優先順取得
|
|
8227
|
+
* @param {array} _defaultHeaders
|
|
8057
8228
|
*/
|
|
8058
8229
|
const getPriorityHeader = (_defaultHeaders = []) => {
|
|
8059
8230
|
if (_defaultHeaders.length > 0) {
|
|
@@ -8182,7 +8353,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
|
|
|
8182
8353
|
* 背景・マスク、スキン変更データの分解
|
|
8183
8354
|
* @param {string} _header
|
|
8184
8355
|
* @param {string} _scoreNo 譜面番号
|
|
8185
|
-
* @param {array} resultTypes リザルトモーションの種類 (result, failedB, failedS)
|
|
8356
|
+
* @param {array} object.resultTypes リザルトモーションの種類 (result, failedB, failedS)
|
|
8186
8357
|
*/
|
|
8187
8358
|
const makeBackgroundData = (_header, _scoreNo, { resultTypes = [] } = {}) => {
|
|
8188
8359
|
const dataList = [];
|
|
@@ -8414,7 +8585,7 @@ const setSpeedOnFrame = (_speedData, _lastFrame) => {
|
|
|
8414
8585
|
* Motionオプション適用時の矢印別の速度設定
|
|
8415
8586
|
* - 矢印が表示される最大フレーム数を 縦ピクセル数×20 と定義。
|
|
8416
8587
|
*/
|
|
8417
|
-
const setMotionOnFrame =
|
|
8588
|
+
const setMotionOnFrame = () => g_motionFunc[g_stateObj.motion](fillArray(g_headerObj.playingHeight * 20 + 1));
|
|
8418
8589
|
|
|
8419
8590
|
/**
|
|
8420
8591
|
* Boost用の適用関数
|
|
@@ -8510,6 +8681,14 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
8510
8681
|
}
|
|
8511
8682
|
};
|
|
8512
8683
|
|
|
8684
|
+
/**
|
|
8685
|
+
* 矢印・フリーズアローの出現位置計算
|
|
8686
|
+
* @param {number} _j
|
|
8687
|
+
* @param {array} _data
|
|
8688
|
+
* @param {string} _header
|
|
8689
|
+
* @param {boolean} _frzFlg
|
|
8690
|
+
* @returns
|
|
8691
|
+
*/
|
|
8513
8692
|
const calcNotes = (_j, _data, _header = ``, _frzFlg = false) => {
|
|
8514
8693
|
if (_data === undefined) {
|
|
8515
8694
|
return;
|
|
@@ -8631,10 +8810,13 @@ const pushArrows = (_dataObj, _speedOnFrame, _motionOnFrame, _firstArrivalFrame)
|
|
|
8631
8810
|
* - この関数を使用する場合、配列グループの先頭2つが「フレーム数、矢印番号」となっていないと動作しない
|
|
8632
8811
|
* @param {string} _type
|
|
8633
8812
|
* @param {string} _header
|
|
8634
|
-
* @param {function} _setFunc
|
|
8635
|
-
* @param {
|
|
8813
|
+
* @param {function} _setFunc 後続実行関数
|
|
8814
|
+
* @param {number} object._term 1セット当たりのデータ数
|
|
8815
|
+
* @param {boolean} object._colorFlg 個別色変化フラグ
|
|
8816
|
+
* @param {boolean} object._calcFrameFlg 逆算を無条件で行うかどうかの可否
|
|
8817
|
+
* @param {string} object._propName 色変化種類 (Arrow, ArrowShadow, FrzNormal, FrzNormalBar, ...)
|
|
8636
8818
|
*/
|
|
8637
|
-
const calcDataTiming = (_type, _header, _setFunc =
|
|
8819
|
+
const calcDataTiming = (_type, _header, _setFunc = () => true,
|
|
8638
8820
|
{ _term = 4, _colorFlg = false, _calcFrameFlg = false, _propName = `` } = {}) => {
|
|
8639
8821
|
|
|
8640
8822
|
const camelHeader = _header === `` ? _type : `${_header}${toCapitalize(_type)}`;
|
|
@@ -8810,7 +8992,7 @@ const getFrzLength = (_speedOnFrame, _startFrame, _endFrame) => {
|
|
|
8810
8992
|
/**
|
|
8811
8993
|
* キーパターン(デフォルト)に対応する矢印番号を格納
|
|
8812
8994
|
*/
|
|
8813
|
-
const convertReplaceNums =
|
|
8995
|
+
const convertReplaceNums = () => {
|
|
8814
8996
|
const tkObj = getKeyInfo();
|
|
8815
8997
|
const baseCharas = g_keyObj[`chara${g_keyObj.currentKey}_0`];
|
|
8816
8998
|
const convCharas = g_keyObj[`chara${tkObj.keyCtrlPtn}`];
|
|
@@ -8831,9 +9013,10 @@ const convertReplaceNums = _ => {
|
|
|
8831
9013
|
* 色情報の格納
|
|
8832
9014
|
* @param {string} _header
|
|
8833
9015
|
* @param {number} _frame
|
|
8834
|
-
* @param {number} _val
|
|
8835
|
-
* @param {string} _colorCd
|
|
8836
|
-
* @param {string} _allFlg
|
|
9016
|
+
* @param {number} _val 色番号
|
|
9017
|
+
* @param {string} _colorCd カラーコード
|
|
9018
|
+
* @param {string} _allFlg 全体色変化有無
|
|
9019
|
+
* @param {string} _pattern 色変化種類 (Arrow, ArrowShadow, FrzNormal, FrzNormalBar, ...)
|
|
8837
9020
|
*/
|
|
8838
9021
|
const pushColors = (_header, _frame, _val, _colorCd, _allFlg, _pattern = ``) => {
|
|
8839
9022
|
|
|
@@ -9026,7 +9209,7 @@ const pushScrollchs = (_header, _frameArrow, _val, _frameStep, _scrollDir) => {
|
|
|
9026
9209
|
/**
|
|
9027
9210
|
* メイン画面前の初期化処理
|
|
9028
9211
|
*/
|
|
9029
|
-
const getArrowSettings =
|
|
9212
|
+
const getArrowSettings = () => {
|
|
9030
9213
|
|
|
9031
9214
|
g_attrObj = {};
|
|
9032
9215
|
const tkObj = getKeyInfo();
|
|
@@ -9056,8 +9239,8 @@ const getArrowSettings = _ => {
|
|
|
9056
9239
|
g_workObj.keyGroupList = tkObj.keyGroupList;
|
|
9057
9240
|
|
|
9058
9241
|
const keyCtrlLen = g_workObj.keyCtrl.length;
|
|
9059
|
-
g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(
|
|
9060
|
-
g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(
|
|
9242
|
+
g_workObj.keyCtrlN = [...Array(keyCtrlLen)].map(() => []);
|
|
9243
|
+
g_workObj.keyHitFlg = [...Array(keyCtrlLen)].map(() => []);
|
|
9061
9244
|
for (let j = 0; j < g_workObj.keyCtrl.length; j++) {
|
|
9062
9245
|
for (let k = 0; k < g_workObj.keyCtrl[j].length; k++) {
|
|
9063
9246
|
g_workObj.keyCtrlN[j][k] = g_kCdN[g_workObj.keyCtrl[j][k]];
|
|
@@ -9208,7 +9391,7 @@ const getArrowSettings = _ => {
|
|
|
9208
9391
|
*/
|
|
9209
9392
|
const setKeyCtrl = (_localStorage, _keyNum, _keyCtrlPtn) => {
|
|
9210
9393
|
const localPtn = `${g_keyObj.currentKey}_-1`;
|
|
9211
|
-
const keyCtrl = [...Array(_keyNum)].map(
|
|
9394
|
+
const keyCtrl = [...Array(_keyNum)].map(() => []);
|
|
9212
9395
|
for (let j = 0; j < _keyNum; j++) {
|
|
9213
9396
|
for (let k = 0; k < g_keyObj[`keyCtrl${_keyCtrlPtn}`][j].length; k++) {
|
|
9214
9397
|
keyCtrl[j][k] = g_keyObj[`keyCtrl${_keyCtrlPtn}`][j][k];
|
|
@@ -9231,10 +9414,10 @@ const setKeyCtrl = (_localStorage, _keyNum, _keyCtrlPtn) => {
|
|
|
9231
9414
|
/**
|
|
9232
9415
|
* メイン画面初期化
|
|
9233
9416
|
*/
|
|
9234
|
-
const mainInit =
|
|
9417
|
+
const mainInit = () => {
|
|
9235
9418
|
clearWindow(true, `Main`);
|
|
9236
9419
|
const divRoot = document.getElementById(`divRoot`);
|
|
9237
|
-
document.oncontextmenu =
|
|
9420
|
+
document.oncontextmenu = () => false;
|
|
9238
9421
|
g_currentPage = `main`;
|
|
9239
9422
|
|
|
9240
9423
|
g_currentArrows = 0;
|
|
@@ -9737,7 +9920,7 @@ const mainInit = _ => {
|
|
|
9737
9920
|
*/
|
|
9738
9921
|
const mainKeyUpActFunc = {
|
|
9739
9922
|
|
|
9740
|
-
OFF:
|
|
9923
|
+
OFF: () => {
|
|
9741
9924
|
for (let j = 0; j < keyNum; j++) {
|
|
9742
9925
|
if (g_workObj.keyCtrlN[j].find(key => keyIsDown(key)) === undefined) {
|
|
9743
9926
|
$id(`stepDiv${j}`).display = C_DIS_NONE;
|
|
@@ -9745,7 +9928,7 @@ const mainInit = _ => {
|
|
|
9745
9928
|
}
|
|
9746
9929
|
},
|
|
9747
9930
|
|
|
9748
|
-
ON:
|
|
9931
|
+
ON: () => { },
|
|
9749
9932
|
};
|
|
9750
9933
|
|
|
9751
9934
|
document.onkeyup = evt => {
|
|
@@ -9755,9 +9938,9 @@ const mainInit = _ => {
|
|
|
9755
9938
|
|
|
9756
9939
|
/**
|
|
9757
9940
|
* 全体色変化(矢印)
|
|
9758
|
-
* @param {number} _j
|
|
9759
|
-
* @param {number} _k
|
|
9760
|
-
* @param {string} _name
|
|
9941
|
+
* @param {number} _j 矢印位置
|
|
9942
|
+
* @param {number} _k 矢印の表示順
|
|
9943
|
+
* @param {string} _name 通常, ダミー
|
|
9761
9944
|
*/
|
|
9762
9945
|
const changeArrowColor = (_j, _k, _name) => {
|
|
9763
9946
|
if (g_workObj[`mk${toCapitalize(_name)}ColorChangeAll`][g_scoreObj.frameNum]) {
|
|
@@ -9849,8 +10032,8 @@ const mainInit = _ => {
|
|
|
9849
10032
|
/**
|
|
9850
10033
|
* 矢印・フリーズアロー消去
|
|
9851
10034
|
*
|
|
9852
|
-
* @param _j 矢印位置
|
|
9853
|
-
* @param
|
|
10035
|
+
* @param {number} _j 矢印位置
|
|
10036
|
+
* @param {string} _deleteName 削除オブジェクト名
|
|
9854
10037
|
*/
|
|
9855
10038
|
const judgeObjDelete = {};
|
|
9856
10039
|
g_typeLists.arrow.forEach(type =>
|
|
@@ -9864,13 +10047,13 @@ const mainInit = _ => {
|
|
|
9864
10047
|
* 自動判定
|
|
9865
10048
|
* ※mainInit内部で指定必須(arrowSprite指定)
|
|
9866
10049
|
*
|
|
9867
|
-
* @param _j 矢印位置
|
|
9868
|
-
* @param _arrow 矢印(オブジェクト)
|
|
10050
|
+
* @param {number} _j 矢印位置
|
|
10051
|
+
* @param {object} _arrow 矢印(オブジェクト)
|
|
9869
10052
|
*
|
|
9870
|
-
* @param _k 矢印の表示順
|
|
9871
|
-
* @param _frzRoot フリーズアロー(オブジェクト)
|
|
9872
|
-
* @param _cnt ステップゾーン到達までのフレーム数
|
|
9873
|
-
* @param _keyUpFrame キーを離したフレーム数
|
|
10053
|
+
* @param {number} _k 矢印の表示順
|
|
10054
|
+
* @param {object} _frzRoot フリーズアロー(オブジェクト)
|
|
10055
|
+
* @param {number} _cnt ステップゾーン到達までのフレーム数
|
|
10056
|
+
* @param {number} _keyUpFrame キーを離したフレーム数
|
|
9874
10057
|
*/
|
|
9875
10058
|
const judgeMotionFunc = {
|
|
9876
10059
|
|
|
@@ -9965,9 +10148,9 @@ const mainInit = _ => {
|
|
|
9965
10148
|
* - ただし、判定対象の矢印/フリーズアローがジャスト付近の場合は判定対象を優先する
|
|
9966
10149
|
* (フリーズアローの場合、ヒット中の場合も判定対象が優先される)
|
|
9967
10150
|
*
|
|
9968
|
-
* @param _j 矢印の位置
|
|
9969
|
-
* @param _k 矢印の表示順
|
|
9970
|
-
* @param _cnt ステップゾーン到達までのフレーム数
|
|
10151
|
+
* @param {number} _j 矢印の位置
|
|
10152
|
+
* @param {number} _k 矢印の表示順
|
|
10153
|
+
* @param {number} _cnt ステップゾーン到達までのフレーム数
|
|
9971
10154
|
*/
|
|
9972
10155
|
const judgeNextFunc = {
|
|
9973
10156
|
|
|
@@ -10136,12 +10319,14 @@ const mainInit = _ => {
|
|
|
10136
10319
|
|
|
10137
10320
|
/**
|
|
10138
10321
|
* フリーズアロー生成
|
|
10139
|
-
* @param {number} _attrs
|
|
10140
|
-
*
|
|
10141
|
-
*
|
|
10142
|
-
* @param {
|
|
10143
|
-
* @param {string}
|
|
10144
|
-
* @param {string}
|
|
10322
|
+
* @param {number} _attrs フリーズアロー個別の属性
|
|
10323
|
+
* (pos: 矢印種類, arrivalFrame: 到達フレーム数, initY: 初期表示位置,
|
|
10324
|
+
* initBoostY: Motion有効時の初期表示位置加算, motionFrame: アニメーション有効フレーム数)
|
|
10325
|
+
* @param {number} _arrowCnt 現在の判定フリーズアロー順
|
|
10326
|
+
* @param {string} _name フリーズアロー名
|
|
10327
|
+
* @param {string} _normalColor フリーズアロー(矢印)の色
|
|
10328
|
+
* @param {string} _barColor フリーズアロー(帯)の色
|
|
10329
|
+
* @param {string} _shadowColor フリーズアロー(塗りつぶし)の色
|
|
10145
10330
|
*/
|
|
10146
10331
|
const makeFrzArrow = (_attrs, _arrowCnt, _name, _normalColor, _barColor, _shadowColor) => {
|
|
10147
10332
|
const _j = _attrs.pos;
|
|
@@ -10278,7 +10463,7 @@ const mainInit = _ => {
|
|
|
10278
10463
|
/**
|
|
10279
10464
|
* フレーム処理(譜面台)
|
|
10280
10465
|
*/
|
|
10281
|
-
const flowTimeline =
|
|
10466
|
+
const flowTimeline = () => {
|
|
10282
10467
|
|
|
10283
10468
|
const currentFrame = g_scoreObj.frameNum;
|
|
10284
10469
|
lblframe.textContent = g_scoreObj.baseFrame;
|
|
@@ -10570,7 +10755,8 @@ const changeAppearanceFilter = (_appearance, _num = 10) => {
|
|
|
10570
10755
|
* @param {number} _x
|
|
10571
10756
|
* @param {string} _class
|
|
10572
10757
|
* @param {number} _heightPos
|
|
10573
|
-
* @param {string
|
|
10758
|
+
* @param {string|number} _text
|
|
10759
|
+
* @param {string} _display 表示有無 (inherit: 表示 / none: 非表示)
|
|
10574
10760
|
*/
|
|
10575
10761
|
const makeCounterSymbol = (_id, _x, _class, _heightPos, _text, _display = C_DIS_INHERIT) => {
|
|
10576
10762
|
return createDivCss2Label(_id, _text, {
|
|
@@ -10583,7 +10769,8 @@ const makeCounterSymbol = (_id, _x, _class, _heightPos, _text, _display = C_DIS_
|
|
|
10583
10769
|
/**
|
|
10584
10770
|
* ステップゾーンの表示・非表示切替
|
|
10585
10771
|
* @param {number} _j
|
|
10586
|
-
* @param {string} _display
|
|
10772
|
+
* @param {string} _display
|
|
10773
|
+
* @param {number} _alpha
|
|
10587
10774
|
*/
|
|
10588
10775
|
const appearStepZone = (_j, _display, _alpha = 1) => {
|
|
10589
10776
|
$id(`stepRoot${_j}`).display = _display;
|
|
@@ -10593,7 +10780,8 @@ const appearStepZone = (_j, _display, _alpha = 1) => {
|
|
|
10593
10780
|
/**
|
|
10594
10781
|
* 部分キーのステップゾーン出現処理
|
|
10595
10782
|
* @param {number} _j
|
|
10596
|
-
* @param {array} _targets
|
|
10783
|
+
* @param {array} _targets
|
|
10784
|
+
* @param {array} _alphas ステップゾーン毎の可視状況 (style.opacity の値)
|
|
10597
10785
|
*/
|
|
10598
10786
|
const appearKeyTypes = (_j, _targets, _alphas = fillArray(_targets.length, 1)) => {
|
|
10599
10787
|
appearStepZone(_j, C_DIS_NONE);
|
|
@@ -10761,7 +10949,7 @@ const keyIsDown = _keyCode => g_inputKeyBuffer[_keyCode];
|
|
|
10761
10949
|
/**
|
|
10762
10950
|
* 押したキーがシフトキーかどうかを判定
|
|
10763
10951
|
*/
|
|
10764
|
-
const keyIsShift =
|
|
10952
|
+
const keyIsShift = () => keyIsDown(g_kCdNameObj.shiftLKey) || keyIsDown(g_kCdNameObj.shiftRKey);
|
|
10765
10953
|
|
|
10766
10954
|
/**
|
|
10767
10955
|
* 矢印・フリーズアロー判定
|
|
@@ -10853,8 +11041,8 @@ const judgeArrow = _j => {
|
|
|
10853
11041
|
/**
|
|
10854
11042
|
* タイミングズレを表示
|
|
10855
11043
|
* @param {number} _difFrame
|
|
10856
|
-
* @param {string} _fjdg
|
|
10857
|
-
* @param {number} _justFrames
|
|
11044
|
+
* @param {string} _fjdg フリーズアロー判定有無 (フリーズアローのときは"F"が入る)
|
|
11045
|
+
* @param {number} _justFrames Fast/Slowの表示条件フレーム数
|
|
10858
11046
|
*/
|
|
10859
11047
|
const displayDiff = (_difFrame, _fjdg = ``, _justFrames = g_headerObj.justFrames) => {
|
|
10860
11048
|
let diffJDisp = ``;
|
|
@@ -10895,7 +11083,10 @@ const changeLifeColor = (_state = ``) => {
|
|
|
10895
11083
|
lifeBar.style.height = wUnit((g_headerObj.playingHeight - 100) * intLifeVal / g_headerObj.maxLifeVal);
|
|
10896
11084
|
};
|
|
10897
11085
|
|
|
10898
|
-
|
|
11086
|
+
/**
|
|
11087
|
+
* ゲージ回復処理
|
|
11088
|
+
*/
|
|
11089
|
+
const lifeRecovery = () => {
|
|
10899
11090
|
g_workObj.lifeVal += g_workObj.lifeRcv;
|
|
10900
11091
|
|
|
10901
11092
|
if (g_workObj.lifeVal >= g_headerObj.maxLifeVal) {
|
|
@@ -10908,7 +11099,7 @@ const lifeRecovery = _ => {
|
|
|
10908
11099
|
|
|
10909
11100
|
/**
|
|
10910
11101
|
* ゲージダメージ処理
|
|
10911
|
-
* @param {boolean} _excessive
|
|
11102
|
+
* @param {boolean} _excessive 空押し判定有無
|
|
10912
11103
|
*/
|
|
10913
11104
|
const lifeDamage = (_excessive = false) => {
|
|
10914
11105
|
g_workObj.lifeVal -= g_workObj.lifeDmg * (_excessive ? 0.25 : 1);
|
|
@@ -10938,7 +11129,7 @@ const changeJudgeCharacter = (_name, _character, _fjdg = ``) => {
|
|
|
10938
11129
|
/**
|
|
10939
11130
|
* コンボの更新
|
|
10940
11131
|
*/
|
|
10941
|
-
const updateCombo =
|
|
11132
|
+
const updateCombo = () => {
|
|
10942
11133
|
if (++g_resultObj.combo > g_resultObj.maxCombo) {
|
|
10943
11134
|
g_resultObj.maxCombo = g_resultObj.combo;
|
|
10944
11135
|
lblMCombo.textContent = g_resultObj.maxCombo;
|
|
@@ -11050,7 +11241,11 @@ const checkJudgment = (_difCnt) => {
|
|
|
11050
11241
|
return [jdgFuncList[idx], jdgList[idx]];
|
|
11051
11242
|
};
|
|
11052
11243
|
|
|
11053
|
-
|
|
11244
|
+
/**
|
|
11245
|
+
* クリア表示
|
|
11246
|
+
* @param {string} _state
|
|
11247
|
+
* @returns
|
|
11248
|
+
*/
|
|
11054
11249
|
const resultViewText = _state => _state === `` ? `` :
|
|
11055
11250
|
`<span class="result_${toCapitalize(_state)}">${g_lblNameObj[_state]}</span>`;
|
|
11056
11251
|
|
|
@@ -11065,7 +11260,7 @@ const makeFinishView = _text => {
|
|
|
11065
11260
|
document.getElementById(label).textContent = ``);
|
|
11066
11261
|
};
|
|
11067
11262
|
|
|
11068
|
-
const finishViewing =
|
|
11263
|
+
const finishViewing = () => {
|
|
11069
11264
|
if (g_currentArrows === g_fullArrows) {
|
|
11070
11265
|
if (g_resultObj.ii + g_resultObj.kita === g_fullArrows) {
|
|
11071
11266
|
g_resultObj.spState = `allPerfect`;
|
|
@@ -11087,7 +11282,7 @@ const finishViewing = _ => {
|
|
|
11087
11282
|
/**
|
|
11088
11283
|
* リザルト画面初期化
|
|
11089
11284
|
*/
|
|
11090
|
-
const resultInit =
|
|
11285
|
+
const resultInit = () => {
|
|
11091
11286
|
|
|
11092
11287
|
clearWindow(true);
|
|
11093
11288
|
g_currentPage = `result`;
|
|
@@ -11202,7 +11397,7 @@ const resultInit = _ => {
|
|
|
11202
11397
|
/**
|
|
11203
11398
|
* プレイスタイルのカスタム有無
|
|
11204
11399
|
* @param {string} _flg
|
|
11205
|
-
* @param {string
|
|
11400
|
+
* @param {string|boolean} _defaultSet デフォルト値
|
|
11206
11401
|
* @param {string} _displayText
|
|
11207
11402
|
*/
|
|
11208
11403
|
const withOptions = (_flg, _defaultSet, _displayText = _flg) =>
|
|
@@ -11275,7 +11470,14 @@ const resultInit = _ => {
|
|
|
11275
11470
|
makeCssResultPlayData(`lblDisplay2Data`, dataRX, g_cssObj.result_style, 5, display2Data),
|
|
11276
11471
|
);
|
|
11277
11472
|
|
|
11278
|
-
|
|
11473
|
+
/**
|
|
11474
|
+
* キャラクタ、スコア描画のID共通部、色CSS名、スコア変数名
|
|
11475
|
+
* @param {number} pos 表示位置(縦)
|
|
11476
|
+
* @param {string} id 表示用ラベルフッター
|
|
11477
|
+
* @param {string} color CSS用ラベルフッター
|
|
11478
|
+
* @param {string} label 表示名
|
|
11479
|
+
* @param {string} dfColor 表示する文字のカラーコード (リザルト画像で使用)
|
|
11480
|
+
*/
|
|
11279
11481
|
const jdgScoreObj = {
|
|
11280
11482
|
ii: { pos: 0, id: `Ii`, color: `ii`, label: g_lblNameObj.j_ii, dfColor: `#66ffff`, },
|
|
11281
11483
|
shakin: { pos: 1, id: `Shakin`, color: `shakin`, label: g_lblNameObj.j_shakin, dfColor: `#99ff99`, },
|
|
@@ -11391,7 +11593,7 @@ const resultInit = _ => {
|
|
|
11391
11593
|
|
|
11392
11594
|
if (g_stateObj.dataSaveFlg) {
|
|
11393
11595
|
|
|
11394
|
-
const setScoreData =
|
|
11596
|
+
const setScoreData = () => {
|
|
11395
11597
|
g_localStorage.highscores[scoreName].dateTime = currentDateTime;
|
|
11396
11598
|
g_localStorage.highscores[scoreName].rankMark = rankMark;
|
|
11397
11599
|
g_localStorage.highscores[scoreName].rankColor = rankColor;
|
|
@@ -11573,16 +11775,16 @@ const resultInit = _ => {
|
|
|
11573
11775
|
|
|
11574
11776
|
tmpDiv.appendChild(canvas);
|
|
11575
11777
|
|
|
11576
|
-
const viewResultImage =
|
|
11778
|
+
const viewResultImage = () => {
|
|
11577
11779
|
if (document.getElementById(`tmpClose`) === null) {
|
|
11578
|
-
divRoot.oncontextmenu =
|
|
11780
|
+
divRoot.oncontextmenu = () => true;
|
|
11579
11781
|
makeLinkButton(tmpDiv, `Tmp`);
|
|
11580
|
-
tmpDiv.appendChild(createCss2Button(`tmpClose`, g_lblNameObj.b_close,
|
|
11782
|
+
tmpDiv.appendChild(createCss2Button(`tmpClose`, g_lblNameObj.b_close, () => true,
|
|
11581
11783
|
Object.assign(g_lblPosObj.btnRsCopyClose, {
|
|
11582
|
-
resetFunc:
|
|
11784
|
+
resetFunc: () => {
|
|
11583
11785
|
tmpDiv.removeChild(canvas);
|
|
11584
11786
|
divRoot.removeChild(tmpDiv);
|
|
11585
|
-
divRoot.oncontextmenu =
|
|
11787
|
+
divRoot.oncontextmenu = () => false;
|
|
11586
11788
|
},
|
|
11587
11789
|
}), g_cssObj.button_Back));
|
|
11588
11790
|
tmpDiv.appendChild(createDescDiv(`resultImageDesc`, g_lblNameObj.resultImageDesc));
|
|
@@ -11615,9 +11817,17 @@ const resultInit = _ => {
|
|
|
11615
11817
|
}
|
|
11616
11818
|
};
|
|
11617
11819
|
|
|
11618
|
-
/**
|
|
11820
|
+
/**
|
|
11821
|
+
* 音源、ループ処理の停止
|
|
11822
|
+
* @param {string} _id
|
|
11823
|
+
* @param {string} _name
|
|
11824
|
+
* @param {object} _posObj
|
|
11825
|
+
* @param {function} _func
|
|
11826
|
+
* @param {...any} _cssClass
|
|
11827
|
+
* @returns
|
|
11828
|
+
*/
|
|
11619
11829
|
const resetCommonBtn = (_id, _name, _posObj, _func, _cssClass) =>
|
|
11620
|
-
createCss2Button(_id, _name,
|
|
11830
|
+
createCss2Button(_id, _name, () => {
|
|
11621
11831
|
if (g_finishFlg) {
|
|
11622
11832
|
g_audio.pause();
|
|
11623
11833
|
}
|
|
@@ -11633,13 +11843,13 @@ const resultInit = _ => {
|
|
|
11633
11843
|
const makeLinkButton = (_div = divRoot, _param = ``) => {
|
|
11634
11844
|
multiAppend(_div,
|
|
11635
11845
|
// リザルトデータをX (Twitter)へ転送
|
|
11636
|
-
createCss2Button(`btnTweet${_param}`, g_lblNameObj.b_tweet,
|
|
11637
|
-
resetFunc:
|
|
11846
|
+
createCss2Button(`btnTweet${_param}`, g_lblNameObj.b_tweet, () => true, Object.assign(g_lblPosObj.btnRsTweet, {
|
|
11847
|
+
resetFunc: () => openLink(tweetResult),
|
|
11638
11848
|
}), g_cssObj.button_Tweet),
|
|
11639
11849
|
|
|
11640
11850
|
// Discordへのリンク
|
|
11641
|
-
createCss2Button(`btnGitter${_param}`, g_lblNameObj.b_gitter,
|
|
11642
|
-
resetFunc:
|
|
11851
|
+
createCss2Button(`btnGitter${_param}`, g_lblNameObj.b_gitter, () => true, Object.assign(g_lblPosObj.btnRsGitter, {
|
|
11852
|
+
resetFunc: () => openLink(g_linkObj.discord),
|
|
11643
11853
|
}), g_cssObj.button_Discord),
|
|
11644
11854
|
);
|
|
11645
11855
|
}
|
|
@@ -11651,7 +11861,7 @@ const resultInit = _ => {
|
|
|
11651
11861
|
resetCommonBtn(`btnBack`, g_lblNameObj.b_back, g_lblPosObj.btnRsBack, titleInit, g_cssObj.button_Back),
|
|
11652
11862
|
|
|
11653
11863
|
// リザルトデータをクリップボードへコピー
|
|
11654
|
-
createCss2Button(`btnCopy`, g_lblNameObj.b_copy,
|
|
11864
|
+
createCss2Button(`btnCopy`, g_lblNameObj.b_copy, () =>
|
|
11655
11865
|
copyTextToClipboard(keyIsShift() ?
|
|
11656
11866
|
unEscapeHtml(resultCommonTmp) : resultText, g_msgInfoObj.I_0001),
|
|
11657
11867
|
g_lblPosObj.btnRsCopy, g_cssObj.button_Setting),
|
|
@@ -11661,9 +11871,9 @@ const resultInit = _ => {
|
|
|
11661
11871
|
// リトライ
|
|
11662
11872
|
resetCommonBtn(`btnRetry`, g_lblNameObj.b_retry, g_lblPosObj.btnRsRetry, loadMusic, g_cssObj.button_Reset),
|
|
11663
11873
|
|
|
11664
|
-
createCss2Button(`btnCopyImage`, `📷`,
|
|
11874
|
+
createCss2Button(`btnCopyImage`, `📷`, () => true,
|
|
11665
11875
|
Object.assign(g_lblPosObj.btnRsCopyImage, {
|
|
11666
|
-
resetFunc:
|
|
11876
|
+
resetFunc: () => copyResultImageData(g_msgInfoObj.I_0001),
|
|
11667
11877
|
}), g_cssObj.button_Default_NoColor),
|
|
11668
11878
|
);
|
|
11669
11879
|
|
|
@@ -11683,7 +11893,7 @@ const resultInit = _ => {
|
|
|
11683
11893
|
/**
|
|
11684
11894
|
* タイトルのモーション設定
|
|
11685
11895
|
*/
|
|
11686
|
-
const flowResultTimeline =
|
|
11896
|
+
const flowResultTimeline = () => {
|
|
11687
11897
|
|
|
11688
11898
|
// ユーザカスタムイベント(フレーム毎)
|
|
11689
11899
|
g_customJsObj.resultEnterFrame.forEach(func => func());
|
|
@@ -11717,8 +11927,8 @@ const resultInit = _ => {
|
|
|
11717
11927
|
flowResultTimeline();
|
|
11718
11928
|
|
|
11719
11929
|
// キー操作イベント(デフォルト)
|
|
11720
|
-
setShortcutEvent(g_currentPage,
|
|
11721
|
-
document.oncontextmenu =
|
|
11930
|
+
setShortcutEvent(g_currentPage, () => true, { dfEvtFlg: true });
|
|
11931
|
+
document.oncontextmenu = () => true;
|
|
11722
11932
|
|
|
11723
11933
|
g_skinJsObj.result.forEach(func => func());
|
|
11724
11934
|
};
|
|
@@ -11726,7 +11936,18 @@ const resultInit = _ => {
|
|
|
11726
11936
|
/**
|
|
11727
11937
|
* リザルトフォーマットの整形処理
|
|
11728
11938
|
* @param {string} _format
|
|
11729
|
-
* @param {object} フォーマット置き換え変数群
|
|
11939
|
+
* @param {object} object フォーマット置き換え変数群
|
|
11940
|
+
* @param {string} object.hashTag ハッシュタグ
|
|
11941
|
+
* @param {string} object.musicTitle 曲名
|
|
11942
|
+
* @param {string} object.tweetDifData 譜面名
|
|
11943
|
+
* @param {string} object.tuning 製作者名
|
|
11944
|
+
* @param {string} object.rankMark ランク
|
|
11945
|
+
* @param {string} object.playStyleData プレイ設定
|
|
11946
|
+
* @param {object} object.highscore ハイスコア(判定別)
|
|
11947
|
+
* @param {string} object.tweetExcessive 空押し判定状況
|
|
11948
|
+
* @param {string} object.tweetFrzJdg フリーズアロー判定状況
|
|
11949
|
+
* @param {string} object.tweetMaxCombo コンボ数状況
|
|
11950
|
+
* @param {string} object.baseTwitUrl X投稿用URL
|
|
11730
11951
|
* @returns
|
|
11731
11952
|
*/
|
|
11732
11953
|
const makeResultText = (_format, {
|
|
@@ -11754,6 +11975,8 @@ const makeResultText = (_format, {
|
|
|
11754
11975
|
* @param {number} _heightPos
|
|
11755
11976
|
* @param {string} _text
|
|
11756
11977
|
* @param {string} _align
|
|
11978
|
+
* @param {number} object.w
|
|
11979
|
+
* @param {number} object.siz
|
|
11757
11980
|
*/
|
|
11758
11981
|
const makeCssResultPlayData = (_id, _x, _class, _heightPos, _text, _align = C_ALIGN_CENTER, { w = 400, siz = g_limitObj.mainSiz } = {}) =>
|
|
11759
11982
|
createDivCss2Label(_id, _text, {
|