211 lines
5.3 KiB
JavaScript
211 lines
5.3 KiB
JavaScript
|
|
var ResurrectionItemSelection = defineObject(BaseItemSelection,
|
|
{
|
|
_resurrectionScreen: null,
|
|
|
|
setInitialSelection: function() {
|
|
var screenParam = this._createScreenParam();
|
|
|
|
this._resurrectionScreen = createObject(ResurrectionScreen);
|
|
SceneManager.addScreen(this._resurrectionScreen, screenParam);
|
|
|
|
return EnterResult.OK;
|
|
},
|
|
|
|
moveItemSelectionCycle: function() {
|
|
var targetUnit;
|
|
|
|
if (SceneManager.isScreenClosed(this._resurrectionScreen)) {
|
|
targetUnit = this._resurrectionScreen.getResurrectionUnit();
|
|
|
|
if (targetUnit === null) {
|
|
this._isSelection = false;
|
|
this._targetPos = null;
|
|
}
|
|
else {
|
|
this._isSelection = true;
|
|
if (!Miscellaneous.isPrepareScene()) {
|
|
this._targetPos = PosChecker.getNearbyPos(this._unit, targetUnit);
|
|
}
|
|
}
|
|
|
|
this._targetUnit = targetUnit;
|
|
|
|
return MoveResult.END;
|
|
}
|
|
|
|
return MoveResult.CONTINUE;
|
|
},
|
|
|
|
_createScreenParam: function() {
|
|
var screenParam = ScreenBuilder.buildResurrection();
|
|
|
|
screenParam.unit = this._unit;
|
|
screenParam.item = this._item;
|
|
|
|
return screenParam;
|
|
}
|
|
}
|
|
);
|
|
|
|
var ResurrectionItemUse = defineObject(BaseItemUse,
|
|
{
|
|
_itemUseParent: null,
|
|
_item: null,
|
|
_targetUnit: null,
|
|
_targetPos: null,
|
|
|
|
enterMainUseCycle: function(itemUseParent) {
|
|
var itemTargetInfo = itemUseParent.getItemTargetInfo();
|
|
|
|
this._itemUseParent = itemUseParent;
|
|
this._item = itemTargetInfo.item;
|
|
this._targetUnit = itemTargetInfo.targetUnit;
|
|
this._targetPos = itemTargetInfo.targetPos;
|
|
|
|
if (!Miscellaneous.isPrepareScene()) {
|
|
// AIによるアイテム使用では、位置が初期化されていないことがある
|
|
if (this._targetPos === null) {
|
|
this._targetPos = PosChecker.getNearbyPos(itemTargetInfo.unit, itemTargetInfo.targetUnit);
|
|
}
|
|
|
|
if (PosChecker.getUnitFromPos(this._targetPos.x, this._targetPos.y) !== null) {
|
|
// ユニットが存在して蘇生できないため、アイテムを減らさない
|
|
this._itemUseParent.disableItemDecrement();
|
|
return EnterResult.NOTENTER;
|
|
}
|
|
}
|
|
|
|
this.mainAction();
|
|
|
|
return EnterResult.NOTENTER;
|
|
},
|
|
|
|
mainAction: function() {
|
|
var type = this._item.getResurrectionInfo().getResurrectionType();
|
|
|
|
if (Miscellaneous.isPrepareScene()) {
|
|
type = ResurrectionType.MAX;
|
|
}
|
|
else {
|
|
this._targetUnit.setMapX(this._targetPos.x);
|
|
this._targetUnit.setMapY(this._targetPos.y);
|
|
this._targetUnit.setSortieState(SortieType.SORTIE);
|
|
}
|
|
|
|
this._targetUnit.setAliveState(AliveType.ALIVE);
|
|
this._targetUnit.setInvisible(false);
|
|
this._targetUnit.setWait(false);
|
|
|
|
// 行動済みを解除することで、敵ターンで動けるようにする
|
|
this._targetUnit.setOrderMark(OrderMarkType.FREE);
|
|
|
|
this._changeHp(type);
|
|
},
|
|
|
|
getItemAnimePos: function(itemUseParent, animeData) {
|
|
var x, y;
|
|
var itemTargetInfo = itemUseParent.getItemTargetInfo();
|
|
var targetPos = itemUseParent.getItemTargetInfo().targetPos;
|
|
|
|
if (Miscellaneous.isPrepareScene()) {
|
|
return this.getUnitBasePos(itemUseParent, animeData);
|
|
}
|
|
|
|
if (targetPos === null) {
|
|
targetPos = PosChecker.getNearbyPos(itemTargetInfo.unit, itemTargetInfo.targetUnit);
|
|
}
|
|
|
|
x = LayoutControl.getPixelX(targetPos.x);
|
|
y = LayoutControl.getPixelY(targetPos.y);
|
|
|
|
return LayoutControl.getMapAnimationPos(x, y, animeData);
|
|
},
|
|
|
|
_changeHp: function(type) {
|
|
var hp;
|
|
var maxHp = ParamBonus.getMhp(this._targetUnit);
|
|
|
|
if (type === ResurrectionType.MIN) {
|
|
hp = 1;
|
|
}
|
|
else if (type === ResurrectionType.HALF) {
|
|
hp = Math.floor(maxHp / 2);
|
|
}
|
|
else {
|
|
hp = maxHp;
|
|
}
|
|
|
|
this._targetUnit.setHp(hp);
|
|
}
|
|
}
|
|
);
|
|
|
|
var ResurrectionItemInfo = defineObject(BaseItemInfo,
|
|
{
|
|
drawItemInfoCycle: function(x, y) {
|
|
ItemInfoRenderer.drawKeyword(x, y, this.getItemTypeName(StringTable.ItemInfo_Resurrection));
|
|
},
|
|
|
|
getInfoPartsCount: function() {
|
|
return 1;
|
|
}
|
|
}
|
|
);
|
|
|
|
var ResurrectionItemAvailability = defineObject(BaseItemAvailability,
|
|
{
|
|
isItemAvailableCondition: function(unit, item) {
|
|
var arr = ResurrectionControl.getTargetArray(unit, item);
|
|
|
|
// 死亡しているユニットが一人でもいる場合は、使用可能とみなす
|
|
return arr.length > 0;
|
|
}
|
|
}
|
|
);
|
|
|
|
var ResurrectionItemAI = defineObject(BaseItemAI,
|
|
{
|
|
getItemScore: function(unit, combination) {
|
|
return combination.targetUnit.getLv() * 7;
|
|
},
|
|
|
|
getActionTargetType: function(unit, item) {
|
|
return ActionTargetType.RESURRECTION;
|
|
}
|
|
}
|
|
);
|
|
|
|
var ResurrectionControl = {
|
|
getTargetArray: function(unit, item) {
|
|
var i, j, count, list, targetUnit;
|
|
var filter = FilterControl.getBestFilter(unit.getUnitType(), item.getFilterFlag());
|
|
var listArray = FilterControl.getDeathListArray(filter);
|
|
var listCount = listArray.length;
|
|
var arr= [];
|
|
var aggregation = item.getTargetAggregation();
|
|
|
|
for (i = 0; i < listCount; i++) {
|
|
list = listArray[i];
|
|
count = list.getCount();
|
|
for (j = 0; j < count; j++) {
|
|
targetUnit = list.getData(j);
|
|
if (!aggregation.isCondition(targetUnit)) {
|
|
continue;
|
|
}
|
|
|
|
if (!this._isTargetAllowed(unit, targetUnit, item)) {
|
|
continue;
|
|
}
|
|
|
|
arr.push(targetUnit);
|
|
}
|
|
}
|
|
|
|
return arr;
|
|
},
|
|
|
|
_isTargetAllowed: function(unit, targetUnit, item) {
|
|
return true;
|
|
}
|
|
};
|