alter-egoism/js/plugins/survivor_battle_powerup_window.js
2025-11-07 03:06:19 +01:00

549 lines
17 KiB
JavaScript

function Window_battle_power_up_list() {
this.initialize(...arguments);
}
(function () {
const OPTION_HEIGHT = 78;
Scene_Survive_Battle_Map.prototype.createDisplayObjects = function () {
this.createSpriteset();
this.createWindowLayer();
this.createAllWindows();
// this._powerUpWindow = new Window_battle_power_up_list(rect);
// this.addWindow(this._powerUpWindow);
this.createButtons();
};
Scene_Survive_Battle_Map.prototype.createNumberInputWindow = function () {
const ww = 580;
const wh = 4 * (OPTION_HEIGHT + 8) + $gameSystem.windowPadding() * 2;
const wx = (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN - ww) / 2;
const wy = 150;
var rect = new Rectangle(wx, wy, ww, wh);
this._numberInputWindow = new Window_battle_power_up_list(rect);
// this._numberInputWindow.setHandler("ok", this.onItemOk.bind(this));
// this._numberInputWindow.setHandler("cancel", this.popScene.bind(this));
this.addWindow(this._numberInputWindow);
// キャンセルウィンドウもここで作る
this.createSurviverCancelWindow();
};
// Scene_Survive_Battle_Map.prototype.onItemOk = function () {
// this._powerUpWindow.index();
// };
// Scene_Survive_Battle_Map.prototype.onItemCancel = function () {
// if (this._categoryWindow.needsSelection()) {
// this._itemWindow.deselect();
// this._categoryWindow.activate();
// } else {
// this.popScene();
// }
// };
Window_battle_power_up_list.prototype = Object.create(Window_Command.prototype);
Window_battle_power_up_list.prototype.constructor = Window_battle_power_up_list;
Window_battle_power_up_list.prototype.initialize = function (rect) {
// this.power_data = {
// collect_range: 0,
// atk_power: 0,
// atk_rate: 0,
// atk_speed: 0,
// atk_num: 0,
// atk_range: 0,
// st_hp: 0,
// dm_resist: 0,
// st_rec: 0,
// st_exp: 0,
// st_money: 0,
// st_life: 0
// };
this._list = [];
//[["ファイア", "アイス", "サンダー"]];
Window_Selectable.prototype.initialize.call(this, rect);
// this.refresh();
// this.select(0);
// this.activate();
this.openness = 0;
this.deactivate();
};
Window_battle_power_up_list.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem("Window_sviv");
};
Window_battle_power_up_list.prototype.makeCommandList = function () {
const maxLevel = 5;
const maxSpot = 5; // 枠
// まずlvel5は除く
// 枠がmaxの時はweapon_levelにある物のみ
const player = $gameTemp.SURVIVOR_player_data;
const ary1 = SURVIVOR_WEAPON_LIST.filter((id) => {
const w = player.weapon_level;
const hasId = w.some((e) => e.id === id);
const isMax = w.some((e) => e.id === id && e.level === maxLevel);
return !isMax && (w.length < maxSpot || hasId);
});
const ary2 = SURVIVOR_ABILITY_LIST.filter((id) => {
const w = player.ability_level;
const hasId = w.some((e) => e.id === id);
const isMax = w.some((e) => e.id === id && e.level === maxLevel);
return !isMax && (w.length < maxSpot || hasId);
});
const shuffled = [...ary1, ...ary2].sort(() => Math.random() - 0.5);
this._list = shuffled.slice(0, 3);
if (this._list.length == 0) {
this._list.push("money");
}
this._list.push("skip");
};
Window_battle_power_up_list.prototype.maxCols = function () {
return 1;
};
Window_battle_power_up_list.prototype.lineHeight = function () {
return OPTION_HEIGHT;
};
Window_battle_power_up_list.prototype.maxItems = function () {
return this._list.length;
};
//[{name:"test", power:3},{name:"test", power:1}]
Window_battle_power_up_list.prototype.refresh = function () {
this.makeCommandList();
// for (var i = 0, len = ary.length; i < len; i++) {
// this.power_data[ary[i].name] = ary[i].power;
// }
this.paint();
};
Window_battle_power_up_list.prototype.drawAllItems = function () {
const topIndex = this.topIndex();
for (let i = 0; i < 4; i++) {
// const index = topIndex + i;
// if (index < this.maxItems()) {
this.drawItemBackground(i);
this.drawItem(i);
// }
}
};
Window_battle_power_up_list.prototype.drawItem = function (index) {
const id = this._list[index];
if (id) {
const rect = this.itemLineRect(index);
if (id === "skip") {
this.contents.fontSize = 22;
this.resetTextColor();
this.drawText("Skip", rect.x + 0, rect.y, 200, "center");
} else if (id === "money") {
this.contents.fontSize = 22;
this.resetTextColor();
this.drawIcon(0 + 13 * 16, rect.x - 4, rect.y);
this.drawText("Money", rect.x + 0, rect.y - 20, 200, "center");
this.drawText("Get 500 GOLD", rect.x + 180, rect.y - 20, 500, "left");
} else {
var data = SURVIVOR_ABILITY_DISP_DATA[id] || SURVIVOR_WEAPON_DISP_DATA[id];
this.contents.fontSize = 22;
this.resetTextColor();
this.drawText(data.name, rect.x + 0, rect.y - 20, 200, "center");
this.drawIcon(data.icon.x + data.icon.y * 16, rect.x - 4, rect.y);
this.drawText(SURVIVOR_CONST.WEAPON_TEXT[id] || SURVIVOR_CONST.ABILITY_TEXT[id], rect.x + 180, rect.y - 20, 500, "left");
var level =
$gameTemp.SURVIVOR_player_data.weapon_level.find((e) => e.id == id) ||
$gameTemp.SURVIVOR_player_data.ability_level.find((e) => e.id == id);
var value = level ? level.level : 0;
const stars = Math.max(0, Math.min(5, value)); // 0〜5に制限
const text = "★★★★★☆☆☆☆☆".slice(5 - stars, 10 - stars);
const text1 = text.slice(0, 5);
const text2 = text.slice(5, 10);
this.contents.fontSize = 16;
this.changeTextColor("#bfff00ff");
this.drawText(text1, rect.x + 30, rect.y + 8, 140, "center");
this.drawText(text2, rect.x + 30, rect.y + 30, 140, "center");
}
}
};
Window_battle_power_up_list.prototype.setMessageWindow = function (messageWindow) {
this._messageWindow = messageWindow;
};
Window_battle_power_up_list.prototype.start = function () {
// this._maxDigits = $gameMessage.numInputMaxDigits();
// this._number = $gameVariables.value($gameMessage.numInputVariableId());
// this._number = this._number.clamp(0, Math.pow(10, this._maxDigits) - 1);
// this.updatePlacement();
// this.placeButtons();
// this.createContents();
this.refresh();
this.open();
this.activate();
this.select(0);
};
Window_battle_power_up_list.prototype.processOk = function () {
SoundManager.playUseSkill();
// レベルアップ処理
$gameTemp.SURVIVOR_player_data.now_exp -= $gameTemp.SURVIVOR_next_exp($gameTemp.SURVIVOR_player_data.level);
$gameTemp.SURVIVOR_player_data.now_exp = 0;
$gameTemp.SURVIVOR_player_data.level++;
var id = this._list[this.index()];
// weapon_levelとかの値を+1したり追加する{id : string, level : number}
// スキップの場合 なにもしない
if (id === "skip") {
// お金を選んだ場合
} else if (id === "money") {
var v = $gameVariables.value(173);
v.gold += Math.ceil(500 * $gameTemp.SURVIVOR_player_data.st_money);
$gameVariables.setValue(173, v);
// 武器の場合
} else if (SURVIVOR_WEAPON_LIST.indexOf(id) !== -1) {
var idx = $gameTemp.SURVIVOR_player_data.weapon_level.findIndex((e) => e.id == id);
// レベルアップの時
if (idx !== -1) {
$gameTemp.SURVIVOR_player_data.weapon_level[idx].level += 1;
SceneManager._scene._spriteset.refreshWeapon(id, $gameTemp.SURVIVOR_player_data.weapon_level[idx].level);
// 新規追加の時
} else {
$gameTemp.SURVIVOR_player_data.weapon_level.push({
id: id,
level: 1
});
SceneManager._scene._spriteset.addWeapon(id, 1);
}
// アビリティの場合
} else if (SURVIVOR_ABILITY_LIST.indexOf(id) !== -1) {
var idx = $gameTemp.SURVIVOR_player_data.ability_level.findIndex((e) => e.id == id);
// レベルアップの時
if (idx !== -1) {
$gameTemp.SURVIVOR_player_data.ability_level[idx].level += 1;
// 新規追加の時
} else {
$gameTemp.SURVIVOR_player_data.ability_level.push({
id: id,
level: 1
});
}
if (id == "atk_num") {
for (var i = 0; i < $gameTemp.SURVIVOR_player_data.weapon_level.length; i++) {
SceneManager._scene._spriteset.refreshWeapon(
$gameTemp.SURVIVOR_player_data.weapon_level[i].id,
$gameTemp.SURVIVOR_player_data.weapon_level[i].level
);
}
}
}
SURVIVOR_DATA.refreshPlayerState();
if (id === "st_hp") {
$gameTemp.SURVIVOR_player_data.nowhp = $gameTemp.SURVIVOR_player_data.maxhp;
}
// ウィンドウの終了
this._messageWindow.terminateMessage();
this.updateInputData();
this.deactivate();
this.close();
SceneManager._scene._iconWindow.refresh();
};
Window_battle_power_up_list.prototype.isCancelEnabled = function () {
return false;
};
Window_battle_power_up_list.prototype.open = function () {
if (!this.isOpen()) {
this._opening = true;
}
this._closing = false;
$gameTimer._working = false;
};
Window_battle_power_up_list.prototype.close = function () {
if (!this.isClosed()) {
this._closing = true;
}
this._opening = false;
$gameTimer._working = true;
};
})();
// ################ 左下のウィンドウ ################
function Window_Survive_Icon_Info() {
this.initialize(...arguments);
}
(function () {
Window_Survive_Icon_Info.prototype = Object.create(Window_Selectable.prototype);
Window_Survive_Icon_Info.prototype.constructor = Window_Survive_Icon_Info;
Window_Survive_Icon_Info.prototype.initialize = function (rect) {
Window_Selectable.prototype.initialize.call(this, rect);
this.refresh();
};
Window_Survive_Icon_Info.prototype.refresh = function () {
this.contents.clear();
// this.drawCharacter(3, 10, 10);
//this.drawIcon(3,10,10);
this.contents.fontSize = 16;
for (var i = 0; i < $gameTemp.SURVIVOR_player_data.weapon_level.length; i++) {
var data = $gameTemp.SURVIVOR_player_data.weapon_level[i];
var icon = SURVIVOR_WEAPON_DISP_DATA[data.id].icon;
this.drawIcon(icon.x + icon.y * 16, i * 32, 0);
this.drawText(data.level, i * 32 + 20, 0 + 4);
}
for (var i = 0; i < $gameTemp.SURVIVOR_player_data.ability_level.length; i++) {
var data = $gameTemp.SURVIVOR_player_data.ability_level[i];
var icon = SURVIVOR_ABILITY_DISP_DATA[data.id].icon;
this.drawIcon(icon.x + icon.y * 16, i * 32, 0 + 32);
this.drawText(data.level, i * 32 + 20, 0 + 4 + 32);
}
};
Window_Survive_Icon_Info.prototype.update = function () {
this.processCursorMove();
this.processHandling();
this.processTouch();
Window_Scrollable.prototype.update.call(this);
};
Window_Survive_Icon_Info.prototype.open = function () {
this.refresh();
Window_Selectable.prototype.open.call(this);
};
Window_Survive_Icon_Info.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem("Window_sviv");
};
const _Scene_Survive_Battle_Map_createAllWindows = Scene_Survive_Battle_Map.prototype.createAllWindows;
Scene_Survive_Battle_Map.prototype.createAllWindows = function () {
_Scene_Survive_Battle_Map_createAllWindows.call(this);
const rect = this.iconWindowRect();
this._iconWindow = new Window_Survive_Icon_Info(rect);
this.addChild(this._iconWindow);
};
Scene_Survive_Battle_Map.prototype.iconWindowRect = function () {
const ww = 32 * 5 + 12 * 2;
const wh = 32 * 2 + 12 * 2;
const wx = 0;
const wy = 54;
return new Rectangle(wx, wy, ww, wh);
};
})();
function Window_Surviver_Cancel() {
this.initialize(...arguments);
}
(function () {
const OPTION_HEIGHT = 78;
Scene_Survive_Battle_Map.prototype.createSurviverCancelWindow = function () {
const ww = 680;
const wh = 4 * (OPTION_HEIGHT + 8) + $gameSystem.windowPadding() * 2;
const wx = (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN - ww) / 2;
const wy = 150;
var rect = new Rectangle(wx, wy, ww, wh);
this._cancelWindow = new Window_Surviver_Cancel(rect);
this.addWindow(this._cancelWindow);
};
Window_Surviver_Cancel.prototype = Object.create(Window_Command.prototype);
Window_Surviver_Cancel.prototype.constructor = Window_Surviver_Cancel;
Window_Surviver_Cancel.prototype.initialize = function (rect) {
this._list = ["ok", "cancel"];
//[["ファイア", "アイス", "サンダー"]];
Window_Selectable.prototype.initialize.call(this, rect);
// this.refresh();
// this.select(0);
// this.activate();
this.openness = 0;
this.deactivate();
};
Window_Surviver_Cancel.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem("Window_sviv");
};
Window_Surviver_Cancel.prototype.makeCommandList = function () {
this._list = ["ok", "cancel"];
};
Window_Surviver_Cancel.prototype.maxCols = function () {
return 2;
};
Window_Surviver_Cancel.prototype.lineHeight = function () {
return OPTION_HEIGHT;
};
Window_Surviver_Cancel.prototype.maxItems = function () {
return this._list.length;
};
//[{name:"test", power:3},{name:"test", power:1}]
Window_Surviver_Cancel.prototype.refresh = function () {
this.makeCommandList();
// for (var i = 0, len = ary.length; i < len; i++) {
// this.power_data[ary[i].name] = ary[i].power;
// }
this.paint();
};
Window_Surviver_Cancel.prototype.drawAllItems = function () {
const topIndex = this.topIndex();
for (let i = 0; i < 2; i++) {
// const index = topIndex + i;
// if (index < this.maxItems()) {
this.drawItemBackground(i);
this.drawItem(i);
// }
}
this.contents.fontSize = 22;
for (var i = 0; i < SURVIVOR_ABILITY_LIST.length; i++) {
var id = SURVIVOR_ABILITY_LIST[i];
$gameTemp.SURVIVOR_player_data[id];
var rect_x = Math.floor(i / 5) * 200;
var rect_y = (i % 5) * 30;
this.drawText(SURVIVOR_ABILITY_DISP_DATA[id].name, 10 + rect_x, 100 + rect_y, 100, "left");
this.drawText($gameTemp.SURVIVOR_player_data[id].toFixed(2), 120 + rect_x, 100 + rect_y, 70, "right");
}
};
Window_Surviver_Cancel.prototype.drawItem = function (index) {
const id = this._list[index];
if (id) {
const rect = this.itemLineRect(index);
this.contents.fontSize = 22;
this.resetTextColor();
var text = {
ok: "Return to the beach",
cancel: "Cancel"
};
this.drawText(text[id], rect.x + 0, rect.y, rect.width, "center");
}
};
Window_Surviver_Cancel.prototype.setMessageWindow = function (messageWindow) {
this._messageWindow = messageWindow;
};
Window_Surviver_Cancel.prototype.start = function () {
// this._maxDigits = $gameMessage.numInputMaxDigits();
// this._number = $gameVariables.value($gameMessage.numInputVariableId());
// this._number = this._number.clamp(0, Math.pow(10, this._maxDigits) - 1);
// this.updatePlacement();
// this.placeButtons();
// this.createContents();
this.refresh();
this.open();
this.activate();
this.select(1);
};
Window_Surviver_Cancel.prototype.processOk = function () {
SoundManager.playUseSkill();
// // レベルアップ処理
// $gameTemp.SURVIVOR_player_data.now_exp -= $gameTemp.SURVIVOR_next_exp($gameTemp.SURVIVOR_player_data.level);
// $gameTemp.SURVIVOR_player_data.now_exp = 0;
// $gameTemp.SURVIVOR_player_data.level++;
//
var command = this._list[this.index()];
if (command == "ok") {
$gameTimer.stop();
$gameTemp.reserveCommonEvent(1217);
}
// ウィンドウの終了
this._messageWindow.terminateMessage();
this.updateInputData();
this.deactivate();
this.close();
SceneManager._scene._iconWindow.refresh();
};
Window_Surviver_Cancel.prototype.isCancelEnabled = function () {
return true;
};
Window_Surviver_Cancel.prototype.processHandling = function () {
if (this.isOpen() && this.active) {
if (Input.isRepeated("cancel")) {
this.processBack();
}
if (Input.isRepeated("ok")) {
this.processOk();
}
}
};
Window_Surviver_Cancel.prototype.processBack = function () {
SoundManager.playCancel();
this._messageWindow.terminateMessage();
this.updateInputData();
this.deactivate();
this.close();
};
Window_Surviver_Cancel.prototype.open = function () {
if (!this.isOpen()) {
this._opening = true;
}
this._closing = false;
$gameTimer._working = false;
};
Window_Surviver_Cancel.prototype.close = function () {
if (!this.isClosed()) {
this._closing = true;
}
this._opening = false;
// ビーチへ戻るコモンイベントが無い時だけタイマー再開
if (!$gameTemp._commonEventQueue || !$gameTemp._commonEventQueue.length) {
$gameTimer._working = true;
}
};
})();