white-thirst/www/js/plugins/EventSelector.js
2024-11-28 12:18:46 -06:00

213 lines
6.5 KiB
JavaScript

//=============================================================================
// EventSelector.js
//=============================================================================
/*:
* @plugindesc Displays a window to select a common event.
* @author Yoji Ojima
*
* @help
*
* Plugin Command:
* EventSelector open # Open the event selector window
* EventSelector add 3 # Add common event #3 to the selector
* EventSelector remove 4 # Remove common event #4 from the selector
* EventSelector clear # Clear the event selector
*/
/*:ja
* @plugindesc コモンイベントを選択するウィンドウを表示します。
* @author Yoji Ojima
*
* @help
*
* プラグインコマンド:
* EventSelector open # イベント選択ウィンドウを開く
* EventSelector add 3 # コモンイベント3番をイベント選択に追加
* EventSelector remove 4 # コモンイベント4番をイベント選択から削除
* EventSelector clear # イベント選択をクリア
*/
(function () {
var eventSelectorStatus = "";
var selectedCommonEvent = null;
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === "EventSelector") {
switch (args[0]) {
case "open":
eventSelectorStatus = "open";
this.setWaitMode("EventSelector");
break;
case "add":
$gameSystem.addToEventSelector(Number(args[1]));
break;
case "remove":
$gameSystem.removeFromEventSelector(Number(args[1]));
break;
case "clear":
$gameSystem.clearEventSelector();
break;
}
}
};
var _Game_Interpreter_updateWaitMode =
Game_Interpreter.prototype.updateWaitMode;
Game_Interpreter.prototype.updateWaitMode = function () {
if (this._waitMode === "EventSelector") {
if (eventSelectorStatus === "close") {
this._waitMode = "";
if (selectedCommonEvent) {
this.setupChild(selectedCommonEvent.list);
this._callingSelectedEvent = true;
}
eventSelectorStatus = "";
}
return true;
} else {
return _Game_Interpreter_updateWaitMode.call(this);
}
};
var _Game_Interpreter_updateChild = Game_Interpreter.prototype.updateChild;
Game_Interpreter.prototype.updateChild = function () {
var result = _Game_Interpreter_updateChild.call(this);
if (this._callingSelectedEvent && !result) {
this._callingSelectedEvent = false;
eventSelectorStatus = "open";
this.setWaitMode("EventSelector");
return true;
}
return result;
};
Game_System.prototype.addToEventSelector = function (commonEventId) {
if (!this._eventSelectorData) {
this.clearEventSelector();
}
if (!this._eventSelectorData.contains(commonEventId)) {
this._eventSelectorData.push(commonEventId);
}
};
Game_System.prototype.removeFromEventSelector = function (commonEventId) {
if (this._eventSelectorData) {
var index = this._eventSelectorData.indexOf(commonEventId);
if (index >= 0) {
this._eventSelectorData.splice(index, 1);
}
}
};
Game_System.prototype.clearEventSelector = function () {
this._eventSelectorData = [];
};
Game_System.prototype.eventSelectorData = function () {
if (this._eventSelectorData) {
return this._eventSelectorData.clone();
} else {
return [];
}
};
var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
Scene_Map.prototype.createAllWindows = function () {
_Scene_Map_createAllWindows.call(this);
this._eventSelectorWindow = new Window_EventSelector(0, 0);
this.addChild(this._eventSelectorWindow);
};
function Window_EventSelector() {
this.initialize.apply(this, arguments);
}
Window_EventSelector.prototype = Object.create(Window_Selectable.prototype);
Window_EventSelector.prototype.constructor = Window_EventSelector;
Window_EventSelector.lastTopRow = 0;
Window_EventSelector.lastIndex = 0;
Window_EventSelector.prototype.initialize = function (x, y) {
var width = Graphics.boxWidth;
var height = this.fittingHeight(4);
Window_Selectable.prototype.initialize.call(this, x, y, width, height);
this.openness = 0;
this.deactivate();
this.setHandler("ok", this.onOk.bind(this));
this.setHandler("cancel", this.onCancel.bind(this));
};
Window_EventSelector.prototype.maxCols = function () {
return 3;
};
Window_EventSelector.prototype.maxItems = function () {
return this._list ? this._list.length : 0;
};
Window_EventSelector.prototype.update = function () {
Window_Selectable.prototype.update.call(this);
switch (eventSelectorStatus) {
case "open":
this.refresh();
this.setTopRow(Window_EventSelector.lastTopRow);
this.select(Window_EventSelector.lastIndex);
this.open();
this.activate();
eventSelectorStatus = "select";
break;
case "select":
if (this.isClosed()) {
eventSelectorStatus = "close";
}
break;
}
};
Window_EventSelector.prototype.refresh = function () {
var data = $gameSystem.eventSelectorData();
this._list = [];
for (var i = 0; i < data.length; i++) {
var commonEvent = $dataCommonEvents[data[i]];
if (commonEvent) {
this._list.push(commonEvent);
}
}
this.createContents();
this.drawAllItems();
};
Window_EventSelector.prototype.drawItem = function (index) {
var commonEvent = this._list[index];
var rect = this.itemRectForText(index);
this.drawText(commonEvent.name, rect.x, rect.y, rect.width);
};
Window_EventSelector.prototype.isCurrentItemEnabled = function () {
var commonEvent = this._list[this.index()];
return !!commonEvent;
};
Window_EventSelector.prototype.isOkTriggered = function () {
return Input.isTriggered("ok");
};
Window_EventSelector.prototype.onOk = function () {
selectedCommonEvent = this._list[this.index()];
Window_EventSelector.lastTopRow = this.topRow();
Window_EventSelector.lastIndex = this.index();
this.close();
};
Window_EventSelector.prototype.onCancel = function () {
selectedCommonEvent = null;
Window_EventSelector.lastTopRow = this.topRow();
Window_EventSelector.lastIndex = this.index();
this.close();
};
})();