5438 lines
154 KiB
JavaScript
5438 lines
154 KiB
JavaScript
//=============================================================================
|
|
// KMS_DebugUtil.js
|
|
// Last update: 2018/01/06
|
|
//=============================================================================
|
|
|
|
/*:
|
|
* @target MZ
|
|
* @plugindesc
|
|
* [v0.1.1] Improve debug functions.
|
|
*
|
|
* @author Kameo (Kamesoft)
|
|
*
|
|
* @param Variable input digits
|
|
* @default 9
|
|
* @desc Specify digits for inputting values. The parameter range is from 1 to 15.
|
|
*
|
|
* @param Map grid color
|
|
* @default rgba(255, 255, 255, 0.6)
|
|
* @desc Specify grid color for map transfer mode.
|
|
*
|
|
* @param Watch window font size
|
|
* @default 18
|
|
* @desc Font size for the watch window's text.
|
|
*
|
|
* @param Watch highlight color
|
|
* @default rgba(255, 224, 192, 0.6)
|
|
* @desc Specify background color for updated watch items by CSS color.
|
|
*
|
|
* @param Watch window width
|
|
* @default 360
|
|
* @desc Specify watch window width by pixel.
|
|
*
|
|
* @param Watch window position
|
|
* @default 0
|
|
* @desc
|
|
* Specify watch window position.
|
|
* 0: TopLeft 1: TopRight 2: BottomLeft 3: BottomRight
|
|
*
|
|
* @help
|
|
*
|
|
* ## Plugin command
|
|
*
|
|
* DebugUtil watch S 10 # Add switch:10 to the watch window
|
|
* DebugUtil watch V 20 # Add variable:20 to the watch window
|
|
*/
|
|
|
|
/*:ja
|
|
* @target MZ
|
|
* @plugindesc
|
|
* [v0.1.1] 標準のデバッグ画面を差し替え、様々な機能を追加します。
|
|
*
|
|
* @author かめお (Kamesoft)
|
|
*
|
|
* @param Variable input digits
|
|
* @default 9
|
|
* @desc 変数入力時の桁数を指定します。最大値は 15 です。
|
|
*
|
|
* @param Map grid color
|
|
* @default rgba(255, 255, 255, 0.6)
|
|
* @desc マップ移動画面のグリッド色を CSS カラーで指定します。
|
|
*
|
|
* @param Watch window font size
|
|
* @default 18
|
|
* @desc ウォッチウィンドウのフォントサイズを指定します。(標準のウィンドウでは 28 です)
|
|
*
|
|
* @param Watch highlight color
|
|
* @default rgba(255, 224, 192, 0.6)
|
|
* @desc ウォッチしている値が変化したときの背景色を CSS カラーで指定します。
|
|
*
|
|
* @param Watch window width
|
|
* @default 360
|
|
* @desc ウォッチウィンドウの幅をピクセル単位で指定します。
|
|
*
|
|
* @param Watch window position
|
|
* @default 0
|
|
* @desc
|
|
* ウォッチウィンドウの表示位置を指定します。
|
|
* 0: 左上 1: 右上 2: 左下 3: 右下
|
|
*
|
|
* ■ プラグインコマンド
|
|
*
|
|
* DebugUtil watch S 10 # スイッチ ID:10 をウォッチウィンドウに追加
|
|
* DebugUtil watch V 20 # 変数 ID:20 をウォッチウィンドウに追加
|
|
*/
|
|
|
|
// テストプレイ時のみ有効
|
|
if (Utils.isOptionValid("test")) {
|
|
var KMS = KMS || {};
|
|
|
|
// MapData の一時読み込み先
|
|
var $dataKmsTemporallyMapData = null;
|
|
|
|
// セーブデータからの復元を可能にするため、セーブデータに入るクラスをグローバルスコープに置く
|
|
function DebugWatchItemForSave() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
(function () {
|
|
"use strict";
|
|
|
|
// 定数
|
|
var Const = {
|
|
debug: false, // デバッグモード
|
|
pluginCode: "DebugUtil", // プラグインコード
|
|
|
|
pixiVersion: (function () {
|
|
var match = /^(\d+)\..*/gi.exec(PIXI.VERSION);
|
|
return match ? parseInt(match[1]) : 0;
|
|
})(),
|
|
|
|
mapTileScale: 0.5, // マップ移動画面のタイル表示倍率
|
|
mapGridLineWidth: 2, // マップ移動画面のグリッドの線幅
|
|
|
|
watchUpdateDuration: 30, // ウォッチ更新通知のアニメーション時間
|
|
|
|
WatchItemType: {
|
|
user: -1, // ユーザー定義 (TODO: 現状非対応)
|
|
none: 0, // なし
|
|
switch: 1, // スイッチ
|
|
variable: 2, // 変数
|
|
},
|
|
|
|
// ウォッチ項目の編集モード
|
|
WatchItemEditMode: {
|
|
add: 0, // 追加
|
|
edit: 1, // 編集
|
|
},
|
|
|
|
// ウォッチウィンドウ表示位置
|
|
WatchWindowPosition: {
|
|
topLeft: 0, // 左上
|
|
topRight: 1, // 右上
|
|
bottomLeft: 2, // 左下
|
|
bottomRight: 3, // 右下
|
|
},
|
|
};
|
|
|
|
var PluginName = "KMS_" + Const.pluginCode;
|
|
|
|
KMS.imported = KMS.imported || {};
|
|
KMS.imported[Const.pluginCode] = true;
|
|
|
|
KMS.DebugUtil = {};
|
|
|
|
// デバッグコマンドのリスト
|
|
KMS.DebugUtil.debugCommands = [];
|
|
|
|
// データベースリロード時に呼び出す処理のリスト
|
|
KMS.DebugUtil.databaseReloadHandlers = [];
|
|
|
|
// デフォルト値つきで文字列から int を解析
|
|
function parseIntWithDefault(param, defaultValue) {
|
|
var value = parseInt(param);
|
|
return isNaN(value) ? defaultValue : value;
|
|
}
|
|
|
|
var pluginParams = PluginManager.parameters(PluginName);
|
|
var Params = {};
|
|
Params.variableInputDigits = Math.min(
|
|
Math.max(
|
|
parseIntWithDefault(pluginParams["Variable input digits"], 9),
|
|
1
|
|
),
|
|
15
|
|
);
|
|
Params.formationButton = pluginParams["Formation button"] || "shift";
|
|
Params.mapGridColor =
|
|
pluginParams["Map grid color"] || "rgba(255, 255, 255, 0.6)";
|
|
Params.watchFontSize = Math.max(
|
|
parseIntWithDefault(pluginParams["Watch window font size"], 18),
|
|
1
|
|
);
|
|
Params.watchUpdateColor =
|
|
pluginParams["Watch update color"] || "rgba(255, 224, 192, 0.6)";
|
|
Params.watchWindowPosition = parseIntWithDefault(
|
|
pluginParams["Watch window position"],
|
|
0
|
|
);
|
|
Params.watchWindowWidth = Math.max(
|
|
parseIntWithDefault(pluginParams["Watch window width"], 360),
|
|
1
|
|
);
|
|
Params.WatchWindowPosition = Math.min(
|
|
Math.max(
|
|
parseIntWithDefault(
|
|
pluginParams["Watch window position"],
|
|
Const.WatchWindowPosition.topLeft
|
|
),
|
|
Const.WatchWindowPosition.topLeft
|
|
),
|
|
Const.WatchWindowPosition.bottomRight
|
|
);
|
|
|
|
// デバッグログ
|
|
var debuglog;
|
|
if (Const.debug) {
|
|
debuglog = function () {
|
|
console.log.apply(console, arguments);
|
|
};
|
|
} else {
|
|
debuglog = function () {};
|
|
}
|
|
|
|
var _Game_Interpreter_pluginCommand =
|
|
Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function (command, args) {
|
|
_Game_Interpreter_pluginCommand.call(this, command, args);
|
|
|
|
if (command !== Const.pluginCode) {
|
|
return;
|
|
}
|
|
|
|
switch (args[0]) {
|
|
case "watch": // ウォッチ ( {S|V} {id} )
|
|
{
|
|
var id = parseInt(args[2]);
|
|
if (!id) {
|
|
console.error(
|
|
"[%s %s] Invalid ID: %s",
|
|
Const.pluginCode,
|
|
args[0],
|
|
args[2]
|
|
);
|
|
return;
|
|
}
|
|
|
|
var item = new DebugWatchItem();
|
|
switch (args[1].toUpperCase()) {
|
|
case "S":
|
|
item.setupSwitch(id);
|
|
break;
|
|
|
|
case "V":
|
|
item.setupVariable(id);
|
|
break;
|
|
|
|
default:
|
|
console.error(
|
|
"[%s %s] Invalid type: %s",
|
|
Const.pluginCode,
|
|
args[0],
|
|
args[1]
|
|
);
|
|
return;
|
|
}
|
|
$gameTemp.registerDebugWatchItem(item);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
// 不明なコマンド
|
|
console.error("[%s %s] Unknown command.", Const.pluginCode, args[0]);
|
|
break;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 日本語環境か否か
|
|
*/
|
|
var isJp = (function () {
|
|
var language =
|
|
(navigator.languages && navigator.languages[0]) ||
|
|
navigator.browserLanguage ||
|
|
navigator.userLanguage ||
|
|
navigator.language;
|
|
if (language) {
|
|
return language.substr(0, 2) === "ja";
|
|
} else {
|
|
return false;
|
|
}
|
|
})();
|
|
|
|
/**
|
|
* 指定桁数を指定文字で埋めた文字列を返す
|
|
*/
|
|
function padDigits(number, digits, pad) {
|
|
var holder = Array(digits + 1).join(pad);
|
|
return (holder + number).slice(-digits);
|
|
}
|
|
|
|
/**
|
|
* 他プラグインの影響を除いた素のパラメータ強化値 (Game_Actor に対して呼ぶ)
|
|
*/
|
|
var originalParamPlus = function (paramId) {
|
|
return this._paramPlus[paramId];
|
|
};
|
|
|
|
/**
|
|
* 文字列であるか判定
|
|
*/
|
|
function isString(obj) {
|
|
return typeof obj === "string" || obj instanceof String;
|
|
}
|
|
|
|
/**
|
|
* アイテム系のオブジェクトであるか判定
|
|
*/
|
|
function isItemObject(item) {
|
|
return (
|
|
DataManager.isSkill(item) ||
|
|
DataManager.isItem(item) ||
|
|
DataManager.isWeapon(item) ||
|
|
DataManager.isArmor(item)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* アクターが作成されているか
|
|
* ($gameActors に対して呼ぶ)
|
|
*/
|
|
function isActorCreated(actorId) {
|
|
return !!this._data[actorId];
|
|
}
|
|
|
|
/**
|
|
* アクターがパーティ内に存在するか
|
|
* ($gameParty に対して呼ぶ)
|
|
*/
|
|
function containsActor(actorId) {
|
|
return this._actors.contains(actorId);
|
|
}
|
|
|
|
/**
|
|
* outActor を inActor の位置に加入させ、outActor を外す
|
|
* ($gameParty に対して呼ぶ)
|
|
*/
|
|
function replaceActor(inActorId, outActorId) {
|
|
if (this._actors.contains(outActorId)) {
|
|
for (var i = 0; i < this._actors.length; i++) {
|
|
if (this._actors[i] !== outActorId) {
|
|
continue;
|
|
}
|
|
|
|
if (inActorId) {
|
|
// in/out を入れ替える
|
|
this._actors[i] = inActorId;
|
|
break;
|
|
} else {
|
|
// in がなしの場合は out を外すだけ
|
|
this.removeActor(outActorId);
|
|
return;
|
|
}
|
|
}
|
|
} else if (inActorId) {
|
|
// in だけ存在する場合は単純に追加
|
|
this.addActor(inActorId);
|
|
return;
|
|
} else {
|
|
// out が不在で、in も存在しないので何もしない
|
|
return;
|
|
}
|
|
|
|
$gamePlayer.refresh();
|
|
$gameMap.requestRefresh();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// KMS
|
|
|
|
/**
|
|
* デバッグコマンドの登録
|
|
*
|
|
* command には id, name, onSelect の 3 つを持たせる。
|
|
*/
|
|
KMS.DebugUtil.registerCommand = function (command) {
|
|
// 有効判定
|
|
function isValid(cmd) {
|
|
return cmd.id && cmd.name && cmd.onSelect;
|
|
}
|
|
|
|
// 一致判定
|
|
function isSame(lhs, rhs) {
|
|
return lhs.id === rhs.id;
|
|
}
|
|
|
|
if (!isValid(command)) {
|
|
// 未指定のパラメータがある
|
|
return false;
|
|
}
|
|
|
|
var exists = KMS.DebugUtil.debugCommands.some(function (item) {
|
|
return isSame(item, command);
|
|
});
|
|
if (exists) {
|
|
// 登録済み
|
|
console.log(
|
|
'[%s] Command "%s" is already registered',
|
|
Const.pluginCode,
|
|
command.id
|
|
);
|
|
return false;
|
|
}
|
|
|
|
KMS.DebugUtil.debugCommands.push(command);
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* データベースリロード時に呼び出す処理を登録
|
|
*/
|
|
KMS.DebugUtil.registerDatabaseReloadHandler = function (handler) {
|
|
if (!handler) {
|
|
return false;
|
|
}
|
|
|
|
// 一致判定
|
|
function isSame(lhs, rhs) {
|
|
return lhs === rhs;
|
|
}
|
|
|
|
var exists = KMS.DebugUtil.databaseReloadHandlers.some(function (item) {
|
|
return isSame(item, command);
|
|
});
|
|
if (exists) {
|
|
// 登録済み
|
|
console.log(
|
|
"[%s] Specified reload handler is already registered",
|
|
Const.pluginCode
|
|
);
|
|
return false;
|
|
}
|
|
|
|
KMS.DebugUtil.databaseReloadHandlers.push(handler);
|
|
return true;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// DebugWatchItemForSave
|
|
//
|
|
// セーブデータに残す情報のみに絞ったウォッチ項目
|
|
|
|
DebugWatchItemForSave.constructor = DebugWatchItemForSave;
|
|
|
|
Object.defineProperties(DebugWatchItemForSave.prototype, {
|
|
type: {
|
|
get: function () {
|
|
return this._type;
|
|
},
|
|
set: function (value) {
|
|
this._type = value;
|
|
},
|
|
configurable: true,
|
|
},
|
|
id: {
|
|
get: function () {
|
|
return this._id;
|
|
},
|
|
set: function (value) {
|
|
this._id = value;
|
|
},
|
|
configurable: true,
|
|
},
|
|
});
|
|
|
|
DebugWatchItemForSave.prototype.initialize = function () {
|
|
this._type = Const.WatchItemType.switch;
|
|
this._id = 1;
|
|
};
|
|
|
|
/**
|
|
* 実際の表示用ウォッチ項目に変換
|
|
*/
|
|
DebugWatchItemForSave.prototype.toActualItem = function () {
|
|
var item = new DebugWatchItem();
|
|
switch (this._type) {
|
|
case Const.WatchItemType.switch:
|
|
item.setupSwitch(this._id);
|
|
break;
|
|
|
|
case Const.WatchItemType.variable:
|
|
item.setupVariable(this._id);
|
|
break;
|
|
|
|
default:
|
|
console.error(
|
|
"%s: toDisplayItem() failed. Invalid item type (%d)",
|
|
Const.pluginCode,
|
|
this._type
|
|
);
|
|
return null;
|
|
}
|
|
|
|
return item;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// DebugWatchItem
|
|
//
|
|
// ウォッチウィンドウに表示する項目
|
|
|
|
function DebugWatchItem() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
DebugWatchItem.prototype.constructor = DebugWatchItem;
|
|
|
|
Object.defineProperties(DebugWatchItem.prototype, {
|
|
type: {
|
|
get: function () {
|
|
return this._type;
|
|
},
|
|
configurable: true,
|
|
},
|
|
typeSymbol: {
|
|
get: function () {
|
|
return this._typeSymbol;
|
|
},
|
|
configurable: true,
|
|
},
|
|
typename: {
|
|
get: function () {
|
|
return this._typename;
|
|
},
|
|
configurable: true,
|
|
},
|
|
id: {
|
|
get: function () {
|
|
return this._id;
|
|
},
|
|
configurable: true,
|
|
},
|
|
name: {
|
|
get: function () {
|
|
return this._name;
|
|
},
|
|
configurable: true,
|
|
},
|
|
});
|
|
|
|
/**
|
|
* デフォルトの取得関数
|
|
*/
|
|
DebugWatchItem.defaultGetter = function () {
|
|
return "";
|
|
};
|
|
|
|
/**
|
|
* スイッチ用の生値取得関数
|
|
*/
|
|
DebugWatchItem.switchRawValueGetter = function () {
|
|
return $gameSwitches.value(this._id);
|
|
};
|
|
|
|
/**
|
|
* スイッチ用の表示値取得関数
|
|
*/
|
|
DebugWatchItem.switchDispValueGetter = function () {
|
|
return this._getterRaw.call(this) ? "ON" : "OFF";
|
|
};
|
|
|
|
/**
|
|
* 変数用の値取得関数
|
|
*/
|
|
DebugWatchItem.variableValueGetter = function () {
|
|
return $gameVariables.value(this._id);
|
|
};
|
|
|
|
/**
|
|
* 初期化
|
|
*/
|
|
DebugWatchItem.prototype.initialize = function () {
|
|
this.invalidate();
|
|
};
|
|
|
|
/**
|
|
* ユーザー定義か
|
|
*/
|
|
DebugWatchItem.prototype.isUserDef = function () {
|
|
return this._type === Const.WatchItemType.user;
|
|
};
|
|
|
|
/**
|
|
* 一致判定
|
|
*/
|
|
DebugWatchItem.prototype.equals = function (rhs) {
|
|
if (!(rhs instanceof DebugWatchItem) || this._type !== rhs._type) {
|
|
// タイプ違い
|
|
return false;
|
|
}
|
|
|
|
if (this.isUserDef() && rhs.isUserDef()) {
|
|
// ユーザー定義の場合は名前以外完全一致を要求
|
|
return (
|
|
this._id === rhs._id &&
|
|
this._getterRaw === rhs._getterRaw &&
|
|
this._getterDisp === rhs._getterDisp
|
|
);
|
|
} else {
|
|
return this._id === rhs._id;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 生値を取得
|
|
*/
|
|
DebugWatchItem.prototype.getRaw = function () {
|
|
return this._getterRaw.call(this);
|
|
};
|
|
|
|
/**
|
|
* 表示用の値を取得
|
|
*/
|
|
DebugWatchItem.prototype.getDisp = function () {
|
|
return this._getterDisp.call(this);
|
|
};
|
|
|
|
/**
|
|
* 値を監視して更新を通知
|
|
*/
|
|
DebugWatchItem.prototype.checkUpdate = function () {
|
|
var currValue = this.getRaw();
|
|
if (this._lastValue !== currValue) {
|
|
this._lastValue = currValue;
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 無効化
|
|
*/
|
|
DebugWatchItem.prototype.invalidate = function () {
|
|
this._type = Const.WatchItemType.none;
|
|
this._typeSymbol = "";
|
|
this._typename = "";
|
|
this._id = 0;
|
|
this._name = "";
|
|
this._getterRaw = DebugWatchItem.defaultGetter;
|
|
this._getterDisp = DebugWatchItem.defaultGetter;
|
|
this._lastValue = null;
|
|
};
|
|
|
|
/**
|
|
* スイッチを表示するようにセットアップ
|
|
*/
|
|
DebugWatchItem.prototype.setupSwitch = function (switchId) {
|
|
this._type = Const.WatchItemType.switch;
|
|
this._id = switchId.clamp(1, $dataSystem.switches.length - 1);
|
|
this.refresh();
|
|
};
|
|
|
|
/**
|
|
* 変数を表示するようにセットアップ
|
|
*/
|
|
DebugWatchItem.prototype.setupVariable = function (variableId) {
|
|
this._type = Const.WatchItemType.variable;
|
|
this._id = variableId.clamp(1, $dataSystem.variables.length - 1);
|
|
this.refresh();
|
|
};
|
|
|
|
/**
|
|
* 表示する情報の再構築 (データベースリロード時にも呼ぶ)
|
|
*/
|
|
DebugWatchItem.prototype.refresh = function () {
|
|
switch (this._type) {
|
|
case Const.WatchItemType.switch:
|
|
if (this._id >= $dataSystem.switches.length) {
|
|
this.invalidate();
|
|
return;
|
|
}
|
|
this._typeSymbol = "S";
|
|
this._typename = isJp ? "スイッチ" : "Switch";
|
|
this._name = $dataSystem.switches[this._id];
|
|
this._getterRaw = DebugWatchItem.switchRawValueGetter;
|
|
this._getterDisp = DebugWatchItem.switchDispValueGetter;
|
|
break;
|
|
|
|
case Const.WatchItemType.variable:
|
|
if (this._id >= $dataSystem.variables.length) {
|
|
this.invalidate();
|
|
return;
|
|
}
|
|
this._typeSymbol = "V";
|
|
this._typename = isJp ? "変数" : "Variable";
|
|
this._name = $dataSystem.variables[this._id];
|
|
this._getterRaw = DebugWatchItem.variableValueGetter;
|
|
this._getterDisp = DebugWatchItem.variableValueGetter;
|
|
break;
|
|
|
|
default:
|
|
// 何もしない
|
|
break;
|
|
}
|
|
|
|
// 更新通知用の初期値を取得
|
|
this._lastValue = this.getRaw();
|
|
};
|
|
|
|
/**
|
|
* セーブ用のデータに変換
|
|
*/
|
|
DebugWatchItem.prototype.toSaveItem = function () {
|
|
var item = new DebugWatchItemForSave();
|
|
item.type = this._type;
|
|
item.id = this._id;
|
|
|
|
return item;
|
|
};
|
|
|
|
/**
|
|
* 別の項目からコピー
|
|
*/
|
|
DebugWatchItem.prototype.copyFrom = function (item) {
|
|
if (!item) {
|
|
this.invalidate();
|
|
return;
|
|
}
|
|
|
|
switch (item.type) {
|
|
case Const.WatchItemType.switch:
|
|
this.setupSwitch(item.id);
|
|
break;
|
|
|
|
case Const.WatchItemType.variable:
|
|
this.setupVariable(item.id);
|
|
break;
|
|
|
|
default:
|
|
this.invalidate();
|
|
break;
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// DataManager
|
|
|
|
/**
|
|
* データベースファイルの同期読み込み
|
|
* ※ 警告が出るので使わない
|
|
*/
|
|
/*
|
|
DataManager.loadDataFileSync = function(name, src)
|
|
{
|
|
var xhr = new XMLHttpRequest();
|
|
var url = 'data/' + src;
|
|
xhr.open('GET', url, false);
|
|
xhr.overrideMimeType('application/json');
|
|
window[name] = null;
|
|
xhr.send(null);
|
|
|
|
if (xhr.status < 400)
|
|
{
|
|
window[name] = JSON.parse(xhr.responseText);
|
|
DataManager.onLoad(window[name]);
|
|
}
|
|
else
|
|
{
|
|
DataManager._errorUrl = DataManager._errorUrl || url;
|
|
}
|
|
};
|
|
*/
|
|
|
|
/**
|
|
* 一時マップデータの読み込み
|
|
*/
|
|
DataManager.loadKmsTemporallyMapData = function (mapId) {
|
|
if (mapId > 0) {
|
|
var filename = "Map%1.json".format(mapId.padZero(3));
|
|
this.loadDataFile("$dataKmsTemporallyMapData", filename);
|
|
} else {
|
|
var dataBackup = $dataMap;
|
|
this.makeEmptyMap();
|
|
|
|
$dataKmsTemporallyMapData = $dataMap;
|
|
$dataMap = dataBackup;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 一時マップデータの読み込みが完了しているか
|
|
*/
|
|
DataManager.isKmsTemporallyMapLoaded = function () {
|
|
this.checkError();
|
|
return !!$dataKmsTemporallyMapData;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// TextManager
|
|
|
|
TextManager.DebugUtil = {};
|
|
|
|
var simpleGetter = function (text) {
|
|
return {
|
|
get: function () {
|
|
return text;
|
|
},
|
|
configurable: true,
|
|
};
|
|
};
|
|
|
|
Object.defineProperties(TextManager.DebugUtil, {
|
|
sceneTitle: simpleGetter(isJp ? "デバッグメニュー" : "Debug menu"),
|
|
|
|
// コマンド名
|
|
itemNumber: simpleGetter(
|
|
isJp ? "アイテム所持数変更" : "Edit item numbers"
|
|
),
|
|
actorParam: simpleGetter(isJp ? "アクター編集" : "Edit actor's param"),
|
|
member: simpleGetter(isJp ? "メンバー変更" : "Edit party"),
|
|
reloadMap: simpleGetter(isJp ? "マップ再読み込み" : "Reload map"),
|
|
loadDatabase: simpleGetter(
|
|
isJp ? "データベース再読み込み" : "Reload database"
|
|
),
|
|
transfer: simpleGetter(isJp ? "場所移動" : "Transfer"),
|
|
switchVar: simpleGetter(
|
|
isJp ? "スイッチ・変数操作" : "Edit switches/variables"
|
|
),
|
|
selfSwitch: simpleGetter(
|
|
isJp ? "セルフスイッチ操作" : "Edit self-switches"
|
|
),
|
|
systemValue: simpleGetter(isJp ? "システム値操作" : "Edit system values"),
|
|
watchWindow: simpleGetter(
|
|
isJp ? "スイッチ・変数監視" : "Watch switches/variables"
|
|
),
|
|
encounter: simpleGetter(isJp ? "エンカウント" : "Encounter"),
|
|
dispPassage: simpleGetter(isJp ? "通行可否表示" : "Display passage"),
|
|
|
|
// パラメータ名
|
|
battleCount: simpleGetter(isJp ? "戦闘回数" : "Battle count"),
|
|
winCount: simpleGetter(isJp ? "勝利回数" : "Victory count"),
|
|
escapeCount: simpleGetter(isJp ? "逃走回数" : "Escape count"),
|
|
saveCount: simpleGetter(isJp ? "セーブ回数" : "Save count"),
|
|
|
|
// その他
|
|
activeParty: simpleGetter(isJp ? "パーティ内メンバー" : "Active member"),
|
|
reserveParty: simpleGetter(
|
|
isJp ? "パーティ外メンバー" : "Reserve member"
|
|
),
|
|
addToParty: simpleGetter(isJp ? "追加" : "Add"),
|
|
removeFromParty: simpleGetter(isJp ? "外す" : "Remove"),
|
|
tilePosition: simpleGetter(isJp ? "移動先" : "Position"),
|
|
mapSize: simpleGetter(isJp ? "マップサイズ" : "Map size"),
|
|
encounterRandom: simpleGetter(
|
|
isJp ? "現在のマップからランダム" : "Random in current map"
|
|
),
|
|
addWatchItem: simpleGetter(isJp ? "追加" : "Add"),
|
|
watchItemType: simpleGetter(isJp ? "タイプ" : "Type"),
|
|
watchItemRemove: simpleGetter(isJp ? "削除" : "Remove"),
|
|
});
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Temp
|
|
|
|
var _Game_Temp_initialize = Game_Temp.prototype.initialize;
|
|
Game_Temp.prototype.initialize = function () {
|
|
_Game_Temp_initialize.call(this);
|
|
|
|
this.clearDebugWatchRefreshRequest();
|
|
this.clearDebugWatchItem();
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウを再構築するか
|
|
*/
|
|
Game_Temp.prototype.isDebugWatchRefreshRequested = function () {
|
|
return this._debugWatchRefreshRequested;
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウの再構築要求
|
|
*/
|
|
Game_Temp.prototype.requestDebugWatchRefresh = function () {
|
|
this._debugWatchRefreshRequested = true;
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウの再構築要求を解除
|
|
*/
|
|
Game_Temp.prototype.clearDebugWatchRefreshRequest = function () {
|
|
this._debugWatchRefreshRequested = false;
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウに表示する項目を登録
|
|
*/
|
|
Game_Temp.prototype.registerDebugWatchItem = function (item) {
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
for (var i = 0; i < this._debugWatchItems.length; i++) {
|
|
if (this._debugWatchItems[i].equals(item)) {
|
|
// 同じ設定のものが登録済み
|
|
return;
|
|
}
|
|
}
|
|
|
|
var newItem = new DebugWatchItem();
|
|
newItem.copyFrom(item);
|
|
this._debugWatchItems.push(newItem);
|
|
this.requestDebugWatchRefresh();
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウに表示する項目を差し替え
|
|
*/
|
|
Game_Temp.prototype.replaceDebugWatchItem = function (item, index) {
|
|
if (!item || this._debugWatchItems.length <= index) {
|
|
return;
|
|
}
|
|
|
|
this._debugWatchItems[index] = item;
|
|
this.requestDebugWatchRefresh();
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウに表示する項目を解除
|
|
*/
|
|
Game_Temp.prototype.removeDebugWatchItem = function (item) {
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
this._debugWatchItems = this._debugWatchItems.filter(function (v) {
|
|
return !v.equals(item);
|
|
});
|
|
|
|
this.requestDebugWatchRefresh();
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウに表示する項目を全解除
|
|
*/
|
|
Game_Temp.prototype.clearDebugWatchItem = function () {
|
|
this._debugWatchItems = [];
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウに表示する項目の一覧を取得
|
|
*/
|
|
Game_Temp.prototype.getDebugWatchItemList = function () {
|
|
return this._debugWatchItems;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_System
|
|
|
|
var _Game_System_onBeforeSave = Game_System.prototype.onBeforeSave;
|
|
Game_System.prototype.onBeforeSave = function () {
|
|
_Game_System_onBeforeSave.call(this);
|
|
|
|
this.createDebugWatchItemsForSave();
|
|
};
|
|
|
|
var _Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
|
|
Game_System.prototype.onAfterLoad = function () {
|
|
_Game_System_onAfterLoad.call(this);
|
|
|
|
this.restoreDebugWatchItemsFromSave();
|
|
};
|
|
|
|
/**
|
|
* セーブ用のウォッチ項目リストを作成
|
|
*
|
|
* DebugWatchItem の全メンバを保存すると無駄があるので、最小限の情報のみ保存する
|
|
*/
|
|
Game_System.prototype.createDebugWatchItemsForSave = function () {
|
|
var list = $gameTemp.getDebugWatchItemList();
|
|
if (list.length === 0) {
|
|
// ウォッチリストが空なら何もセーブしない
|
|
delete this._debugWatchItemList;
|
|
return;
|
|
}
|
|
|
|
this._debugWatchItemList = [];
|
|
list.forEach(function (item) {
|
|
this._debugWatchItemList.push(item.toSaveItem());
|
|
}, this);
|
|
};
|
|
|
|
/**
|
|
* セーブ用のウォッチ項目リストからウォッチリストを復元
|
|
*/
|
|
Game_System.prototype.restoreDebugWatchItemsFromSave = function () {
|
|
if (!this._debugWatchItemList) {
|
|
return;
|
|
}
|
|
|
|
$gameTemp.clearDebugWatchItem();
|
|
this._debugWatchItemList.forEach(function (item) {
|
|
$gameTemp.registerDebugWatchItem(item.toActualItem());
|
|
}, this);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Sprite_DebugMapDestination
|
|
//
|
|
// デバッグ画面で移動先タイルを強調表示するスプライト
|
|
|
|
function Sprite_DebugMapDestination() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Sprite_DebugMapDestination.prototype = Object.create(
|
|
Sprite_Destination.prototype
|
|
);
|
|
Sprite_DebugMapDestination.prototype.constructor =
|
|
Sprite_DebugMapDestination;
|
|
|
|
Sprite_DebugMapDestination.prototype.initialize = function () {
|
|
Sprite_Destination.prototype.initialize.call(this);
|
|
this.blendMode = 0;
|
|
|
|
this._map = null;
|
|
this._destination = new Point();
|
|
this._visibleArea = new Rectangle();
|
|
};
|
|
|
|
/**
|
|
* 参照するマップオブジェクトを設定
|
|
*/
|
|
Sprite_DebugMapDestination.prototype.setMap = function (map) {
|
|
this._map = map;
|
|
};
|
|
|
|
/**
|
|
* 目的地のタイル座標を設定
|
|
*/
|
|
Sprite_DebugMapDestination.prototype.setDestination = function (x, y) {
|
|
this._destination.x = x;
|
|
this._destination.y = y;
|
|
};
|
|
|
|
/**
|
|
* 可視領域を設定
|
|
*/
|
|
Sprite_DebugMapDestination.prototype.setVisibleArea = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
this._visibleArea.x = x;
|
|
this._visibleArea.y = y;
|
|
this._visibleArea.width = width;
|
|
this._visibleArea.height = height;
|
|
};
|
|
|
|
Sprite_DebugMapDestination.prototype.update = function () {
|
|
// 判定自体を書き直すので、Sprite の方を呼ぶ
|
|
Sprite.prototype.update.call(this);
|
|
|
|
if (this.visible) {
|
|
this.updateAnimation();
|
|
this.updatePosition();
|
|
} else {
|
|
this._frameCount = 0;
|
|
}
|
|
};
|
|
|
|
Sprite_DebugMapDestination.prototype.updatePosition = function () {
|
|
if (!this._map) {
|
|
return;
|
|
}
|
|
|
|
var tileWidth = this._map.tileWidth();
|
|
var tileHeight = this._map.tileHeight();
|
|
this.x = (this._map.adjustX(this._destination.x) + 0.5) * tileWidth;
|
|
this.y = (this._map.adjustY(this._destination.y) + 0.5) * tileHeight;
|
|
|
|
// 可視領域外に出た場合は消す
|
|
if (
|
|
this.x < this._visibleArea.x ||
|
|
this.y < this._visibleArea.y ||
|
|
this.x > this._visibleArea.width ||
|
|
this.y > this._visibleArea.height
|
|
) {
|
|
this.opacity = 0;
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Sprite_DebugWatchUpdate
|
|
//
|
|
// ウォッチウィンドウで値の更新を通知するスプライト
|
|
|
|
function Sprite_DebugWatchUpdate() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Sprite_DebugWatchUpdate.prototype = Object.create(Sprite.prototype);
|
|
Sprite_DebugWatchUpdate.prototype.constructor = Sprite_DebugWatchUpdate;
|
|
|
|
Sprite_DebugWatchUpdate.prototype.initialize = function () {
|
|
Sprite.prototype.initialize.call(this);
|
|
|
|
this._duration = 0;
|
|
this.visible = false;
|
|
};
|
|
|
|
/**
|
|
* 更新アニメーションを実行
|
|
*/
|
|
Sprite_DebugWatchUpdate.prototype.animate = function () {
|
|
this._duration = Const.watchUpdateDuration;
|
|
this.visible = true;
|
|
};
|
|
|
|
/**
|
|
* セットアップ
|
|
*/
|
|
Sprite_DebugWatchUpdate.prototype.setup = function (x, y, width, height) {
|
|
this._bitmap = new Bitmap(width, height);
|
|
this._bitmap.fillRect(0, 0, width, height, Params.watchUpdateColor);
|
|
this.setFrame(0, 0, width, height);
|
|
//this.blendMode = Graphics.BLEND_ADD;
|
|
this.move(x, y);
|
|
};
|
|
|
|
Sprite_DebugWatchUpdate.prototype.update = function () {
|
|
Sprite.prototype.update.call(this);
|
|
|
|
if (this.visible) {
|
|
this.updateAnimation();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* アニメーションの更新
|
|
*/
|
|
Sprite_DebugWatchUpdate.prototype.updateAnimation = function () {
|
|
this.opacity = (255 * this._duration) / Const.watchUpdateDuration;
|
|
|
|
this._duration--;
|
|
if (this._duration < 0) {
|
|
this.visible = false;
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// MZ対応のための拡張
|
|
|
|
function _textPadding() {
|
|
return 6;
|
|
}
|
|
function _standardPadding() {
|
|
return $gameSystem.windowPadding();
|
|
}
|
|
function _standardFontSize() {
|
|
return $gameSystem.mainFontSize();
|
|
}
|
|
|
|
function _itemRectForText(window, index) {
|
|
var rect = window.itemRect(index);
|
|
rect.x += _textPadding();
|
|
rect.width -= _textPadding() * 2;
|
|
return rect;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugEdit
|
|
|
|
/**
|
|
* 現在のモードを取得
|
|
*/
|
|
Window_DebugEdit.prototype.getMode = function () {
|
|
return this._mode;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugTitle
|
|
//
|
|
// デバッグ画面で機能名を表示するウィンドウ
|
|
|
|
function Window_DebugTitle() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugTitle.prototype = Object.create(Window_Help.prototype);
|
|
Window_DebugTitle.prototype.constructor = Window_DebugTitle;
|
|
|
|
Window_DebugTitle.prototype.initialize = function (width, numLines) {
|
|
const wx = 0;
|
|
const wy = 0;
|
|
const ww = Graphics.boxWidth;
|
|
const wh = this.fittingHeight(numLines);
|
|
Window_Help.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(wx, wy, ww, wh)
|
|
);
|
|
|
|
this.width = width;
|
|
this.createContents();
|
|
};
|
|
|
|
Window_DebugTitle.prototype.refresh = function () {
|
|
this.contents.clear();
|
|
|
|
var x = _textPadding();
|
|
var w = this.contentsWidth() - _textPadding() * 2;
|
|
this.contents.drawText(this._text, x, 0, w, this.lineHeight(), "center");
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugCommand
|
|
//
|
|
// デバッグ機能を選択するウィンドウ
|
|
|
|
function Window_DebugCommand() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugCommand.prototype = Object.create(Window_Command.prototype);
|
|
Window_DebugCommand.prototype.constructor = Window_DebugCommand;
|
|
|
|
Window_DebugCommand.prototype.initialize = function (x, y) {
|
|
const rect = new Rectangle(x, y, 240, this.fittingHeight(6));
|
|
Window_Command.prototype.initialize.call(this, rect);
|
|
this.selectLast();
|
|
this.activate();
|
|
this.refresh();
|
|
};
|
|
Window_DebugCommand.prototype.numVisibleRows = function () {
|
|
return Math.ceil(this.maxItems() / this.maxCols());
|
|
};
|
|
|
|
Window_DebugCommand._lastCommandSymbol = null;
|
|
|
|
Window_DebugCommand.initCommandPosition = function () {
|
|
this._lastCommandSymbol = null;
|
|
};
|
|
|
|
Window_DebugCommand.prototype.windowWidth = function () {
|
|
return Graphics.boxWidth - 64;
|
|
};
|
|
|
|
Window_DebugCommand.prototype.maxCols = function () {
|
|
return 2;
|
|
};
|
|
|
|
Window_DebugCommand.prototype.makeCommandList = function () {
|
|
this.addCommand(TextManager.DebugUtil.itemNumber, "itemNumber");
|
|
this.addCommand(TextManager.DebugUtil.actorParam, "actorParam");
|
|
this.addCommand(TextManager.DebugUtil.member, "member");
|
|
this.addCommand(TextManager.DebugUtil.reloadMap, "reloadMap");
|
|
this.addCommand(TextManager.DebugUtil.loadDatabase, "loadDatabase");
|
|
this.addCommand(TextManager.DebugUtil.transfer, "transfer");
|
|
this.addCommand(TextManager.DebugUtil.switchVar, "switchVar");
|
|
this.addCommand(TextManager.DebugUtil.selfSwitch, "selfSwitch");
|
|
this.addCommand(TextManager.DebugUtil.systemValue, "systemValue");
|
|
this.addCommand(TextManager.DebugUtil.watchWindow, "watchWindow");
|
|
this.addCommand(TextManager.DebugUtil.encounter, "encounter");
|
|
//this.addCommand(TextManager.DebugUtil.dispPassage, 'dispPassage');
|
|
//this.addCommand(TextManager.DebugUtil.loadJs, 'loadJs');
|
|
|
|
// 追加コマンド
|
|
KMS.DebugUtil.debugCommands.forEach(function (command) {
|
|
this.addCommand(command.name, command.id);
|
|
}, this);
|
|
};
|
|
|
|
Window_DebugCommand.prototype.processOk = function () {
|
|
Window_DebugCommand._lastCommandSymbol = this.currentSymbol();
|
|
Window_Command.prototype.processOk.call(this);
|
|
};
|
|
|
|
Window_DebugCommand.prototype.selectLast = function () {
|
|
if (Window_DebugCommand._lastCommandSymbol) {
|
|
this.selectSymbol(Window_DebugCommand._lastCommandSymbol);
|
|
} else {
|
|
this.selectSymbol("itemNumber");
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugNumberInput
|
|
//
|
|
// デバッグモードで値を入力するためのウィンドウ
|
|
|
|
function Window_DebugNumberInput() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugNumberInput.prototype = Object.create(
|
|
Window_NumberInput.prototype
|
|
);
|
|
Window_DebugNumberInput.prototype.constructor = Window_DebugNumberInput;
|
|
|
|
Object.defineProperty(Window_DebugNumberInput.prototype, "number", {
|
|
get: function () {
|
|
return this._number * (this._isNegative ? -1 : 1);
|
|
},
|
|
configurable: true,
|
|
});
|
|
|
|
Window_DebugNumberInput.prototype.initialize = function () {
|
|
Window_NumberInput.prototype.initialize.call(this);
|
|
this._number = 0;
|
|
this._maxDigits = 1;
|
|
this._isAllowNegative = false;
|
|
this._isNegative = false;
|
|
this._caption = null;
|
|
this._okCallback = null;
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.windowWidth = function () {
|
|
var captionWidth = _standardPadding() * 2;
|
|
if (isItemObject(this._caption)) {
|
|
captionWidth += this.textWidth(this._caption.name) + 32 + 4;
|
|
} else if (isString(this._caption)) {
|
|
captionWidth += this.textWidth(this._caption) + 4;
|
|
}
|
|
|
|
var originWidth = Window_NumberInput.prototype.windowWidth.call(this);
|
|
return Math.max(originWidth, captionWidth);
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.windowHeight = function () {
|
|
return this.fittingHeight(this._caption ? 2 : 1);
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.maxCols = function () {
|
|
return (
|
|
Window_NumberInput.prototype.maxCols.call(this) +
|
|
(this._isAllowNegative ? 1 : 0)
|
|
);
|
|
};
|
|
|
|
Window_NumberInput.prototype.maxItems = function () {
|
|
return this.maxCols();
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.setAllowNegative = function (enabled) {
|
|
this._isAllowNegative = enabled;
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.setCaption = function (caption) {
|
|
this._caption = caption;
|
|
this.updatePlacement();
|
|
this.refresh();
|
|
};
|
|
|
|
/**
|
|
* 値の入力を開始
|
|
*/
|
|
Window_DebugNumberInput.prototype.start = function (
|
|
number,
|
|
maxDigits,
|
|
callback
|
|
) {
|
|
this._isNegative = number < 0;
|
|
this._number = Math.abs(number);
|
|
this._number = this._number.clamp(0, Math.pow(10, maxDigits) - 1);
|
|
this._maxDigits = maxDigits;
|
|
this._okCallback = callback;
|
|
|
|
this.updatePlacement();
|
|
this.placeButtons();
|
|
//this.updateButtonsVisiblity();
|
|
this.createContents();
|
|
this.refresh();
|
|
this.open();
|
|
this.activate();
|
|
this.select(this._maxDigits - 1 + (this._isAllowNegative ? 1 : 0));
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.changeDigit = function (up) {
|
|
var index = this.index();
|
|
|
|
if (this._isAllowNegative) {
|
|
if (index === 0) {
|
|
// +/- 切り替え
|
|
this._isNegative = !this._isNegative;
|
|
this.refresh();
|
|
SoundManager.playCursor();
|
|
return;
|
|
}
|
|
|
|
// +/- 部分の桁位置をずらす
|
|
index--;
|
|
}
|
|
|
|
var place = Math.pow(10, this._maxDigits - 1 - index);
|
|
var n = Math.floor(this._number / place) % 10;
|
|
this._number -= n * place;
|
|
if (up) {
|
|
n = (n + 1) % 10;
|
|
} else {
|
|
n = (n + 9) % 10;
|
|
}
|
|
this._number += n * place;
|
|
this.refresh();
|
|
SoundManager.playCursor();
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.itemRect = function (index) {
|
|
var rect = Window_NumberInput.prototype.itemRect.call(this, index);
|
|
if (this._caption) {
|
|
rect.y += this.lineHeight();
|
|
}
|
|
|
|
return rect;
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.drawItem = function (index) {
|
|
var rect = this.itemRect(index);
|
|
var align = "center";
|
|
var sign = this._isAllowNegative ? (this._isNegative ? "-" : "+") : "";
|
|
var s = "%1%2".format(sign, this._number.padZero(this._maxDigits));
|
|
var c = s.slice(index, index + 1);
|
|
this.resetTextColor();
|
|
this.drawText(c, rect.x, rect.y, rect.width, align);
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.drawCaption = function () {
|
|
if (!this._caption) {
|
|
return;
|
|
}
|
|
|
|
if (isItemObject(this._caption)) {
|
|
this.drawItemName(this._caption, 0, 0, this.contentsWidth());
|
|
} else if (isString(this._caption)) {
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(this._caption, 0, 0, this.contentsWidth());
|
|
this.resetTextColor();
|
|
}
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.refresh = function () {
|
|
if (this.contents) {
|
|
Window_NumberInput.prototype.refresh.call(this);
|
|
this.drawCaption();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 表示位置・サイズの調整
|
|
*/
|
|
Window_DebugNumberInput.prototype.updatePlacement = function () {
|
|
this.width = this.windowWidth();
|
|
this.height = this.windowHeight();
|
|
this.x = (Graphics.boxWidth - this.width) / 2;
|
|
this.y = (Graphics.boxHeight - this.height) / 2;
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.buttonY = function () {
|
|
var spacing = 8;
|
|
return this.height + spacing;
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.isCancelEnabled = function () {
|
|
return true;
|
|
};
|
|
|
|
Window_DebugNumberInput.prototype.processOk = function () {
|
|
SoundManager.playOk();
|
|
|
|
if (this._okCallback) {
|
|
this._okCallback(this.number);
|
|
}
|
|
|
|
this.updateInputData();
|
|
this.deactivate();
|
|
this.close();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugItemList
|
|
//
|
|
// アイテム所持数編集ウィンドウ
|
|
|
|
function Window_DebugItemList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugItemList.prototype = Object.create(Window_Selectable.prototype);
|
|
Window_DebugItemList.prototype.constructor = Window_DebugItemList;
|
|
|
|
Window_DebugItemList._lastIndex = 0;
|
|
|
|
Window_DebugItemList.prototype.initialize = function (x, y, width, height) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this.refresh();
|
|
this.selectLast();
|
|
this.hide();
|
|
};
|
|
|
|
Window_DebugItemList.prototype.maxCols = function () {
|
|
return 4;
|
|
};
|
|
|
|
Window_DebugItemList.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 0;
|
|
};
|
|
|
|
Window_DebugItemList.prototype.item = function () {
|
|
var index = this.index();
|
|
return index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugItemList.prototype.selectLast = function () {
|
|
var index = this._data.indexOf(Window_DebugItemList._lastIndex);
|
|
this.select(index >= 0 ? index : 0);
|
|
};
|
|
|
|
Window_DebugItemList.prototype.makeItemList = function () {
|
|
this._data = $dataItems.slice(1);
|
|
this._data = this._data.concat($dataWeapons.slice(1));
|
|
this._data = this._data.concat($dataArmors.slice(1));
|
|
};
|
|
|
|
Window_DebugItemList.prototype.refresh = function () {
|
|
this.makeItemList();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
Window_DebugItemList.prototype.drawItem = function (index) {
|
|
var item = this._data[index];
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
var numberWidth = this.numberWidth();
|
|
var rect = _itemRectForText(this, index);
|
|
this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
|
|
this.drawItemNumber(item, rect.x, rect.y, rect.width);
|
|
};
|
|
|
|
Window_DebugItemList.prototype.numberWidth = function () {
|
|
return this.textWidth("000");
|
|
};
|
|
|
|
Window_DebugItemList.prototype.drawItemNumber = function (
|
|
item,
|
|
x,
|
|
y,
|
|
width
|
|
) {
|
|
this.drawText(":", x, y, width - this.textWidth("00"), "right");
|
|
this.drawText($gameParty.numItems(item), x, y, width, "right");
|
|
};
|
|
|
|
Window_DebugItemList.prototype.processCancel = function () {
|
|
Window_Selectable.prototype.processCancel.call(this);
|
|
Window_DebugItemList.lastTopRow = this.topRow();
|
|
Window_DebugItemList.lastIndex = this.index();
|
|
};
|
|
|
|
Window_DebugItemList.prototype.updateHelp = function () {
|
|
this.setHelpWindowItem(this.item());
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugActorList
|
|
//
|
|
// デバッグモード用アクター選択ウィンドウ
|
|
|
|
function Window_DebugActorList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugActorList.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugActorList.prototype.constructor = Window_DebugActorList;
|
|
|
|
Window_DebugActorList.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this._data = [];
|
|
this.refresh();
|
|
this.hide();
|
|
this.selectLast();
|
|
};
|
|
|
|
Window_DebugActorList._lastIndex = 0;
|
|
|
|
Window_DebugActorList.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugActorList.prototype.spacing = function () {
|
|
return 48;
|
|
};
|
|
|
|
Window_DebugActorList.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugActorList.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugActorList.prototype.includes = function (item) {
|
|
return item != null;
|
|
};
|
|
|
|
Window_DebugActorList.prototype.isEnabled = function (item) {
|
|
return true;
|
|
};
|
|
|
|
Window_DebugActorList.prototype.select = function (index) {
|
|
Window_Selectable.prototype.select.call(this, index);
|
|
if (this._statusWindow) {
|
|
this._statusWindow.setActor(this.item());
|
|
}
|
|
};
|
|
|
|
Window_DebugActorList.prototype.setStatusWindow = function (window) {
|
|
this._statusWindow = window;
|
|
this.select(this.index());
|
|
};
|
|
|
|
Window_DebugActorList.prototype.makeItemList = function () {
|
|
this._data = [];
|
|
for (var i = 1; i < $dataActors.length; i++) {
|
|
this._data.push($gameActors.actor(i));
|
|
}
|
|
};
|
|
|
|
Window_DebugActorList.prototype.selectLast = function () {
|
|
var index = this._data.indexOf(Window_DebugActorList._lastIndex);
|
|
this.select(index >= 0 ? index : 0);
|
|
};
|
|
|
|
Window_DebugActorList.prototype.drawItem = function (index) {
|
|
var item = this._data[index];
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
this.changePaintOpacity(this.isEnabled(item));
|
|
this.resetTextColor();
|
|
|
|
var text = "%1:%2".format(item.actorId().padZero(4), item.name());
|
|
var rect = _itemRectForText(this, index);
|
|
this.drawText(text, rect.x, rect.y, rect.width);
|
|
this.changePaintOpacity(1);
|
|
};
|
|
|
|
Window_DebugActorList.prototype.refresh = function () {
|
|
this.makeItemList();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugActorParam
|
|
//
|
|
// デバッグ用アクターパラメータ変更ウィンドウ
|
|
|
|
function Window_DebugActorParam() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugActorParam.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugActorParam.prototype.constructor = Window_DebugActorParam;
|
|
|
|
Window_DebugActorParam.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
this._data = [
|
|
"level",
|
|
"skill",
|
|
"hp",
|
|
"mp",
|
|
"atk",
|
|
"def",
|
|
"mat",
|
|
"mdf",
|
|
"agi",
|
|
"luk",
|
|
];
|
|
this._paramId = {
|
|
level: null,
|
|
skill: null,
|
|
hp: 0,
|
|
mp: 1,
|
|
atk: 2,
|
|
def: 3,
|
|
mat: 4,
|
|
mdf: 5,
|
|
agi: 6,
|
|
luk: 7,
|
|
};
|
|
this._actor = null;
|
|
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this.createContents();
|
|
this.refresh();
|
|
this.hide();
|
|
this.selectLast();
|
|
};
|
|
|
|
Window_DebugActorParam._lastIndex = 0;
|
|
|
|
Window_DebugActorParam.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugActorParam.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugActorParam.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugActorParam.prototype.paramId = function () {
|
|
return this._paramId[this.item()];
|
|
};
|
|
|
|
Window_DebugActorParam.prototype.setActor = function (actor) {
|
|
if (this._actor !== actor) {
|
|
this._actor = actor;
|
|
this.refresh();
|
|
}
|
|
};
|
|
|
|
Window_DebugActorParam.prototype.selectLast = function () {
|
|
var index = this._data.indexOf(Window_DebugActorParam._lastIndex);
|
|
this.select(index >= 0 ? index : 0);
|
|
};
|
|
|
|
Window_DebugActorParam.prototype.drawItem = function (index) {
|
|
var item = this._data[index];
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
var rect = _itemRectForText(this, index);
|
|
|
|
var paramName;
|
|
var paramValue1;
|
|
var paramValue2;
|
|
var paramId = this._paramId[item];
|
|
if (paramId != null) {
|
|
// 通常パラメータはパラメータ名と現在値、加算値を表示
|
|
paramName = TextManager.param(paramId) + "+";
|
|
paramValue1 = originalParamPlus.call(this._actor, paramId);
|
|
paramValue2 = this._actor.param(paramId);
|
|
} else {
|
|
paramName = TextManager[item];
|
|
switch (item) {
|
|
case "level":
|
|
paramValue1 = this._actor.level;
|
|
break;
|
|
case "skill":
|
|
paramValue1 = ">";
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(paramName, 0, rect.y, 160);
|
|
this.resetTextColor();
|
|
this.drawText(paramValue1, 160, rect.y, 90, "right");
|
|
if (paramValue2 != null) {
|
|
this.drawText(
|
|
"(%1)".format(padDigits(paramValue2, 6, " ")),
|
|
270,
|
|
rect.y,
|
|
120
|
|
);
|
|
}
|
|
};
|
|
|
|
Window_DebugActorParam.prototype.refresh = function () {
|
|
this.contents.clear();
|
|
|
|
if (!this._actor) {
|
|
return;
|
|
}
|
|
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugActorSkill
|
|
//
|
|
// デバッグ用アクタースキル編集ウィンドウ
|
|
|
|
function Window_DebugActorSkill() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugActorSkill.prototype = Object.create(
|
|
Window_SkillList.prototype
|
|
);
|
|
Window_DebugActorSkill.prototype.constructor = Window_DebugActorSkill;
|
|
|
|
Window_DebugActorSkill.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_SkillList.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this.hide();
|
|
};
|
|
|
|
Window_DebugActorSkill.prototype.isCurrentItemEnabled = function () {
|
|
return true;
|
|
};
|
|
|
|
Window_DebugActorSkill.prototype.includes = function (item) {
|
|
return item != null;
|
|
};
|
|
|
|
Window_DebugActorSkill.prototype.isEnabled = function (item) {
|
|
return this._actor && this._actor.isLearnedSkill(item.id);
|
|
};
|
|
|
|
Window_DebugActorSkill.prototype.makeItemList = function () {
|
|
if (!this._actor) {
|
|
this._data = [];
|
|
return;
|
|
}
|
|
|
|
this._data = $dataSkills.filter(function (item) {
|
|
return this.includes(item);
|
|
}, this);
|
|
};
|
|
|
|
Window_DebugActorSkill.prototype.selectLast = function () {
|
|
this.select(0);
|
|
};
|
|
|
|
Window_DebugActorSkill.prototype.drawItem = function (index) {
|
|
var skill = this._data[index];
|
|
if (!skill) {
|
|
return;
|
|
}
|
|
|
|
var rect = _itemRectForText(this, index);
|
|
this.changePaintOpacity(this.isEnabled(skill));
|
|
this.drawItemName(skill, rect.x, rect.y, rect.width);
|
|
this.changePaintOpacity(1);
|
|
};
|
|
|
|
/**
|
|
* 項目の再描画
|
|
*/
|
|
Window_DebugActorSkill.prototype.redrawItem = function (index) {
|
|
this.clearItem(index);
|
|
this.drawItem(index);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugPartyListBase
|
|
//
|
|
// デバッグモード用パーティメンバー選択ウィンドウの基底クラス
|
|
|
|
function Window_DebugPartyListBase() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugPartyListBase.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugPartyListBase.prototype.constructor = Window_DebugPartyListBase;
|
|
|
|
Window_DebugPartyListBase.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this._data = [];
|
|
this.refresh();
|
|
this.hide();
|
|
};
|
|
|
|
Window_DebugPartyListBase.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugPartyListBase.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugPartyListBase.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugPartyListBase.prototype.makeItemList = function () {
|
|
this._data = [];
|
|
|
|
// 継承先で追加
|
|
};
|
|
|
|
Window_DebugPartyListBase.prototype.drawItem = function (index) {
|
|
this.drawItemBackground(index);
|
|
|
|
var rect = _itemRectForText(this, index);
|
|
var item = this._data[index];
|
|
if (!item) {
|
|
this.drawBlankItem(rect);
|
|
return;
|
|
}
|
|
|
|
var name;
|
|
var level;
|
|
if (isActorCreated.call($gameActors, item)) {
|
|
var actor = $gameActors.actor(item);
|
|
name = actor.name();
|
|
level = actor.level;
|
|
} else {
|
|
var actor = $dataActors[item];
|
|
name = actor.name;
|
|
level = "--";
|
|
}
|
|
|
|
this.drawText(name, rect.x, rect.y, rect.width);
|
|
this.drawText(
|
|
"%1%2".format(TextManager.levelA, level),
|
|
rect.x,
|
|
rect.y,
|
|
rect.width,
|
|
"right"
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 空欄の描画
|
|
*/
|
|
Window_DebugPartyListBase.prototype.drawBlankItem = function (rect) {
|
|
// 継承先で実装
|
|
};
|
|
|
|
/**
|
|
* 項目の背景描画
|
|
*/
|
|
Window_DebugPartyListBase.prototype.drawItemBackground = function (index) {
|
|
// 継承先で実装
|
|
};
|
|
|
|
Window_DebugPartyListBase.prototype.refresh = function () {
|
|
this.makeItemList();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugActivePartyList
|
|
//
|
|
// デバッグモードでパーティに加入しているメンバーを選択するウィンドウ
|
|
|
|
function Window_DebugActivePartyList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugActivePartyList.prototype = Object.create(
|
|
Window_DebugPartyListBase.prototype
|
|
);
|
|
Window_DebugActivePartyList.prototype.constructor =
|
|
Window_DebugActivePartyList;
|
|
|
|
Window_DebugActivePartyList.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
this._isFormationChangeMode = false;
|
|
this._pendingIndex = -1;
|
|
|
|
Window_DebugPartyListBase.prototype.initialize.call(
|
|
this,
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
);
|
|
};
|
|
|
|
/**
|
|
* 並び替え中のインデックスを取得
|
|
*/
|
|
Window_DebugActivePartyList.prototype.getPendingIndex = function () {
|
|
return this._pendingIndex;
|
|
};
|
|
|
|
/**
|
|
* 並び替え中のインデックスを設定
|
|
*/
|
|
Window_DebugActivePartyList.prototype.setPendingIndex = function (index) {
|
|
this._pendingIndex = index;
|
|
};
|
|
|
|
/**
|
|
* 並び替え状態か
|
|
*/
|
|
Window_DebugActivePartyList.prototype.isFormationChangeMode = function () {
|
|
return this._isFormationChangeMode;
|
|
};
|
|
|
|
/**
|
|
* 並び替え状態を設定
|
|
*/
|
|
Window_DebugActivePartyList.prototype.setFormationChangeMode = function (
|
|
mode
|
|
) {
|
|
this._isFormationChangeMode = !!mode;
|
|
if (!this.isFormationChangeMode()) {
|
|
this.setPendingIndex(-1);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 選択中の項目が有効か
|
|
*/
|
|
Window_DebugActivePartyList.prototype.isCurrentItemEnabled = function () {
|
|
if (this.isFormationChangeMode()) {
|
|
var item = this._data[this.index()];
|
|
return item && $gameActors.actor(item).isFormationChangeOk();
|
|
} else {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
Window_DebugActivePartyList.prototype.makeItemList = function () {
|
|
Window_DebugPartyListBase.prototype.makeItemList.call(this);
|
|
|
|
// パーティ内の全メンバーの ID を格納
|
|
$gameParty.allMembers().forEach(function (actor) {
|
|
this._data.push(actor.actorId());
|
|
}, this);
|
|
|
|
// 「追加」コマンド
|
|
this._data.push(null);
|
|
};
|
|
|
|
Window_DebugActivePartyList.prototype.drawBlankItem = function (rect) {
|
|
// 「追加」項目
|
|
this.drawText(
|
|
"( %1 )".format(TextManager.DebugUtil.addToParty),
|
|
rect.x,
|
|
rect.y,
|
|
rect.width,
|
|
"center"
|
|
);
|
|
};
|
|
|
|
Window_DebugActivePartyList.prototype.drawItemBackground = function (
|
|
index
|
|
) {
|
|
if (index !== this._pendingIndex) {
|
|
return;
|
|
}
|
|
|
|
var rect = this.itemRect(index);
|
|
var color = this.pendingColor();
|
|
this.changePaintOpacity(false);
|
|
this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, color);
|
|
this.changePaintOpacity(true);
|
|
};
|
|
|
|
Window_DebugActivePartyList.prototype.processHandling = function () {
|
|
if (this.isOpenAndActive() && this.isHandled("formation")) {
|
|
if (this.isFormationChangeMode()) {
|
|
// 並び替え決定
|
|
if (
|
|
this.isOkTriggered() ||
|
|
Input.isTriggered(Params.formationButton)
|
|
) {
|
|
this.processFormation();
|
|
return;
|
|
}
|
|
} else {
|
|
// 並び替え開始
|
|
if (Input.isTriggered(Params.formationButton)) {
|
|
this.processFormation();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 入力が確定しなかったら元の処理
|
|
Window_DebugPartyListBase.prototype.processHandling.call(this);
|
|
};
|
|
|
|
/**
|
|
* 並び替え操作の処理
|
|
*/
|
|
Window_DebugActivePartyList.prototype.processFormation = function () {
|
|
if (!this.item() || !this.isCurrentItemEnabled()) {
|
|
// 並び替え対象にできない
|
|
this.playBuzzerSound();
|
|
return;
|
|
}
|
|
|
|
this.playOkSound();
|
|
this.updateInputData();
|
|
//this.deactivate();
|
|
this.callHandler("formation");
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugReservePartyList
|
|
//
|
|
// デバッグモードでパーティに加入しているメンバーを選択するウィンドウ
|
|
|
|
function Window_DebugReservePartyList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugReservePartyList.prototype = Object.create(
|
|
Window_DebugPartyListBase.prototype
|
|
);
|
|
Window_DebugReservePartyList.prototype.constructor =
|
|
Window_DebugReservePartyList;
|
|
|
|
Window_DebugReservePartyList.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_DebugPartyListBase.prototype.initialize.call(
|
|
this,
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
);
|
|
};
|
|
|
|
Window_DebugReservePartyList.prototype.makeItemList = function () {
|
|
Window_DebugPartyListBase.prototype.makeItemList.call(this);
|
|
|
|
// パーティ外の全メンバーの ID を格納
|
|
for (var i = 1; i < $dataActors.length; i++) {
|
|
if (!containsActor.call($gameParty, i)) {
|
|
this._data.push(i);
|
|
}
|
|
}
|
|
|
|
// 「外す」コマンド
|
|
this._data.push(null);
|
|
};
|
|
|
|
Window_DebugReservePartyList.prototype.drawBlankItem = function (rect) {
|
|
// 「外す」項目
|
|
this.drawText(
|
|
"( %1 )".format(TextManager.DebugUtil.removeFromParty),
|
|
rect.x,
|
|
rect.y,
|
|
rect.width,
|
|
"center"
|
|
);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugMapList
|
|
//
|
|
// デバッグモード用マップ選択ウィンドウ
|
|
|
|
function Window_DebugMapList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugMapList.prototype = Object.create(Window_Selectable.prototype);
|
|
Window_DebugMapList.prototype.constructor = Window_DebugMapList;
|
|
|
|
Window_DebugMapList.prototype.initialize = function (x, y, width, height) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this._data = [];
|
|
this.refresh();
|
|
this.hide();
|
|
this.selectLast();
|
|
};
|
|
|
|
Window_DebugMapList._lastIndex = 0;
|
|
|
|
Window_DebugMapList.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugMapList.prototype.spacing = function () {
|
|
return 48;
|
|
};
|
|
|
|
Window_DebugMapList.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugMapList.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugMapList.prototype.includes = function (item) {
|
|
return item != null;
|
|
};
|
|
|
|
Window_DebugMapList.prototype.isEnabled = function (item) {
|
|
return true;
|
|
};
|
|
|
|
Window_DebugMapList.prototype.select = function (index) {
|
|
Window_Selectable.prototype.select.call(this, index);
|
|
if (this._eventListWindow) {
|
|
this._eventListWindow.setMap(this.item());
|
|
}
|
|
};
|
|
|
|
Window_DebugMapList.prototype.setEventListWindow = function (window) {
|
|
this._eventListWindow = window;
|
|
this.select(this.index());
|
|
};
|
|
|
|
Window_DebugMapList.prototype.makeItemList = function () {
|
|
this._data = $dataMapInfos.filter(function (info) {
|
|
return info != null;
|
|
});
|
|
};
|
|
|
|
Window_DebugMapList.prototype.selectLast = function () {
|
|
var index = this._data.indexOf(Window_DebugMapList._lastIndex);
|
|
this.select(index >= 0 ? index : 0);
|
|
};
|
|
|
|
Window_DebugMapList.prototype.drawItem = function (index) {
|
|
var item = this._data[index];
|
|
if (item == null) {
|
|
return;
|
|
}
|
|
|
|
this.changePaintOpacity(this.isEnabled(item));
|
|
this.resetTextColor();
|
|
|
|
// マップ名描画
|
|
var text = "%1:%2".format(item.id.padZero(3), item.name);
|
|
var rect = _itemRectForText(this, index);
|
|
this.drawText(text, rect.x, rect.y, rect.width);
|
|
this.changePaintOpacity(1);
|
|
};
|
|
|
|
Window_DebugMapList.prototype.refresh = function () {
|
|
this.makeItemList();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugMapTilePosition
|
|
//
|
|
// デバッグモード用タイル座標ウィンドウ
|
|
|
|
function Window_DebugMapTilePosition() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugMapTilePosition.prototype = Object.create(
|
|
Window_Base.prototype
|
|
);
|
|
Window_DebugMapTilePosition.prototype.constructor =
|
|
Window_DebugMapTilePosition;
|
|
|
|
Window_DebugMapTilePosition.prototype.initialize = function (x, y, width) {
|
|
this._mapSize = { width: 0, height: 0 };
|
|
this._position = { x: 0, y: 0 };
|
|
|
|
var wh = this.fittingHeight(2);
|
|
Window_Base.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, wh)
|
|
);
|
|
};
|
|
|
|
/**
|
|
* マップサイズの設定
|
|
*/
|
|
Window_DebugMapTilePosition.prototype.setMapSize = function (
|
|
width,
|
|
height
|
|
) {
|
|
this._mapSize.width = width;
|
|
this._mapSize.height = height;
|
|
|
|
// 今のところ直後に setPosition が呼ばれるので、refresh 不要
|
|
};
|
|
|
|
/**
|
|
* カーソル位置の設定
|
|
*/
|
|
Window_DebugMapTilePosition.prototype.setPosition = function (x, y) {
|
|
this._position.x = x;
|
|
this._position.y = y;
|
|
this.refresh();
|
|
};
|
|
|
|
Window_DebugMapTilePosition.prototype.clear = function () {
|
|
this.contents.clear();
|
|
};
|
|
|
|
Window_DebugMapTilePosition.prototype.refresh = function () {
|
|
this.clear();
|
|
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(TextManager.DebugUtil.mapSize, 0, 0, 160);
|
|
this.drawText(
|
|
TextManager.DebugUtil.tilePosition,
|
|
0,
|
|
this.lineHeight(),
|
|
160
|
|
);
|
|
|
|
this.resetTextColor();
|
|
this.drawText(
|
|
"%1,%2".format(this._mapSize.width, this._mapSize.height),
|
|
180,
|
|
0,
|
|
120
|
|
);
|
|
this.drawText(
|
|
"%1,%2".format(this._position.x, this._position.y),
|
|
180,
|
|
this.lineHeight(),
|
|
120
|
|
);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugMapTile
|
|
//
|
|
// デバッグモード用タイル選択ウィンドウ
|
|
|
|
function Window_DebugMapTile() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugMapTile.prototype = Object.create(Window_Selectable.prototype);
|
|
Window_DebugMapTile.prototype.constructor = Window_DebugMapTile;
|
|
|
|
Window_DebugMapTile.prototype.initialize = function (x, y, width, height) {
|
|
this._data = [];
|
|
this._map = new Game_Map();
|
|
this._positionWindow = null;
|
|
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this.createArrowSprites();
|
|
|
|
// Pixi.js が古いと Tilemap が大きめに出るので、padding を増やす
|
|
this.padding += Const.pixiVersion >= 4 ? 18 : 26;
|
|
|
|
this.createBaseSprite();
|
|
this.createGridSprite();
|
|
this.createDestinationSprite();
|
|
this.select(0);
|
|
this.hide();
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.maxCols = function () {
|
|
return this._map.width();
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.maxItems = function () {
|
|
return this._data.length;
|
|
};
|
|
|
|
/**
|
|
* 現在の列を取得
|
|
*/
|
|
Window_DebugMapTile.prototype.col = function () {
|
|
return Math.floor(this.index() % this.maxCols());
|
|
};
|
|
|
|
/**
|
|
* 左端に表示している列を取得
|
|
*/
|
|
Window_DebugMapTile.prototype.leftCol = function () {
|
|
return Math.floor(this._scrollX / this.itemWidth());
|
|
};
|
|
|
|
/**
|
|
* 左端に表示する列の最大値を取得
|
|
*/
|
|
Window_DebugMapTile.prototype.maxLeftCol = function () {
|
|
return Math.max(0, this.maxCols() - this.maxPageCols());
|
|
};
|
|
|
|
/**
|
|
* 左端に表示する列を設定
|
|
*/
|
|
Window_DebugMapTile.prototype.setLeftCol = function (col) {
|
|
var scrollX = col.clamp(0, this.maxLeftCol()) * this.itemWidth();
|
|
if (this._scrollX !== scrollX) {
|
|
this.scrollTo(scrollX, this._scrollY);
|
|
this._scrollX = scrollX;
|
|
// this._scrollX = scrollX;
|
|
this.refresh();
|
|
// this.updateCursor();
|
|
}
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.resetScroll = function () {
|
|
this.setTopRow(0);
|
|
this.setLeftCol(0);
|
|
};
|
|
|
|
/**
|
|
* ページ内の最大列数を取得
|
|
*/
|
|
Window_DebugMapTile.prototype.maxPageCols = function () {
|
|
var pageWidth = this.width - this.padding * 2;
|
|
return Math.floor(pageWidth / this.itemWidth());
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.maxPageItems = function () {
|
|
return this.maxPageRows() * this.maxPageCols();
|
|
};
|
|
|
|
/**
|
|
* 右端の列を取得
|
|
*/
|
|
Window_DebugMapTile.prototype.rightCol = function () {
|
|
return Math.max(0, this.leftCol() + this.maxPageCols() - 1);
|
|
};
|
|
|
|
/**
|
|
* 右端に表示する列を設定
|
|
*/
|
|
Window_DebugMapTile.prototype.setRightCol = function (col) {
|
|
this.setLeftCol(col - (this.maxPageCols() - 1));
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.spacing = function () {
|
|
return 0;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.itemWidth = function () {
|
|
return this._map.tileWidth() * Const.mapTileScale;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.itemHeight = function () {
|
|
return this._map.tileHeight() * Const.mapTileScale;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.activate = function () {
|
|
Window_Selectable.prototype.activate.call(this);
|
|
|
|
if (this._destinationSprite) {
|
|
this._destinationSprite.visible = true;
|
|
}
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.deactivate = function () {
|
|
Window_Selectable.prototype.deactivate.call(this);
|
|
|
|
if (this._destinationSprite) {
|
|
this._destinationSprite.visible = false;
|
|
}
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.select = function (index) {
|
|
Window_Selectable.prototype.select.call(this, index);
|
|
|
|
if (this._positionWindow) {
|
|
var cursor = this.getCursorTile();
|
|
this._positionWindow.setPosition(cursor.x, cursor.y);
|
|
}
|
|
|
|
this.updateTilemap();
|
|
this.updateDestinationPosition();
|
|
this._stayCount = 0;
|
|
};
|
|
|
|
/**
|
|
* 左スクロール
|
|
*/
|
|
Window_DebugMapTile.prototype.scrollLeft = function () {
|
|
if (this.leftCol() > 0) {
|
|
this.setLeftCol(this.leftCol() - 1);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 右スクロール
|
|
*/
|
|
Window_DebugMapTile.prototype.scrollRight = function () {
|
|
if (this.leftCol() + 1 < this.maxCols()) {
|
|
this.setLeftCol(this.leftCol() + 1);
|
|
}
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.updateArrows = function () {
|
|
Window_Selectable.prototype.updateArrows.call(this);
|
|
|
|
// 左右アローの表示
|
|
var leftCol = this.leftCol();
|
|
var maxLeftCol = this.maxLeftCol();
|
|
this._rightArrowSprite.visible = maxLeftCol > 0 && leftCol < maxLeftCol;
|
|
this._leftArrowSprite.visible = leftCol > 0;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.processWheel = function () {
|
|
Window_Selectable.prototype.processWheel.call(this);
|
|
|
|
if (this.isOpenAndActive()) {
|
|
var threshold = 20;
|
|
if (TouchInput.wheelX >= threshold) {
|
|
this.scrollRight();
|
|
}
|
|
if (TouchInput.wheelX <= -threshold) {
|
|
this.scrollLeft();
|
|
}
|
|
}
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.onTouchSelect = function (triggered) {
|
|
var lastIndex = this.index();
|
|
Window_Selectable.prototype.onTouchSelect.call(this, triggered);
|
|
|
|
if (this.index() !== lastIndex) {
|
|
// カーソル移動が行われた場合は後続の処理は不要
|
|
return;
|
|
}
|
|
|
|
if (this._stayCount >= 10) {
|
|
// 左右端のタップ判定
|
|
const touchPos = new Point(TouchInput.x, TouchInput.y);
|
|
const localPos = this.worldTransform.applyInverse(touchPos);
|
|
const winRect = new Rectangle(0, 0, this.width, this.height);
|
|
|
|
//
|
|
if (winRect.contains(localPos.x, localPos.y)) {
|
|
var x = localPos.x;
|
|
if (x < this.padding) {
|
|
this.cursorLeft();
|
|
} else if (x >= this.width - this.padding) {
|
|
this.cursorRight();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this.index() !== lastIndex) {
|
|
SoundManager.playCursor();
|
|
}
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.update = function () {
|
|
Window_Selectable.prototype.update.call(this);
|
|
this._stayCount++;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.hitTest = function (x, y) {
|
|
// if (!this.isContentsArea(x, y))
|
|
// {
|
|
// return -1;
|
|
// }
|
|
|
|
var cx = x - this.padding;
|
|
var cy = y - this.padding;
|
|
var maxCols = this.maxCols();
|
|
var maxPageCols = this.maxPageCols();
|
|
var topIndex = this.leftCol() + this.topRow() * maxCols;
|
|
for (var i = 0; i < this.maxPageItems(); i++) {
|
|
var topOffset = Math.floor(i / maxPageCols) * maxCols;
|
|
var index = topIndex + topOffset + (i % maxPageCols);
|
|
if (index < this.maxItems()) {
|
|
var rect = this.itemRect(index);
|
|
var right = rect.x + rect.width;
|
|
var bottom = rect.y + rect.height;
|
|
if (cx >= rect.x && cy >= rect.y && cx < right && cy < bottom) {
|
|
return index;
|
|
}
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.ensureCursorVisible = function () {
|
|
Window_Selectable.prototype.ensureCursorVisible.call(this);
|
|
|
|
var col = this.col();
|
|
if (col < this.leftCol()) {
|
|
this.setLeftCol(col);
|
|
} else if (col > this.rightCol()) {
|
|
this.setRightCol(col);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 対象のマップを指定
|
|
*/
|
|
Window_DebugMapTile.prototype.setupMap = function (mapId) {
|
|
if (mapId === 0) {
|
|
if (this._positionWindow) {
|
|
this._positionWindow.clear();
|
|
}
|
|
this._baseSprite.visible = false;
|
|
return;
|
|
} else {
|
|
this._baseSprite.visible = true;
|
|
}
|
|
|
|
// この時点でマップデータはロード済みでなければならない
|
|
debuglog("Window_DebugMapTile.setupMap() called");
|
|
this._map.setup(mapId);
|
|
if (this._positionWindow) {
|
|
this._positionWindow.setMapSize(this._map.width(), this._map.height());
|
|
}
|
|
|
|
this.makeItemList();
|
|
this.select(0);
|
|
this.refreshTilemap();
|
|
};
|
|
|
|
/**
|
|
* 有効なマップが指定されているか
|
|
*/
|
|
Window_DebugMapTile.prototype.isMapValid = function () {
|
|
return this._map && this._map.mapId() > 0;
|
|
};
|
|
|
|
/**
|
|
* マップ表示サイズの取得
|
|
*/
|
|
Window_DebugMapTile.prototype.getMapDisplaySize = function () {
|
|
return {
|
|
width:
|
|
(this._baseSprite.width + this._tilemap._margin * 2) /
|
|
this._baseSprite.scale.x,
|
|
|
|
height:
|
|
(this._baseSprite.height + this._tilemap._margin * 2) /
|
|
this._baseSprite.scale.y,
|
|
};
|
|
};
|
|
|
|
/**
|
|
* カーソル位置のタイル座標を取得
|
|
*/
|
|
Window_DebugMapTile.prototype.getCursorTile = function () {
|
|
return {
|
|
x: this.index() % this._map.width(),
|
|
y: Math.floor(this.index() / this._map.width()),
|
|
};
|
|
};
|
|
|
|
/**
|
|
* マップ転送用の情報を取得
|
|
*/
|
|
Window_DebugMapTile.prototype.getTransferInfo = function () {
|
|
var tile = this.getCursorTile();
|
|
|
|
// とりあえず下向き、黒フェード固定
|
|
return {
|
|
mapId: this._map.mapId(),
|
|
x: tile.x,
|
|
y: tile.y,
|
|
d: 2,
|
|
fadeType: 0,
|
|
};
|
|
};
|
|
|
|
/**
|
|
* マップ位置ウィンドウの設定
|
|
*/
|
|
Window_DebugMapTile.prototype.setPositionWindow = function (window) {
|
|
this._positionWindow = window;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.itemRect = function (index) {
|
|
var maxCols = this.maxCols();
|
|
var rect = new Rectangle();
|
|
rect.width = this.itemWidth();
|
|
rect.height = this.itemHeight();
|
|
rect.x =
|
|
(index % maxCols) * (rect.width + this.spacing()) - this._scrollX;
|
|
rect.y = Math.floor(index / maxCols) * rect.height - this._scrollY;
|
|
return rect;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.isCursorVisible = function () {
|
|
return false;
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.makeItemList = function () {
|
|
var tileCount = this._map.width() * this._map.height();
|
|
this._data = Array.apply(null, { length: tileCount }).map(
|
|
Number.call,
|
|
Number
|
|
);
|
|
};
|
|
|
|
/**
|
|
* アロースプライトの作成
|
|
*/
|
|
Window_DebugMapTile.prototype.createArrowSprites = function () {
|
|
// あえて Window.prototype._refreshArrows に近い書き方
|
|
var p = 12;
|
|
var q = p * 2;
|
|
var sx = 96 + q;
|
|
var sy = 0 + q;
|
|
|
|
this._leftArrowSprite = new Sprite();
|
|
this._leftArrowSprite.bitmap = this.windowskin;
|
|
this._leftArrowSprite.anchor.x = 0.5;
|
|
this._leftArrowSprite.anchor.y = 0.5;
|
|
this._leftArrowSprite.setFrame(sx, sy + p, p, q);
|
|
this._leftArrowSprite.move(p, this.height / 2);
|
|
this.addChild(this._leftArrowSprite);
|
|
|
|
this._rightArrowSprite = new Sprite();
|
|
this._rightArrowSprite.bitmap = this.windowskin;
|
|
this._rightArrowSprite.anchor.x = 0.5;
|
|
this._rightArrowSprite.anchor.y = 0.5;
|
|
this._rightArrowSprite.setFrame(sx + p + q, sy + p, p, q);
|
|
this._rightArrowSprite.move(this.width - p, this.height / 2);
|
|
this.addChild(this._rightArrowSprite);
|
|
};
|
|
|
|
/**
|
|
* ベーススプライトの作成
|
|
*/
|
|
Window_DebugMapTile.prototype.createBaseSprite = function () {
|
|
var sx = this.padding;
|
|
var sy = this.padding;
|
|
var sw = this.contentsWidth() - this.padding * 2;
|
|
var sh = this.contentsHeight() - this.padding * 2;
|
|
|
|
this._baseSprite = new Sprite();
|
|
this._baseSprite.setFrame(0, 0, sw, sh);
|
|
this._baseSprite.x = sx;
|
|
this._baseSprite.y = sy;
|
|
this._baseSprite.scale.x = Const.mapTileScale;
|
|
this._baseSprite.scale.y = Const.mapTileScale;
|
|
this.addChild(this._baseSprite);
|
|
};
|
|
|
|
/**
|
|
* グリッドスプライトの作成
|
|
*/
|
|
Window_DebugMapTile.prototype.createGridSprite = function () {
|
|
var bw = this.contentsWidth() / Const.mapTileScale;
|
|
var bh = this.contentsHeight() / Const.mapTileScale;
|
|
|
|
this._gridSprite = new Sprite();
|
|
this._gridSprite.bitmap = new Bitmap(bw, bh);
|
|
this._baseSprite.addChild(this._gridSprite);
|
|
};
|
|
|
|
/**
|
|
* グリッドスプライトの再描画
|
|
*/
|
|
Window_DebugMapTile.prototype.refreshGridSprite = function () {
|
|
var lineWidth = Const.mapGridLineWidth;
|
|
|
|
function alignSize(value, align) {
|
|
return value - (value % align) + lineWidth;
|
|
}
|
|
|
|
var color = Params.mapGridColor;
|
|
var bitmap = this._gridSprite.bitmap;
|
|
bitmap.clear();
|
|
|
|
// グリッド描画用のサイズ計算
|
|
// * カーソルが当たる範囲のみ描画するように調整
|
|
var dispSize = this.getMapDisplaySize();
|
|
var tileWidth = this._tilemap.tileWidth;
|
|
var tileHeight = this._tilemap.tileHeight;
|
|
var mapWidth = this._map.width() * tileWidth;
|
|
var mapHeight = this._map.height() * tileHeight;
|
|
var dispWidth = alignSize(Math.min(dispSize.width, mapWidth), tileWidth);
|
|
var dispHeight = alignSize(
|
|
Math.min(dispSize.height, mapHeight),
|
|
tileHeight
|
|
);
|
|
|
|
// 横線
|
|
var vCount = Math.ceil(dispHeight / tileHeight);
|
|
for (var i = 0; i < vCount; i++) {
|
|
var dy = i * tileHeight;
|
|
bitmap.fillRect(0, dy, dispWidth, lineWidth, color);
|
|
}
|
|
|
|
// 縦線
|
|
var hCount = Math.ceil(dispWidth / tileWidth);
|
|
for (var i = 0; i < hCount; i++) {
|
|
var dx = i * tileWidth;
|
|
bitmap.fillRect(dx, 0, lineWidth, dispHeight, color);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 移動先スプライトの作成
|
|
*/
|
|
Window_DebugMapTile.prototype.createDestinationSprite = function () {
|
|
this._destinationSprite = new Sprite_DebugMapDestination();
|
|
this._destinationSprite.setMap(this._map);
|
|
this._destinationSprite.visible = false;
|
|
|
|
this._baseSprite.addChild(this._destinationSprite);
|
|
};
|
|
|
|
/**
|
|
* タイルマップの作成
|
|
*/
|
|
Window_DebugMapTile.prototype.createTilemap = function () {
|
|
if (this._tilemap || !this.isMapValid()) {
|
|
// 過剰に作成しない
|
|
return;
|
|
}
|
|
|
|
//this._tilemap = new ShaderTilemap(); //MZでShaderTilemap消えてる...
|
|
this._tilemap = new Tilemap();
|
|
|
|
// サイズをウィンドウ内に収める
|
|
var size = this.getMapDisplaySize();
|
|
this._tilemap.width = size.width;
|
|
this._tilemap.height = size.height;
|
|
|
|
this._destinationSprite.setVisibleArea(0, 0, size.width, size.height);
|
|
|
|
// PIXI.js が v4 なら mask が正常に動くので、はみ出た部分を除外
|
|
if (Const.pixiVersion >= 4) {
|
|
this._maskGraphic = new PIXI.Graphics();
|
|
this._maskGraphic.beginFill(0x000000);
|
|
this._maskGraphic.drawRect(0, 0, size.width, size.height);
|
|
this._maskGraphic.endFill();
|
|
|
|
this._baseSprite.addChild(this._maskGraphic);
|
|
this._tilemap.mask = this._maskGraphic;
|
|
}
|
|
|
|
// 最下層に配置
|
|
this._baseSprite.addChildAt(this._tilemap, 0);
|
|
};
|
|
|
|
/**
|
|
* タイルマップの再構築
|
|
*/
|
|
Window_DebugMapTile.prototype.refreshTilemap = function () {
|
|
this.createTilemap();
|
|
|
|
this._tilemap.tileWidth = this._map.tileWidth();
|
|
this._tilemap.tileHeight = this._map.tileHeight();
|
|
this._tilemap.setData(
|
|
this._map.width(),
|
|
this._map.height(),
|
|
this._map.data()
|
|
);
|
|
|
|
// ループは無効化
|
|
this._tilemap.horizontalWrap = false; // this._map.isLoopHorizontal();
|
|
this._tilemap.verticalWrap = false; // this._map.isLoopVertical();
|
|
|
|
// ウィンドウのスクロール量とタイルマップのスクロール量の比率
|
|
this._scrollTileRatioX = this._tilemap.tileWidth / this.itemWidth();
|
|
this._scrollTileRatioY = this._tilemap.tileHeight / this.itemHeight();
|
|
|
|
this.refreshGridSprite();
|
|
|
|
// ロード完了までスプライトを隠す
|
|
this._tilemap.visible = false;
|
|
this._destinationSprite.visible = false;
|
|
};
|
|
|
|
/**
|
|
* タイルセットの再構築
|
|
*/
|
|
Window_DebugMapTile.prototype.refreshTileset = function () {
|
|
if (!this._map) {
|
|
return;
|
|
}
|
|
|
|
this._tileset = this._map.tileset();
|
|
if (!this._tileset) {
|
|
return;
|
|
}
|
|
|
|
// この時点でタイルセット画像はロード済みでなければならない
|
|
debuglog("Window_DebugMapTile.refreshTileset() called");
|
|
var newTilesetFlags = this._map.tilesetFlags();
|
|
//this._tilemap.refreshTileset();
|
|
if (!this._tilemap.flags.equals(newTilesetFlags)) {
|
|
this._tilemap.refresh();
|
|
}
|
|
this._tilemap.flags = newTilesetFlags;
|
|
|
|
// 読み込みが完了したらスプライトを表示
|
|
this._tilemap.visible = true;
|
|
this._destinationSprite.visible = true;
|
|
};
|
|
|
|
/**
|
|
* タイルセットの読み込み
|
|
*/
|
|
Window_DebugMapTile.prototype.loadTileset = function () {
|
|
if (!this._map) {
|
|
return;
|
|
}
|
|
|
|
this._tileset = this._map.tileset();
|
|
if (!this._tileset) {
|
|
return;
|
|
}
|
|
|
|
var tilesetNames = this._tileset.tilesetNames;
|
|
for (var i = 0; i < tilesetNames.length; i++) {
|
|
this._tilemap._bitmaps[i] = ImageManager.loadTileset(tilesetNames[i]);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* タイルマップ表示の更新
|
|
*/
|
|
Window_DebugMapTile.prototype.updateTilemap = function () {
|
|
if (!this._tilemap) {
|
|
return;
|
|
}
|
|
|
|
this._tilemap.origin.x = this._scrollX * this._scrollTileRatioX;
|
|
this._tilemap.origin.y = this._scrollY * this._scrollTileRatioY;
|
|
this._tilemap.refresh();
|
|
};
|
|
|
|
/**
|
|
* 移動先スプライトの位置を更新
|
|
*/
|
|
Window_DebugMapTile.prototype.updateDestinationPosition = function () {
|
|
if (!this._destinationSprite) {
|
|
return;
|
|
}
|
|
|
|
var cursor = this.getCursorTile();
|
|
this._destinationSprite.setDestination(
|
|
cursor.x - this.leftCol(),
|
|
cursor.y - this.topRow()
|
|
);
|
|
};
|
|
|
|
Window_DebugMapTile.prototype.refresh = function () {
|
|
Window_Selectable.prototype.refresh.call(this);
|
|
|
|
this.updateTilemap();
|
|
this.updateDestinationPosition();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugEventList
|
|
//
|
|
// イベント選択用ウィンドウ
|
|
|
|
function Window_DebugEventList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugEventList.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugEventList.prototype.constructor = Window_DebugEventList;
|
|
|
|
Window_DebugEventList.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this._data = [];
|
|
this._map = null;
|
|
this.refresh();
|
|
this.hide();
|
|
this.selectLast();
|
|
};
|
|
|
|
Window_DebugEventList._lastIndex = 0;
|
|
|
|
Window_DebugEventList.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugEventList.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugEventList.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugEventList.prototype.includes = function (item) {
|
|
return item != null;
|
|
};
|
|
|
|
Window_DebugEventList.prototype.isEnabled = function (item) {
|
|
return true;
|
|
};
|
|
|
|
Window_DebugEventList.prototype.select = function (index) {
|
|
Window_Selectable.prototype.select.call(this, index);
|
|
if (this._switchListWindow) {
|
|
this._switchListWindow.setEvent(this.item());
|
|
}
|
|
};
|
|
|
|
Window_DebugEventList.prototype.setMap = function (map) {
|
|
this._map = map;
|
|
this.refresh();
|
|
};
|
|
|
|
Window_DebugEventList.prototype.setSwitchListWindow = function (window) {
|
|
this._switchListWindow = window;
|
|
this.select(this.index());
|
|
};
|
|
|
|
Window_DebugEventList.prototype.makeItemList = function () {
|
|
if (this._map == null) {
|
|
this._data = [];
|
|
return;
|
|
}
|
|
|
|
// この時点でマップデータが一時領域に読み込み済みでなければならない
|
|
this._data = $dataKmsTemporallyMapData.events.filter(function (event) {
|
|
return event != null;
|
|
});
|
|
};
|
|
|
|
Window_DebugEventList.prototype.selectLast = function () {
|
|
var index = this._data.indexOf(Window_DebugEventList._lastIndex);
|
|
index = Math.min(index, this._data.length - 1);
|
|
this.select(index >= 0 ? index : 0);
|
|
};
|
|
|
|
Window_DebugEventList.prototype.drawItem = function (index) {
|
|
var item = this._data[index];
|
|
if (item == null) {
|
|
return;
|
|
}
|
|
|
|
this.changePaintOpacity(this.isEnabled(item));
|
|
this.resetTextColor();
|
|
|
|
// イベント名描画
|
|
var text = "%1:%2".format(item.id.padZero(4), item.name);
|
|
var rect = _itemRectForText(this, index);
|
|
this.drawText(text, rect.x, rect.y, rect.width);
|
|
this.changePaintOpacity(1);
|
|
};
|
|
|
|
Window_DebugEventList.prototype.refresh = function () {
|
|
this.makeItemList();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugSelfSwitchList
|
|
//
|
|
// セルフスイッチ選択用ウィンドウ
|
|
|
|
function Window_DebugSelfSwitchList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugSelfSwitchList.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugSelfSwitchList.prototype.constructor =
|
|
Window_DebugSelfSwitchList;
|
|
|
|
Window_DebugSelfSwitchList.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this._data = ["A", "B", "C", "D"];
|
|
this._map = null;
|
|
this._event = null;
|
|
this.refresh();
|
|
this.hide();
|
|
this.selectLast();
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.includes = function (item) {
|
|
return item != null;
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.isEnabled = function (item) {
|
|
return true;
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.setMap = function (map) {
|
|
this._map = map;
|
|
this.refresh();
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.setEvent = function (event) {
|
|
this._event = event;
|
|
this.refresh();
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.selectLast = function () {
|
|
this.select(0);
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチアクセス用のキーを取得
|
|
*/
|
|
Window_DebugSelfSwitchList.prototype.getKey = function (type) {
|
|
var switchType = type != null ? type : this.item();
|
|
|
|
if (this._map != null && this._event.id != null && switchType != null) {
|
|
return [this._map.id, this._event.id, switchType];
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.drawItem = function (index) {
|
|
var item = this._data[index];
|
|
if (item == null || this._map == null || this._event == null) {
|
|
return;
|
|
}
|
|
|
|
this.changePaintOpacity(this.isEnabled(item));
|
|
this.resetTextColor();
|
|
|
|
var switchValue = $gameSelfSwitches.value(this.getKey(item));
|
|
var text = "[%1] %2".format(item, switchValue ? "ON" : "OFF");
|
|
var rect = _itemRectForText(this, index);
|
|
this.drawText(text, rect.x, rect.y, rect.width);
|
|
this.changePaintOpacity(1);
|
|
};
|
|
|
|
Window_DebugSelfSwitchList.prototype.refresh = function () {
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugSystemValue
|
|
//
|
|
// デバッグ用システム値変更ウィンドウ
|
|
|
|
function Window_DebugSystemValue() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugSystemValue.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugSystemValue.prototype.constructor = Window_DebugSystemValue;
|
|
|
|
// 表示データの設定
|
|
Window_DebugSystemValue.DataTypeConfig = {
|
|
// type ... uint: 非負整数
|
|
// get ... 値取得関数
|
|
// set ... 値変更関数
|
|
battleCount: {
|
|
type: "uint",
|
|
get: function () {
|
|
return $gameSystem._battleCount;
|
|
},
|
|
set: function (value) {
|
|
$gameSystem._battleCount = value;
|
|
},
|
|
},
|
|
winCount: {
|
|
type: "uint",
|
|
get: function () {
|
|
return $gameSystem._winCount;
|
|
},
|
|
set: function (value) {
|
|
$gameSystem._winCount = value;
|
|
},
|
|
},
|
|
escapeCount: {
|
|
type: "uint",
|
|
get: function () {
|
|
return $gameSystem._escapeCount;
|
|
},
|
|
set: function (value) {
|
|
$gameSystem._escapeCount = value;
|
|
},
|
|
},
|
|
saveCount: {
|
|
type: "uint",
|
|
get: function () {
|
|
return $gameSystem._saveCount;
|
|
},
|
|
set: function (value) {
|
|
$gameSystem._saveCount = value;
|
|
},
|
|
},
|
|
};
|
|
|
|
Window_DebugSystemValue.prototype.initialize = function (x, y) {
|
|
this._data = ["battleCount", "winCount", "escapeCount", "saveCount"];
|
|
|
|
var width = this.windowWidth();
|
|
var height = this.windowHeight();
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this.createContents();
|
|
this.refresh();
|
|
this.select(0);
|
|
this.hide();
|
|
};
|
|
|
|
Window_DebugSystemValue.prototype.windowWidth = function () {
|
|
return 360 + _standardPadding() * 2;
|
|
};
|
|
|
|
Window_DebugSystemValue.prototype.windowHeight = function () {
|
|
return this.fittingHeight(this.maxItems());
|
|
};
|
|
|
|
Window_DebugSystemValue.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugSystemValue.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
/**
|
|
* 選択されているシステム値を表すキー文字列を取得
|
|
*/
|
|
Window_DebugSystemValue.prototype.getKey = function () {
|
|
return this.getKeyByIndex(this.index());
|
|
};
|
|
|
|
/**
|
|
* インデックスを指定して、システム値を表すキー文字列を取得
|
|
*/
|
|
Window_DebugSystemValue.prototype.getKeyByIndex = function (index) {
|
|
if (!this._data || index < 0) {
|
|
return null;
|
|
}
|
|
|
|
return this._data[index];
|
|
};
|
|
|
|
/**
|
|
* 選択されているシステム値を取得
|
|
*/
|
|
Window_DebugSystemValue.prototype.item = function () {
|
|
return this.getItemByIndex(this.index());
|
|
};
|
|
|
|
/**
|
|
* インデックスを指定して、システム値を取得
|
|
*/
|
|
Window_DebugSystemValue.prototype.getItemByIndex = function (index) {
|
|
var key = this.getKeyByIndex(index);
|
|
if (key == null) {
|
|
return null;
|
|
}
|
|
|
|
return Window_DebugSystemValue.DataTypeConfig[key];
|
|
};
|
|
|
|
Window_DebugSystemValue.prototype.drawItem = function (index) {
|
|
var key = this.getKeyByIndex(index);
|
|
var item = this.getItemByIndex(index);
|
|
if (key == null || item == null) {
|
|
return;
|
|
}
|
|
|
|
var paramName = TextManager.DebugUtil[key];
|
|
var paramValue = item.get();
|
|
|
|
var nameWidth = 180;
|
|
var rect = _itemRectForText(this, index);
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(paramName, rect.x, rect.y, nameWidth);
|
|
this.resetTextColor();
|
|
var numWidth = rect.width - (rect.x + nameWidth);
|
|
this.drawText(paramValue, rect.x + nameWidth, rect.y, numWidth, "right");
|
|
};
|
|
|
|
Window_DebugSystemValue.prototype.refresh = function () {
|
|
this.contents.clear();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugWatch
|
|
//
|
|
// ウォッチ対象データの内容を表示するウィンドウ
|
|
|
|
function Window_DebugWatch() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugWatch.prototype = Object.create(Window_Base.prototype);
|
|
Window_DebugWatch.prototype.constructor = Window_DebugWatch;
|
|
|
|
Window_DebugWatch.prototype.initialize = function (x, y, width, height) {
|
|
this._isAutoPosition = false;
|
|
|
|
Window_Base.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this.opacity = 0;
|
|
this.openness = 0;
|
|
|
|
// Dimmer より手前に更新通知演出を出すため、先に更新通知スプライトを作成
|
|
this.createUpdateSprites();
|
|
this.showBackgroundDimmer();
|
|
this.refresh();
|
|
this.hide();
|
|
};
|
|
|
|
/**
|
|
* 更新通知スプライトの作成
|
|
*/
|
|
Window_DebugWatch.prototype.createUpdateSprites = function () {
|
|
this._updateSprites = [];
|
|
|
|
var lineHeight = this.lineHeight();
|
|
var padding = _standardPadding();
|
|
var count = Math.max(
|
|
Math.floor(
|
|
(Graphics.boxHeight - this.y - _standardPadding() * 2) / lineHeight
|
|
),
|
|
1
|
|
);
|
|
for (var i = 0; i < count; i++) {
|
|
var sprite = new Sprite_DebugWatchUpdate();
|
|
sprite.setup(
|
|
padding,
|
|
padding + i * lineHeight,
|
|
this.contentsWidth(),
|
|
lineHeight
|
|
);
|
|
this._updateSprites.push(sprite);
|
|
this.addChildToBack(sprite);
|
|
}
|
|
};
|
|
|
|
Window_DebugWatch.prototype.lineHeight = function () {
|
|
return (36 * Params.watchFontSize) / _standardFontSize();
|
|
};
|
|
|
|
/**
|
|
* ウォッチ対象を取得
|
|
*/
|
|
Window_DebugWatch.prototype.getWatchList = function () {
|
|
return $gameTemp.getDebugWatchItemList();
|
|
};
|
|
|
|
Window_DebugWatch.prototype.resetFontSettings = function () {
|
|
Window_Base.prototype.resetFontSettings.call(this);
|
|
|
|
this.contents.fontSize = Params.watchFontSize;
|
|
};
|
|
|
|
/**
|
|
* ウォッチ対象を取得
|
|
*/
|
|
Window_DebugWatch.prototype.setAutoPositionEnabled = function (isEnabled) {
|
|
this._isAutoPosition = !!isEnabled;
|
|
if (this._isAutoPosition) {
|
|
this.adjustWindowPosition();
|
|
}
|
|
};
|
|
|
|
Window_DebugWatch.prototype.update = function () {
|
|
Window_Base.prototype.update.call(this);
|
|
|
|
this.visible = this.getWatchList().length > 0;
|
|
this.openness = this.visible ? 255 : 0;
|
|
|
|
if ($gameTemp.isDebugWatchRefreshRequested()) {
|
|
this.refresh();
|
|
} else {
|
|
// 更新された項目を再描画
|
|
var list = this.getWatchList();
|
|
for (var i = 0; i < list.length; i++) {
|
|
if (list[i].checkUpdate()) {
|
|
this.updateItem(i);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* ウォッチ項目の更新
|
|
*/
|
|
Window_DebugWatch.prototype.updateItem = function (index) {
|
|
this.drawItem(index);
|
|
|
|
var sprite = this._updateSprites[index];
|
|
if (sprite) {
|
|
sprite.animate();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* ウィンドウサイズの調整
|
|
*/
|
|
Window_DebugWatch.prototype.adjustWindowSize = function () {
|
|
this.height = this.fittingHeight(Math.max(this.getWatchList().length, 1));
|
|
this.refreshDimmerBitmap();
|
|
};
|
|
|
|
/**
|
|
* ウィンドウ位置の調整
|
|
*/
|
|
Window_DebugWatch.prototype.adjustWindowPosition = function () {
|
|
if (!this._isAutoPosition) {
|
|
return;
|
|
}
|
|
|
|
switch (Params.watchWindowPosition) {
|
|
case Const.WatchWindowPosition.topLeft:
|
|
default:
|
|
this.x = 0;
|
|
this.y = -8;
|
|
break;
|
|
|
|
case Const.WatchWindowPosition.topRight:
|
|
this.x = Graphics.boxWidth - this.width;
|
|
this.y = -8;
|
|
break;
|
|
|
|
case Const.WatchWindowPosition.bottomLeft:
|
|
this.x = 0;
|
|
this.y = Graphics.boxHeight - this.height + 8;
|
|
break;
|
|
|
|
case Const.WatchWindowPosition.bottomRight:
|
|
this.x = Graphics.boxWidth - this.width;
|
|
this.y = Graphics.boxHeight - this.height + 8;
|
|
break;
|
|
}
|
|
};
|
|
|
|
Window_DebugWatch.prototype.itemRect = function (index) {
|
|
var rect = new Rectangle();
|
|
rect.width = this.contentsWidth();
|
|
rect.height = this.lineHeight();
|
|
rect.x = 0;
|
|
rect.y = index * rect.height;
|
|
return rect;
|
|
};
|
|
|
|
Window_DebugWatch.prototype.itemRectForText = function (index) {
|
|
// Window_Selectable の処理を流用
|
|
return _itemRectForText(this, index);
|
|
};
|
|
|
|
Window_DebugWatch.prototype.clearItem = function (index) {
|
|
// Window_Selectable の処理を流用
|
|
Window_Selectable.prototype.clearItem.call(this, index);
|
|
};
|
|
|
|
Window_DebugWatch.prototype.drawItem = function (index) {
|
|
var item = this.getWatchList()[index];
|
|
if (!item) {
|
|
return;
|
|
}
|
|
|
|
this.clearItem(index);
|
|
|
|
var rect = _itemRectForText(this, index);
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(
|
|
"[%1:%2] %3".format(item.typeSymbol, item.id.padZero(4), item.name),
|
|
rect.x,
|
|
rect.y,
|
|
rect.width
|
|
);
|
|
this.resetTextColor();
|
|
this.drawText(item.getDisp(), rect.x, rect.y, rect.width, "right");
|
|
};
|
|
|
|
Window_DebugWatch.prototype.drawAllItems = function () {
|
|
this.resetFontSettings();
|
|
for (var i = 0; i < this.getWatchList().length; i++) {
|
|
this.drawItem(i);
|
|
}
|
|
};
|
|
|
|
Window_DebugWatch.prototype.refresh = function () {
|
|
$gameTemp.clearDebugWatchRefreshRequest();
|
|
|
|
this.adjustWindowSize();
|
|
this.adjustWindowPosition();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugWatchItemList
|
|
//
|
|
// ウォッチ項目選択用ウィンドウ
|
|
|
|
function Window_DebugWatchItemList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugWatchItemList.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugWatchItemList.prototype.constructor = Window_DebugWatchItemList;
|
|
|
|
Window_DebugWatchItemList._lastIndex = 0;
|
|
|
|
Window_DebugWatchItemList.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this.refresh();
|
|
this.hide();
|
|
this.selectLast();
|
|
};
|
|
|
|
Window_DebugWatchItemList.prototype.lineHeight = function () {
|
|
return Window_Selectable.prototype.lineHeight.call(this) * 2;
|
|
};
|
|
|
|
Window_DebugWatchItemList.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugWatchItemList.prototype.selectLast = function () {
|
|
var index = Window_DebugWatchItemList._lastIndex;
|
|
this.select(index < this._data.length ? index : 0);
|
|
};
|
|
|
|
/**
|
|
* 選択されている項目を取得
|
|
*/
|
|
Window_DebugWatchItemList.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugWatchItemList.prototype.makeItemList = function () {
|
|
this._data = $gameTemp.getDebugWatchItemList().concat("add");
|
|
};
|
|
|
|
Window_DebugWatchItemList.prototype.drawItem = function (index) {
|
|
var rect = _itemRectForText(this, index);
|
|
rect.y -= rect.height / 4;
|
|
|
|
var item = this._data[index];
|
|
if (!item) {
|
|
return;
|
|
} else if (item === "add") {
|
|
this.drawText(
|
|
"( %1 )".format(TextManager.DebugUtil.addWatchItem),
|
|
rect.x + 32,
|
|
rect.y + rect.height / 4,
|
|
rect.width - 32,
|
|
rect.height / 2
|
|
);
|
|
return;
|
|
}
|
|
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(item.typename, rect.x, rect.y, rect.width, rect.height / 2);
|
|
this.resetTextColor();
|
|
this.drawText(
|
|
"%1: %2".format(item.id.padZero(4), item.name),
|
|
rect.x,
|
|
rect.y + rect.height / 2,
|
|
rect.width,
|
|
rect.height / 2
|
|
);
|
|
};
|
|
|
|
Window_DebugWatchItemList.prototype.refresh = function () {
|
|
this.makeItemList();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugWatchItemEdit
|
|
//
|
|
// ウォッチ項目編集用ウィンドウ
|
|
|
|
function Window_DebugWatchItemEdit() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugWatchItemEdit.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugWatchItemEdit.prototype.constructor = Window_DebugWatchItemEdit;
|
|
|
|
Window_DebugWatchItemEdit.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this._item = new DebugWatchItem();
|
|
this.setMode(Const.WatchItemEditMode.add);
|
|
this.openness = 0;
|
|
this.deactivate();
|
|
this.refresh();
|
|
};
|
|
|
|
Window_DebugWatchItemEdit.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
/**
|
|
* 編集している項目
|
|
*/
|
|
Window_DebugWatchItemEdit.prototype.item = function () {
|
|
return this._item;
|
|
};
|
|
|
|
/**
|
|
* 編集する項目の設定
|
|
*/
|
|
Window_DebugWatchItemEdit.prototype.setItem = function (item) {
|
|
if (item instanceof DebugWatchItem) {
|
|
this._item.copyFrom(item);
|
|
this.setMode(Const.WatchItemEditMode.edit);
|
|
} else {
|
|
// DebugWatchItem でなければ追加モード (初期状態はスイッチ 1 を選択)
|
|
this._item = new DebugWatchItem();
|
|
this._item.setupSwitch(1);
|
|
this.setMode(Const.WatchItemEditMode.add);
|
|
}
|
|
|
|
this.refresh();
|
|
this.select(0);
|
|
};
|
|
|
|
/**
|
|
* 編集モードの設定
|
|
*/
|
|
Window_DebugWatchItemEdit.prototype.setMode = function (mode) {
|
|
if (this._mode === mode) {
|
|
return;
|
|
}
|
|
|
|
this._data = ["target", "ok"];
|
|
|
|
this._mode = mode;
|
|
if (mode === Const.WatchItemEditMode.edit) {
|
|
this._data.push("remove");
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 編集モードの取得
|
|
*/
|
|
Window_DebugWatchItemEdit.prototype.getMode = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugWatchItemEdit.prototype.itemRect = function (index) {
|
|
var rect = Window_Selectable.prototype.itemRect.call(this, index);
|
|
|
|
// 先頭だけ 2 行サイズにする
|
|
if (index === 0) {
|
|
rect.height += this.lineHeight();
|
|
} else if (index > 0) {
|
|
rect.y += this.lineHeight();
|
|
}
|
|
|
|
return rect;
|
|
};
|
|
|
|
Window_DebugWatchItemEdit.prototype.drawItem = function (index) {
|
|
var rect = _itemRectForText(this, index);
|
|
var item = this._data[index];
|
|
switch (item) {
|
|
case "target":
|
|
this.drawItemType(rect.x, rect.y, rect.width);
|
|
this.drawItemId(rect.x, rect.y + this.lineHeight(), rect.width);
|
|
break;
|
|
|
|
case "ok":
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText("OK", rect.x + 40, rect.y, rect.width);
|
|
this.resetTextColor();
|
|
break;
|
|
|
|
case "remove":
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(
|
|
TextManager.DebugUtil.watchItemRemove,
|
|
rect.x + 40,
|
|
rect.y,
|
|
rect.width
|
|
);
|
|
this.resetTextColor();
|
|
break;
|
|
|
|
default:
|
|
// 何も表示しない
|
|
break;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 項目の種類を描画
|
|
*/
|
|
Window_DebugWatchItemEdit.prototype.drawItemType = function (x, y, width) {
|
|
this.changeTextColor(this.systemColor());
|
|
this.drawText(TextManager.DebugUtil.watchItemType, x, y, 120);
|
|
this.resetTextColor();
|
|
this.drawText(this._item.typename, x + 120, y, width - 120);
|
|
};
|
|
|
|
/**
|
|
* 項目の ID を描画
|
|
*/
|
|
Window_DebugWatchItemEdit.prototype.drawItemId = function (x, y, width) {
|
|
this.drawText(
|
|
"%1: %2".format(this._item.id.padZero(4), this._item.name),
|
|
x,
|
|
y,
|
|
width
|
|
);
|
|
};
|
|
|
|
Window_DebugWatchItemEdit.prototype.refresh = function () {
|
|
this.height = this.fittingHeight(this.maxItems() + 1);
|
|
this.createContents();
|
|
|
|
if (this._item) {
|
|
this.drawAllItems();
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Window_DebugTroopList
|
|
//
|
|
// 敵グループ選択用ウィンドウ
|
|
|
|
function Window_DebugTroopList() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
Window_DebugTroopList.prototype = Object.create(
|
|
Window_Selectable.prototype
|
|
);
|
|
Window_DebugTroopList.prototype.constructor = Window_DebugTroopList;
|
|
|
|
Window_DebugTroopList.prototype.initialize = function (
|
|
x,
|
|
y,
|
|
width,
|
|
height
|
|
) {
|
|
Window_Selectable.prototype.initialize.call(
|
|
this,
|
|
new Rectangle(x, y, width, height)
|
|
);
|
|
this._data = [];
|
|
this.refresh();
|
|
this.hide();
|
|
this.selectLast();
|
|
};
|
|
|
|
Window_DebugTroopList._lastIndex = 0;
|
|
|
|
Window_DebugTroopList.prototype.maxCols = function () {
|
|
return 1;
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.spacing = function () {
|
|
return 48;
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.maxItems = function () {
|
|
return this._data ? this._data.length : 1;
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.item = function () {
|
|
var index = this.index();
|
|
return this._data && index >= 0 ? this._data[index] : null;
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.includes = function (item) {
|
|
return item != null;
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.isEnabled = function (item) {
|
|
if (item == null) {
|
|
// ランダムエンカウント枠があれば有効
|
|
return $gameMap.encounterList().length > 0;
|
|
} else {
|
|
// 常に有効
|
|
return true;
|
|
}
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.makeItemList = function () {
|
|
this._data = $dataTroops.filter(function (item) {
|
|
return this.includes(item);
|
|
}, this);
|
|
|
|
// 先頭は現在マップからのランダム選定用 null
|
|
this._data.unshift(null);
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.selectLast = function () {
|
|
var index = this._data.indexOf(Window_DebugTroopList._lastIndex);
|
|
this.select(index >= 0 ? index : 0);
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.drawItem = function (index) {
|
|
var item = this._data[index];
|
|
|
|
this.changePaintOpacity(this.isEnabled(item));
|
|
this.resetTextColor();
|
|
|
|
var rect = _itemRectForText(this, index);
|
|
|
|
if (item == null) {
|
|
// ランダム選定
|
|
var text = "< %1 >".format(TextManager.DebugUtil.encounterRandom);
|
|
this.drawText(text, rect.x + 80, rect.y, rect.width);
|
|
} else {
|
|
// データベース
|
|
var text = "%1:%2".format(index.padZero(4), item.name);
|
|
this.drawText(text, rect.x, rect.y, rect.width);
|
|
}
|
|
|
|
this.changePaintOpacity(1);
|
|
};
|
|
|
|
Window_DebugTroopList.prototype.refresh = function () {
|
|
this.makeItemList();
|
|
this.createContents();
|
|
this.drawAllItems();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Scene_Map
|
|
|
|
var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
|
|
Scene_Map.prototype.createAllWindows = function () {
|
|
_Scene_Map_createAllWindows.call(this);
|
|
|
|
this.createDebugWatchWindow();
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウの作成
|
|
*/
|
|
Scene_Map.prototype.createDebugWatchWindow = function () {
|
|
if (!$gameTemp.isPlaytest()) {
|
|
return;
|
|
}
|
|
|
|
this._debugWatchWindow = new Window_DebugWatch(
|
|
0,
|
|
0,
|
|
Params.watchWindowWidth,
|
|
100
|
|
);
|
|
this._debugWatchWindow.setAutoPositionEnabled(true);
|
|
this._debugWatchWindow.show();
|
|
this.addWindow(this._debugWatchWindow);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Scene_Debug
|
|
|
|
var _Scene_Debug_create = Scene_Debug.prototype.create;
|
|
Scene_Debug.prototype.create = function () {
|
|
_Scene_Debug_create.call(this);
|
|
|
|
// 初期化時間短縮のため、汎用のウィンドウ以外は遅延初期化する
|
|
this.createUpperWindowLayer();
|
|
this.createTitleWindow();
|
|
this.createCommandWindow();
|
|
this.createHelpWindow();
|
|
this.createNumberWindow();
|
|
|
|
this.initializeWindowStates();
|
|
};
|
|
|
|
var _Scene_Debug_createHelpWindow = Scene_Debug.prototype.createHelpWindow;
|
|
Scene_Debug.prototype.createHelpWindow = function () {
|
|
_Scene_Debug_createHelpWindow.call(this);
|
|
|
|
this._helpWindow.y = this._titleWindow.height;
|
|
};
|
|
|
|
var _Scene_Debug_createEditWindow = Scene_Debug.prototype.createEditWindow;
|
|
Scene_Debug.prototype.createEditWindow = function () {
|
|
_Scene_Debug_createEditWindow.call(this);
|
|
|
|
// updateSwitch と updateVariable は都度置き換えて使うので一旦消す
|
|
this._editWindow.updateSwitch = this._editWindow.updateVariable =
|
|
function () {};
|
|
};
|
|
|
|
/**
|
|
* ウィンドウの初期パラメータ調整
|
|
*/
|
|
Scene_Debug.prototype.initializeWindowStates = function () {
|
|
// タイトルウィンドウ分の高さ調整
|
|
var wy = this._titleWindow.height;
|
|
this._rangeWindow.y = wy;
|
|
this._rangeWindow.height -= wy;
|
|
this._editWindow.y = wy;
|
|
this._editWindow.height = this._rangeWindow.height;
|
|
/*
|
|
this._debugHelpWindow.y = wy + this._editWindow.height;
|
|
this._debugHelpWindow.height = Graphics.boxHeight - this._debugHelpWindow.y;
|
|
this._debugHelpWindow.resetFontSettings = function()
|
|
{
|
|
Window_Base.prototype.resetFontSettings.call(this);
|
|
|
|
this.contents.fontSize *= 0.75;
|
|
};
|
|
*/
|
|
|
|
// 表示状態で作成されるが、初期状態では非表示にしておくウィンドウ群
|
|
this._rangeWindow.deactivate();
|
|
this._rangeWindow.hide();
|
|
this._editWindow.hide();
|
|
this._debugHelpWindow.hide();
|
|
this._helpWindow.hide();
|
|
};
|
|
|
|
/**
|
|
* 上層ウィンドウレイヤーの作成
|
|
*/
|
|
Scene_Debug.prototype.createUpperWindowLayer = function () {
|
|
var width = Graphics.boxWidth;
|
|
var height = Graphics.boxHeight;
|
|
var x = (Graphics.width - width) / 2;
|
|
var y = (Graphics.height - height) / 2;
|
|
this._upperWindowLayer = new WindowLayer();
|
|
this._upperWindowLayer.x = x;
|
|
this._upperWindowLayer.y = y;
|
|
this._upperWindowLayer.width = width;
|
|
this._upperWindowLayer.height = height;
|
|
//this._upperWindowLayer.move(x, y, width, height);
|
|
this.addChild(this._upperWindowLayer);
|
|
|
|
if (KMS.imported["CursorAnimation"]) {
|
|
this._animationCursor.addWindowLayer(this._upperWindowLayer);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* タイトルウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createTitleWindow = function () {
|
|
this._titleWindow = new Window_DebugTitle(Graphics.boxWidth, 1);
|
|
this._titleWindow.setText(TextManager.DebugUtil.sceneTitle);
|
|
this.addWindow(this._titleWindow);
|
|
};
|
|
|
|
/**
|
|
* コマンドウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createCommandWindow = function () {
|
|
var wx = 32;
|
|
var wy = this._titleWindow.height + 32;
|
|
this._commandWindow = new Window_DebugCommand(wx, wy);
|
|
this._commandWindow.setHandler(
|
|
"itemNumber",
|
|
this.onSelectItem.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"actorParam",
|
|
this.onSelectActor.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"member",
|
|
this.onSelectPartyMember.bind(this)
|
|
);
|
|
this._commandWindow.setHandler("reloadMap", this.onReloadMap.bind(this));
|
|
this._commandWindow.setHandler(
|
|
"loadDatabase",
|
|
this.onReloadDatabase.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"transfer",
|
|
this.onTransferMapStart.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"switchVar",
|
|
this.onSwitchVarStart.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"selfSwitch",
|
|
this.onSelfSwitchMapStart.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"systemValue",
|
|
this.onSelectSystemValue.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"watchWindow",
|
|
this.onWatchWindow.bind(this)
|
|
);
|
|
this._commandWindow.setHandler(
|
|
"encounter",
|
|
this.onForceEncounter.bind(this)
|
|
);
|
|
//this._commandWindow.setHandler('dispPassage', this.onDispPassage.bind(this));
|
|
this._commandWindow.setHandler("cancel", this.popScene.bind(this));
|
|
|
|
// 追加コマンド
|
|
KMS.DebugUtil.debugCommands.forEach(function (command) {
|
|
this._commandWindow.setHandler(command.id, command.onSelect.bind(this));
|
|
}, this);
|
|
|
|
this.addWindow(this._commandWindow);
|
|
};
|
|
|
|
/**
|
|
* アイテムウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createItemWindow = function () {
|
|
if (this._itemWindow) {
|
|
return;
|
|
}
|
|
|
|
var wy = this._helpWindow.y + this._helpWindow.height;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._itemWindow = new Window_DebugItemList(0, wy, Graphics.boxWidth, wh);
|
|
this._itemWindow.setHelpWindow(this._helpWindow);
|
|
this._itemWindow.setHandler("ok", this.onItemOk.bind(this));
|
|
this._itemWindow.setHandler("cancel", this.onItemCancel.bind(this));
|
|
this.addWindow(this._itemWindow);
|
|
};
|
|
|
|
/**
|
|
* アクターパラメータ編集ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createActorParamWindow = function () {
|
|
if (this._actorParamWindow) {
|
|
return;
|
|
}
|
|
|
|
var wx = 360;
|
|
var wy = this._titleWindow.height;
|
|
var ww = Graphics.boxWidth - wx;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._actorParamWindow = new Window_DebugActorParam(wx, wy, ww, wh);
|
|
this._actorParamWindow.setHandler("ok", this.onActorParamOk.bind(this));
|
|
this._actorParamWindow.setHandler(
|
|
"cancel",
|
|
this.onActorParamCancel.bind(this)
|
|
);
|
|
this.addWindow(this._actorParamWindow);
|
|
|
|
if (this._actorListWindow) {
|
|
// 先に ActorListWindow を作ったときに腐らない用
|
|
this._actorListWindow.setStatusWindow(this._actorParamWindow);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* アクター一覧ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createActorListWindow = function () {
|
|
if (this._actorListWindow) {
|
|
return;
|
|
}
|
|
|
|
var wy = this._titleWindow.height;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._actorListWindow = new Window_DebugActorList(0, wy, 360, wh);
|
|
this._actorListWindow.setHandler("ok", this.onActorOk.bind(this));
|
|
this._actorListWindow.setHandler("cancel", this.onActorCancel.bind(this));
|
|
this._actorListWindow.setStatusWindow(this._actorParamWindow);
|
|
this.addWindow(this._actorListWindow);
|
|
};
|
|
|
|
/**
|
|
* アクタースキル編集ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createActorSkillWindow = function () {
|
|
if (this._actorSkillWindow) {
|
|
return;
|
|
}
|
|
|
|
var wy = this._helpWindow.y + this._helpWindow.height;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._actorSkillWindow = new Window_DebugActorSkill(
|
|
0,
|
|
wy,
|
|
Graphics.boxWidth,
|
|
wh
|
|
);
|
|
this._actorSkillWindow.setHelpWindow(this._helpWindow);
|
|
this._actorSkillWindow.setHandler("ok", this.onActorSkillOk.bind(this));
|
|
this._actorSkillWindow.setHandler(
|
|
"cancel",
|
|
this.onActorSkillCancel.bind(this)
|
|
);
|
|
this.addWindow(this._actorSkillWindow);
|
|
};
|
|
|
|
/**
|
|
* パーティメンバー用ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createPartyWindow = function () {
|
|
if (this._activePartyWindow) {
|
|
return;
|
|
}
|
|
|
|
var wy = this._titleWindow.height;
|
|
var ww = Graphics.boxWidth / 2;
|
|
this._activePartyTitleWindow = new Window_DebugTitle(ww, 1);
|
|
this._activePartyTitleWindow.y = wy;
|
|
this._activePartyTitleWindow.setText(TextManager.DebugUtil.activeParty);
|
|
this.addWindow(this._activePartyTitleWindow);
|
|
|
|
this._reservePartyTitleWindow = new Window_DebugTitle(ww, 1);
|
|
this._reservePartyTitleWindow.x = ww;
|
|
this._reservePartyTitleWindow.y = wy;
|
|
this._reservePartyTitleWindow.setText(TextManager.DebugUtil.reserveParty);
|
|
this.addWindow(this._reservePartyTitleWindow);
|
|
|
|
wy += this._activePartyTitleWindow.height;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._activePartyWindow = new Window_DebugActivePartyList(0, wy, ww, wh);
|
|
this._activePartyWindow.setHandler("ok", this.onActivePartyOk.bind(this));
|
|
this._activePartyWindow.setHandler(
|
|
"formation",
|
|
this.onActivePartyFormationStart.bind(this)
|
|
);
|
|
this._activePartyWindow.setHandler(
|
|
"cancel",
|
|
this.onActivePartyCancel.bind(this)
|
|
);
|
|
this.addWindow(this._activePartyWindow);
|
|
|
|
this._reservePartyWindow = new Window_DebugReservePartyList(
|
|
ww,
|
|
wy,
|
|
ww,
|
|
wh
|
|
);
|
|
this._reservePartyWindow.setHandler(
|
|
"ok",
|
|
this.onReservePartyOk.bind(this)
|
|
);
|
|
this._reservePartyWindow.setHandler(
|
|
"cancel",
|
|
this.onReservePartyCancel.bind(this)
|
|
);
|
|
this.addWindow(this._reservePartyWindow);
|
|
};
|
|
|
|
/**
|
|
* マップ一覧ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createMapListWindow = function () {
|
|
if (this._mapListWindow) {
|
|
return;
|
|
}
|
|
|
|
// OK / キャンセルハンドラはコマンドに応じて変わるので、ここでは設定しない
|
|
var wy = this._titleWindow.height;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._mapListWindow = new Window_DebugMapList(0, wy, 360, wh);
|
|
this.addWindow(this._mapListWindow);
|
|
};
|
|
|
|
/**
|
|
* タイルウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createMapTileWindow = function () {
|
|
if (this._mapTileWindow) {
|
|
return;
|
|
}
|
|
|
|
var wx = 360;
|
|
var wy = this._titleWindow.height;
|
|
var ww = Graphics.boxWidth - wx;
|
|
this._mapTilePositionWindow = new Window_DebugMapTilePosition(wx, wy, ww);
|
|
this.addWindow(this._mapTilePositionWindow);
|
|
|
|
wy = this._mapTilePositionWindow.y + this._mapTilePositionWindow.height;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._mapTileWindow = new Window_DebugMapTile(wx, wy, ww, wh);
|
|
this._mapTileWindow.setHandler("ok", this.onTransferMapTileOk.bind(this));
|
|
this._mapTileWindow.setHandler(
|
|
"cancel",
|
|
this.onTransferMapTileCancel.bind(this)
|
|
);
|
|
this._mapTileWindow.setPositionWindow(this._mapTilePositionWindow);
|
|
this.addWindow(this._mapTileWindow);
|
|
};
|
|
|
|
/**
|
|
* イベント一覧ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createEventListWindow = function () {
|
|
if (this._eventListWindow) {
|
|
return;
|
|
}
|
|
|
|
var wx = 360;
|
|
var wy = this._titleWindow.height;
|
|
var ww = Graphics.boxWidth - wx;
|
|
this._eventListWindow = new Window_DebugEventList(wx, wy, ww, 64);
|
|
var wh = Graphics.boxHeight - wy - this._eventListWindow.fittingHeight(4);
|
|
this._eventListWindow.height = wh;
|
|
this._eventListWindow.setHandler(
|
|
"ok",
|
|
this.onSelfSwitchEventListOk.bind(this)
|
|
);
|
|
this._eventListWindow.setHandler(
|
|
"cancel",
|
|
this.onSelfSwitchEventListCancel.bind(this)
|
|
);
|
|
this.addWindow(this._eventListWindow);
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチ一覧ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createSelfSwitchListWindow = function () {
|
|
if (this._selfSwitchListWindow) {
|
|
return;
|
|
}
|
|
|
|
var wx = this._eventListWindow.x;
|
|
var wy = this._eventListWindow.y + this._eventListWindow.height;
|
|
var ww = this._eventListWindow.width;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._selfSwitchListWindow = new Window_DebugSelfSwitchList(
|
|
wx,
|
|
wy,
|
|
ww,
|
|
wh
|
|
);
|
|
this._selfSwitchListWindow.setHandler(
|
|
"ok",
|
|
this.onSelfSwitchListOk.bind(this)
|
|
);
|
|
this._selfSwitchListWindow.setHandler(
|
|
"cancel",
|
|
this.onSelfSwitchListCancel.bind(this)
|
|
);
|
|
this.addWindow(this._selfSwitchListWindow);
|
|
|
|
this._eventListWindow.setSwitchListWindow(this._selfSwitchListWindow);
|
|
};
|
|
|
|
/**
|
|
* システム値ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createSystemValueWindow = function () {
|
|
if (this._systemValueWindow) {
|
|
return;
|
|
}
|
|
|
|
var wy = this._titleWindow.height + 32;
|
|
this._systemValueWindow = new Window_DebugSystemValue(0, wy);
|
|
this._systemValueWindow.x =
|
|
(Graphics.boxWidth - this._systemValueWindow.width) / 2;
|
|
this._systemValueWindow.setHandler("ok", this.onSystemValueOk.bind(this));
|
|
this._systemValueWindow.setHandler(
|
|
"cancel",
|
|
this.onSystemValueCancel.bind(this)
|
|
);
|
|
this.addWindow(this._systemValueWindow);
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createWatchWindow = function () {
|
|
if (this._watchWindow) {
|
|
return;
|
|
}
|
|
|
|
var wx = 0;
|
|
var wy = this._titleWindow.height;
|
|
var ww = Graphics.boxWidth / 2;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._watchWindow = new Window_DebugWatch(wx, wy, ww, wh);
|
|
|
|
// ウォッチ項目リストウィンドウより前に入れる
|
|
if (this._watchEditWindow) {
|
|
var index = this._windowLayer.getChildIndex(this._watchEditWindow);
|
|
this._windowLayer.addChildAt(this._watchWindow, index);
|
|
} else {
|
|
this.addWindow(this._watchWindow);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウを破棄
|
|
*/
|
|
Scene_Debug.prototype.destroyWatchWindow = function () {
|
|
if (!this._watchWindow) {
|
|
return;
|
|
}
|
|
|
|
this._windowLayer.removeChild(this._watchWindow);
|
|
delete this._watchWindow;
|
|
};
|
|
|
|
/**
|
|
* ウォッチ項目リストウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createWatchListWindow = function () {
|
|
if (this._watchListWindow) {
|
|
return;
|
|
}
|
|
|
|
var wx = Graphics.boxWidth / 2;
|
|
var wy = this._titleWindow.height;
|
|
var ww = Graphics.boxWidth - wx;
|
|
var wh = Graphics.boxHeight - wy;
|
|
this._watchListWindow = new Window_DebugWatchItemList(wx, wy, ww, wh);
|
|
this._watchListWindow.setHandler("ok", this.onWatchListOk.bind(this));
|
|
this._watchListWindow.setHandler(
|
|
"cancel",
|
|
this.onWatchListCancel.bind(this)
|
|
);
|
|
this.addWindow(this._watchListWindow);
|
|
};
|
|
|
|
/**
|
|
* ウォッチ項目編集ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createWatchEditWindow = function () {
|
|
if (this._watchEditWindow) {
|
|
return;
|
|
}
|
|
|
|
var ww = (Graphics.boxWidth * 3) / 5;
|
|
var wx = (Graphics.boxWidth - ww) / 2;
|
|
var wy = this._titleWindow.height + 32;
|
|
var wh = Graphics.boxHeight - wy - 32;
|
|
this._watchEditWindow = new Window_DebugWatchItemEdit(wx, wy, ww, wh);
|
|
this._watchEditWindow.setHandler("ok", this.onWatchEditOk.bind(this));
|
|
this._watchEditWindow.setHandler(
|
|
"cancel",
|
|
this.onWatchEditCancel.bind(this)
|
|
);
|
|
this.addWindow(this._watchEditWindow);
|
|
};
|
|
|
|
/**
|
|
* 敵グループウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createTroopWindow = function () {
|
|
if (this._troopWindow) {
|
|
return;
|
|
}
|
|
|
|
var wx = 32;
|
|
var wy = this._titleWindow.height + 32;
|
|
var ww = Graphics.boxWidth - 64;
|
|
var wh = Graphics.boxHeight - wy - 32;
|
|
this._troopWindow = new Window_DebugTroopList(wx, wy, ww, wh);
|
|
this._troopWindow.setHandler("ok", this.onTroopOk.bind(this));
|
|
this._troopWindow.setHandler("cancel", this.onTroopCancel.bind(this));
|
|
this.addWindow(this._troopWindow);
|
|
};
|
|
|
|
/**
|
|
* 数値入力ウィンドウを作成
|
|
*/
|
|
Scene_Debug.prototype.createNumberWindow = function () {
|
|
this._numberWindow = new Window_DebugNumberInput();
|
|
this._upperWindowLayer.addChild(this._numberWindow);
|
|
};
|
|
|
|
/**
|
|
* シーンの準備完了判定
|
|
*/
|
|
var _Scene_Debug_isReady = Scene_Debug.prototype.isReady;
|
|
Scene_Debug.prototype.isReady = function () {
|
|
return (
|
|
_Scene_Debug_isReady.call(this) &&
|
|
DataManager.isDatabaseLoaded() &&
|
|
DataManager.isMapLoaded() &&
|
|
(!this._isLoadingTemporallyMap ||
|
|
DataManager.isKmsTemporallyMapLoaded())
|
|
);
|
|
};
|
|
|
|
/**
|
|
* シーンの更新
|
|
*/
|
|
var _Scene_Debug_update = Scene_Debug.prototype.update;
|
|
Scene_Debug.prototype.update = function () {
|
|
// 読み込み中は更新しない
|
|
if (!this.isReady()) {
|
|
return;
|
|
}
|
|
|
|
// ロード完了時の処理
|
|
if (this._loadCompleteHandler) {
|
|
this._loadCompleteHandler.call(this);
|
|
delete this._loadCompleteHandler;
|
|
}
|
|
|
|
_Scene_Debug_update.call(this);
|
|
|
|
// update 後の処理
|
|
if (this._postUpdateProc) {
|
|
this._postUpdateProc.call(this);
|
|
delete this._postUpdateProc;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* メインコマンドウィンドウをアクティブ化
|
|
*/
|
|
Scene_Debug.prototype.activateCommandWindow = function () {
|
|
this._commandWindow.show();
|
|
this._commandWindow.activate();
|
|
this._titleWindow.setText(TextManager.DebugUtil.sceneTitle);
|
|
};
|
|
|
|
/**
|
|
* アイテム選択の実行
|
|
*/
|
|
Scene_Debug.prototype.onSelectItem = function () {
|
|
this.createItemWindow();
|
|
|
|
this._commandWindow.hide();
|
|
this._helpWindow.show();
|
|
this._itemWindow.show();
|
|
this._itemWindow.activate();
|
|
this._titleWindow.setText(TextManager.DebugUtil.itemNumber);
|
|
};
|
|
|
|
/**
|
|
* アイテムの決定
|
|
*/
|
|
Scene_Debug.prototype.onItemOk = function () {
|
|
this._numberWindow.setHandler(
|
|
"cancel",
|
|
this.onItemNumberCancel.bind(this)
|
|
);
|
|
|
|
var item = this._itemWindow.item();
|
|
var number = $gameParty.numItems(item);
|
|
var digits = $gameParty.maxItems(item).toString().length;
|
|
this._numberWindow.setCaption(item);
|
|
this._numberWindow.setAllowNegative(false);
|
|
this._numberWindow.start(number, digits, this.onItemNumberOk.bind(this));
|
|
};
|
|
|
|
/**
|
|
* アイテム選択のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onItemCancel = function () {
|
|
this._helpWindow.hide();
|
|
this._itemWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* アイテム個数入力の決定
|
|
*/
|
|
Scene_Debug.prototype.onItemNumberOk = function (number) {
|
|
// アイテム所持数の設定 (Game_Party に対して呼ぶ)
|
|
var setItemNumber = function (item, number) {
|
|
var currNumber = this.numItems(item);
|
|
var amount = number - currNumber;
|
|
this.gainItem(item, amount, false);
|
|
};
|
|
|
|
setItemNumber.call($gameParty, this._itemWindow.item(), number);
|
|
|
|
this._itemWindow.refresh();
|
|
this.onItemNumberCancel();
|
|
};
|
|
|
|
/**
|
|
* アイテム個数入力のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onItemNumberCancel = function () {
|
|
this._numberWindow.close();
|
|
this._itemWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* アクター選択の実行
|
|
*/
|
|
Scene_Debug.prototype.onSelectActor = function () {
|
|
this.createActorParamWindow();
|
|
this.createActorListWindow();
|
|
this.createActorSkillWindow();
|
|
|
|
this._commandWindow.hide();
|
|
this._actorListWindow.show();
|
|
this._actorParamWindow.show();
|
|
this._actorListWindow.activate();
|
|
this._titleWindow.setText(TextManager.DebugUtil.actorParam);
|
|
};
|
|
|
|
/**
|
|
* アクターの決定
|
|
*/
|
|
Scene_Debug.prototype.onActorOk = function () {
|
|
this._actorParamWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* アクター選択のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onActorCancel = function () {
|
|
this._actorListWindow.hide();
|
|
this._actorParamWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* アクターパラメータの決定
|
|
*/
|
|
Scene_Debug.prototype.onActorParamOk = function () {
|
|
var actor = this._actorListWindow.item();
|
|
var param = this._actorParamWindow.item();
|
|
|
|
var caption;
|
|
var number;
|
|
var digits;
|
|
var negative;
|
|
switch (param) {
|
|
case "level":
|
|
{
|
|
caption = TextManager.level;
|
|
number = actor.level;
|
|
digits = actor.maxLevel().toString().length;
|
|
negative = false;
|
|
}
|
|
break;
|
|
|
|
case "skill":
|
|
{
|
|
// スキル編集ウィンドウに切り替え
|
|
this._actorListWindow.hide();
|
|
this._actorParamWindow.hide();
|
|
this._helpWindow.show();
|
|
this._actorSkillWindow.setActor(actor);
|
|
this._actorSkillWindow.selectLast();
|
|
this._actorSkillWindow.show();
|
|
this._actorSkillWindow.activate();
|
|
}
|
|
return;
|
|
|
|
default:
|
|
{
|
|
var paramId = this._actorParamWindow.paramId();
|
|
caption = TextManager.param(paramId) + "+";
|
|
number = originalParamPlus.call(actor, paramId);
|
|
digits = 4;
|
|
negative = true;
|
|
}
|
|
break;
|
|
}
|
|
|
|
this._numberWindow.setCaption(caption);
|
|
this._numberWindow.setAllowNegative(negative);
|
|
this._numberWindow.setHandler(
|
|
"cancel",
|
|
this.onActorParamInputCancel.bind(this)
|
|
);
|
|
this._numberWindow.start(
|
|
number,
|
|
digits,
|
|
this.onActorParamInputOk.bind(this)
|
|
);
|
|
};
|
|
|
|
/**
|
|
* アクターパラメータのキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onActorParamCancel = function () {
|
|
this._actorListWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* アクターパラメータ入力の決定
|
|
*/
|
|
Scene_Debug.prototype.onActorParamInputOk = function (number) {
|
|
var actor = this._actorListWindow.item();
|
|
var param = this._actorParamWindow.item();
|
|
|
|
if (param === "level") {
|
|
if (actor.level !== number) {
|
|
actor.changeLevel(number, false);
|
|
}
|
|
} else {
|
|
// パラメータの設定 (Game_Actor に対して呼ぶ)
|
|
var setParameter = function (paramId, value) {
|
|
var currValue = originalParamPlus.call(this, paramId);
|
|
var amount = value - currValue;
|
|
this.addParam(paramId, amount);
|
|
};
|
|
|
|
var paramId = this._actorParamWindow.paramId();
|
|
setParameter.call(actor, paramId, number);
|
|
}
|
|
|
|
this._actorParamWindow.refresh();
|
|
this.onActorParamInputCancel();
|
|
};
|
|
|
|
/**
|
|
* アクターパラメータ入力のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onActorParamInputCancel = function () {
|
|
this._numberWindow.close();
|
|
this._actorParamWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* アクタースキル編集の決定処理
|
|
*/
|
|
Scene_Debug.prototype.onActorSkillOk = function () {
|
|
// 選択したスキルの習得状態を切り替え
|
|
var skill = this._actorSkillWindow.item();
|
|
var actor = this._actorListWindow.item();
|
|
if (actor.isLearnedSkill(skill.id)) {
|
|
actor.forgetSkill(skill.id);
|
|
} else {
|
|
actor.learnSkill(skill.id);
|
|
}
|
|
|
|
this._actorSkillWindow.redrawItem(this._actorSkillWindow.index());
|
|
this._actorSkillWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* アクタースキル編集のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onActorSkillCancel = function () {
|
|
this._helpWindow.hide();
|
|
this._actorSkillWindow.hide();
|
|
this._actorListWindow.show();
|
|
this._actorParamWindow.refresh();
|
|
this._actorParamWindow.show();
|
|
this._actorParamWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* パーティ編成の実行
|
|
*/
|
|
Scene_Debug.prototype.onSelectPartyMember = function () {
|
|
this.createPartyWindow();
|
|
|
|
this._commandWindow.hide();
|
|
this._activePartyTitleWindow.show();
|
|
this._reservePartyTitleWindow.show();
|
|
this._activePartyWindow.show();
|
|
this._activePartyWindow.activate();
|
|
this._activePartyWindow.select(0);
|
|
this._reservePartyWindow.show();
|
|
this._reservePartyWindow.select(0);
|
|
this._titleWindow.setText(TextManager.DebugUtil.member);
|
|
};
|
|
|
|
/**
|
|
* パーティ編成: パーティ内アクター選択の決定
|
|
*/
|
|
Scene_Debug.prototype.onActivePartyOk = function () {
|
|
this._reservePartyWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* パーティ編成: パーティ内アクター選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onActivePartyCancel = function () {
|
|
this._activePartyTitleWindow.hide();
|
|
this._reservePartyTitleWindow.hide();
|
|
this._activePartyWindow.hide();
|
|
this._reservePartyWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* パーティ編成: パーティ内アクター並び替えの開始
|
|
*/
|
|
Scene_Debug.prototype.onActivePartyFormationStart = function () {
|
|
this._activePartyWindow.setPendingIndex(this._activePartyWindow.index());
|
|
this._activePartyWindow.setFormationChangeMode(true);
|
|
this._activePartyWindow.refresh();
|
|
this._activePartyWindow.setHandler(
|
|
"ok",
|
|
this.onActivePartyFormationOk.bind(this)
|
|
);
|
|
this._activePartyWindow.setHandler(
|
|
"formation",
|
|
this.onActivePartyFormationOk.bind(this)
|
|
);
|
|
this._activePartyWindow.setHandler(
|
|
"cancel",
|
|
this.onActivePartyFormationCancel.bind(this)
|
|
);
|
|
};
|
|
|
|
/**
|
|
* パーティ編成: パーティ内アクター並び替えの決定
|
|
*/
|
|
Scene_Debug.prototype.onActivePartyFormationOk = function () {
|
|
$gameParty.swapOrder(
|
|
this._activePartyWindow.getPendingIndex(),
|
|
this._activePartyWindow.index()
|
|
);
|
|
|
|
this._activePartyWindow.setFormationChangeMode(false);
|
|
this._activePartyWindow.refresh();
|
|
this._activePartyWindow.setHandler("ok", this.onActivePartyOk.bind(this));
|
|
this._activePartyWindow.setHandler(
|
|
"formation",
|
|
this.onActivePartyFormationStart.bind(this)
|
|
);
|
|
this._activePartyWindow.setHandler(
|
|
"cancel",
|
|
this.onActivePartyCancel.bind(this)
|
|
);
|
|
};
|
|
|
|
/**
|
|
* パーティ編成: パーティ内アクター並び替えのキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onActivePartyFormationCancel = function () {
|
|
this._activePartyWindow.setFormationChangeMode(false);
|
|
this._activePartyWindow.refresh();
|
|
this._activePartyWindow.setHandler("ok", this.onActivePartyOk.bind(this));
|
|
this._activePartyWindow.setHandler(
|
|
"formation",
|
|
this.onActivePartyFormationStart.bind(this)
|
|
);
|
|
this._activePartyWindow.setHandler(
|
|
"cancel",
|
|
this.onActivePartyCancel.bind(this)
|
|
);
|
|
this._activePartyWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* パーティ編成: 待機メンバー選択の決定
|
|
*/
|
|
Scene_Debug.prototype.onReservePartyOk = function () {
|
|
// 選択したアクター同士を入れ替える
|
|
var inActor = this._reservePartyWindow.item();
|
|
var outActor = this._activePartyWindow.item();
|
|
replaceActor.call($gameParty, inActor, outActor);
|
|
|
|
this._activePartyWindow.refresh();
|
|
this._activePartyWindow.activate();
|
|
this._reservePartyWindow.refresh();
|
|
};
|
|
|
|
/**
|
|
* パーティ編成: 待機メンバー選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onReservePartyCancel = function () {
|
|
this._activePartyWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* マップリロードの実行
|
|
*/
|
|
Scene_Debug.prototype.onReloadMap = function () {
|
|
$gameMap.setup($gameMap._mapId);
|
|
this.popScene();
|
|
|
|
// XXX: 入り直しせずにリロードする?
|
|
//DataManager.loadMapData();
|
|
//$gameMap._tilesetId = $dataMap.tilesetId;
|
|
//$gameMap.refereshVehicles();
|
|
//$gameMap.setupParallax();
|
|
//$gameMap.setupBattleback();
|
|
//$gameMap.refresh();
|
|
};
|
|
|
|
/**
|
|
* データベースリロードの実行
|
|
*/
|
|
Scene_Debug.prototype.onReloadDatabase = function () {
|
|
// null 参照回避のため、update 完了後にリロードする
|
|
this._postUpdateProc = function () {
|
|
DataManager.loadDatabase();
|
|
};
|
|
|
|
// データベースロード完了後の処理
|
|
this._loadCompleteHandler = function () {
|
|
// ウォッチ項目の再構築
|
|
$gameTemp.getDebugWatchItemList().forEach(function (item) {
|
|
item.refresh();
|
|
});
|
|
|
|
function reload(window) {
|
|
if (window) {
|
|
window.refresh();
|
|
}
|
|
}
|
|
|
|
// データベースに依存しているウィンドウを再描画
|
|
reload(this._itemWindow);
|
|
reload(this._actorListWindow);
|
|
reload(this._actorParamWindow);
|
|
reload(this._activePartyWindow);
|
|
reload(this._reservePartyWindow);
|
|
reload(this._mapListWindow);
|
|
reload(this._rangeWindow);
|
|
reload(this._editWindow);
|
|
reload(this._watchListWindow);
|
|
reload(this._troopWindow);
|
|
|
|
// 追加コマンド
|
|
KMS.DebugUtil.debugCommands.forEach(function (command) {
|
|
command.onReloadDatabase.call(this);
|
|
}, this);
|
|
|
|
// 追加処理
|
|
KMS.DebugUtil.databaseReloadHandlers.forEach(function (handler) {
|
|
handler.call(window);
|
|
});
|
|
|
|
this._commandWindow.activate();
|
|
};
|
|
};
|
|
|
|
/**
|
|
* 場所移動コマンドの実行
|
|
*/
|
|
Scene_Debug.prototype.onTransferMapStart = function () {
|
|
this.createMapListWindow();
|
|
this.createMapTileWindow();
|
|
|
|
// マップ一覧のハンドラを設定
|
|
this._mapListWindow.setHandler("ok", this.onTransferMapListOk.bind(this));
|
|
this._mapListWindow.setHandler(
|
|
"cancel",
|
|
this.onTransferMapListCancel.bind(this)
|
|
);
|
|
|
|
this._commandWindow.hide();
|
|
this._mapListWindow.show();
|
|
this._mapTilePositionWindow.show();
|
|
this._mapTileWindow.show();
|
|
this._mapListWindow.selectLast();
|
|
this._mapListWindow.activate();
|
|
this._titleWindow.setText(TextManager.DebugUtil.transfer);
|
|
};
|
|
|
|
/**
|
|
* 場所移動: マップの決定
|
|
*/
|
|
Scene_Debug.prototype.onTransferMapListOk = function () {
|
|
// null 参照回避のため、update 完了後にマップを読み込む
|
|
this._postUpdateProc = function () {
|
|
var map = this._mapListWindow.item();
|
|
DataManager.loadMapData(map.id);
|
|
};
|
|
|
|
// マップデータ読み込み完了時の処理
|
|
this._loadCompleteHandler = function () {
|
|
debuglog("DataManager.loadMapData finished");
|
|
|
|
// update 完了後にタイルセットを読み込む
|
|
this._postUpdateProc = function () {
|
|
var map = this._mapListWindow.item();
|
|
this._mapTileWindow.setupMap(map.id);
|
|
this._mapTileWindow.loadTileset();
|
|
|
|
// タイルセットの読み込み完了後に表示を反映
|
|
this._loadCompleteHandler = function () {
|
|
debuglog("Window_DebugMapTile.loadTileset finished");
|
|
|
|
this._mapTileWindow.refreshTileset();
|
|
this._mapTileWindow.activate();
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
/**
|
|
* 場所移動: マップ選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onTransferMapListCancel = function () {
|
|
this._mapListWindow.hide();
|
|
this._mapTileWindow.hide();
|
|
this._mapTilePositionWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* 場所移動: タイルの決定
|
|
*/
|
|
Scene_Debug.prototype.onTransferMapTileOk = function () {
|
|
// 移動先を設定
|
|
var info = this._mapTileWindow.getTransferInfo();
|
|
$gamePlayer.reserveTransfer(
|
|
info.mapId,
|
|
info.x,
|
|
info.y,
|
|
info.d,
|
|
info.fadeType
|
|
);
|
|
|
|
// マップに戻る
|
|
this.popScene();
|
|
};
|
|
|
|
/**
|
|
* 場所移動: タイル選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onTransferMapTileCancel = function () {
|
|
this._mapTileWindow.setupMap(0);
|
|
this._mapListWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* スイッチ・変数コマンドの実行
|
|
*/
|
|
Scene_Debug.prototype.onSwitchVarStart = function () {
|
|
// ハンドラの切り替え
|
|
this._rangeWindow.setHandler("cancel", this.onSwitchVarCancel.bind(this));
|
|
this._editWindow.setHandler("ok", this.onSwitchVarOk.bind(this));
|
|
|
|
this._commandWindow.hide();
|
|
this._rangeWindow.show();
|
|
this._editWindow.show();
|
|
this._rangeWindow.activate();
|
|
this.refreshHelpWindow();
|
|
this._titleWindow.setText(TextManager.DebugUtil.switchVar);
|
|
};
|
|
|
|
/**
|
|
* スイッチ・変数範囲ウィンドウのキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onSwitchVarCancel = function () {
|
|
this._rangeWindow.hide();
|
|
this._editWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* スイッチ・変数編集ウィンドウの決定
|
|
*/
|
|
Scene_Debug.prototype.onSwitchVarOk = function () {
|
|
var id = this._editWindow.currentId();
|
|
switch (this._editWindow.getMode()) {
|
|
case "switch":
|
|
{
|
|
// スイッチを切り替える
|
|
$gameSwitches.setValue(id, !$gameSwitches.value(id));
|
|
this._editWindow.redrawCurrentItem();
|
|
this._editWindow.activate();
|
|
}
|
|
break;
|
|
|
|
case "variable":
|
|
{
|
|
// 変数の入力
|
|
var caption = "%1:%2".format(
|
|
id.padZero(4),
|
|
this._editWindow.itemName(id)
|
|
);
|
|
var number = $gameVariables.value(id);
|
|
var digits = Params.variableInputDigits;
|
|
|
|
this._numberWindow.setCaption(caption);
|
|
this._numberWindow.setAllowNegative(true);
|
|
this._numberWindow.setHandler(
|
|
"cancel",
|
|
this.onSwitchVarInputCancel.bind(this)
|
|
);
|
|
this._numberWindow.start(
|
|
number,
|
|
digits,
|
|
this.onSwitchVarInputOk.bind(this)
|
|
);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
// 来ないはずだが、とりあえず無反応にする
|
|
this._editWindow.activate();
|
|
break;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* スイッチ・変数操作: 入力の決定
|
|
*/
|
|
Scene_Debug.prototype.onSwitchVarInputOk = function (number) {
|
|
$gameVariables.setValue(this._editWindow.currentId(), number);
|
|
this._editWindow.redrawCurrentItem();
|
|
|
|
// 入力の終了処理はキャンセルと同じ
|
|
this.onSwitchVarInputCancel();
|
|
};
|
|
|
|
/**
|
|
* スイッチ・変数操作: 入力のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onSwitchVarInputCancel = function () {
|
|
this._numberWindow.close();
|
|
this._editWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチコマンドの実行
|
|
*/
|
|
Scene_Debug.prototype.onSelfSwitchMapStart = function () {
|
|
this.createMapListWindow();
|
|
this.createEventListWindow();
|
|
this.createSelfSwitchListWindow();
|
|
|
|
// マップ一覧のハンドラを設定
|
|
this._mapListWindow.setHandler(
|
|
"ok",
|
|
this.onSelfSwitchMapListOk.bind(this)
|
|
);
|
|
this._mapListWindow.setHandler(
|
|
"cancel",
|
|
this.onSelfSwitchMapListCancel.bind(this)
|
|
);
|
|
|
|
// ウィンドウ切り替え
|
|
this._commandWindow.hide();
|
|
this._mapListWindow.show();
|
|
this._eventListWindow.show();
|
|
this._selfSwitchListWindow.show();
|
|
this._mapListWindow.selectLast();
|
|
this._mapListWindow.activate();
|
|
this.refreshHelpWindow();
|
|
this._titleWindow.setText(TextManager.DebugUtil.selfSwitch);
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチ: マップの決定
|
|
*/
|
|
Scene_Debug.prototype.onSelfSwitchMapListOk = function () {
|
|
this._isLoadingTemporallyMap = true;
|
|
|
|
var map = this._mapListWindow.item();
|
|
DataManager.loadKmsTemporallyMapData(map.id);
|
|
|
|
// マップデータ読み込み完了後の処理
|
|
this._loadCompleteHandler = function () {
|
|
this._isLoadingTemporallyMap = false;
|
|
|
|
var map = this._mapListWindow.item();
|
|
this._eventListWindow.setMap(map);
|
|
this._selfSwitchListWindow.setMap(map);
|
|
this._eventListWindow.selectLast();
|
|
this._eventListWindow.activate();
|
|
};
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチ: マップ選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onSelfSwitchMapListCancel = function () {
|
|
this._mapListWindow.hide();
|
|
this._eventListWindow.hide();
|
|
this._selfSwitchListWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチ: イベントの決定
|
|
*/
|
|
Scene_Debug.prototype.onSelfSwitchEventListOk = function () {
|
|
//var event = this._eventListWindow.item();
|
|
//this._selfSwitchListWindow.setEvent(event);
|
|
this._selfSwitchListWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチ: イベント選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onSelfSwitchEventListCancel = function () {
|
|
this._eventListWindow.setMap(null);
|
|
this._selfSwitchListWindow.setMap(null);
|
|
this._mapListWindow.activate();
|
|
|
|
$dataKmsTemporallyMapData = null;
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチの決定
|
|
*/
|
|
Scene_Debug.prototype.onSelfSwitchListOk = function () {
|
|
var key = this._selfSwitchListWindow.getKey();
|
|
if (key == null) {
|
|
return;
|
|
}
|
|
|
|
// ON/OFF 切り替え
|
|
$gameSelfSwitches.setValue(key, !$gameSelfSwitches.value(key));
|
|
|
|
this._selfSwitchListWindow.refresh();
|
|
this._selfSwitchListWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* セルフスイッチ選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onSelfSwitchListCancel = function () {
|
|
this._eventListWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* システム値コマンドの実行
|
|
*/
|
|
Scene_Debug.prototype.onSelectSystemValue = function () {
|
|
this.createSystemValueWindow();
|
|
|
|
this._commandWindow.hide();
|
|
this._systemValueWindow.show();
|
|
this._systemValueWindow.activate();
|
|
this._titleWindow.setText(TextManager.DebugUtil.systemValue);
|
|
};
|
|
|
|
/**
|
|
* システム値: 項目の決定
|
|
*/
|
|
Scene_Debug.prototype.onSystemValueOk = function () {
|
|
var key = this._systemValueWindow.getKey();
|
|
var value = this._systemValueWindow.item();
|
|
if (key == null || value == null) {
|
|
return;
|
|
}
|
|
|
|
var caption = TextManager.DebugUtil[key];
|
|
var number = value.get();
|
|
var digits = Params.variableInputDigits;
|
|
|
|
this._numberWindow.setCaption(caption);
|
|
this._numberWindow.setAllowNegative(false);
|
|
this._numberWindow.setHandler(
|
|
"cancel",
|
|
this.onSystemValueInputCancel.bind(this)
|
|
);
|
|
this._numberWindow.start(
|
|
number,
|
|
digits,
|
|
this.onSystemValueInputOk.bind(this)
|
|
);
|
|
};
|
|
|
|
/**
|
|
* システム値: 項目選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onSystemValueCancel = function () {
|
|
this._systemValueWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* システム値: 入力の決定
|
|
*/
|
|
Scene_Debug.prototype.onSystemValueInputOk = function (number) {
|
|
var value = this._systemValueWindow.item();
|
|
if (value != null) {
|
|
value.set(number);
|
|
}
|
|
|
|
this._systemValueWindow.refresh();
|
|
this.onSystemValueInputCancel();
|
|
};
|
|
|
|
/**
|
|
* システム値: 入力のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onSystemValueInputCancel = function () {
|
|
this._numberWindow.close();
|
|
this._systemValueWindow.refresh();
|
|
this._systemValueWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* ウォッチウィンドウコマンドの実行
|
|
*/
|
|
Scene_Debug.prototype.onWatchWindow = function () {
|
|
this.createWatchWindow();
|
|
this.createWatchListWindow();
|
|
this.createWatchEditWindow();
|
|
|
|
// _watchWindow は自動で表示状態が変わるので何もしない
|
|
this._commandWindow.hide();
|
|
this._watchListWindow.show();
|
|
this._watchListWindow.activate();
|
|
this._titleWindow.setText(TextManager.DebugUtil.watchWindow);
|
|
};
|
|
|
|
/**
|
|
* ウォッチ: 項目の決定
|
|
*/
|
|
Scene_Debug.prototype.onWatchListOk = function () {
|
|
this._watchEditWindow.setItem(this._watchListWindow.item());
|
|
this._watchEditWindow.open();
|
|
this._watchEditWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* ウォッチ: 項目選択のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onWatchListCancel = function () {
|
|
// update で自動表示されてしまうので消去ついでに削除
|
|
this.destroyWatchWindow();
|
|
|
|
this._watchListWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* ウォッチ: 項目編集の決定
|
|
*/
|
|
Scene_Debug.prototype.onWatchEditOk = function () {
|
|
var selectedItem = this._watchListWindow.item();
|
|
|
|
switch (this._watchEditWindow.getMode()) {
|
|
case "target":
|
|
{
|
|
// ウォッチ対象を選択
|
|
this.onWatchSelectSwitchVarStart();
|
|
}
|
|
return;
|
|
|
|
case "ok":
|
|
{
|
|
var editItem = this._watchEditWindow.item();
|
|
if (selectedItem instanceof DebugWatchItem) {
|
|
// 編集 (選択項目を差し替える)
|
|
$gameTemp.replaceDebugWatchItem(
|
|
editItem,
|
|
this._watchListWindow.index()
|
|
);
|
|
} else {
|
|
// 追加
|
|
$gameTemp.registerDebugWatchItem(editItem);
|
|
}
|
|
this._watchListWindow.refresh();
|
|
}
|
|
break;
|
|
|
|
case "remove":
|
|
{
|
|
// 選択項目を削除
|
|
// * 末尾の「追加」コマンドは消せないので、index の修正は不要
|
|
$gameTemp.removeDebugWatchItem(selectedItem);
|
|
this._watchListWindow.refresh();
|
|
}
|
|
break;
|
|
|
|
default:
|
|
// 何もしない (キャンセル扱い)
|
|
break;
|
|
}
|
|
|
|
this._watchEditWindow.close();
|
|
this._watchListWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* ウォッチ: スイッチ・変数選択の開始
|
|
*/
|
|
Scene_Debug.prototype.onWatchSelectSwitchVarStart = function () {
|
|
// ハンドラの切り替え
|
|
this._rangeWindow.setHandler(
|
|
"cancel",
|
|
this.onWatchSelectSwitchVarCancel.bind(this)
|
|
);
|
|
this._editWindow.setHandler(
|
|
"ok",
|
|
this.onWatchSelectSwitchVarOk.bind(this)
|
|
);
|
|
|
|
this.destroyWatchWindow();
|
|
|
|
this._watchListWindow.hide();
|
|
this._watchEditWindow.hide();
|
|
this._rangeWindow.show();
|
|
this._editWindow.show();
|
|
this._rangeWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* ウォッチ: スイッチ・変数選択の決定
|
|
*/
|
|
Scene_Debug.prototype.onWatchSelectSwitchVarOk = function () {
|
|
var item = this._watchEditWindow.item();
|
|
|
|
if (this._editWindow.getMode() === "switch") {
|
|
// スイッチを選択
|
|
item.setupSwitch(this._editWindow.currentId());
|
|
} else {
|
|
// 変数を選択
|
|
item.setupVariable(this._editWindow.currentId());
|
|
}
|
|
|
|
this._watchEditWindow.refresh();
|
|
|
|
// ウィンドウを閉じる処理はキャンセルと一緒
|
|
this.onWatchSelectSwitchVarCancel();
|
|
};
|
|
|
|
/**
|
|
* ウォッチ: スイッチ・変数選択のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onWatchSelectSwitchVarCancel = function () {
|
|
this.createWatchWindow();
|
|
|
|
this._rangeWindow.hide();
|
|
this._editWindow.hide();
|
|
this._watchListWindow.show();
|
|
this._watchEditWindow.show();
|
|
this._watchEditWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* ウォッチ: 項目編集のキャンセル
|
|
*/
|
|
Scene_Debug.prototype.onWatchEditCancel = function () {
|
|
this._watchEditWindow.close();
|
|
this._watchListWindow.activate();
|
|
};
|
|
|
|
/**
|
|
* エンカウントコマンドの実行
|
|
*/
|
|
Scene_Debug.prototype.onForceEncounter = function () {
|
|
this.createTroopWindow();
|
|
|
|
this._commandWindow.hide();
|
|
this._troopWindow.show();
|
|
this._troopWindow.activate();
|
|
this._titleWindow.setText(TextManager.DebugUtil.encounter);
|
|
};
|
|
|
|
/**
|
|
* 敵グループの決定
|
|
*/
|
|
Scene_Debug.prototype.onTroopOk = function () {
|
|
var troop = this._troopWindow.item();
|
|
if (!troop) {
|
|
// null の場合は現在のマップからランダム選定
|
|
var troopId = $gamePlayer.makeEncounterTroopId();
|
|
troop = $dataTroops[troopId];
|
|
if (!troop) {
|
|
// マップに敵がいなければ何もしない
|
|
this._troopWindow.activate();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// エンカウント実行 (逃走、敗北可)
|
|
BattleManager.setup(troop.id, true, true);
|
|
SceneManager.push(Scene_Battle);
|
|
};
|
|
|
|
/**
|
|
* 敵グループ選択のキャンセル処理
|
|
*/
|
|
Scene_Debug.prototype.onTroopCancel = function () {
|
|
this._troopWindow.hide();
|
|
this.activateCommandWindow();
|
|
};
|
|
|
|
/**
|
|
* 通行可否表示コマンドの実行
|
|
*/
|
|
Scene_Debug.prototype.onDispPassage = function () {
|
|
// TODO: 実装
|
|
this._titleWindow.setText(TextManager.DebugUtil.dispPassage);
|
|
};
|
|
})();
|
|
} // <-- if (Utils.isOptionValid('test'))
|