/
domahes
/
Arcade
Обзор
Документация
Войти
/
domahes
/
Arcade
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
js/window/WMenu.js
217 строк
7 KB
domahes
Update game scripts and data configurations
01 июн 2026, 10:11
01 июн 2026, 10:11
83cd2f8
Код
Авторство
О чём код?
/** * Created by YewMoon on 2020/5/27. * Interface·Menu * @param ui */ function WMenu(ui){ var _sf = this; this.keyName = ""; this.keyCode = ""; // State of key rebinding this.isRebinding = false; this.rebindIndex = -1; // List mapping indices of buttonGroup to RC.Key properties var keyList = []; this.init = function(){ var keyText1 = "Up\\nDown\\nLeft\\nRight\\nJump\\nRun\\nAttack\\nConfirm\\nCall Menu/Close\\n"; var keyText2 = ""; var keyText3 = ""; var baseKeys = ["up", "down", "left", "right", "jump", "run", "atk", "ok", "cancel"]; var keyCode1 = ""; for (var i = 0; i < baseKeys.length; i++) { keyCode1 += RC.CodeToSting(RC.Key[baseKeys[i]]) + "\\n"; } var keyCode2 = ""; var keyCode3 = ""; if(RV.NowSet.setAll.maxItems > 0){ keyText1 += "\\n"; keyCode1 += "\\n"; } for(var i = 0; i<RV.NowSet.setAll.maxItems; i++){ keyText2 += "Item"+ (i + 1) + "\\n"; var tempNameI = RC.Key["item" + (i + 1)]; keyCode2 += RC.CodeToSting(tempNameI)+"\\n"; } for(i = 0; i<RV.NowSet.setAll.maxSkills; i++){ keyText3 += "Skill"+ (i + 1) + "\\n"; var tempNameS = RC.Key["skill" + (i + 1)]; keyCode3 += RC.CodeToSting(tempNameS)+"\\n"; } _sf.keyName = keyText1 + keyText2 + "\\n"+ keyText3; _sf.keyCode = keyCode1 + keyCode2 + "\\n"+ keyCode3; // Build mapping keyList = []; for (var i = 0; i < baseKeys.length; i++) { keyList.push({ name: baseKeys[i], key: baseKeys[i], type: "key", index: i }); } if(RV.NowSet.setAll.maxItems > 0){ keyList.push({ name: "", key: null, type: "spacer" }); } for(var i = 0; i<RV.NowSet.setAll.maxItems; i++){ var isKey2 = (i >= 4); var keyIndex = isKey2 ? (i - 4) : (9 + i); keyList.push({ name: "item" + (i + 1), key: "item" + (i + 1), type: isKey2 ? "key2" : "key", index: keyIndex }); } keyList.push({ name: "", key: null, type: "spacer" }); for(var i = 0; i<RV.NowSet.setAll.maxSkills; i++){ var isKey2 = (i >= 5); var keyIndex = isKey2 ? (6 + i - 5) : (13 + i); keyList.push({ name: "skill" + (i + 1), key: "skill" + (i + 1), type: isKey2 ? "key2" : "key", index: keyIndex }); } }; // Helper to refresh key list showing rebinding prompt this.refreshKeyTexts = function(rebindingIndex) { var keyCode1 = ""; var keyCode2 = ""; var keyCode3 = ""; var getKeyCodeText = function(itemIndex, defaultText) { if (rebindingIndex === itemIndex) { return "[ Нажмите клавишу... ]"; } return defaultText; }; var currentLine = 0; var baseKeys = ["up", "down", "left", "right", "jump", "run", "atk", "ok", "cancel"]; for (var i = 0; i < baseKeys.length; i++) { keyCode1 += getKeyCodeText(currentLine, RC.CodeToSting(RC.Key[baseKeys[i]])) + "\\n"; currentLine++; } if(RV.NowSet.setAll.maxItems > 0){ keyCode1 += "\\n"; currentLine++; } for(var i = 0; i < RV.NowSet.setAll.maxItems; i++){ var tempNameI = RC.Key["item" + (i + 1)]; keyCode2 += getKeyCodeText(currentLine, RC.CodeToSting(tempNameI)) + "\\n"; currentLine++; } keyCode2 += ""; currentLine++; // spacer for(var i = 0; i < RV.NowSet.setAll.maxSkills; i++){ var tempNameS = RC.Key["skill" + (i + 1)]; keyCode3 += getKeyCodeText(currentLine, RC.CodeToSting(tempNameS)) + "\\n"; currentLine++; } _sf.keyCode = keyCode1 + keyCode2 + "\\n" + keyCode3; }; this.initAfter = function(){ // Ensure starting index is not a spacer if (_sf.buttonGroup && (_sf.buttonGroup.index < 0 || (keyList[_sf.buttonGroup.index] && keyList[_sf.buttonGroup.index].type === "spacer"))) { _sf.buttonGroup.index = 0; _sf.buttonGroup.SelectIndex(0); } }; this.update = function(){ // Key Rebinding State if (_sf.isRebinding) { if (IInput.keyCodeAry && IInput.keyCodeAry.length > 0) { var newKeyCode = IInput.keyCodeAry[0]; IInput.keyCodeAry = []; // clear input queue if (newKeyCode === 27) { // Escape key cancels rebinding RV.GameSet.playCancelSE(); _sf.isRebinding = false; _sf.refreshKeyTexts(-1); return; } var keyInfo = keyList[_sf.rebindIndex]; if (keyInfo && keyInfo.key) { // Rebind key in RC.Key RC.Key[keyInfo.key] = newKeyCode; // Rebind in the configuration arrays if (keyInfo.type === "key") { RV.NowSet.setAll.key[keyInfo.index] = newKeyCode; } else if (keyInfo.type === "key2") { RV.NowSet.setAll.key2[keyInfo.index] = newKeyCode; } // Play sound and save RV.GameSet.playEnterSE(); RV.GameSet.save(); } _sf.isRebinding = false; _sf.refreshKeyTexts(-1); } return; // Block other inputs while rebinding } // Standard Menu State if(IInput.isKeyDown(RC.Key.down)){ RV.GameSet.playSelectSE(); var nextIndex = _sf.buttonGroup.index; do { nextIndex += 1; if(nextIndex >= _sf.buttonGroup.getMax()) { nextIndex = 0; } } while(keyList[nextIndex] && keyList[nextIndex].type === "spacer"); _sf.buttonGroup.index = nextIndex; _sf.buttonGroup.SelectIndex(nextIndex); } if(IInput.isKeyDown(RC.Key.up)){ RV.GameSet.playSelectSE(); var prevIndex = _sf.buttonGroup.index; do { prevIndex -= 1; if(prevIndex < 0) { prevIndex = _sf.buttonGroup.getMax() - 1; } } while(keyList[prevIndex] && keyList[prevIndex].type === "spacer"); _sf.buttonGroup.index = prevIndex; _sf.buttonGroup.SelectIndex(prevIndex); } if(IInput.isKeyDown(RC.Key.ok)){ var keyInfo = keyList[_sf.buttonGroup.index]; if (keyInfo && keyInfo.type !== "spacer") { // Enter rebinding state RV.GameSet.playEnterSE(); _sf.isRebinding = true; _sf.rebindIndex = _sf.buttonGroup.index; IInput.keyCodeAry = []; // clear prior inputs _sf.refreshKeyTexts(_sf.rebindIndex); } } if(IInput.isKeyDown(RC.Key.cancel)){ RV.GameSet.playCancelSE(); _sf.dispose(); } }; this.dispose = function(){ LUI.DisposeCtrl(_sf.ctrlItems); }; }