slave-princess-charlotte/data/Script/singleton/singleton-inputcontrol.js
2025-10-12 13:17:46 -05:00

155 lines
3.7 KiB
JavaScript

var InputType = {
NONE: -1,
MOUSE: -2,
LEFT: 0,
UP: 1,
RIGHT: 2,
DOWN: 3,
BTN1: 4,
BTN2: 5,
BTN3: 6,
BTN4: 7,
BTN5: 8,
BTN6: 9,
BTN7: 10,
BTN8: 11
};
var InputControl = {
_counter: null,
_counterHigh: null,
_blanckCounter: null,
_prevInputType: -1,
_isWait: false,
initSingleton: function() {
this._counterHigh = createObject(CycleCounter);
this._counterHigh.setCounterInfo(0);
this._counter = createObject(CycleCounter);
this._counter.setCounterInfo(4);
this._counter.disableGameAcceleration();
this._blanckCounter = createObject(CycleCounter);
this._blanckCounter.setCounterInfo(2);
this._counter.disableGameAcceleration();
},
isSelectState: function() {
return root.isInputState(InputType.BTN1);
},
isSelectAction: function() {
return root.isInputAction(InputType.BTN1) || root.isMouseAction(MouseType.LEFT);
},
isCancelState: function() {
return root.isInputState(InputType.BTN2) || root.isMouseAction(MouseType.DOWNWHEEL);
},
isCancelAction: function() {
return root.isInputAction(InputType.BTN2) || root.isMouseAction(MouseType.RIGHT);
},
isOptionAction: function() {
return root.isInputAction(InputType.BTN3);
},
isLeftPadAction: function() {
return root.isInputAction(InputType.BTN5) || root.isMouseAction(MouseType.UPWHEEL);
},
isRightPadAction: function() {
return root.isInputAction(InputType.BTN6) || root.isMouseAction(MouseType.DOWNWHEEL);
},
isStartAction: function() {
if (!root.isSystemSettings(SystemSettingsType.SKIP)) {
return false;
}
return root.isInputAction(InputType.BTN8) || root.isMouseAction(MouseType.RIGHT);
},
isInputState: function(type) {
return root.isInputState(type);
},
isInputAction: function(type) {
return root.isInputAction(type);
},
getDirectionState: function() {
var inputType;
var result = InputType.NONE;
inputType = this.getInputType();
// 現在の状態が入力なしであるか調べる
if (inputType === InputType.NONE) {
this._prevInputType = inputType;
this._isWait = false;
return inputType;
}
// 前回の状態が入力なしであるかどうか、もしくは、現在の入力が前回と異なるか調べる
if (inputType !== this._prevInputType || this._prevInputType === InputType.NONE) {
this._prevInputType = inputType;
this._isWait = true;
this._counter.resetCounterValue();
this._blanckCounter.resetCounterValue();
return inputType;
}
// 現在の入力と前回の入力は、同一である。
// つまり、キーは押され続けている。
if (this._isWait) {
if (this._blanckCounter.moveCycleCounter() !== MoveResult.CONTINUE) {
this._isWait = false;
}
}
else {
if (this._counter.moveCycleCounter() !== MoveResult.CONTINUE) {
// 入力を許可する
result = inputType;
}
}
return result;
},
getDirectionStateHigh: function() {
var inputType = InputType.NONE;
if (DataConfig.isHighPerformance()) {
if (this._counterHigh.moveCycleCounter() !== MoveResult.CONTINUE) {
inputType = this.getInputType();
}
}
else {
inputType = this.getInputType();
}
return inputType;
},
getInputType: function() {
var inputType = InputType.NONE;
if (root.isInputState(InputType.LEFT)) {
inputType = InputType.LEFT;
}
else if (root.isInputState(InputType.UP)) {
inputType = InputType.UP;
}
else if (root.isInputState(InputType.RIGHT)) {
inputType = InputType.RIGHT;
}
else if (root.isInputState(InputType.DOWN)) {
inputType = InputType.DOWN;
}
return inputType;
}
};