Merge pull request #1 from jimmyGALLAND/change_keys
Feat: Support Azerty keyboard and improve cross-browser and environment compatibility
Cette révision appartient à :
+114
-53
@@ -21,59 +21,6 @@ var MIN_SCALE = 0.5,
|
||||
var MENU_ICON_X = 40, MENU_ICON_Y = 36, ICON_BORDER = 4;
|
||||
var BASE_ICON_X = (MENU_ICON_X + ICON_BORDER * 2);
|
||||
|
||||
var KEYCODE_BKSPACE = 8, //backspace
|
||||
KEYCODE_ENTER = 13,
|
||||
KEYCODE_SPACE = 32,
|
||||
KEYCODE_ESC = 27, //escape
|
||||
|
||||
KEYCODE_X = 88, //dig right
|
||||
KEYCODE_Y = 89, //dig left (Y key to dig left, for German keyboards)
|
||||
KEYCODE_Z = 90, //dig left
|
||||
|
||||
KEYCODE_LEFT = 37, //move left
|
||||
KEYCODE_RIGHT = 39, //move right
|
||||
KEYCODE_UP = 38, //move up
|
||||
KEYCODE_DOWN = 40, //move down
|
||||
|
||||
KEYCODE_SUBTRACT = 109, //Add KEYCODE_SUBTRACT & KEYCODE_HYPHEN for support fireFox 'dash' keycode
|
||||
KEYCODE_HYPHEN = 173, //
|
||||
KEYCODE_DASH = 189, //'-'
|
||||
KEYCODE_DOT = 190, //'.'
|
||||
|
||||
KEYCODE_U = 85, //dig left
|
||||
KEYCODE_O = 79, //dig right
|
||||
|
||||
KEYCODE_J = 74, //move left
|
||||
KEYCODE_L = 76, //move right
|
||||
KEYCODE_I = 73, //move up
|
||||
KEYCODE_K = 75, //move down
|
||||
|
||||
KEYCODE_PERIOD = 190, //'.'
|
||||
KEYCODE_COMMA = 188, //','
|
||||
|
||||
KEYCODE_A = 65, //'A'
|
||||
KEYCODE_C = 67, //'C'
|
||||
KEYCODE_D = 68, //'D'
|
||||
KEYCODE_E = 69, //'E'
|
||||
KEYCODE_G = 71, //'G'
|
||||
KEYCODE_H = 72, //'H'
|
||||
KEYCODE_Q = 81, //'Q'
|
||||
KEYCODE_R = 82, //'R'
|
||||
KEYCODE_S = 83, //'S'
|
||||
KEYCODE_T = 84, //'T'
|
||||
KEYCODE_V = 86, //'V'
|
||||
KEYCODE_W = 87; //'W'
|
||||
|
||||
var KEYCODE_0 = 48,
|
||||
KEYCODE_1 = 49,
|
||||
KEYCODE_2 = 50,
|
||||
KEYCODE_3 = 51,
|
||||
KEYCODE_4 = 52,
|
||||
KEYCODE_5 = 53,
|
||||
KEYCODE_6 = 54,
|
||||
KEYCODE_7 = 55,
|
||||
KEYCODE_8 = 56,
|
||||
KEYCODE_9 = 57;
|
||||
|
||||
var SCORE_COMPLETE_LEVEL = 1500, SCORE_COUNTER = 15,
|
||||
SCORE_GET_GOLD = 250,
|
||||
@@ -198,3 +145,117 @@ var STORAGE_GAMEPAD_MODE = "loderunner_gamepadMode";
|
||||
// backup & restore file header
|
||||
//================================
|
||||
var LRWG_FILE_START_INFO = "LODE RUNNER WEB GAME.";
|
||||
|
||||
//================================
|
||||
// keyCode and code relations
|
||||
//================================
|
||||
|
||||
var actionKeyMapping = [
|
||||
[ "KeyA", "ArrowLeft"], //move left
|
||||
[ "KeyD", "ArrowRight"], //move right
|
||||
[ "KeyW", "ArrowUp"], //move up
|
||||
[ "KeyS", "ArrowDown"], //move down
|
||||
[ "KeyQ", "KeyZ"], //dig left
|
||||
[ "KeyE", "KeyX"], //dig right
|
||||
[ "Comma", "KeyZ"], //dig left
|
||||
[ "Period", "KeyX"] //dig right
|
||||
];
|
||||
|
||||
var MAPKEYCODE = {
|
||||
8: "Backspace",
|
||||
9: "Tab",
|
||||
13: "Enter",
|
||||
16: "ShiftLeft",
|
||||
17: "ControlLeft",
|
||||
18: "AltLeft",
|
||||
19: "Pause",
|
||||
20: "CapsLock",
|
||||
27: "Escape",
|
||||
32: "Space",
|
||||
33: "PageUp",
|
||||
34: "PageDown",
|
||||
35: "End",
|
||||
36: "Home",
|
||||
37: "ArrowLeft",
|
||||
38: "ArrowUp",
|
||||
39: "ArrowRight",
|
||||
40: "ArrowDown",
|
||||
45: "Insert",
|
||||
46: "Delete",
|
||||
48: "Digit0",
|
||||
49: "Digit1",
|
||||
50: "Digit2",
|
||||
51: "Digit3",
|
||||
52: "Digit4",
|
||||
53: "Digit5",
|
||||
54: "Digit6",
|
||||
55: "Digit7",
|
||||
56: "Digit8",
|
||||
57: "Digit9",
|
||||
65: "KeyA",
|
||||
66: "KeyB",
|
||||
67: "KeyC",
|
||||
68: "KeyD",
|
||||
69: "KeyE",
|
||||
70: "KeyF",
|
||||
71: "KeyG",
|
||||
72: "KeyH",
|
||||
73: "KeyI",
|
||||
74: "KeyJ",
|
||||
75: "KeyK",
|
||||
76: "KeyL",
|
||||
77: "KeyM",
|
||||
78: "KeyN",
|
||||
79: "KeyO",
|
||||
80: "KeyP",
|
||||
81: "KeyQ",
|
||||
82: "KeyR",
|
||||
83: "KeyS",
|
||||
84: "KeyT",
|
||||
85: "KeyU",
|
||||
86: "KeyV",
|
||||
87: "KeyW",
|
||||
88: "KeyX",
|
||||
89: "KeyY",
|
||||
90: "KeyZ",
|
||||
91: "MetaLeft",
|
||||
93: "ContextMenu",
|
||||
96: "Numpad0",
|
||||
97: "Numpad1",
|
||||
98: "Numpad2",
|
||||
99: "Numpad3",
|
||||
100: "Numpad4",
|
||||
101: "Numpad5",
|
||||
102: "Numpad6",
|
||||
103: "Numpad7",
|
||||
104: "Numpad8",
|
||||
105: "Numpad9",
|
||||
106: "NumpadMultiply",
|
||||
107: "NumpadAdd",
|
||||
109: "NumpadSubtract",
|
||||
110: "NumpadDecimal",
|
||||
111: "NumpadDivide",
|
||||
112: "F1",
|
||||
113: "F2",
|
||||
114: "F3",
|
||||
115: "F4",
|
||||
116: "F5",
|
||||
117: "F6",
|
||||
118: "F7",
|
||||
119: "F8",
|
||||
120: "F9",
|
||||
121: "F10",
|
||||
122: "F11",
|
||||
123: "F12",
|
||||
186: "Semicolon",
|
||||
187: "Equal",
|
||||
188: "Comma",
|
||||
189: "Minus",
|
||||
190: "Period",
|
||||
191: "Slash",
|
||||
192: "Backquote",
|
||||
219: "BracketLeft",
|
||||
220: "Backslash",
|
||||
221: "BracketRight",
|
||||
222: "Quote"
|
||||
};
|
||||
+28
-22
@@ -57,7 +57,6 @@ function countAutoDemoTimer()
|
||||
{
|
||||
if(demoCountEnable) {
|
||||
demoCountTime++;
|
||||
//debug(demoCountTime);
|
||||
if(demoCountTime > MAX_DEMO_WAIT_COUNT) {
|
||||
disableAutoDemoTimer();
|
||||
gameState = GAME_WAITING;
|
||||
@@ -88,7 +87,7 @@ function playDemo()
|
||||
if(demoRecordIdx < demoRecord.length) {
|
||||
if(demoRecord[demoRecordIdx*2] == demoTickCount) {
|
||||
//loadingTxt.text = demoRecordIdx + " " + demoTickCount ; //for debug
|
||||
pressKey(demoRecord[demoRecordIdx*2+1]);
|
||||
pressKey(keyCodeToEventCode(demoRecord[demoRecordIdx*2+1]));
|
||||
demoRecordIdx++;
|
||||
}
|
||||
}
|
||||
@@ -214,7 +213,7 @@ function getNextDemoLevel()
|
||||
initDemoInfo();
|
||||
}
|
||||
|
||||
function curDemoLevelIsVaild()
|
||||
function curDemoLevelIsValid()
|
||||
{
|
||||
if(playData == PLAY_DATA_USERDEF) return 0;
|
||||
return (playerDemoData.length >= curLevel && typeof playerDemoData[curLevel-1] != "undefined");
|
||||
@@ -319,6 +318,7 @@ function recordModeDump(state)
|
||||
dumpRecord();
|
||||
}
|
||||
|
||||
|
||||
function recordModeToggle(state)
|
||||
{
|
||||
if(recordMode == RECORD_KEY) {
|
||||
@@ -352,7 +352,8 @@ function recordKeyAction1()
|
||||
if(!keyPressed) return;
|
||||
if(recordKeyCode != lastKeyCode || alwaysRecord) {
|
||||
playRecord.push(recordCount);
|
||||
playRecord.push(recordKeyCode);
|
||||
code=codeToEventKeyCode(recordKeyCode)
|
||||
playRecord.push(codeToEventKeyCode(recordKeyCode));
|
||||
lastKeyCode = recordKeyCode;
|
||||
}
|
||||
keyPressed = 0;
|
||||
@@ -366,16 +367,17 @@ function recordKeyAction2()
|
||||
case 1: //pressed
|
||||
if(recordKeyCode != lastKeyCode || alwaysRecord) {
|
||||
playRecord.push(recordCount);
|
||||
playRecord.push(recordKeyCode);
|
||||
code=codeToEventKeyCode(recordKeyCode)
|
||||
playRecord.push(codeToEventKeyCode(recordKeyCode));
|
||||
lastKeyCode = recordKeyCode;
|
||||
}
|
||||
if(alwaysRecord) keyPressed = -1; //floating
|
||||
break;
|
||||
case 0: //release
|
||||
if(recordKeyCode != KEYCODE_SPACE) {
|
||||
if(recordKeyCode != "Space") {
|
||||
playRecord.push(recordCount);
|
||||
playRecord.push(KEYCODE_SPACE);
|
||||
lastKeyCode = recordKeyCode = KEYCODE_SPACE;
|
||||
playRecord.push(codeToEventKeyCode("Space"));
|
||||
lastKeyCode = recordKeyCode = "Space";
|
||||
keyAction = ACT_STOP;
|
||||
}
|
||||
break;
|
||||
@@ -389,7 +391,8 @@ function recordPlayDemo()
|
||||
if(recordIdx < playRecord.length) {
|
||||
if(playRecord[recordIdx*2] == recordCount) {
|
||||
//loadingTxt.text = recordIdx; //for debug
|
||||
pressKey(playRecord[recordIdx*2+1]);
|
||||
code=playRecord[recordIdx*2+1];
|
||||
pressKey(keyCodeToEventCode(demoRecord[demoRecordIdx*2+1]));
|
||||
recordIdx++;
|
||||
}
|
||||
}
|
||||
@@ -429,17 +432,6 @@ function recordPlayTime(state)
|
||||
recordState = (state == GAME_FINISH)?1:0; //finish or dead
|
||||
}
|
||||
|
||||
var actionKeyMapping = [
|
||||
[ KEYCODE_A, KEYCODE_LEFT], //move left
|
||||
[ KEYCODE_D, KEYCODE_RIGHT], //move right
|
||||
[ KEYCODE_W, KEYCODE_UP], //move up
|
||||
[ KEYCODE_S, KEYCODE_DOWN], //move down
|
||||
[ KEYCODE_Q, KEYCODE_Z], //dig left
|
||||
[ KEYCODE_E, KEYCODE_X], //dig right
|
||||
[ KEYCODE_COMMA, KEYCODE_Z], //dig left
|
||||
[ KEYCODE_PERIOD, KEYCODE_X] //dig right
|
||||
];
|
||||
|
||||
//Remap action key to orignal "left, right, up down and Z, X"
|
||||
//for backward compatible
|
||||
function remapActionKey()
|
||||
@@ -454,6 +446,21 @@ function remapActionKey()
|
||||
}
|
||||
}
|
||||
|
||||
function codeToEventKeyCode(code)
|
||||
{
|
||||
for (const [key, value] of Object.entries(MAPKEYCODE)) {
|
||||
if (value === code) {
|
||||
return Number(key);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function keyCodeToEventCode(keyCode)
|
||||
{
|
||||
return MAPKEYCODE[keyCode] || "";
|
||||
}
|
||||
|
||||
function convertBornPos()
|
||||
{
|
||||
var len, offset = 1;
|
||||
@@ -475,7 +482,6 @@ var curDemoData = { ai: AI_VERSION, time: 0 }; //bug fixed: when press CTRL-C wi
|
||||
function dumpRecord()
|
||||
{
|
||||
var txtStr;
|
||||
|
||||
curDemoData = {};
|
||||
curDemoData.level = curLevel;
|
||||
curDemoData.ai = AI_VERSION;
|
||||
@@ -511,7 +517,7 @@ function dumpRecord()
|
||||
for(var i = 1; i < playRecord.length; i++) {
|
||||
txtStr += ", " + playRecord[i];
|
||||
}
|
||||
debug(txtStr+ " ], //" + (playRecord.length/2));
|
||||
debug(txtStr+ " ],");
|
||||
} else {
|
||||
debug(" action: [ ],");
|
||||
}
|
||||
|
||||
@@ -1032,15 +1032,15 @@ function editHandleKeyDown(event)
|
||||
if(!event){ event = window.event; } //cross browser issues exist
|
||||
|
||||
if (event.ctrlKey) {
|
||||
switch(event.keyCode) {
|
||||
case KEYCODE_C: //CTRL-C : copy current level
|
||||
switch(event.code) {
|
||||
case "KeyC": //CTRL-C : copy current level
|
||||
if (!editMapIsEmpty) {
|
||||
copyLevelMap = copyEditingMap();
|
||||
copyLevelPassed = (!testLevelInfo.modified && lastRunner) || testLevelInfo.pass;
|
||||
setTimeout(function() { showTipsText("COPY MAP", 1500);}, 50);
|
||||
}
|
||||
break;
|
||||
case KEYCODE_V: //CTRL-V : paste copy map
|
||||
case "KeyV": //CTRL-V : paste copy map
|
||||
if(copyLevelMap != null && editMapIsEmpty && testLevelInfo.level <= MAX_EDIT_LEVEL) {
|
||||
editPasteMap();
|
||||
}
|
||||
|
||||
+11
-11
@@ -108,15 +108,15 @@ function getLastGamepadInfo()
|
||||
|
||||
var keyCodeMapping = [
|
||||
//[[keyCode1, ctrl, shift], [keyCode2, ctrl, shift]
|
||||
[[KEYCODE_UP, 0, 0], [KEYCODE_UP, 0, 0]], //up
|
||||
[[KEYCODE_DOWN, 0, 0], [KEYCODE_DOWN, 0, 0]], //down
|
||||
[[KEYCODE_LEFT, 0, 0], [KEYCODE_LEFT, 0, 0]], //left
|
||||
[[KEYCODE_RIGHT, 0, 0], [KEYCODE_RIGHT, 0, 0]], //right
|
||||
[[KEYCODE_Z, 0, 0], [KEYCODE_ENTER, 0, 0]], //dig-left
|
||||
[[KEYCODE_X, 0, 0], [KEYCODE_ENTER, 0, 0]], //dig-right
|
||||
[[KEYCODE_ESC, 0, 0], [KEYCODE_ENTER, 0, 0]], //pause
|
||||
[[KEYCODE_ENTER, 0, 0], [KEYCODE_ENTER, 0, 0]], //enter
|
||||
[[KEYCODE_A, 1, 0], [KEYCODE_ENTER, 0, 0]] //game abort
|
||||
[["ArrowUp", 0, 0], ["ArrowUp", 0, 0]], //up
|
||||
[["ArrowDown", 0, 0], ["ArrowDown", 0, 0]], //down
|
||||
[["ArrowLeft", 0, 0], ["ArrowLeft", 0, 0]], //left
|
||||
[["ArrowRight", 0, 0], ["ArrowRight", 0, 0]], //right
|
||||
[["KeyZ", 0, 0], ["Enter", 0, 0]], //dig-left
|
||||
[["KeyX", 0, 0], ["Enter", 0, 0]], //dig-right
|
||||
[["Escape", 0, 0], ["Enter", 0, 0]], //pause
|
||||
[["Enter", 0, 0], ["Enter", 0, 0]], //enter
|
||||
[["KeyA", 1, 0], ["Enter", 0, 0]] //game abort
|
||||
];
|
||||
|
||||
var gameButtonMapping = [
|
||||
@@ -237,7 +237,7 @@ function sendKeyUp(twinKey, id)
|
||||
var key = (inputNameState)? twinKey[1]:twinKey[0];
|
||||
if(key[0] == null) return;
|
||||
|
||||
var event = {keyCode: key[0], ctrlKey: key[1], shiftKey: key[2]};
|
||||
var event = {code: key[0], ctrlKey: key[1], shiftKey: key[2]};
|
||||
//console.log("sendKeyUp = %d",keyCode );
|
||||
if(typeof document.onkeydown == "function" ) document.onkeyup(event);
|
||||
gamepadLastId = id;
|
||||
@@ -248,7 +248,7 @@ function sendKeyDown(twinKey, id)
|
||||
var key = (inputNameState)? twinKey[1]:twinKey[0];
|
||||
if(key[0] == null) return;
|
||||
|
||||
var event = {keyCode: key[0], ctrlKey: key[1], shiftKey: key[2]};
|
||||
var event = {code: key[0], ctrlKey: key[1], shiftKey: key[2]};
|
||||
//console.log("sendKeyDown = %d",keyCode );
|
||||
if(typeof document.onkeydown == "function" ) document.onkeydown(event);
|
||||
gamepadLastId = id;
|
||||
|
||||
+140
-115
@@ -309,65 +309,66 @@ function showScoreTable(_playData, _curScoreInfo, _callbackFun, _waitTime)
|
||||
|
||||
function handleHiScoreName(event)
|
||||
{
|
||||
if(!event){ event = window.event; } //cross browser issues exist
|
||||
if (!event) { event = window.event; }
|
||||
|
||||
var code = event.keyCode;
|
||||
let key = event.key;
|
||||
|
||||
if(curPos >= MAX_HISCORE_NAME_LENGTH &&
|
||||
code != KEYCODE_BKSPACE && code != KEYCODE_LEFT && code != KEYCODE_ENTER)
|
||||
{
|
||||
soundPlay("beep"); //wrong key code
|
||||
if (curPos >= MAX_HISCORE_NAME_LENGTH &&
|
||||
key !== "Backspace" && key !== "ArrowLeft" && key !== "Enter") {
|
||||
soundPlay("beep");
|
||||
return false;
|
||||
}
|
||||
|
||||
switch(true) {
|
||||
case (code >= 48 && code <= 57): // 0 ~ 9
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except numbers
|
||||
name[curPos++] = String.fromCharCode(code);
|
||||
break;
|
||||
case (code >=65 && code <= 90): // A ~ Z
|
||||
case (code >= 97 && code <= 122): //a ~ z
|
||||
if( code > 90) code -= 32;
|
||||
name[curPos++] = String.fromCharCode(code);
|
||||
break;
|
||||
case (code == KEYCODE_DOT): //'.'
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except '.'
|
||||
name[curPos++] = ".";
|
||||
break;
|
||||
case (code == KEYCODE_DASH || code == KEYCODE_HYPHEN || code == KEYCODE_SUBTRACT): //'-'
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except '-'
|
||||
name[curPos++] = "-";
|
||||
break;
|
||||
case (code == KEYCODE_SPACE): //space
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except space
|
||||
name[curPos++] = " ";
|
||||
break;
|
||||
case (code == KEYCODE_BKSPACE): //backspace
|
||||
if(curPos == 0) break;
|
||||
name.splice(--curPos, 1);
|
||||
break;
|
||||
case (code == KEYCODE_LEFT): //LEFT
|
||||
if(curPos > 0) curPos--;
|
||||
break;
|
||||
case (code == KEYCODE_RIGHT): //RIGHT
|
||||
if(curPos < name.length) curPos++;
|
||||
break;
|
||||
case (code == KEYCODE_UP): //UP
|
||||
name[curPos] = nextChar(name[curPos], 1);
|
||||
break;
|
||||
case (code == KEYCODE_DOWN): //DOWN
|
||||
name[curPos] = nextChar(name[curPos], -1);
|
||||
break;
|
||||
case (code == KEYCODE_ENTER): //ENTER
|
||||
if(vaildPlayerName(name)) {
|
||||
restoreKeyDownHandler(); //avoid type "ENTER" twice
|
||||
inputFinish(true); //async
|
||||
} else soundPlay("beep");
|
||||
break;
|
||||
default:
|
||||
//debug(code);
|
||||
if(code > 32) soundPlay("beep"); //wrong key code
|
||||
break;
|
||||
switch (true) {
|
||||
// 0–9
|
||||
case /^[0-9]$/.test(key):
|
||||
if (curPos === 0) { soundPlay("beep"); break; }
|
||||
name[curPos++] = key;
|
||||
break;
|
||||
// A–Z a–z
|
||||
case /^[a-zA-Z]$/.test(key):
|
||||
name[curPos++] = key.toUpperCase();
|
||||
break;
|
||||
case (key === "."):
|
||||
if (curPos === 0) { soundPlay("beep"); break; } //first char except '. '
|
||||
name[curPos++] = ".";
|
||||
break;
|
||||
case (key === "-"):
|
||||
if (curPos === 0) { soundPlay("beep"); break; } //first char except '-'
|
||||
name[curPos++] = "-";
|
||||
break;
|
||||
case (key === " "): //space
|
||||
if (curPos === 0) { soundPlay("beep"); break; } //first char except 'scace'
|
||||
name[curPos++] = " ";
|
||||
break;
|
||||
case (key === "Backspace"):
|
||||
if (curPos === 0) break;
|
||||
name.splice(--curPos, 1);
|
||||
break;
|
||||
case (key === "ArrowLeft"):
|
||||
if (curPos > 0) curPos--;
|
||||
break;
|
||||
case (key === "ArrowRight"):
|
||||
if (curPos < name.length) curPos++;
|
||||
break;
|
||||
case (key === "ArrowUp"):
|
||||
name[curPos] = nextChar(name[curPos], 1);
|
||||
break;
|
||||
case (key === "ArrowDown"):
|
||||
name[curPos] = nextChar(name[curPos], -1);
|
||||
break;
|
||||
case (key === "Enter"):
|
||||
if (validPlayerName(name)) {
|
||||
restoreKeyDownHandler(); // avoid type "ENTER" twice
|
||||
inputFinish(true); // async
|
||||
} else {
|
||||
soundPlay("beep");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (key.length > 1) soundPlay("beep"); // wrong key code
|
||||
break;
|
||||
}
|
||||
|
||||
redrawName();
|
||||
@@ -434,7 +435,7 @@ function inputPlayerName(_stage, _callbackFun)
|
||||
}
|
||||
}
|
||||
|
||||
function vaildPlayerName(playerArray)
|
||||
function validPlayerName(playerArray)
|
||||
{
|
||||
var len = playerArray.length;
|
||||
|
||||
@@ -512,78 +513,102 @@ function inputString(_stage, _maxSize, _startX, _startY, _defaultString, _callba
|
||||
|
||||
function nextChar(charValue, nextMode)
|
||||
{
|
||||
if(typeof(charValue) == "undefined") charValue = " ";
|
||||
var code = charValue.charCodeAt(0);
|
||||
if (typeof charValue !== "string" || charValue.length === 0) {
|
||||
charValue = " ";
|
||||
}
|
||||
|
||||
if(nextMode >=0) code++; else code--;
|
||||
let code = charValue.toUpperCase().charCodeAt(0);
|
||||
|
||||
if (code < 65 || code > 90) { //out of A-Z
|
||||
if(nextMode >=0) code = 65;
|
||||
else code= 90;
|
||||
code = 65;
|
||||
}
|
||||
|
||||
// nextMode >= 0 → next char else previous
|
||||
code += (nextMode >= 0) ? 1 : -1;
|
||||
|
||||
if (code > 90) code = 65;
|
||||
if (code < 65) code = 90;
|
||||
|
||||
return String.fromCharCode(code);
|
||||
}
|
||||
|
||||
function handleStringInput(event)
|
||||
{
|
||||
if(!event){ event = window.event; } //cross browser issues exist
|
||||
function handleStringInput(event) {
|
||||
if (!event) event = window.event;
|
||||
|
||||
var code = event.keyCode;
|
||||
let key = event.key;
|
||||
|
||||
if(curPos >= _maxSize && code != KEYCODE_BKSPACE && code != KEYCODE_LEFT && code != KEYCODE_ENTER)
|
||||
{
|
||||
soundPlay("beep"); //wrong key code
|
||||
if (
|
||||
curPos >= _maxSize &&
|
||||
!["Backspace", "ArrowLeft", "Enter"].includes(key)
|
||||
) {
|
||||
soundPlay("beep");
|
||||
return false;
|
||||
}
|
||||
|
||||
switch(true) {
|
||||
case (code >= 48 && code <= 57): // 0 ~ 9
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except numbers
|
||||
inputText[curPos++] = String.fromCharCode(code);
|
||||
break;
|
||||
case (code >=65 && code <= 90): // A ~ Z
|
||||
case (code >= 97 && code <= 122): //a ~ z
|
||||
if( code > 90) code -= 32;
|
||||
inputText[curPos++] = String.fromCharCode(code);
|
||||
break;
|
||||
case (code == KEYCODE_DOT): //'.'
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except '.'
|
||||
inputText[curPos++] = ".";
|
||||
break;
|
||||
case (code == KEYCODE_DASH || code == KEYCODE_HYPHEN || code == KEYCODE_SUBTRACT): //'-'
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except '-'
|
||||
inputText[curPos++] = "-";
|
||||
break;
|
||||
case (code == KEYCODE_SPACE): //space
|
||||
if(curPos == 0) { soundPlay("beep"); break; } //first char except space
|
||||
inputText[curPos++] = " ";
|
||||
break;
|
||||
case (code == KEYCODE_BKSPACE): //backspace
|
||||
if(curPos == 0) break;
|
||||
inputText.splice(--curPos, 1);
|
||||
break;
|
||||
case (code == KEYCODE_LEFT): //LEFT
|
||||
if(curPos > 0) curPos--;
|
||||
break;
|
||||
case (code == KEYCODE_RIGHT): //RIGHT
|
||||
if(curPos < inputText.length) curPos++;
|
||||
break;
|
||||
case (code == KEYCODE_UP): //UP
|
||||
inputText[curPos] = nextChar(inputText[curPos], 1);
|
||||
break;
|
||||
case (code == KEYCODE_DOWN): //DOWN
|
||||
inputText[curPos] = nextChar(inputText[curPos], -1);
|
||||
break;
|
||||
case (code == KEYCODE_ENTER): //ENTER
|
||||
if(vaildPlayerName(inputText)) {
|
||||
inputFinish();
|
||||
return true;
|
||||
} else soundPlay("beep");
|
||||
break;
|
||||
default:
|
||||
//debug(code);
|
||||
if(code > 32) soundPlay("beep"); //wrong key code
|
||||
break;
|
||||
switch (true) {
|
||||
// 0–9
|
||||
case /^[0-9]$/.test(key):
|
||||
if (curPos === 0) { soundPlay("beep"); break; }
|
||||
inputText[curPos++] = key;
|
||||
break;
|
||||
|
||||
// A–Z a-z
|
||||
case /^[a-zA-Z]$/.test(key):
|
||||
inputText[curPos++] = key.toUpperCase();
|
||||
break;
|
||||
|
||||
// '.'
|
||||
case key === ".":
|
||||
if (curPos === 0) { soundPlay("beep"); break; }
|
||||
inputText[curPos++] = ".";
|
||||
break;
|
||||
|
||||
// '-'
|
||||
case key === "-":
|
||||
if (curPos === 0) { soundPlay("beep"); break; }
|
||||
inputText[curPos++] = "-";
|
||||
break;
|
||||
|
||||
// Space
|
||||
case key === " ":
|
||||
if (curPos === 0) { soundPlay("beep"); break; }
|
||||
inputText[curPos++] = " ";
|
||||
break;
|
||||
|
||||
// Backscape
|
||||
case key === "Backspace":
|
||||
if (curPos === 0) break;
|
||||
inputText.splice(--curPos, 1);
|
||||
break;
|
||||
|
||||
// arrows
|
||||
case key === "ArrowLeft":
|
||||
if (curPos > 0) curPos--;
|
||||
break;
|
||||
case key === "ArrowRight":
|
||||
if (curPos < inputText.length) curPos++;
|
||||
break;
|
||||
case key === "ArrowUp":
|
||||
inputText[curPos] = nextChar(inputText[curPos], 1);
|
||||
break;
|
||||
case key === "ArrowDown":
|
||||
inputText[curPos] = nextChar(inputText[curPos], -1);
|
||||
break;
|
||||
|
||||
// validation
|
||||
case key === "Enter":
|
||||
if (validPlayerName(inputText)) {
|
||||
inputFinish();
|
||||
return true;
|
||||
} else {
|
||||
soundPlay("beep");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
//wrong key code
|
||||
if (key.length === 1 && key.charCodeAt(0) > 32) soundPlay("beep");
|
||||
break;
|
||||
}
|
||||
|
||||
drawString();
|
||||
|
||||
@@ -362,7 +362,7 @@ function demoIconClass( _screenX1, _screenY1, _scale, _bitmap)
|
||||
|
||||
this.enable = function ()
|
||||
{
|
||||
if(!curDemoLevelIsVaild()) {
|
||||
if(!curDemoLevelIsValid()) {
|
||||
self.disable(1);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -406,7 +406,7 @@ function infoMenuClass(_stage, _scale)
|
||||
function InfoKeyDown(event)
|
||||
{
|
||||
if(!event){ event = window.event; } //cross browser issues exist
|
||||
if(event.keyCode == KEYCODE_ESC) {
|
||||
if(event.code == "Escape") {
|
||||
closeInfoMenu();
|
||||
}
|
||||
return false;
|
||||
|
||||
+255
-265
@@ -4,132 +4,134 @@ var runnerDebug = 0;
|
||||
|
||||
function pressShiftKey(code)
|
||||
{
|
||||
/* cheat key code disable 5/16/2015
|
||||
switch(code) {
|
||||
case KEYCODE_PERIOD: //SHIFT-. = '>', change to next level
|
||||
shiftLevelNum = 1;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case KEYCODE_COMMA: //SHIFT-, = '<', change to previous level
|
||||
shiftLevelNum = 1;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case KEYCODE_UP: //SHIFT-UP, inc runner
|
||||
if(playMode == PLAY_CLASSIC && runnerLife < 10) { //bug fixed: add check playMode, 12/15/2014
|
||||
runnerLife++;
|
||||
drawLife();
|
||||
}
|
||||
break;
|
||||
case KEYCODE_X: //SHIFT-X
|
||||
toggleTrapTile();
|
||||
break;
|
||||
case KEYCODE_G: //SHIFT-G, toggle god mode
|
||||
toggleGodMode();
|
||||
break;
|
||||
default:
|
||||
if(runnerDebug) debugKeyPress(code);
|
||||
break;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
// cheat key code disable 5/16/2015
|
||||
switch(code) {
|
||||
case "Period": // SHIFT + . = '>', next level
|
||||
shiftLevelNum = 1;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case "Comma": // SHIFT + , = '<', previous level
|
||||
shiftLevelNum = 1;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case "ArrowUp": // SHIFT + UP, increase runner life
|
||||
if (playMode == PLAY_CLASSIC && runnerLife < 10) {
|
||||
runnerLife++;
|
||||
drawLife();
|
||||
}
|
||||
break;
|
||||
case "KeyX": // SHIFT + X
|
||||
toggleTrapTile();
|
||||
break;
|
||||
case "KeyG": // SHIFT + G, toggle god mode
|
||||
toggleGodMode();
|
||||
break;
|
||||
default:
|
||||
if (runnerDebug) debugKeyPress(code);
|
||||
break;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
function pressCtrlKey(code)
|
||||
{
|
||||
switch(code) {
|
||||
case KEYCODE_A: //CTRL-A : abort level
|
||||
gameState = GAME_RUNNER_DEAD;
|
||||
break;
|
||||
case KEYCODE_C: //CTRL-C : copy current level
|
||||
copyLevelMap = levelData[curLevel-1];
|
||||
copyLevelPassed = 1; //means copy from exists level
|
||||
showTipsText("COPY MAP", 1500);
|
||||
break;
|
||||
case KEYCODE_J: //CTRL-J : gamepad toggle
|
||||
toggleGamepadMode(1);
|
||||
//if(gamepadIconObj) gamepadIconObj.updateGamepadImage();
|
||||
break;
|
||||
case KEYCODE_K: //CTRL-K : repeat actions On/Off
|
||||
toggleRepeatAction();
|
||||
repeatActionIconObj.updateRepeatActionImage();
|
||||
break;
|
||||
case KEYCODE_R: //CTRL-R : abort game
|
||||
runnerLife = 1;
|
||||
gameState = GAME_RUNNER_DEAD;
|
||||
break;
|
||||
case KEYCODE_X: //CTRL-X
|
||||
toggleTrapTile();
|
||||
break;
|
||||
// case KEYCODE_Z: //CTRL-Z, toggle god mode
|
||||
// toggleGodMode();
|
||||
// break;
|
||||
case KEYCODE_S: //CTRL-S, toggle sound
|
||||
if( (soundOff ^= 1) == 1) {
|
||||
soundStop(soundDig);
|
||||
soundStop(soundFall);
|
||||
showTipsText("SOUND OFF", 1500);
|
||||
} else {
|
||||
showTipsText("SOUND ON", 1500);
|
||||
}
|
||||
soundIconObj.updateSoundImage(); //toggle sound On/Off icon
|
||||
break;
|
||||
case KEYCODE_LEFT: //SHIFT + <- : speed down
|
||||
setSpeed(-1);
|
||||
break;
|
||||
case KEYCODE_RIGHT: //SHIFT + -> : speed up
|
||||
setSpeed(1);
|
||||
break;
|
||||
case KEYCODE_H: //CTRL-H : redHat mode on/off
|
||||
toggleRedhatMode();
|
||||
break;
|
||||
case KEYCODE_1: //CTRL-1
|
||||
case KEYCODE_2: //CTRL-2
|
||||
case KEYCODE_3: //CTRL-3
|
||||
case KEYCODE_4: //CTRL-4
|
||||
case KEYCODE_5: //CTRL-5
|
||||
themeColorChange(code - KEYCODE_1);
|
||||
break;
|
||||
}
|
||||
switch (code) {
|
||||
case "KeyA": // CTRL-A : abort level
|
||||
case "KeyQ":
|
||||
gameState = GAME_RUNNER_DEAD;
|
||||
break;
|
||||
case "KeyC": // CTRL-C : copy current level
|
||||
copyLevelMap = levelData[curLevel - 1];
|
||||
copyLevelPassed = 1;
|
||||
showTipsText("COPY MAP", 1500);
|
||||
break;
|
||||
case "KeyJ": // CTRL-J : gamepad toggle
|
||||
toggleGamepadMode(1);
|
||||
//if(gamepadIconObj) gamepadIconObj.updateGamepadImage();
|
||||
break;
|
||||
case "KeyK": // CTRL-K : repeat actions On/Off
|
||||
toggleRepeatAction();
|
||||
repeatActionIconObj.updateRepeatActionImage();
|
||||
break;
|
||||
case "KeyR": // CTRL-R : abort game
|
||||
runnerLife = 1;
|
||||
gameState = GAME_RUNNER_DEAD;
|
||||
break;
|
||||
case "KeyX": // CTRL-X
|
||||
toggleTrapTile();
|
||||
break;
|
||||
// case "KeyZ": //CTRL-Z, toggle god mode
|
||||
// toggleGodMode();
|
||||
// break;
|
||||
case "KeyS": // CTRL-S, toggle sound
|
||||
if ((soundOff ^= 1) == 1) {
|
||||
soundStop(soundDig);
|
||||
soundStop(soundFall);
|
||||
showTipsText("SOUND OFF", 1500);
|
||||
} else {
|
||||
showTipsText("SOUND ON", 1500);
|
||||
}
|
||||
soundIconObj.updateSoundImage();
|
||||
break;
|
||||
case "ArrowLeft": // CTRL + ← : speed down
|
||||
setSpeed(-1);
|
||||
break;
|
||||
case "ArrowRight": // CTRL + → : speed up
|
||||
setSpeed(1);
|
||||
break;
|
||||
case "KeyH": // CTRL-H : redHat mode on/off
|
||||
toggleRedhatMode();
|
||||
break;
|
||||
case "Digit1":
|
||||
case "Digit2":
|
||||
case "Digit3":
|
||||
case "Digit4":
|
||||
case "Digit5":
|
||||
themeColorChange(parseInt(code.slice(-1)) - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function debugKeyPress(code)
|
||||
{
|
||||
switch(code) {
|
||||
case KEYCODE_1: //SHIFT-1 , add 5 level
|
||||
shiftLevelNum = 5;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case KEYCODE_2: //SHIFT-2 , add 10 level
|
||||
shiftLevelNum = 10;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case KEYCODE_3: //SHIFT-3 , add 20 level
|
||||
shiftLevelNum = 20;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case KEYCODE_4: //SHIFT-4 , add 50 level
|
||||
shiftLevelNum = 50;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case KEYCODE_6: //SHIFT-6 , dec 5 level
|
||||
shiftLevelNum = 5;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case KEYCODE_7: //SHIFT-7 , dec 10 level
|
||||
shiftLevelNum = 10;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case KEYCODE_8: //SHIFT-8 , dec 20 level
|
||||
shiftLevelNum = 20;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case KEYCODE_9: //SHIFT-9 , dec 50 level
|
||||
shiftLevelNum = 50;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
}
|
||||
switch (code) {
|
||||
case "Digit1":
|
||||
shiftLevelNum = 5;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case "Digit2":
|
||||
shiftLevelNum = 10;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case "Digit3":
|
||||
shiftLevelNum = 20;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case "Digit4":
|
||||
shiftLevelNum = 50;
|
||||
gameState = GAME_NEXT_LEVEL;
|
||||
break;
|
||||
case "Digit6":
|
||||
shiftLevelNum = 5;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case "Digit7":
|
||||
shiftLevelNum = 10;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case "Digit8":
|
||||
shiftLevelNum = 20;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
case "Digit9":
|
||||
shiftLevelNum = 50;
|
||||
gameState = GAME_PREV_LEVEL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var repeatAction = 0; //1: keyboard repeat on, 0: keyboard repeat Off
|
||||
var repeatAction = 0; //1: keyboard repeat on, 0: keyboard repeat Off
|
||||
var repeatActionPressed = 0;
|
||||
var gamepadMode = 1; //0: disable, 1: enable
|
||||
var redhatMode = 1;
|
||||
@@ -137,198 +139,186 @@ var godMode = 0, godModeKeyPressed = 0;
|
||||
|
||||
function initHotKeyVariable()
|
||||
{
|
||||
godMode = 0;
|
||||
godModeKeyPressed = 0;
|
||||
repeatActionPressed = 0;
|
||||
godMode = 0;
|
||||
godModeKeyPressed = 0;
|
||||
repeatActionPressed = 0;
|
||||
}
|
||||
|
||||
function toggleRepeatAction()
|
||||
{
|
||||
if( (repeatAction ^= 1) == 1) {
|
||||
showTipsText("REPEAT ACTIONS ON", 2500);
|
||||
} else {
|
||||
showTipsText("REPEAT ACTIONS OFF", 2500);
|
||||
}
|
||||
if(gameState != GAME_START) repeatActionPressed=1; //player change the "repeatAction" Mode at running
|
||||
|
||||
setRepeatAction();
|
||||
if ((repeatAction ^= 1) == 1) {
|
||||
showTipsText("REPEAT ACTIONS ON", 2500);
|
||||
} else {
|
||||
showTipsText("REPEAT ACTIONS OFF", 2500);
|
||||
}
|
||||
if (gameState != GAME_START) repeatActionPressed = 1;
|
||||
setRepeatAction();
|
||||
}
|
||||
|
||||
function toggleGamepadMode(textMsg)
|
||||
{
|
||||
if(!gamepadSupport()) {
|
||||
if(textMsg) showTipsText("GAMEPAD NOT SUPPORTED", 2500);
|
||||
gamepadMode = 0;
|
||||
} else {
|
||||
if( (gamepadMode ^= 1) == 1) {
|
||||
gamepadEnable();
|
||||
if(textMsg) showTipsText("GAMEPAD ON", 2500);
|
||||
} else {
|
||||
gamepadDisable();
|
||||
if(textMsg) showTipsText("GAMEPAD OFF", 2500);
|
||||
}
|
||||
}
|
||||
setGamepadMode();
|
||||
if (!gamepadSupport()) {
|
||||
if (textMsg) showTipsText("GAMEPAD NOT SUPPORTED", 2500);
|
||||
gamepadMode = 0;
|
||||
} else {
|
||||
if ((gamepadMode ^= 1) == 1) {
|
||||
gamepadEnable();
|
||||
if (textMsg) showTipsText("GAMEPAD ON", 2500);
|
||||
} else {
|
||||
gamepadDisable();
|
||||
if (textMsg) showTipsText("GAMEPAD OFF", 2500);
|
||||
}
|
||||
}
|
||||
setGamepadMode();
|
||||
}
|
||||
|
||||
function toggleRedhatMode()
|
||||
{
|
||||
if( (redhatMode ^= 1) == 1 ) { //enable
|
||||
for(var i = 0; i < guardCount; i++) {
|
||||
if(guard[i].hasGold > 0)
|
||||
guard[i].sprite.spriteSheet = redhatData;
|
||||
else
|
||||
guard[i].sprite.spriteSheet = guardData;
|
||||
}
|
||||
showTipsText("REDHAT MODE ON", 1500);
|
||||
} else { //disable
|
||||
for(var i = 0; i < guardCount; i++) {
|
||||
guard[i].sprite.spriteSheet = guardData;
|
||||
}
|
||||
showTipsText("REDHAT MODE OFF", 1500);
|
||||
}
|
||||
if ((redhatMode ^= 1) == 1) {
|
||||
for (var i = 0; i < guardCount; i++) {
|
||||
guard[i].sprite.spriteSheet = guard[i].hasGold > 0 ? redhatData : guardData;
|
||||
}
|
||||
showTipsText("REDHAT MODE ON", 1500);
|
||||
} else {
|
||||
for (var i = 0; i < guardCount; i++) {
|
||||
guard[i].sprite.spriteSheet = guardData;
|
||||
}
|
||||
showTipsText("REDHAT MODE OFF", 1500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function toggleGodMode()
|
||||
{
|
||||
godModeKeyPressed = 1; //means player press the god-mod hot-key
|
||||
sometimePlayInGodMode = 1; // 12/23/2014
|
||||
|
||||
godMode ^= 1;
|
||||
if(godMode) {
|
||||
showTipsText("GOD MODE ON", 1500);
|
||||
} else {
|
||||
showTipsText("GOD MODE OFF", 1500);
|
||||
}
|
||||
godModeKeyPressed = 1;
|
||||
sometimePlayInGodMode = 1;
|
||||
godMode ^= 1;
|
||||
showTipsText(godMode ? "GOD MODE ON" : "GOD MODE OFF", 1500);
|
||||
}
|
||||
|
||||
function setSpeed(v)
|
||||
{
|
||||
speed += v;
|
||||
if(speed < 0) speed = 0;
|
||||
if(speed >= speedMode.length) speed = speedMode.length-1;
|
||||
createjs.Ticker.setFPS(speedMode[speed]);
|
||||
showTipsText(speedText[speed], 1500);
|
||||
speed += v;
|
||||
if (speed < 0) speed = 0;
|
||||
if (speed >= speedMode.length) speed = speedMode.length - 1;
|
||||
createjs.Ticker.setFPS(speedMode[speed]);
|
||||
showTipsText(speedText[speed], 1500);
|
||||
}
|
||||
|
||||
function helpCallBack() //help complete call back
|
||||
function helpCallBack()
|
||||
{
|
||||
pressKey(KEYCODE_ESC);
|
||||
pressKey("Escape");
|
||||
}
|
||||
|
||||
function pressKey(code)
|
||||
{
|
||||
switch(code) {
|
||||
case KEYCODE_LEFT:
|
||||
case KEYCODE_J:
|
||||
case KEYCODE_A:
|
||||
keyAction = ACT_LEFT;
|
||||
break;
|
||||
case KEYCODE_RIGHT:
|
||||
case KEYCODE_L:
|
||||
case KEYCODE_D:
|
||||
keyAction = ACT_RIGHT;
|
||||
break;
|
||||
case KEYCODE_UP:
|
||||
case KEYCODE_I:
|
||||
case KEYCODE_W:
|
||||
keyAction = ACT_UP;
|
||||
break;
|
||||
case KEYCODE_DOWN:
|
||||
case KEYCODE_K:
|
||||
case KEYCODE_S:
|
||||
keyAction = ACT_DOWN;
|
||||
break;
|
||||
case KEYCODE_Z:
|
||||
case KEYCODE_Y: //Y key to dig left, for German keyboards
|
||||
case KEYCODE_U:
|
||||
case KEYCODE_Q:
|
||||
case KEYCODE_COMMA: //,
|
||||
keyAction = ACT_DIG_LEFT;
|
||||
break;
|
||||
case KEYCODE_X:
|
||||
case KEYCODE_O:
|
||||
case KEYCODE_E:
|
||||
case KEYCODE_PERIOD: //.
|
||||
keyAction = ACT_DIG_RIGHT;
|
||||
break;
|
||||
case KEYCODE_ESC: //help & pause
|
||||
if(gameState == GAME_PAUSE) {
|
||||
gameResume();
|
||||
showTipsText("", 1000); //clear text
|
||||
} else {
|
||||
gamePause();
|
||||
showTipsText("PAUSE", 0); //display "PAUSE"
|
||||
//helpObj.showHelp(helpCallBack);
|
||||
}
|
||||
break;
|
||||
case KEYCODE_ENTER: //display hi-score
|
||||
if(playMode == PLAY_CLASSIC) {
|
||||
menuIconDisable(1);
|
||||
gamePause();
|
||||
showScoreTable(playData, null, function() { menuIconEnable(); gameResume();});
|
||||
return; //don't record this key code !
|
||||
} else {
|
||||
keyAction = ACT_UNKNOWN;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
keyAction = ACT_UNKNOWN;
|
||||
//debug("keycode = " + code);
|
||||
break;
|
||||
}
|
||||
if(recordMode && code != KEYCODE_ESC) saveKeyCode(code, keyAction);
|
||||
switch (code) {
|
||||
case "KeyA":
|
||||
case "ArrowLeft":
|
||||
case "KeyJ":
|
||||
keyAction = ACT_LEFT;
|
||||
break;
|
||||
case "ArrowRight":
|
||||
case "KeyL":
|
||||
case "KeyD":
|
||||
keyAction = ACT_RIGHT;
|
||||
break;
|
||||
case "KeyW":
|
||||
case "ArrowUp":
|
||||
case "KeyI":
|
||||
keyAction = ACT_UP;
|
||||
break;
|
||||
case "ArrowDown":
|
||||
case "KeyK":
|
||||
case "KeyS":
|
||||
keyAction = ACT_DOWN;
|
||||
break;
|
||||
case "KeyZ":
|
||||
case "KeyQ":
|
||||
case "KeyU":
|
||||
case "KeyY": //Y key to dig left, for German keyboards
|
||||
case "Comma":
|
||||
keyAction = ACT_DIG_LEFT;
|
||||
break;
|
||||
case "KeyX":
|
||||
case "KeyO":
|
||||
case "KeyE":
|
||||
case "Period":
|
||||
keyAction = ACT_DIG_RIGHT;
|
||||
break;
|
||||
case "Escape": //help & pause
|
||||
if (gameState == GAME_PAUSE) {
|
||||
gameResume();
|
||||
showTipsText("", 1000); //clear text
|
||||
} else {
|
||||
gamePause();
|
||||
showTipsText("PAUSE", 0); //display "PAUSE"
|
||||
}
|
||||
break;
|
||||
case "Enter": //display hi-score
|
||||
if (playMode == PLAY_CLASSIC) {
|
||||
menuIconDisable(1);
|
||||
gamePause();
|
||||
showScoreTable(playData, null, function () {
|
||||
menuIconEnable();
|
||||
gameResume();
|
||||
});
|
||||
return; //don't record this key code !
|
||||
} else {
|
||||
keyAction = ACT_UNKNOWN;
|
||||
//debug("keycode = " + code);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
keyAction = ACT_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
if (recordMode && code !== "Escape") saveKeyCode(code, keyAction);
|
||||
}
|
||||
|
||||
function gameResume()
|
||||
{
|
||||
gameState = lastGameState;
|
||||
soundResume(soundFall);
|
||||
soundResume(soundDig);
|
||||
gameState = lastGameState;
|
||||
soundResume(soundFall);
|
||||
soundResume(soundDig);
|
||||
}
|
||||
|
||||
function gamePause()
|
||||
{
|
||||
lastGameState = gameState;
|
||||
gameState = GAME_PAUSE;
|
||||
soundPause(soundFall);
|
||||
soundPause(soundDig);
|
||||
lastGameState = gameState;
|
||||
gameState = GAME_PAUSE;
|
||||
soundPause(soundFall);
|
||||
soundPause(soundDig);
|
||||
}
|
||||
|
||||
function handleKeyDown(event)
|
||||
{
|
||||
if(!event){ event = window.event; } //cross browser issues exist
|
||||
if (!event) event = window.event;
|
||||
const key = event.key;
|
||||
const code = event.code;
|
||||
|
||||
if(event.shiftKey) {
|
||||
if(gameState == GAME_START || gameState == GAME_RUNNING) {
|
||||
pressShiftKey(event.keyCode);
|
||||
}
|
||||
} else
|
||||
if (event.ctrlKey) {
|
||||
if(gameState == GAME_START || gameState == GAME_RUNNING) {
|
||||
pressCtrlKey(event.keyCode);
|
||||
}
|
||||
} else {
|
||||
if((gameState == GAME_PAUSE && event.keyCode == KEYCODE_ESC) ||
|
||||
gameState == GAME_START || gameState == GAME_RUNNING)
|
||||
{
|
||||
if(recordMode != RECORD_PLAY && playMode != PLAY_AUTO) {
|
||||
pressKey(event.keyCode);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(event.keyCode >= 112 && event.keyCode <= 123) return true; //F1 ~ F12
|
||||
return false;
|
||||
if (event.shiftKey) {
|
||||
if (gameState == GAME_START || gameState == GAME_RUNNING) {
|
||||
pressShiftKey(code);
|
||||
}
|
||||
} else if (event.ctrlKey && key != "Control" && // if CTRL with another key
|
||||
(gameState == GAME_START || gameState == GAME_RUNNING) ) {
|
||||
pressCtrlKey(code);
|
||||
}else if ((gameState == GAME_PAUSE && code === "Escape") ||
|
||||
gameState == GAME_START || gameState == GAME_RUNNING) {
|
||||
if (recordMode != RECORD_PLAY && playMode != PLAY_AUTO) {
|
||||
pressKey(code);
|
||||
}
|
||||
}
|
||||
|
||||
if (key.startsWith("F") && key !== "F") return true; // allow F1... F12
|
||||
return false;
|
||||
}
|
||||
|
||||
function handleKeyUp(event)
|
||||
{
|
||||
if(repeatAction) return true;
|
||||
if(!event){ event = window.event; }
|
||||
if(recordKeyCode == event.keyCode && keyPressed != -1) keyPressed = 0;
|
||||
return true;
|
||||
if (repeatAction) return true;
|
||||
if (!event) event = window.event;
|
||||
const key = event.key;
|
||||
if (recordKeyCode === event.code && keyPressed != -1) keyPressed = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1356,7 +1356,7 @@ function mainTick(event)
|
||||
playGame(deltaS);
|
||||
break;
|
||||
case GAME_RUNNER_DEAD:
|
||||
//console.log("Time=" + curTime + ", Tick= " + playTickTimer);
|
||||
//debug("Time=" + curTime + ", Tick= " + playTickTimer);
|
||||
//if(recordMode) recordModeToggle(GAME_RUNNER_DEAD); //for debug only (if enable it must disable below statement)
|
||||
if(recordMode == RECORD_KEY) recordModeDump(GAME_RUNNER_DEAD);
|
||||
|
||||
@@ -1419,7 +1419,7 @@ function mainTick(event)
|
||||
return;
|
||||
case GAME_FINISH:
|
||||
stopAllSpriteObj();
|
||||
//console.log("Time=" + curTime + ", Tick= " + playTickTimer);
|
||||
//debug("Time=" + curTime + ", Tick= " + playTickTimer);
|
||||
|
||||
switch(playMode) {
|
||||
case PLAY_CLASSIC:
|
||||
|
||||
+17
-17
@@ -122,7 +122,7 @@ function helpMenuClass(_stage, _bitmap, _editBitmap, _scale)
|
||||
function helpKeyDown(event)
|
||||
{
|
||||
if(!event){ event = window.event; } //cross browser issues exist
|
||||
if(event.keyCode == KEYCODE_ESC) {
|
||||
if(event.key == "Escape") {
|
||||
closeHelpMenu();
|
||||
}
|
||||
return false;
|
||||
@@ -490,8 +490,8 @@ function selectDialog(_titleName, _checkBitmap, _levelData, _activeLevel, _scree
|
||||
|
||||
if(event.shiftKey || event.ctrlKey) return false;
|
||||
|
||||
switch(event.keyCode) {
|
||||
case KEYCODE_ESC:
|
||||
switch(event.key) {
|
||||
case "Escape":
|
||||
closeBox();
|
||||
break;
|
||||
default:
|
||||
@@ -1313,16 +1313,16 @@ function handleMenuKeyDown(event)
|
||||
|
||||
if(event.shiftKey || event.ctrlKey) return false;
|
||||
|
||||
switch(event.keyCode) {
|
||||
case KEYCODE_UP:
|
||||
switch(event.key) {
|
||||
case "ArrowUp":
|
||||
keyAction = ACT_UP;
|
||||
break;
|
||||
case KEYCODE_DOWN:
|
||||
case "ArrowDown":
|
||||
keyAction = ACT_DOWN;
|
||||
break;
|
||||
case KEYCODE_ENTER:
|
||||
case "Enter":
|
||||
break;
|
||||
case KEYCODE_ESC:
|
||||
case "Escape":
|
||||
break;
|
||||
default:
|
||||
keyAction = ACT_UNKNOWN;
|
||||
@@ -1569,23 +1569,23 @@ function menuDialog(_titleName, _itemList, _stage, _scale, _closeIconEnable, _cl
|
||||
|
||||
if(event.shiftKey || event.ctrlKey) return false;
|
||||
|
||||
switch(event.keyCode) {
|
||||
case KEYCODE_UP:
|
||||
switch(event.key) {
|
||||
case "ArrowUp":
|
||||
buttonInactive(menuButtonObj[_itemList[0].activeItem]);
|
||||
if(--_itemList[0].activeItem < 0) _itemList[0].activeItem = menuButtonObj.length-1;
|
||||
buttonActive(menuButtonObj[_itemList[0].activeItem]);
|
||||
_stage.update();
|
||||
break;
|
||||
case KEYCODE_DOWN:
|
||||
case "ArrowDown":
|
||||
buttonInactive(menuButtonObj[_itemList[0].activeItem]);
|
||||
if(++_itemList[0].activeItem > (menuButtonObj.length-1)) _itemList[0].activeItem = 0;
|
||||
buttonActive(menuButtonObj[_itemList[0].activeItem]);
|
||||
_stage.update();
|
||||
break;
|
||||
case KEYCODE_ENTER:
|
||||
case "Enter":
|
||||
buttonClick();
|
||||
break;
|
||||
case KEYCODE_ESC:
|
||||
case "Escape":
|
||||
if(closeIconObj != null) closeBox();
|
||||
break;
|
||||
default:
|
||||
@@ -2785,8 +2785,8 @@ function backupDialog(id, _callBackFun)
|
||||
|
||||
if(event.shiftKey || event.ctrlKey) return false;
|
||||
|
||||
switch(event.keyCode) {
|
||||
case KEYCODE_ESC:
|
||||
switch(event.key) {
|
||||
case "Escape":
|
||||
closeDialog();
|
||||
break;
|
||||
default:
|
||||
@@ -3758,8 +3758,8 @@ function restoreDialog(id, _callBackFun)
|
||||
|
||||
if(event.shiftKey || event.ctrlKey) return false;
|
||||
|
||||
switch(event.keyCode) {
|
||||
case KEYCODE_ESC:
|
||||
switch(event.key) {
|
||||
case "Escape":
|
||||
closeDialog();
|
||||
break;
|
||||
default:
|
||||
|
||||
Fichier binaire non affiché.
Référencer dans un nouveau ticket
Bloquer un utilisateur