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

264 lines
6.5 KiB
JavaScript

var DurabilityChangeEventCommand = defineObject(BaseEventCommand,
{
_isStockChange: false,
_targetUnit: null,
_targetItem: null,
_durability: 0,
_durabilityChangeView: null,
enterEventCommandCycle: function() {
this._prepareEventCommandMemberData();
if (!this._checkEventCommand()) {
return EnterResult.NOTENTER;
}
return this._completeEventCommandMemberData();
},
moveEventCommandCycle: function() {
if (this._durabilityChangeView.moveNoticeView() !== MoveResult.CONTINUE) {
this.mainEventCommand();
return MoveResult.END;
}
return MoveResult.CONTINUE;
},
drawEventCommandCycle: function() {
var x = LayoutControl.getCenterX(-1, this._durabilityChangeView.getNoticeViewWidth());
var y = LayoutControl.getCenterY(-1, this._durabilityChangeView.getNoticeViewHeight());
this._durabilityChangeView.drawNoticeView(x, y);
},
mainEventCommand: function() {
this._setDurability();
},
_prepareEventCommandMemberData: function() {
var eventCommandData = root.getEventCommandObject();
this._durabilityChangeView = createWindowObject(DurabilityChangeNoticeView, this);
this._isStockChange = eventCommandData.isStockChange();
this._targetUnit = eventCommandData.getTargetUnit();
this._targetItem = this._getTargetItem(eventCommandData);
this._durability = eventCommandData.getDurability();
this._increaseType = eventCommandData.getIncreaseValue();
},
_checkEventCommand: function() {
if (this._targetUnit === null || this._targetItem === null) {
return false;
}
return this.isEventCommandContinue();
},
_completeEventCommandMemberData: function() {
this._durabilityChangeView.setDurabilityChangeData(this._targetItem, this._getDurability());
return EnterResult.OK;
},
_getDurability: function() {
var limit = this._targetItem.getLimit();
var limitMax = this._targetItem.getLimitMax();
var durability = this._durability;
if (this._increaseType === IncreaseType.INCREASE) {
if (limit + durability > limitMax) {
durability = limitMax - limit;
}
}
else if (this._increaseType === IncreaseType.DECREASE) {
if (limit - durability < 0) {
durability = limitMax - limit;
}
durability *= -1;
}
else {
if (durability > limitMax) {
durability = limitMax - limit;
}
else if (durability < 0) {
durability = limitMax * -1;
}
else {
durability -= limit;
}
limit = durability;
}
return durability;
},
_setDurability: function() {
var limit = this._targetItem.getLimit();
var limitMax = this._targetItem.getLimitMax();
if (limit <= WeaponLimitValue.BROKEN) {
limit = 0;
}
if (this._increaseType === IncreaseType.INCREASE) {
limit += this._durability;
}
else if (this._increaseType === IncreaseType.DECREASE) {
limit -= this._durability;
}
else {
limit = this._durability;
}
if (limit >= limitMax) {
this._targetItem.setLimit(limitMax);
}
else if (limit <= 0) {
// 耐久が0以下になったため削除する
this._lostItem();
}
else {
this._targetItem.setLimit(limit);
}
},
_getTargetItem: function(eventCommandData) {
var item;
if (this._isStockChange) {
item = StockItemControl.getMatchItem(eventCommandData.getTargetItem());
}
else {
item = UnitItemControl.getMatchItem(this._targetUnit, eventCommandData.getTargetItem());
}
return item;
},
_lostItem: function() {
if (this._isStockChange) {
ItemControl.lostItem(null, this._targetItem);
}
else {
ItemControl.lostItem(this._targetUnit, this._targetItem);
}
}
}
);
var DurabilityNoticeMode = {
WAIT: 0,
COUNT: 1,
INPUT: 2
};
var DurabilityChangeNoticeView = defineObject(BaseNoticeView,
{
_targetItem: null,
_counter: null,
_balancer: null,
_titlePartsCount: 0,
initialize: function() {
this._counter = createObject(CycleCounter);
this._counter.setCounterInfo(20);
this._balancer = createObject(SimpleBalancer);
},
setDurabilityChangeData: function(targetItem, n) {
var speed = 30;
this._targetItem = targetItem;
this._setTitlePartsCount();
this._balancer.setBalancerInfo(this._targetItem.getLimit(), this._targetItem.getLimitMax());
this._balancer.setBalancerSpeed(speed);
this._balancer.startBalancerMove(n);
this.changeCycleMode(DurabilityNoticeMode.WAIT);
},
moveNoticeView: function() {
var mode = this.getCycleMode();
var result = MoveResult.CONTINUE;
if (mode === DurabilityNoticeMode.WAIT) {
result = this._moveWait();
}
else if (mode === DurabilityNoticeMode.COUNT) {
result = this._moveCount();
}
else if (mode === DurabilityNoticeMode.INPUT) {
result = this._moveInput();
}
return result;
},
drawNoticeViewContent: function(x, y) {
var textui = this.getTitleTextUI();
var color = textui.getColor();
var font = textui.getFont();
var width = TextRenderer.getTextWidth(this._targetItem.getName(), font) + 30;
ItemRenderer.drawItem(x, y, this._targetItem, color, font, false);
x += width;
this._drawLimit(x, y);
},
getTitlePartsCount: function() {
return this._titlePartsCount;
},
_setTitlePartsCount: function() {
var font = this.getTitleTextUI().getFont();
var textWidth = TextRenderer.getTextWidth(this._targetItem.getName(), font) + 100 + (TitleRenderer.getTitlePartsWidth() * 2);
this._titlePartsCount = Math.floor(textWidth / TitleRenderer.getTitlePartsWidth());
},
_moveWait: function() {
if (this._counter.moveCycleCounter() !== MoveResult.CONTINUE) {
this.changeCycleMode(DurabilityNoticeMode.COUNT);
}
return MoveResult.CONTINUE;
},
_moveCount: function() {
if (this._balancer.moveBalancer() !== MoveResult.CONTINUE) {
this._playDurabilityChangeSound();
this.changeCycleMode(DurabilityNoticeMode.INPUT);
}
return MoveResult.CONTINUE;
},
_moveInput: function() {
if (InputControl.isSelectAction()) {
return MoveResult.END;
}
return MoveResult.CONTINUE;
},
_drawLimit: function(x, y) {
var balancer = this._balancer;
var textSlash = '/';
var dx = [44, 60, 98];
NumberRenderer.drawNumberColor(x + dx[0], y, balancer.getCurrentValue(), 1, 255);
TextRenderer.drawSignText(x + dx[1], y, textSlash);
NumberRenderer.drawNumber(x + dx[2], y, balancer.getMaxValue());
},
_playDurabilityChangeSound: function() {
MediaControl.soundDirect('gaugechange');
}
}
);