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

158 lines
3.8 KiB
JavaScript

var BonusChangeEventCommand = defineObject(BaseEventCommand,
{
_bonusChangeView: null,
enterEventCommandCycle: function() {
this._prepareEventCommandMemberData();
if (!this._checkEventCommand()) {
return EnterResult.NOTENTER;
}
return this._completeEventCommandMemberData();
},
moveEventCommandCycle: function() {
if (this._bonusChangeView.moveNoticeView() !== MoveResult.CONTINUE) {
this.mainEventCommand();
return MoveResult.END;
}
return MoveResult.CONTINUE;
},
drawEventCommandCycle: function() {
var x = LayoutControl.getCenterX(-1, this._bonusChangeView.getNoticeViewWidth());
var y = LayoutControl.getCenterY(-1, this._bonusChangeView.getNoticeViewHeight());
this._bonusChangeView.drawNoticeView(x, y);
},
mainEventCommand: function() {
var bonus;
var max = DataConfig.getMaxBonus();
bonus = root.getMetaSession().getBonus();
bonus += root.getEventCommandObject().getBonus();
if (bonus < 0) {
bonus = 0;
}
else if (bonus > max) {
bonus = max;
}
root.getMetaSession().setBonus(bonus);
},
_prepareEventCommandMemberData: function() {
this._bonusChangeView = createWindowObject(BonusChangeNoticeView, this);
},
_checkEventCommand: function() {
return this.isEventCommandContinue();
},
_completeEventCommandMemberData: function() {
var eventCommandData = root.getEventCommandObject();
this._bonusChangeView.setBonusChangeData(eventCommandData.getBonus());
return EnterResult.OK;
}
}
);
var BonusNoticeMode = {
WAIT: 0,
COUNT: 1,
INPUT: 2
};
var BonusChangeNoticeView = defineObject(BaseNoticeView,
{
_bonus: 0,
_counter: null,
_balancer: null,
setBonusChangeData: function(n) {
var speed = 30;
this._bonus = n;
if (n < 0) {
n *= -1;
}
this._counter = createObject(CycleCounter);
this._counter.setCounterInfo(4);
this._balancer = createObject(SimpleBalancer);
this._balancer.setBalancerInfo(0, n);
this._balancer.setBalancerSpeed(speed);
this._balancer.startBalancerMove(n);
this.changeCycleMode(BonusNoticeMode.WAIT);
},
moveNoticeView: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode === BonusNoticeMode.WAIT) {
result = this._moveWait();
}
else if (mode === BonusNoticeMode.COUNT) {
result = this._moveCount();
}
else if (mode === BonusNoticeMode.INPUT) {
result = this._moveInput();
}
return result;
},
drawNoticeViewContent: function(x, y) {
var textui = this.getTitleTextUI();
var color = textui.getColor();
var font = textui.getFont();
var text = this._bonus > 0 ? StringTable.GetTitle_BonusChange : StringTable.LostTitle_BonusChange;
var infoColor = this._bonus > 0 ? ColorValue.KEYWORD : ColorValue.INFO;
var n = this._balancer.getCurrentValue();
var width = TextRenderer.getTextWidth(text, font) + 5;
TextRenderer.drawKeywordText(x, y, text, -1, infoColor, font);
TextRenderer.drawKeywordText(x + width, y, this._bonus > 0 ? '+' : '-', -1, color, font);
NumberRenderer.drawRightNumber(x + width + 10, y, n);
},
_moveWait: function() {
if (this._counter.moveCycleCounter() !== MoveResult.CONTINUE) {
this.changeCycleMode(GoldNoticeMode.COUNT);
}
return MoveResult.CONTINUE;
},
_moveCount: function() {
if (this._balancer.moveBalancer() !== MoveResult.CONTINUE) {
this._playBonusChangeSound();
this.changeCycleMode(GoldNoticeMode.INPUT);
}
return MoveResult.CONTINUE;
},
_moveInput: function() {
if (InputControl.isSelectAction()) {
return MoveResult.END;
}
return MoveResult.CONTINUE;
},
_playBonusChangeSound: function() {
MediaControl.soundDirect('itemsale');
}
}
);