264 lines
6.5 KiB
JavaScript
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');
|
|
}
|
|
}
|
|
);
|