alter-egoism/js/plugins/CBR_extra.js
2025-11-07 14:48:51 -06:00

1023 lines
32 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CBR_extra_hscene_list = null;
DataManager._databaseFiles.push({ name: "CBR_extra_hscene_list", src: "CBR_extra_hscene_list.json" });
CBR_extra_pic_list = null;
DataManager._databaseFiles.push({ name: "CBR_extra_pic_list", src: "CBR_extra_pic_list.json" });
CBR_extra_video_list = null;
DataManager._databaseFiles.push({ name: "CBR_extra_video_list", src: "CBR_extra_video_list.json" });
function Scene_Extra() {
this.initialize(...arguments);
}
Scene_Extra.prototype = Object.create(Scene_ItemBase.prototype);
Scene_Extra.prototype.constructor = Scene_Extra;
(function () {
Scene_Menu.prototype.commandExtra = function () {
SceneManager.push(Scene_Extra);
};
Scene_Extra.prototype.initialize = function () {
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_Extra.prototype.do_common = function (id) {
const common = $dataCommonEvents[id];
if (!common) return;
// Interpreterイベント処理機構を新規作成
const interpreter = new Game_Interpreter();
interpreter.setup(common.list);
// タイトルで定期的に更新されるように保存
this._extraInterpreter = interpreter;
};
Scene_Extra.prototype.create = function () {
Scene_MenuBase.prototype.create.call(this);
DataManager.loadAllSavefileImages();
this.createHelpWindow();
this.createListWindow();
this.createCategoryWindow();
//this._helpWindow.setText(this.helpWindowText());
this._pic_videoWindow = new Window_Extra_pic_video(new Rectangle(0, 0, Graphics.boxWidth, Graphics.boxHeight));
this._pic_videoWindow.setHandler("ok", this.onPicOk.bind(this));
this._pic_videoWindow.setHandler("cancel", this.onPicCancel.bind(this));
this._pic_videoWindow.hide();
this._itemWindow.setPic_VideoWindow(this._pic_videoWindow);
this._pic_videoWindow.setItemWindow(this._pic_videoWindow);
this.addWindow(this._pic_videoWindow);
// 回想から戻ってきた時用
if (SceneManager._CBR_kaisou_val) {
this._categoryWindow.select(1);
this._categoryWindow.deactivate();
this._itemWindow.setCategory("scene");
this._itemWindow._page = SceneManager._CBR_kaisou_val.page;
this._itemWindow.select(SceneManager._CBR_kaisou_val.index);
this._itemWindow.activate();
this._itemWindow._kaisou_page = SceneManager._CBR_kaisou_val.page;
SceneManager._CBR_kaisou_val = null;
this._itemWindow.refresh();
} else if (SceneManager._CBR_kaisou_video_val) {
this._categoryWindow.select(2);
this._categoryWindow.deactivate();
this._itemWindow.setCategory("video");
this._itemWindow._page = SceneManager._CBR_kaisou_video_val.page;
this._itemWindow.select(SceneManager._CBR_kaisou_video_val.index);
this._itemWindow.activate();
this._itemWindow._kaisou_page = SceneManager._CBR_kaisou_video_val.page;
SceneManager._CBR_kaisou_video_val = null;
this._itemWindow.refresh();
}
// ピクチャコンテナ(描画用)
this._pictureContainer = new Sprite();
this.addChild(this._pictureContainer);
// ピクチャスプライト群
this._pictureSprites = [];
for (let i = 1; i <= 30; i++) {
const sprite = new Sprite_Picture(i);
this._pictureContainer.addChild(sprite);
this._pictureSprites.push(sprite);
}
};
// ピクチャ用
Scene_Extra.prototype.update = function () {
Scene_ItemBase.prototype.update.call(this);
if (this._extraInterpreter && this._extraInterpreter._list) {
this._extraInterpreter.update();
}
$gameScreen.update();
};
// ピクチャ用
Scene_Extra.prototype.stop = function () {
Scene_ItemBase.prototype.stop.call(this);
$gameScreen.clearPictures();
};
Scene_Extra.prototype.createBackground = function () {
this._backgroundSprite = new Sprite();
this._backgroundSprite.bitmap = ImageManager.loadSystem("menu_extra_back");
this.addChild(this._backgroundSprite);
this._backgroundTextSprite = new Sprite(new Bitmap(Graphics.width, Graphics.height));
var b = this._backgroundTextSprite.bitmap;
b.fontFace = "serif";
b.fontSize = 32;
b.textColor = "#000000";
b.drawTextM("Extra", 22, 20, 200, 22, "center");
this.addChild(this._backgroundTextSprite);
this._background_page_sprite = new Sprite();
this._background_page_sprite.bitmap = ImageManager.loadSystem("menu_extra_page");
this.addChild(this._background_page_sprite);
this._pageSprite = new Sprite(new Bitmap(300, 50));
this._pageSprite.x = 900;
this._pageSprite.y = 20;
this.addChild(this._pageSprite);
};
Scene_Extra.prototype.createHelpWindow = function () {
const rect = this.helpWindowRect();
this._helpWindow = new Window_ExtraHelp(rect);
this.addWindow(this._helpWindow);
};
Scene_Extra.prototype.helpWindowRect = function () {
const wx = 0;
const wy = 610;
const ww = Graphics.boxWidth;
const wh = 110;
return new Rectangle(wx, wy, ww, wh);
};
// もうヘルプウィンドウの更新は全部 EventListでやる、カテゴリはリストに渡すだけ
Scene_Extra.prototype.createListWindow = function () {
const rect = this.listWindowRect();
this._itemWindow = new Window_ExtraList(rect);
this._itemWindow.setHandler("ok", this.onItemOk.bind(this));
this._itemWindow.setHandler("cancel", this.onItemCancel.bind(this));
this._itemWindow.setHelpWindow(this._helpWindow);
this._itemWindow.setPageSprite(this._pageSprite);
this._itemWindow.refresh();
this.addWindow(this._itemWindow);
};
Scene_Extra.prototype.onPicOk = function () {
// this._itemWindow.onOk();
// this._itemWindow.deselect();
// this._pic_videoWindow.show();
// this._pic_videoWindow.activate();
};
Scene_Extra.prototype.onPicCancel = function () {
this._pic_videoWindow.deselect();
this._pic_videoWindow.hide();
this._itemWindow.activate();
$gameScreen.clearPictures();
};
Scene_Extra.prototype.onItemOk = function () {
if (this._itemWindow._category == "cg") {
this._itemWindow.onOk();
this._itemWindow.deactivate();
this._pic_videoWindow.show();
this._pic_videoWindow.activate();
} else if (this._itemWindow._category == "scene") {
var data_index = this._itemWindow._list[this._itemWindow.index() + this._itemWindow._page * this._itemWindow._maxPageItems];
info = CBR_extra_hscene_list[data_index];
$gameTemp.reserveCommonEvent(info.common_id);
$gameTemp.reserveCommonEvent(1177);
if ($gameTemp.isCommonEventReserved()) {
SceneManager._CBR_kaisou_val = {
page: this._itemWindow._page,
index: this._itemWindow.index()
};
$gameSwitches.setValue(106, true);
$gamePlayer.reserveTransfer(3, 10, 5, 2, 0);
SceneManager.push(Scene_Map);
}
} else if (this._itemWindow._category == "video") {
// this._itemWindow.onOk();
// this._itemWindow.deactivate();
// this._pic_videoWindow.show();
// this._pic_videoWindow.activate();
var data_index = this._itemWindow._list[this._itemWindow.index() + this._itemWindow._page * this._itemWindow._maxPageItems];
info = CBR_extra_hscene_list[data_index];
$gameVariables.setValue(404, info.dispIdx);
$gameTemp.reserveCommonEvent(916);
$gameTemp.reserveCommonEvent(1177);
if ($gameTemp.isCommonEventReserved()) {
SceneManager._CBR_kaisou_video_val = {
page: this._itemWindow._page,
index: this._itemWindow.index()
};
$gameSwitches.setValue(106, true);
$gamePlayer.reserveTransfer(3, 10, 5, 2, 0);
SceneManager.push(Scene_Map);
}
}
};
Game_System.prototype.isSaveEnabled = function () {
return this._saveEnabled && !$gameSwitches.value(106);
};
Scene_Extra.prototype.onItemCancel = function () {
this._itemWindow.deselect();
this._categoryWindow.activate();
this._helpWindow.hide();
};
Scene_Extra.prototype.createCategoryWindow = function () {
const rect = this.categoryWindowRect();
this._categoryWindow = new Window_EvCategory(rect);
//this._categoryWindow.setHelpWindow(this._helpWindow);
this._categoryWindow.setItemWindow(this._itemWindow);
//this._categoryWindow.setHelpWindow(this._helpWindow);
this._categoryWindow.setHandler("ok", this.onCategoryOk.bind(this));
this._categoryWindow.setHandler("cancel", this.popScene.bind(this));
this.addWindow(this._categoryWindow);
};
Scene_Extra.prototype.popScene = function () {
SceneManager.goto(Scene_Title);
};
Scene_Extra.prototype.listWindowRect = function () {
const wx = 0;
const wy = 80;
const ww = Graphics.boxWidth;
const wh = 500;
return new Rectangle(wx, wy, ww, wh);
};
Scene_Extra.prototype.helpWindowText = function () {
return "";
};
Scene_Extra.prototype.helpWindowText = function () {
return TextManager.saveMessage;
};
Scene_Extra.prototype.onCategoryOk = function () {
this._itemWindow.activate();
this._itemWindow.select(0);
if (this._categoryWindow.currentSymbol() == "scene") {
this._helpWindow.show();
} else {
this._helpWindow.hide();
}
};
// //コモンイベントを実行
// Scene_Extra.prototype.onItemOk = function () {
// $gameVariables.setValue(10, this._itemWindow._list[this._itemWindow.index()]);
// $gameTemp.reserveCommonEvent(23);
// SceneManager.goto(Scene_Map);
// };
// ####################################################
// ################# アイテムの種類 ####################
// ####################################################
// カテゴリーウィンドウ
function Window_EvCategory() {
this.initialize(...arguments);
}
Window_EvCategory.prototype = Object.create(Window_HorzCommand.prototype);
Window_EvCategory.prototype.constructor = Window_EvCategory;
Scene_Extra.prototype.categoryWindowRect = function () {
const wx = 270;
const wy = -6;
const ww = 600;
const wh = 58 + 8;
return new Rectangle(wx, wy, ww, wh);
};
Window_EvCategory.prototype.initialize = function (rect) {
Window_HorzCommand.prototype.initialize.call(this, rect);
this._padding = 0;
};
//カテゴリーはアイテムと大事な物だけにする
Window_EvCategory.prototype.makeCommandList = function () {
this.addCommand("View CGs", "cg");
this.addCommand("H Scenes", "scene");
this.addCommand("H Animations", "video");
};
Window_EvCategory.prototype.setItemWindow = function (itemWindow) {
this._itemWindow = itemWindow;
};
// 変更があったらカテゴリーを更新する
Window_EvCategory.prototype.update = function () {
Window_HorzCommand.prototype.update.call(this);
if (this._itemWindow) {
this._itemWindow.setCategory(this.currentSymbol());
}
};
Window_EvCategory.prototype._refreshAllParts = function () {
this._padding = 0;
//this._refreshBack();
//this._refreshFrame();
this._refreshCursor();
this._refreshArrows();
this._refreshPauseSign();
};
//カーソルの変更
Window_EvCategory.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem("Window");
this.menu_item_skin = ImageManager.loadSystem("menu_item_categoly_select");
this.menu_cursor_skin = ImageManager.loadSystem("menu_item_categoly_cursor");
if (!this.menu_item_skin.isReady()) {
this.menu_item_skin.addLoadListener(() => {
this.refresh(); // 画像がロードされたら再描画
});
return;
}
};
Window_EvCategory.prototype.lineHeight = function () {
return 58;
};
Window_EvCategory.prototype._refreshCursor = function () {
const drect = this._cursorRect.clone();
const srect = { x: 0, y: 0, width: 126, height: 58 };
const m = 0;
for (const child of this._cursorSprite.children) {
child.bitmap = this.menu_cursor_skin;
}
this._setRectPartsGeometry(this._cursorSprite, srect, drect, m);
};
//カーソルを微調整、あとカーソルを常に不透明に
Window_EvCategory.prototype._updateCursor = function () {
this._cursorSprite.alpha = 255;
this._cursorSprite.visible = this.isOpen() && this.cursorVisible;
this._cursorSprite.x = this._cursorRect.x;
this._cursorSprite.y = this._cursorRect.y - 4;
};
//未選択コマンドの背景を画像に
Window_EvCategory.prototype.drawItemBackground = function (index) {
const rect = this.itemRect(index);
if (this.menu_item_skin.isReady()) {
const bitmap = this.menu_item_skin;
const dx = rect.x;
const dy = rect.y;
const dw = rect.width;
const dh = rect.height;
this.contentsBack.blt(bitmap, 0, 0, 126, 58, dx, dy - 4, dw, dh);
}
};
//カーソルが来た時、アイテムの文字名の色を変更する
Window_EvCategory.prototype.drawItem = function (index) {
const rect = this.itemLineRect(index);
const align = this.itemTextAlign();
this.resetTextColor();
if (index == this._index) {
this.changeTextColor("#000000");
}
this.changePaintOpacity(this.isCommandEnabled(index));
//文字をちょっと下にする
this.drawTextS(this.commandName(index), rect.x, rect.y + 8, rect.width, align);
};
//セレクトするたびに背景をリフレッシュ
Window_EvCategory.prototype.select = function (index) {
this._index = index;
this.contents.clear();
this.contentsBack.clear();
this.drawAllItems();
this.refreshCursor();
this.callUpdateHelp();
};
//↑のセレクトでの不具合を出ないようにする
Window_EvCategory.prototype.drawAllItems = function () {
const topIndex = this.topIndex();
for (let i = 0; i < this.maxVisibleItems(); i++) {
const index = topIndex + i;
if (this._list && index < this.maxItems()) {
//選択ちゅうだけ背景なくす
if (i != this._index) {
this.drawItemBackground(index);
}
this.drawItem(index);
}
}
};
// ########################################################
// ################### 一覧ウィンドウ ######################
// ########################################################
function Window_ExtraList() {
this.initialize(...arguments);
}
Window_ExtraList.prototype = Object.create(Window_Selectable.prototype);
Window_ExtraList.prototype.constructor = Window_ExtraList;
Scene_Extra.prototype.listWindowRect = function () {
const ww = (280 + 12) * 4;
const wx = (Graphics.boxWidth - ww) / 2;
const wy = 60;
const wh = 560;
return new Rectangle(wx, wy, ww, wh);
};
Window_ExtraList.prototype.lineHeight = function () {
return 169;
};
Window_ExtraList.prototype.setPic_VideoWindow = function (pic_videoWindow) {
this._pic_videoWindow = pic_videoWindow;
};
Window_ExtraList.prototype.setPageSprite = function (sprite) {
this._page_sprite = sprite;
};
const _Window_ExtraList_update = Window_ExtraList.prototype.update;
Window_ExtraList.prototype.update = function () {
_Window_ExtraList_update.call(this);
if (this.active && TouchInput.isTriggered()) {
const x = TouchInput.x;
const y = TouchInput.y;
if (302 <= y && y <= 422) {
if (1 <= x && x <= 60) {
if (this._page <= 0) {
this._page = this._maxPage;
} else {
this._page -= 1;
}
this.select(0);
this._pageItems = Math.min(this._maxPageItems, this._list.length - this._page * this._maxPageItems);
// セレクトは一番右にする
this.smoothSelect(0);
this.playCursorSound();
this.refresh();
} else if (1221 <= x && x <= 1280) {
if (this._maxPage <= this._page) {
this._page = 0;
} else {
this._page += 1;
}
this.select(0);
this._pageItems = Math.min(this._maxPageItems, this._list.length - this._page * this._maxPageItems);
// セレクトは一番左にする
this.smoothSelect(0);
this.playCursorSound();
this.refresh();
}
}
}
};
Window_ExtraList.prototype.onOk = function () {
if (this._category === "cg") {
var data_index = this._list[this.index() + this._page * this._maxPageItems];
this._pic_videoWindow.setPic_info(CBR_extra_pic_list[data_index]);
} else if (this._category === "scene") {
} else if (this._category === "video") {
// var data_index = this._list[this.index() + this._page * this.maxItems()];
// this._pic_videoWindow.setVideo_info(CBR_extra_video_list[data_index]);
// SceneManager._scene.do_common(916);
}
};
Window_ExtraList.prototype.initialize = function (rect) {
Window_Selectable.prototype.initialize.call(this, rect);
//最初に0番目って指定、commandではデフォでやってるけど
// デフォではアクティブに
this._category = "cg";
// ページ化用
this._page = this._kaisou_page || 0;
this._maxPageItems = 12;
this.makeList();
};
Window_ExtraList.prototype.makeList = function () {
this._list = [];
if (this._category == "cg") {
// this._list = $gameVariables.value(521) || [];
for (var i = 1, len = CBR_extra_pic_list.length; i < len; i++) {
this._list.push(i);
}
} else if (this._category == "scene") {
for (var i = 1, len = CBR_extra_hscene_list.length; i < len; i++) {
this._list.push(i);
}
} else if (this._category == "video") {
for (var i = 1, len = CBR_extra_video_list.length; i < len; i++) {
this._list.push(i);
}
}
// ページをリセット
this._page = this._kaisou_page || 0;
this._kaisou_page = null;
// 最大ページ
this._maxPage = Math.floor(this._list.length / this._maxPageItems);
// 今のページに表示するアイテム数
this._pageItems = Math.min(this._maxPageItems, this._list.length - this._page * this._maxPageItems);
if (this._maxPage === 0) {
SceneManager._scene._background_page_sprite.hide();
} else {
SceneManager._scene._background_page_sprite.show();
}
// ヘルプウィンドウの表示非表示
if (this.parent) {
if (this._category == "scene") {
this.parent.parent._helpWindow.show();
} else {
this.parent.parent._helpWindow.hide();
}
}
};
Window_ExtraList.prototype.maxCols = function () {
return 4;
};
Window_ExtraList.prototype.maxItems = function () {
return this._pageItems;
};
Window_ExtraList.prototype.itemPadding = function () {
return 0;
};
Window_ExtraList.prototype.updatePadding = function () {
this.padding = 0;
};
Window_ExtraList.prototype.colSpacing = function () {
return 12;
};
Window_ExtraList.prototype.rowSpacing = function () {
return 0;
};
Window_ExtraList.prototype.setCategory = function (category) {
if (this._category !== category) {
this._category = category;
this.makeList();
//this.callUpdateHelp();
this.refresh();
// 毎回一番上に戻す
// this.select(0);
// this.scrollTo(0, 0);
}
};
//右のウィンドウにデータを渡す
Window_ExtraList.prototype.callUpdateHelp = function () {
if (this.active && this._helpWindow) {
this.updateHelp();
}
};
Window_ExtraList.prototype.updateHelp = function () {
this._helpWindow.setItem(CBR_extra_hscene_list[this._list[this.index() + this._page * this._maxPageItems]]);
};
Window_ExtraList.prototype.cursorRight = function (wrap) {
const index = this.index();
const maxItems = this.maxItems();
const maxCols = this.maxCols();
const horizontal = this.isHorizontal();
// ページ化用 ページの切り替えの時
if ((index + 1) % this.maxCols() == 0 || index + 1 == this._pageItems) {
if (this._maxPage <= this._page) {
this._page = 0;
} else {
this._page += 1;
}
this._pageItems = Math.min(this._maxPageItems, this._list.length - this._page * this._maxPageItems);
this.playCursorSound();
// セレクトは一番左にする
this.smoothSelect(Math.min(index - (index % this.maxCols()), this._pageItems - ((this._pageItems - 1) % this.maxCols()) - 1));
} else if (maxCols >= 2 && (index < maxItems - 1 || (wrap && horizontal))) {
this.smoothSelect((index + 1) % maxItems);
}
this.refresh();
};
Window_ExtraList.prototype.cursorLeft = function (wrap) {
const index = Math.max(0, this.index());
const maxItems = this.maxItems();
const maxCols = this.maxCols();
const horizontal = this.isHorizontal();
// ページ化用 ページの切り替えの時
if (index % this.maxCols() == 0) {
if (this._page <= 0) {
this._page = this._maxPage;
} else {
this._page -= 1;
}
this._pageItems = Math.min(this._maxPageItems, this._list.length - this._page * this._maxPageItems);
// セレクトは一番右にする
this.smoothSelect(Math.min(index + 3, this._pageItems - 1));
this.playCursorSound();
} else if (maxCols >= 2 && (index > 0 || (wrap && horizontal))) {
this.smoothSelect((index - 1 + maxItems) % maxItems);
}
this.refresh();
};
Window_ExtraList.prototype.paint = function () {
if (this.contents) {
var reload_flag = false;
for (let i = 0; i < this._maxPageItems; i++) {
var data_index = this._list[i + this._page * this._maxPageItems];
if (data_index === undefined) {
continue;
}
var info;
if (this._category == "cg") {
info = CBR_extra_pic_list[data_index];
} else if (this._category == "scene") {
info = CBR_extra_hscene_list[data_index];
} else if (this._category == "video") {
info = CBR_extra_video_list[data_index];
}
const bitmap = ImageManager.loadSystem(info.img);
if (!bitmap.isReady()) {
reload_flag = true;
bitmap.addLoadListener(() => {
this.refresh(); // 画像がロードされたら再描画
});
return;
}
}
if (!reload_flag) {
this.contents.clear();
this.contentsBack.clear();
this.drawAllItems();
}
}
};
// ここでitemを描写する前に画像がロードされてるのか調べる
Window_ExtraList.prototype.drawAllItems = function () {
// 量が多いでロード処理はココでやる
var reload_flag = false;
for (let i = 0; i < this._maxPageItems; i++) {
var data_index = this._list[i + this._page * this._maxPageItems];
if (data_index === undefined) {
continue;
}
var info;
if (this._category == "cg") {
info = CBR_extra_pic_list[data_index];
} else if (this._category == "scene") {
info = CBR_extra_hscene_list[data_index];
} else if (this._category == "video") {
info = CBR_extra_video_list[data_index];
}
const bitmap = ImageManager.loadSystem(info.img);
if (!bitmap.isReady()) {
reload_flag = true;
bitmap.addLoadListener(() => {
this.refresh(); // 画像がロードされたら再描画
});
return;
}
}
if (reload_flag) {
return;
}
this._pageItems = Math.min(this._maxPageItems, this._list.length - this._page * this._maxPageItems);
const topIndex = this.topIndex();
for (let i = 0; i < this._pageItems; i++) {
const index = topIndex + i;
if (index < this.maxItems()) {
this.drawItemBackground(index);
this.drawItem(index);
}
}
// ページ描写
var b = this._page_sprite.bitmap;
b.clear();
b.fontFace = "serif";
b.fontSize = 32;
b.textColor = "#000000";
b.drawTextM(`${this._page + 1} / ${this._maxPage + 1} page`, 0, 0, 300, 32, "right");
};
// 回想チラつき対処作りかけ
// Window_ExtraList.prototype.paint = function () {
// if (this.contents) {
// var flag = false;
// for (var i = 0; i < 12; i++) {
// var data_index = this._list[i + this._page * this._maxPageItems];
// info = CBR_extra_pic_list[data_index];
// if (info) {
// const bitmap = ImageManager.loadSystem(info.img);
// if (bitmap.isReady()) {
// flag = true;
// }
// }
// }
// if (!flag) {
// this.contents.clear();
// this.contentsBack.clear();
// }
// this.drawAllItems();
// }
// };
Window_ExtraList.prototype.drawItem = function (index) {
var data_index = this._list[index + this._page * this._maxPageItems];
var info;
if (this._category == "cg") {
const ary = $gameVariables.value(521) || [];
if (!$gameSwitches.value(778) && !ary.includes(data_index)) {
return;
} else {
info = CBR_extra_pic_list[data_index];
}
} else if (this._category == "scene") {
info = CBR_extra_hscene_list[data_index];
var s_id = info.switch_id;
if (!$gameSwitches.value(778) && !$gameSwitches.value(s_id)) {
return;
}
} else if (this._category == "video") {
const ary = $gameVariables.value(522) || [];
if (!$gameSwitches.value(778) && !ary[data_index]) {
return;
} else {
info = CBR_extra_video_list[data_index];
}
}
const rect = this.itemRectWithPadding(index);
this.resetTextColor();
//this.changePaintOpacity(this.isEnabled(savefileId));
//this.drawTitle(savefileId, rect.x, rect.y + 4);
if (info) {
this.drawContents(info, rect);
}
};
Window_ExtraList.prototype.drawContents = function (info, rect) {
const bitmap = ImageManager.loadSystem(info.img);
this.contents.blt(bitmap, 0, 0, 256, 144, rect.x + 12, rect.y + 25);
// this.drawText(info.dispIdx, rect.x, rect.y + 2, 400, "left");
};
// ################# カーソルの変更 ##################
Window_ExtraList.prototype.loadWindowskin = function () {
this.windowskin = ImageManager.loadSystem("Window");
this.menu_cursor_skin = ImageManager.loadSystem("menu_extra_cursor");
this.menu_item_skin = ImageManager.loadSystem("menu_extra_select");
if (!this.menu_item_skin.isReady()) {
this.menu_item_skin.addLoadListener(() => {
this.refresh(); // 画像がロードされたら再描画
});
return;
}
};
Window_ExtraList.prototype._refreshCursor = function () {
const drect = this._cursorRect.clone();
const srect = { x: 0, y: 0, width: 280, height: 177 };
const m = 0;
for (const child of this._cursorSprite.children) {
child.bitmap = this.menu_cursor_skin;
}
this._setRectPartsGeometry(this._cursorSprite, srect, drect, m);
};
// //56×200にする
// Window_ExtraList.prototype._refreshCursor = function () {
// const drect = this._cursorRect.clone();
// const srect = { x: 0, y: 40, width: 588, height: 40 };
// const m = 0;
// for (const child of this._cursorSprite.children) {
// child.bitmap = this.menu_item_skin;
// }
// this._setRectPartsGeometry(this._cursorSprite, srect, drect, m);
// };
// //未選択コマンドの背景を画像に
Window_ExtraList.prototype.drawItemBackground = function (index) {
const rect = this.itemRect(index);
if (this.menu_item_skin) {
const bitmap = this.menu_item_skin;
const dx = rect.x;
const dy = rect.y;
const dw = rect.width;
const dh = rect.height;
this.contentsBack.blt(bitmap, 0, 0, 280, 177, dx, dy, dw, dh);
}
};
Window_ExtraList.prototype._refreshAllParts = function () {
//this._refreshBack();
//this._refreshFrame();
this._refreshCursor();
this._refreshArrows();
this._refreshPauseSign();
};
// 未開放の回想はブザー
Window_ExtraList.prototype.isCurrentItemEnabled = function () {
if (this._category == "scene") {
var data_index = this._list[this.index() + this._page * this.maxItems()];
info = CBR_extra_hscene_list[data_index];
var s_id = info.switch_id;
if (!$gameSwitches.value(778) && !$gameSwitches.value(s_id)) {
return false;
}
} else if (this._category == "cg") {
var data_index = this._list[this.index() + this._page * this.maxItems()];
const ary = $gameVariables.value(521) || [];
if (!$gameSwitches.value(778) && !ary.includes(data_index)) {
return false;
}
} else if (this._category == "video") {
var data_index = this._list[this.index() + this._page * this.maxItems()];
const ary = $gameVariables.value(522) || [];
if (!$gameSwitches.value(778) && !ary[data_index]) {
return false;
}
}
return true;
};
// ###########################################################
// ##################### 移動先ウィンドウ #####################
// ###########################################################
/*
//CG鑑賞案
{
"dispIdx": 1,1からスタート
"name": "eva_a001",
"sabun_list":["eva_a001_001", "eva_a001_002", "eva_a001_003"],
"img": "サムネ画像名(.pngはなし256×144"
},
//Hアニメ鑑賞モード
{
"dispIdx": 表示するインデックスの数値,1からスタート
"common_id": コモンイベントのid,
"switch_id": オープンするswitchのid,
"img": "サムネ画像名(.pngはなし256×144"
},
*/
function Window_ExtraHelp() {
this.initialize(...arguments);
}
Window_ExtraHelp.prototype = Object.create(Window_Help.prototype);
Window_ExtraHelp.prototype.constructor = Window_ExtraHelp;
Window_ExtraHelp.prototype.setItem = function (item) {
if (item) {
this.setText(item ? item.text : "");
}
};
Window_ExtraHelp.prototype.setText = function (text) {
if (this._text !== text) {
this._text = text;
this.refresh();
}
};
Window_ExtraHelp.prototype.refresh = function () {
const rect = this.baseTextRect();
this.contents.clear();
var bitmap = ImageManager.loadSystem("menu_extra_help");
this.contents.blt(bitmap, 0, 0, 1150, 73, 54, 4);
if (!bitmap.isReady()) {
bitmap.addLoadListener(() => {
this.refresh(); // 画像がロードされたら再描画
});
return;
}
this.drawTextEx(this._text, rect.x + 60, rect.y + 4, rect.width);
};
Window_ExtraHelp.prototype._refreshAllParts = function () {
//this._refreshBack();
//this._refreshFrame();
this._refreshCursor();
this._refreshArrows();
this._refreshPauseSign();
};
function Window_Extra_pic_video() {
this.initialize(...arguments);
}
Window_Extra_pic_video.prototype = Object.create(Window_Selectable.prototype);
Window_Extra_pic_video.prototype.constructor = Window_Extra_pic_video;
Window_Extra_pic_video.prototype.updatePadding = function () {
this.padding = 0;
};
Window_Extra_pic_video.prototype.setItemWindow = function (itemWindow) {
this._itemWindow = itemWindow;
};
Window_Extra_pic_video.prototype.setPic_info = function (pic_info) {
this._pic_info = pic_info;
this.refresh();
};
Window_Extra_pic_video.prototype.setVideo_info = function (video_info) {
this._video_info = video_info;
this.refresh();
};
const _Window_Extra_pic_video_update = Window_Extra_pic_video.prototype.update;
Window_Extra_pic_video.prototype.update = function () {
_Window_Extra_pic_video_update.call(this);
if (this.active && TouchInput.isTriggered()) {
this.processOk();
}
};
Window_Extra_pic_video.prototype.processOk = function () {
if (this.isCurrentItemEnabled() && this._pic_info) {
this.playCursorSound();
this.pic_page_index = (this.pic_page_index + 1) % this._pic_info.sabun_list.length;
// this.updateInputData();
// this.deactivate();
// this.callOkHandler();
this.refresh();
} else if (this.isCurrentItemEnabled() && this._video_info) {
this.playCursorSound();
this.video_page_index = (this.video_page_index + 1) % this._video_info.sabun_list.length;
this.refresh();
} else {
this.playBuzzerSound();
}
};
Window_Extra_pic_video.prototype.show = function () {
this.visible = true;
this.pic_page_index = 0;
this.video_page_index = 0;
this.refresh();
};
Window_Extra_pic_video.prototype.hide = function () {
this.paint();
this.contents.clear();
this.visible = false;
this._pic_info = null;
this._video_info = null;
};
Window_Extra_pic_video.prototype.refresh = function () {
if (this._pic_info && this._pic_info.sabun_list[this.pic_page_index]) {
const bitmap = ImageManager.loadPicture(this._pic_info.name + this._pic_info.sabun_list[this.pic_page_index]);
if (!bitmap.isReady()) {
bitmap.addLoadListener(() => {
this.refresh(); // 画像がロードされたら再描画
});
return;
} else {
this.paint();
this.contents.clear();
this.contents.blt(bitmap, 0, 0, 1280, 720, 0, 0);
}
} else if (this._video_info && this._video_info.sabun_list[this.video_page_index]) {
// $gameScreen.setVideoPicture({
// fileName: this._video_info.name + this._video_info.sabun_list[this.video_page_index],
// loop: "false",
// smooth: "true",
// volume: "100",
// reload: "false",
// autoplay: "true",
// finishSwitch: "0"
// });
// $gameScreen.showPicture(11, "", 0, 0, 0, 100, 100, 255, 0);
}
};
})();