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

265 lines
5.3 KiB
JavaScript

var CycleCounter = defineObject(BaseObject,
{
_max: 0,
_incrementValue: 0,
_counterValue: 0,
_isGameAccelerationDisabled: false,
// maxは偶数であることが推奨される
setCounterInfo: function(max) {
this._max = max + 2;
this._incrementValue = 1;
this._counterValue = 0;
// 30FPSの場合は、増加する値が2倍になる
if (!DataConfig.isHighPerformance()) {
this._incrementValue *= 2;
}
},
disableGameAcceleration: function() {
// 高速化を受け付けないようにする
this._isGameAccelerationDisabled = true;
},
moveCycleCounter: function() {
var result;
// キャンセルキーの押下による高速化が発生している場合は、直ちに終了する
if (!this._isGameAccelerationDisabled && Miscellaneous.isGameAcceleration()) {
return MoveResult.END;
}
this._counterValue += this._incrementValue;
if (this._counterValue >= this._max) {
this._counterValue = 0;
result = MoveResult.END;
}
else {
result = MoveResult.CONTINUE;
}
return result;
},
// _counterValueは、setCounterInfoに指定された値まで大きくなる
getCounter: function() {
return this._counterValue;
},
resetCounterValue: function() {
this._counterValue = 0;
}
}
);
var IdleCounter = defineObject(BaseObject,
{
_counter: null,
_nextmode: 0,
initialize: function() {
this._counter = createObject(CycleCounter);
},
setIdleInfo: function(max, nextmode) {
this._nextmode = nextmode;
this._counter.setCounterInfo(max);
},
moveIdleCounter: function() {
return this._counter.moveCycleCounter();
},
getCounter: function() {
return this._counter.getCounter();
},
getNextMode: function() {
return this._nextmode;
}
}
);
var EraseCounter = defineObject(BaseObject,
{
_counter: null,
_isFirst: true,
initialize: function() {
this._counter = createObject(CycleCounter);
this._counter.setCounterInfo(26);
},
moveEraseCounter: function() {
if (this._isFirst) {
this._playEraseSound();
this._isFirst = false;
}
return this._counter.moveCycleCounter();
},
getEraseAlpha: function() {
var alpha = 255 - (this._counter.getCounter() * 10);
if (alpha < 0) {
alpha = 0;
}
return alpha;
},
_playEraseSound: function() {
MediaControl.soundDirect('uniterase');
}
}
);
var UnitCounter = defineObject(BaseObject,
{
_counter: null,
_counter2: null,
_unitAnimationIndex: 0,
_unitAnimationIndex2: 0,
initialize: function() {
this._counter = createObject(CycleCounter);
this._counter.setCounterInfo(14);
this._counter.disableGameAcceleration();
// 2チップで構成されるキャラチップ用
this._counter2 = createObject(CycleCounter);
this._counter2.setCounterInfo(34);
this._counter2.disableGameAcceleration();
},
moveUnitCounter: function() {
var result = this._counter.moveCycleCounter();
if (result !== MoveResult.CONTINUE) {
if (++this._unitAnimationIndex === 4) {
this._unitAnimationIndex = 0;
}
}
result = this._counter2.moveCycleCounter();
if (result !== MoveResult.CONTINUE) {
if (++this._unitAnimationIndex2 === 2) {
this._unitAnimationIndex2 = 0;
}
}
return result;
},
getAnimationIndex: function() {
var a = [0, 1, 2, 1];
return a[this._unitAnimationIndex];
},
getAnimationIndex2: function() {
return this._unitAnimationIndex2;
},
getAnimationIndexFromUnit: function(unit) {
var index = 0;
var type = unit.getClass().getCharChipLoopType();
if (type === CharChipLoopType.NORMAL) {
index = this.getAnimationIndex();
}
else if (type === CharChipLoopType.DOUBLE) {
index = this.getAnimationIndex2();
}
return index;
}
}
);
var VolumeCounter = defineObject(BaseObject,
{
_volume: 0,
_max: 0,
_min: 0,
_isUp: false,
_roundCount: 0,
_speed: 0,
_isGameAccelerationDisabled: false,
initialize: function() {
this.setChangeSpeed(3);
},
disableGameAcceleration: function() {
this._isGameAccelerationDisabled = true;
},
setChangeSpeed: function(speed) {
this._speed = speed;
if (!DataConfig.isHighPerformance()) {
this._speed *= 2;
}
},
setVolumeRange: function(max, min, volume, isUp) {
this._max = max;
this._min = min;
this._volume = volume;
this._isUp = isUp;
this._roundCount = 0;
},
moveVolumeCounter: function() {
var d = this._speed;
if (!this._isGameAccelerationDisabled && Miscellaneous.isGameAcceleration()) {
d *= 4;
}
if (this._isUp) {
this._volume += d;
if (this._volume >= this._max) {
this._volume = this._max;
this._isUp = false;
this._roundCount++;
}
}
else {
this._volume -= d;
if (this._volume < this._min) {
this._volume = this._min;
this._isUp = true;
this._roundCount++;
}
}
if (this._roundCount === 3) {
this._roundCount = 2;
}
return true;
},
getVolume: function() {
return this._volume;
},
setVolume: function(volume) {
this._volume = volume;
},
isUp: function() {
return this._isUp;
},
getRoundCount: function() {
return this._roundCount;
}
}
);