670 lines
32 KiB
Text
670 lines
32 KiB
Text
|
|
|
|
class KeyState
|
|
{
|
|
var enter;
|
|
var done;
|
|
var tick;
|
|
var key;
|
|
|
|
var owner;
|
|
|
|
function KeyState(owner, key)
|
|
{
|
|
this.owner = owner;
|
|
|
|
enter = false;
|
|
done = false;
|
|
tick = 0;
|
|
}
|
|
|
|
function clear()
|
|
{
|
|
enter = false;
|
|
}
|
|
|
|
function set(s, exp)
|
|
{
|
|
if(s){
|
|
enter = s * (!done);
|
|
if(exp !== void) Scripts.eval(exp,,, owner);
|
|
}else{
|
|
done = false;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
class KeyInput
|
|
{
|
|
var owner;
|
|
|
|
// 入力方向
|
|
var pDirection = 0;
|
|
// コマンド処理用入力履歴
|
|
var history = [];
|
|
// コマンド判定結果
|
|
var command = [];
|
|
var commandNum;
|
|
// 左右どちらを最後に入力したか
|
|
var lastInputLeftRight = 0;
|
|
|
|
// 左を入力している(左上、左下を含む)
|
|
var inputLeft = false;
|
|
// 右を入力している(右上、右下を含む)
|
|
var inputRight = false;
|
|
// 攻撃ボタン長押し中
|
|
var inputAttackTick = 0;
|
|
|
|
var state = %[];
|
|
|
|
var user;
|
|
|
|
function KeyInput(owner, u=0){
|
|
this.owner = owner;
|
|
user = u;
|
|
|
|
state[keySpecial] = new KeyState(this, keySpecial);
|
|
state[keyEscAttack] = new KeyState(this, keyEscAttack);
|
|
state[keyAttack] = new KeyState(this, keyAttack);
|
|
state[keyJump] = new KeyState(this, keyJump);
|
|
state[keyDash] = new KeyState(this, keyDash);
|
|
state[keySwitch] = new KeyState(this, keySwitch);
|
|
state[keyLeaveIt] = new KeyState(this, keyLeaveIt);
|
|
}
|
|
|
|
|
|
// function existInput(){
|
|
function isExist(){
|
|
var i = 0;
|
|
i = i | state[keySpecial].enter;
|
|
i = i | state[keyEscAttack].enter;
|
|
i = i | state[keyAttack].enter;
|
|
i = i | state[keyJump].enter;
|
|
i = i | state[keyDash].enter;
|
|
i = i | state[keySwitch].enter;
|
|
i = i | state[keyLeaveIt].enter;
|
|
i = i | (direction!=0);
|
|
|
|
//dm("user : " + user + " / " + state[keySpecial].enter + ", " +state[keyEscAttack].enter + ", " +state[keyAttack].enter + ", " +state[keyJump].enter + ", " +state[keyDash].enter + " / direction : " + direction);
|
|
|
|
return i;
|
|
}
|
|
|
|
|
|
// function clearInput()
|
|
function clear()
|
|
{
|
|
state[keySpecial].clear();
|
|
state[keyEscAttack].clear();
|
|
state[keyAttack].clear();
|
|
state[keyJump].clear();
|
|
state[keyDash].clear();
|
|
state[keySwitch].clear();
|
|
state[keyLeaveIt].clear();
|
|
|
|
direction = 0;
|
|
command.clear();
|
|
// lastInputLeftRight = 0;
|
|
}
|
|
|
|
|
|
function done(k)
|
|
{
|
|
state[k].clear();
|
|
state[k].done = true;
|
|
state[k].tick = owner.tickCount;
|
|
}
|
|
|
|
|
|
function getInputDirection()
|
|
{
|
|
var Up = 0;
|
|
var Right = 0;
|
|
var Down = 0;
|
|
var Left = 0;
|
|
|
|
var UpRight = 0;
|
|
var DownRight = 0;
|
|
var DownLeft = 0;
|
|
var UpLeft = 0;
|
|
|
|
if(owner.windowActive){
|
|
|
|
var mode = (user==0 && ( sf.pad1InputForChara1 || ( bao.players.count>0 && bao.players[0].chara==chrChocolat)));
|
|
|
|
// 上
|
|
for(var i=0; i<sf.keyUp[user].count; i++){
|
|
Up = Up || getKeyState(sf.keyUp[user][i]);
|
|
}
|
|
|
|
// 右
|
|
for(var i=0; i<sf.keyRight[user].count; i++){
|
|
Right = Right || getKeyState(sf.keyRight[user][i]);
|
|
}
|
|
if(!mode){
|
|
Right = Right || getKeyState(sf.keyNext[user][(user==0&&sf.pad1InputForChara1)?1:0]);
|
|
}else{
|
|
Right = Right || getKeyState(sf.keyNext[user][(user==0)?1:0]);
|
|
}
|
|
|
|
// 下
|
|
for(var i=0; i<sf.keyDown[user].count; i++){
|
|
Down = Down || getKeyState(sf.keyDown[user][i]);
|
|
}
|
|
|
|
// 左
|
|
for(var i=0; i<sf.keyLeft[user].count; i++){
|
|
Left = Left || getKeyState(sf.keyLeft[user][i]);
|
|
}
|
|
if(!mode){
|
|
Left = Left || getKeyState(sf.keyPrev[user][(user==0&&sf.pad1InputForChara1)?1:0]);
|
|
}else{
|
|
Left = Left || getKeyState(sf.keyPrev[user][(user==0)?1:0]);
|
|
}
|
|
|
|
// 右上
|
|
for(var i=0; i<sf.keyUpRight[user].count; i++){
|
|
UpRight = UpRight || getKeyState(sf.keyUpRight[user][i]);
|
|
}
|
|
// 右下
|
|
for(var i=0; i<sf.keyDownRight[user].count; i++){
|
|
DownRight = DownRight || getKeyState(sf.keyDownRight[user][i]);
|
|
}
|
|
// 左下
|
|
for(var i=0; i<sf.keyDownLeft[user].count; i++){
|
|
DownLeft = DownLeft || getKeyState(sf.keyDownLeft[user][i]);
|
|
}
|
|
// 左上
|
|
for(var i=0; i<sf.keyUpLeft[user].count; i++){
|
|
UpLeft = UpLeft || getKeyState(sf.keyUpLeft[user][i]);
|
|
}
|
|
if(UpRight){
|
|
Up = true;
|
|
Right = true;
|
|
}
|
|
if(DownRight){
|
|
Down = true;
|
|
Right = true;
|
|
}
|
|
if(DownLeft){
|
|
Down = true;
|
|
Left = true;
|
|
}
|
|
if(UpLeft){
|
|
Up = true;
|
|
Left = true;
|
|
}
|
|
|
|
}
|
|
|
|
if(Up || Down || Left || Right) kag.hideMouseCursor();
|
|
|
|
// // マウスによる入力
|
|
// if(user == 0){
|
|
// if(timer.enabled && getKeyState(VK_LBUTTON)){
|
|
// var x = int(dispLayer1.cursorX / zoomRate);
|
|
// var y = int(dispLayer1.cursorY / zoomRate);
|
|
// if(!dcLayer.visible){
|
|
// mx = x;
|
|
// my = y;
|
|
// dcLayer.show(mx, my);
|
|
// }else{
|
|
// var dx = x - mx;
|
|
// var dy = y - my;
|
|
// if(dx*dx+dy*dy>16){
|
|
// if(dx != 0){
|
|
// var at = Math.atan(dy / Math.abs(dx));
|
|
// var p8 = Math.PI / 8;
|
|
//
|
|
// if(at < -p8) Up = true;
|
|
// if(at > p8) Down = true;
|
|
//
|
|
// if((at<0 && at>-p8*3)||(at>0 && at<p8*3)){
|
|
// if(dx > 0) Right = true;
|
|
// if(dx < 0) Left = true;
|
|
// }
|
|
// }else{
|
|
// Up = (dy < 0);
|
|
// Down = (dy > 0);
|
|
// }
|
|
// }
|
|
// }
|
|
// mButtonDownTick = tickCount;
|
|
// }else{
|
|
// if(tickCount - mButtonDownTick > 8){
|
|
// dcLayer.hide();
|
|
// mButtonDownTick = 0;
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// if(Up){
|
|
// Like10key = 8 - (Left) + (Right);
|
|
// }else if(Down){
|
|
// Like10key = 2 - (Left) + (Right);
|
|
// }else{
|
|
// Like10key = 5 - (Left) + (Right);
|
|
// }
|
|
//
|
|
//// if(user == 0){
|
|
//// owner.dcLayer.draw(Like10key-1);
|
|
//// }
|
|
//
|
|
// if(Left){
|
|
// lastInputLeftRight = -1;
|
|
// }else if(Right){
|
|
// lastInputLeftRight = 1;
|
|
// }
|
|
//
|
|
// if(Like10key == 5) Like10key = 0;
|
|
// direction = Like10key;
|
|
|
|
//if(user==1) dm(Up+","+Right+","+Down+","+Left);
|
|
setDirectionInputState(Up, Right, Down, Left);
|
|
|
|
}
|
|
|
|
function setDirectionInputState(up, right, down, left)
|
|
{
|
|
var inputLike10key = 0;
|
|
|
|
inputLeft = false;
|
|
inputRight = false;
|
|
|
|
if(up){
|
|
inputLike10key = 8 - (left) + (right);
|
|
}else if(down){
|
|
inputLike10key = 2 - (left) + (right);
|
|
}else{
|
|
inputLike10key = 5 - (left) + (right);
|
|
}
|
|
if(left){
|
|
lastInputLeftRight = -1;
|
|
inputLeft = true;
|
|
}else if(right){
|
|
lastInputLeftRight = 1;
|
|
inputRight = true;
|
|
}
|
|
|
|
if(inputLike10key == 5) inputLike10key = 0;
|
|
pDirection = inputLike10key;
|
|
}
|
|
|
|
function setDirection(d){
|
|
switch (d){
|
|
case dNeutral:
|
|
setDirectionInputState(false, false, false, false);
|
|
break;
|
|
case dUp:
|
|
setDirectionInputState(true, false, false, false);
|
|
break;
|
|
case dRight:
|
|
setDirectionInputState(false, true, false, false);
|
|
break;
|
|
case dDown:
|
|
setDirectionInputState(false, false, true, false);
|
|
break;
|
|
case dLeft:
|
|
setDirectionInputState(false, false, false, true);
|
|
break;
|
|
case dUpRight:
|
|
setDirectionInputState(true, true, false, false);
|
|
break;
|
|
case dDownRight:
|
|
setDirectionInputState(false, true, true, false);
|
|
break;
|
|
case dDownLeft:
|
|
setDirectionInputState(false, false, true, true);
|
|
break;
|
|
case dUpLeft:
|
|
setDirectionInputState(true, false, false, true);
|
|
break;
|
|
}
|
|
return d;
|
|
}
|
|
|
|
|
|
property direction
|
|
{
|
|
getter(){
|
|
return pDirection;
|
|
}
|
|
|
|
setter(d){
|
|
setDirection(d);
|
|
}
|
|
}
|
|
|
|
|
|
function getInputKey()
|
|
{
|
|
var s;
|
|
var exp;
|
|
|
|
var mode = (user==0 && ( sf.pad1InputForChara1 || ( bao.players.count>0 && bao.players[0].chara==chrChocolat)));
|
|
|
|
// 特殊攻撃ボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
for(var i=0; i<((mode)?sf.keySpecial[user].count:1); i++){
|
|
if(sf.keySpecial[user][i] !== void) s = s || getKeyState(sf.keySpecial[user][i]);
|
|
}
|
|
}
|
|
state[keySpecial].set(s);
|
|
|
|
// 緊急回避攻撃ボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
for(var i=0; i<((mode)?sf.keyEscAttack[user].count:1); i++){
|
|
if(sf.keyEscAttack[user][i] !== void) s = s || getKeyState(sf.keyEscAttack[user][i]);
|
|
}
|
|
}
|
|
state[keyEscAttack].set(s);
|
|
|
|
// 攻撃ボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
for(var i=0; i<((mode)?sf.keyAttack[user].count:1); i++){
|
|
if(sf.keyAttack[user][i] !== void) s = s || getKeyState(sf.keyAttack[user][i]);
|
|
}
|
|
}
|
|
state[keyAttack].set(s);
|
|
if(s && inputAttackTick == 0) inputAttackTick = owner.tickCount;
|
|
if(!s && inputAttackTick > 0) inputAttackTick = 0;
|
|
|
|
// ダッシュボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
// if(!mode){
|
|
// var u = (user==0)?1:0;
|
|
// if(sf.keyNext[user][u] !== void) s = s || gpp.getPadState(sf.keyNext[user][u]);
|
|
// if(sf.keyPrev[user][u] !== void) s = s || gpp.getPadState(sf.keyPrev[user][u]);
|
|
// }else{
|
|
// if(sf.keyNext[1][0] !== void) s = s || gpp.getPadState(sf.keyNext[1][0]);
|
|
// if(sf.keyPrev[1][0] !== void) s = s || gpp.getPadState(sf.keyPrev[1][0]);
|
|
// }
|
|
|
|
var u = (user==0)?1:0;
|
|
if(sf.keyNext[user][u] !== void) s = s || gpp.getPadState(sf.keyNext[user][u]);
|
|
if(sf.keyPrev[user][u] !== void) s = s || gpp.getPadState(sf.keyPrev[user][u]);
|
|
|
|
}
|
|
state[keyDash].set(s, "command[cmdDash]=true");
|
|
|
|
// ジャンプボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
for(var i=0; i<((mode)?sf.keyJump[user].count:1); i++){
|
|
if(sf.keyJump[user][i] !== void) s = s || getKeyState(sf.keyJump[user][i]);
|
|
}
|
|
}
|
|
state[keyJump].set(s, exp);
|
|
|
|
// ポーズ
|
|
s = false;
|
|
if(owner.windowActive){
|
|
//dm(user);
|
|
for(var i=0; i<((mode)?sf.keyPause[user].count:1); i++){
|
|
if(sf.keyPause[user][i] !== void) s = s || getKeyState(sf.keyPause[user][i]);
|
|
}
|
|
if(sf.keyPause[0][0] !== void) s = s || getKeyState(sf.keyPause[0][0]);
|
|
}
|
|
if(s){
|
|
if(!owner.pauseInKey && owner.disablePauseKey==0){
|
|
owner.onPauseKey();
|
|
owner.pauseInKey = true;
|
|
}
|
|
owner.disablePauseKey = 15;
|
|
}
|
|
if(owner.disablePauseKey > 0){
|
|
owner.disablePauseKey--;
|
|
}else{
|
|
owner.pauseInKey = false;
|
|
}
|
|
|
|
// 交代ボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
for(var i=0; i<((mode)?sf.keySwitch[user].count:1); i++){
|
|
if(sf.keySwitch[user][i] !== void) s = s || getKeyState(sf.keySwitch[user][i]);
|
|
}
|
|
}
|
|
state[keySwitch].set(s);
|
|
|
|
// 任せてボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
for(var i=0; i<((mode)?sf.keyLeaveIt[user].count:1); i++){
|
|
if(sf.keyLeaveIt[user][i] !== void) s = s || getKeyState(sf.keyLeaveIt[user][i]);
|
|
}
|
|
}
|
|
state[keyLeaveIt].set(s);
|
|
|
|
// 攻撃ジャンプ同時押しボタン
|
|
s = false;
|
|
if(owner.windowActive){
|
|
for(var i=0; i<((mode)?sf.keyBC[user].count:1); i++){
|
|
if(sf.keyBC[user][i] !== void) s = s || getKeyState(sf.keyBC[user][i]);
|
|
}
|
|
}
|
|
if(s){
|
|
state[keyAttack].set(s);
|
|
state[keyJump].set(s);
|
|
}
|
|
|
|
// if( get(keyAttack) && inputAttackTick == 0) inputAttackTick = owner.tickCount;
|
|
// if(!get(keyAttack) && inputAttackTick > 0) inputAttackTick = 0;
|
|
|
|
}
|
|
|
|
function set(key)
|
|
{
|
|
state[key].set(true);
|
|
}
|
|
|
|
function get(key)
|
|
{
|
|
return state[key].enter;
|
|
}
|
|
|
|
|
|
function getKeyState(key){
|
|
// if(key <VK_PAD1) return kag.getKeyState(key);
|
|
// return gpp.getPadState(key);
|
|
|
|
var ks = kag.getKeyState(key);
|
|
if(ks > 0){
|
|
//dm("1111 " + key + " / " + ks);
|
|
return ks;
|
|
}
|
|
//dm("2222 " + key + " / " + gpp.getPadState(key));
|
|
return gpp.getPadState(key);
|
|
}
|
|
|
|
|
|
function addHistory()
|
|
{
|
|
// コマンド処理用に入力方向を溜めておく
|
|
if(history.count==30) history.erase(0);
|
|
history.add(direction);
|
|
}
|
|
|
|
|
|
function checkCommand()
|
|
{
|
|
var str = history.join("");
|
|
for(var i=0; i<owner.commandList.count; i++){
|
|
for(var j=0; j<owner.commandList[i].count; j++){
|
|
var r = new RegExp(owner.commandList[i][j]);
|
|
if(r.test(str)){
|
|
command[i] = true;
|
|
commandNum = j;
|
|
//dm(str + " / " + ((!commandNum)?"→":"←") + " / " + owner.commandList[i][j]);
|
|
// window.caption = command;
|
|
}
|
|
}
|
|
}
|
|
// window.caption = 0;
|
|
}
|
|
|
|
// function dm()
|
|
// {
|
|
// var str = history.join("");
|
|
// Debug.message(str);
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
function keyCodeToKeyName(c)
|
|
{
|
|
switch (c){
|
|
case 0x08: return "BACK";
|
|
case 0x09: return "TAB";
|
|
case 0x0C: return "CLEAR";
|
|
case 0x0D: return "RETURN";
|
|
case 0x10:
|
|
if(System.getKeyState(VK_RSHIFT)) return "R-Shift";
|
|
if(System.getKeyState(VK_LSHIFT)) return "L-Shift";
|
|
return "SHIFT";
|
|
// case 0x11: return "CONTROL";
|
|
case 0x11:
|
|
if(System.getKeyState(VK_LCONTROL)) return "L-Ctrl";
|
|
if(System.getKeyState(VK_RCONTROL)) return "R-Ctrl";
|
|
return "CONTROL";
|
|
// case 0x12: return "MENU";
|
|
case 0x12:
|
|
if(System.getKeyState(VK_LMENU)) return "L-Alt";
|
|
if(System.getKeyState(VK_RMENU)) return "R-Alt";
|
|
return "MENU";
|
|
// case 0x13: return "PAUSE";
|
|
// case 0x14: return "CAPITAL";
|
|
// case 0x15: return "KANA";
|
|
// case 0x15: return "HANGEUL";
|
|
// case 0x15: return "HANGUL";
|
|
// case 0x17: return "JUNJA";
|
|
// case 0x18: return "FINAL";
|
|
// case 0x19: return "HANJA";
|
|
// case 0x19: return "KANJI";
|
|
// case 0x1B: return "ESCAPE";
|
|
// case 0x1C: return "CONVERT";
|
|
// case 0x1D: return "NONCONVERT";
|
|
// case 0x1E: return "ACCEPT";
|
|
// case 0x1F: return "MODECHANGE";
|
|
case 0x20: return "SPACE";
|
|
case 0x21: return "PRIOR";
|
|
case 0x22: return "NEXT";
|
|
case 0x23: return "END";
|
|
case 0x24: return "HOME";
|
|
case 0x25: return "LEFT";
|
|
case 0x26: return "UP";
|
|
case 0x27: return "RIGHT";
|
|
case 0x28: return "DOWN";
|
|
case 0x29: return "SELECT";
|
|
case 0x2A: return "PRINT";
|
|
case 0x2B: return "EXECUTE";
|
|
case 0x2C: return "SNAPSHOT";
|
|
case 0x2D: return "INSERT";
|
|
case 0x2E: return "DELETE";
|
|
case 0x2F: return "HELP";
|
|
case 0x30: return "0";
|
|
case 0x31: return "1";
|
|
case 0x32: return "2";
|
|
case 0x33: return "3";
|
|
case 0x34: return "4";
|
|
case 0x35: return "5";
|
|
case 0x36: return "6";
|
|
case 0x37: return "7";
|
|
case 0x38: return "8";
|
|
case 0x39: return "9";
|
|
case 0x41: return "A";
|
|
case 0x42: return "B";
|
|
case 0x43: return "C";
|
|
case 0x44: return "D";
|
|
case 0x45: return "E";
|
|
case 0x46: return "F";
|
|
case 0x47: return "G";
|
|
case 0x48: return "H";
|
|
case 0x49: return "I";
|
|
case 0x4A: return "J";
|
|
case 0x4B: return "K";
|
|
case 0x4C: return "L";
|
|
case 0x4D: return "M";
|
|
case 0x4E: return "N";
|
|
case 0x4F: return "O";
|
|
case 0x50: return "P";
|
|
case 0x51: return "Q";
|
|
case 0x52: return "R";
|
|
case 0x53: return "S";
|
|
case 0x54: return "T";
|
|
case 0x55: return "U";
|
|
case 0x56: return "V";
|
|
case 0x57: return "W";
|
|
case 0x58: return "X";
|
|
case 0x59: return "Y";
|
|
case 0x5A: return "Z";
|
|
case 0x5B: return "LWIN";
|
|
case 0x5C: return "RWIN";
|
|
case 0x5D: return "APPS";
|
|
case 0x60: return "NUMPAD0";
|
|
case 0x61: return "NUMPAD1";
|
|
case 0x62: return "NUMPAD2";
|
|
case 0x63: return "NUMPAD3";
|
|
case 0x64: return "NUMPAD4";
|
|
case 0x65: return "NUMPAD5";
|
|
case 0x66: return "NUMPAD6";
|
|
case 0x67: return "NUMPAD7";
|
|
case 0x68: return "NUMPAD8";
|
|
case 0x69: return "NUMPAD9";
|
|
case 0x6A: return "MULTIPLY";
|
|
case 0x6B: return "ADD";
|
|
case 0x6C: return "SEPARATOR";
|
|
case 0x6D: return "SUBTRACT";
|
|
case 0x6E: return "DECIMAL";
|
|
case 0x6F: return "DIVIDE";
|
|
// case 0x70: return "F1";
|
|
// case 0x71: return "F2";
|
|
// case 0x72: return "F3";
|
|
// case 0x73: return "F4";
|
|
// case 0x74: return "F5";
|
|
// case 0x75: return "F6";
|
|
// case 0x76: return "F7";
|
|
// case 0x77: return "F8";
|
|
// case 0x78: return "F9";
|
|
// case 0x79: return "F10";
|
|
// case 0x7A: return "F11";
|
|
// case 0x7B: return "F12";
|
|
// case 0x7C: return "F13";
|
|
// case 0x7D: return "F14";
|
|
// case 0x7E: return "F15";
|
|
// case 0x7F: return "F16";
|
|
// case 0x80: return "F17";
|
|
// case 0x81: return "F18";
|
|
// case 0x82: return "F19";
|
|
// case 0x83: return "F20";
|
|
// case 0x84: return "F21";
|
|
// case 0x85: return "F22";
|
|
// case 0x86: return "F23";
|
|
// case 0x87: return "F24";
|
|
|
|
// case 0x90: return "NUMLOCK";
|
|
// case 0x91: return "SCROLL";
|
|
// case 0xA0: return "LSHIFT";
|
|
// case 0xA1: return "RSHIFT";
|
|
// case 0xA2: return "LCONTROL";
|
|
// case 0xA3: return "RCONTROL";
|
|
// case 0xA4: return "LMENU";
|
|
// case 0xA5: return "RMENU";
|
|
|
|
case 0xF0: return "CapsLock";
|
|
|
|
default:
|
|
var str = ["未設定","Unconfigured","沒有設定","没有设定"];
|
|
return str[sf.language];
|
|
}
|
|
}
|
|
|
|
|