213 lines
6.5 KiB
JavaScript
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();
|
|
};
|
|
})();
|