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

131 lines
3.5 KiB
JavaScript

var DamageItemSelection = defineObject(BaseItemSelection,
{
}
);
var DamageItemUse = defineObject(BaseItemUse,
{
_dynamicEvent: null,
enterMainUseCycle: function(itemUseParent) {
var generator;
var itemTargetInfo = itemUseParent.getItemTargetInfo();
var damageInfo = itemTargetInfo.item.getDamageInfo();
var type = itemTargetInfo.item.getRangeType();
var plus = Calculator.calculateDamageItemPlus(itemTargetInfo.unit, itemTargetInfo.targetUnit, itemTargetInfo.item);
this._dynamicEvent = createObject(DynamicEvent);
generator = this._dynamicEvent.acquireEventGenerator();
if (type !== SelectionRangeType.SELFONLY) {
generator.locationFocus(itemTargetInfo.targetUnit.getMapX(), itemTargetInfo.targetUnit.getMapY(), true);
}
generator.damageHit(itemTargetInfo.targetUnit, this._getItemDamageAnime(itemTargetInfo),
damageInfo.getDamageValue() + plus, damageInfo.getDamageType(), itemTargetInfo.unit, itemUseParent.isItemSkipMode());
return this._dynamicEvent.executeDynamicEvent();
},
moveMainUseCycle: function() {
return this._dynamicEvent.moveDynamicEvent();
},
_getItemDamageAnime: function(itemTargetInfo) {
return itemTargetInfo.item.getItemAnime();
}
}
);
var DamageItemInfo = defineObject(BaseItemInfo,
{
drawItemInfoCycle: function(x, y) {
ItemInfoRenderer.drawKeyword(x, y, this.getItemTypeName(StringTable.ItemInfo_Damage));
y += ItemInfoRenderer.getSpaceY();
this._drawValue(x, y);
y += ItemInfoRenderer.getSpaceY();
this._drawInfo(x, y);
},
getInfoPartsCount: function() {
return 3;
},
_drawValue: function(x, y) {
var damageInfo = this._item.getDamageInfo();
ItemInfoRenderer.drawKeyword(x, y, StringTable.Damage_Pow);
x += ItemInfoRenderer.getSpaceX();
NumberRenderer.drawRightNumber(x, y, damageInfo.getDamageValue());
x += 40;
this.drawRange(x, y, this._item.getRangeValue(), this._item.getRangeType());
},
_drawInfo: function(x, y) {
var text;
var damageInfo = this._item.getDamageInfo();
var damageType = damageInfo.getDamageType();
var textui = this.getWindowTextUI();
var color = textui.getColor();
var font = textui.getFont();
if (damageType === DamageType.FIXED) {
text = StringTable.DamageType_Fixed;
}
else if (damageType === DamageType.PHYSICS) {
text = StringTable.DamageType_Physics;
}
else {
text = StringTable.DamageType_Magic;
}
ItemInfoRenderer.drawKeyword(x, y, StringTable.DamageType_Name);
x += ItemInfoRenderer.getSpaceX();
TextRenderer.drawKeywordText(x, y, text, -1, color, font);
}
}
);
var DamageItemAvailability = defineObject(BaseItemAvailability,
{
}
);
var DamageItemAI = defineObject(BaseItemAI,
{
getItemScore: function(unit, combination) {
var score;
var isDeath = false;
var hp = combination.targetUnit.getHp();
var damage = this._getValue(unit, combination);
hp -= damage;
if (hp <= 0) {
isDeath = true;
}
score = Miscellaneous.convertAIValue(damage);
// 相手を倒せる場合は、優遇する
if (isDeath) {
score += 50;
}
// 必中という点を考慮
score += 15;
return score;
},
_getValue: function(unit, combination) {
var plus = Calculator.calculateDamageItemPlus(unit, combination.targetUnit, combination.item);
var damageInfo = combination.item.getDamageInfo();
return Calculator.calculateDamageValue(combination.targetUnit, damageInfo.getDamageValue(), damageInfo.getDamageType(), plus);
}
}
);