6030 lines
160 KiB
JavaScript
6030 lines
160 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.
|
||
* @type number
|
||
* @min 1
|
||
* @max 15
|
||
*
|
||
* @param Map grid color
|
||
* @default rgba(255, 255, 255, 0.6)
|
||
* @desc Specify grid color for map transfer mode.
|
||
*
|
||
* @param Map cursor speed
|
||
* @default 3
|
||
* @desc Specify cursor speed for map transfer mode.
|
||
* 0 for standard function cursor.
|
||
* @type number
|
||
*
|
||
* @param Watch window font size
|
||
* @default 18
|
||
* @desc Font size for the watch window's text.
|
||
* @type number
|
||
* @min 1
|
||
*
|
||
* @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.
|
||
* @type number
|
||
* @min 1
|
||
*
|
||
* @param Watch window position
|
||
* @default 0
|
||
* @desc
|
||
* Specify watch window position.
|
||
* @type select
|
||
* @option TopLeft
|
||
* @value 0
|
||
* @option TopRight
|
||
* @value 1
|
||
* @option BottomLeft
|
||
* @value 2
|
||
* @option BottomRight
|
||
* @value 3
|
||
*
|
||
* @command watchSwitch
|
||
* @text Add switch to the watch window
|
||
*
|
||
* @arg id
|
||
* @text Switch ID
|
||
* @type switch
|
||
* @default 1
|
||
*
|
||
* @command watchVariable
|
||
* @text Add variable to the watch window
|
||
*
|
||
* @arg id
|
||
* @text Variable ID
|
||
* @type variable
|
||
* @default 1
|
||
*
|
||
* @help
|
||
* あわやまたながMZ用に改変しています。
|
||
*
|
||
* ## 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
|
||
* @text 変数入力桁数
|
||
* @default 9
|
||
* @desc 変数入力時の桁数を指定します。最大値は 15 です。
|
||
* @type number
|
||
* @min 1
|
||
* @max 15
|
||
*
|
||
* @param Map grid color
|
||
* @text マップグリッドの色
|
||
* @default rgba(255, 255, 255, 0.6)
|
||
* @desc マップ移動画面のグリッド色を CSS カラーで指定します。
|
||
*
|
||
* @param Map cursor speed
|
||
* @text マップカーソル速度
|
||
* @default 3
|
||
* @desc マップ移動画面のカーソル速度を指定します。
|
||
* 0 で標準のカーソル。
|
||
* @type number
|
||
*
|
||
* @param Watch window font size
|
||
* @text ウォッチウィンドウのフォントサイズ
|
||
* @default 18
|
||
* @desc ウォッチウィンドウのフォントサイズを指定します。
|
||
* @type number
|
||
* @min 1
|
||
*
|
||
* @param Watch highlight color
|
||
* @text ウォッチ強調色
|
||
* @default rgba(255, 224, 192, 0.6)
|
||
* @desc ウォッチしている値が変化したときの背景色を CSS カラーで指定します。
|
||
*
|
||
* @param Watch window width
|
||
* @text ウォッチウィンドウの幅
|
||
* @default 360
|
||
* @desc ウォッチウィンドウの幅をピクセル単位で指定します。
|
||
* @type number
|
||
* @min 1
|
||
*
|
||
* @param Watch window position
|
||
* @text ウォッチウィンドウの位置
|
||
* @default 0
|
||
* @desc
|
||
* ウォッチウィンドウの表示位置を指定します。
|
||
* @type select
|
||
* @option 左上
|
||
* @value 0
|
||
* @option 右上
|
||
* @value 1
|
||
* @option 左下
|
||
* @value 2
|
||
* @option 右下
|
||
* @value 3
|
||
*
|
||
* @command watchSwitch
|
||
* @text スイッチをウォッチウィンドウに追加
|
||
*
|
||
* @arg id
|
||
* @text スイッチID
|
||
* @type switch
|
||
* @default 1
|
||
*
|
||
* @command watchVariable
|
||
* @text 変数をウォッチウィンドウに追加
|
||
*
|
||
* @arg id
|
||
* @text 変数ID
|
||
* @type variable
|
||
* @default 1
|
||
*
|
||
* @help
|
||
* あわやまたながMZ用に改変しています。
|
||
*
|
||
* ■ プラグインコマンド
|
||
*
|
||
* 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.mapCursorSpeed = parseIntWithDefault(pluginParams['Map cursor speed'], 3)
|
||
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
|
||
);
|
||
|
||
const tilesetExName = PluginManager.parameters("TilesetEx").tilesetExName || "";
|
||
const regionCollisionExName = PluginManager.parameters("RegionCollisionEx").mapName || "";
|
||
|
||
// デバッグログ
|
||
var debuglog;
|
||
if (Const.debug)
|
||
{
|
||
debuglog = function() { console.log.apply(console, arguments); };
|
||
}
|
||
else
|
||
{
|
||
debuglog = function() { };
|
||
}
|
||
|
||
PluginManager.registerCommand(PluginName, "watchSwitch", function (args) {
|
||
const id = parseInt(args.id);
|
||
if (!id) {
|
||
console.error('[%s %s] Invalid ID: %s', Const.pluginCode, "watchSwitch", args.id);
|
||
return;
|
||
}
|
||
const item = new DebugWatchItem();
|
||
item.setupSwitch(id);
|
||
$gameTemp.registerDebugWatchItem(item);
|
||
});
|
||
|
||
PluginManager.registerCommand(PluginName, "watchVariable", function (args) {
|
||
const id = parseInt(args.id);
|
||
if (!id) {
|
||
console.error('[%s %s] Invalid ID: %s', Const.pluginCode, "watchVariable", args.id);
|
||
return;
|
||
}
|
||
const item = new DebugWatchItem();
|
||
item.setupVariable(id);
|
||
$gameTemp.registerDebugWatchItem(item);
|
||
});
|
||
|
||
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'),
|
||
gold: simpleGetter(isJp ? '所持金変更' : 'Edit gold'),
|
||
goldCaption: simpleGetter(isJp ? '所持金' : 'Gold'),
|
||
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'),
|
||
forceSave: simpleGetter(isJp ? '強制セーブ' : 'Force save'),
|
||
forceLoad: simpleGetter(isJp ? '強制ロード' : 'Force load'),
|
||
removeSaveFile: simpleGetter(isJp ? 'セーブファイル削除' : 'Remove save file'),
|
||
|
||
// パラメータ名
|
||
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._map = null;
|
||
this._destination = new Point();
|
||
this._visibleArea = new Rectangle();
|
||
this._offsetX = 0;
|
||
this._offsetY = 0;
|
||
};
|
||
|
||
/**
|
||
* 参照するマップオブジェクトを設定
|
||
*/
|
||
Sprite_DebugMapDestination.prototype.setMap = function(map)
|
||
{
|
||
this._map = map;
|
||
};
|
||
|
||
/**
|
||
* MZ用に追加
|
||
*/
|
||
Sprite_DebugMapDestination.prototype.setOffsets = function(x, y)
|
||
{
|
||
this._offsetX = x;
|
||
this._offsetY = y;
|
||
};
|
||
|
||
/**
|
||
* 目的地のタイル座標を設定
|
||
*/
|
||
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;
|
||
this.x += this._offsetX;
|
||
this.y += this._offsetY;
|
||
|
||
// 可視領域外に出た場合は消す
|
||
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 = 1//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;
|
||
}
|
||
};
|
||
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// 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 rect = new Rectangle(0, 0, width, this.fittingHeight(numLines));
|
||
Window_Help.prototype.initialize.call(this, rect);
|
||
|
||
//this.width = width;
|
||
//this.createContents();
|
||
};
|
||
|
||
Window_DebugTitle.prototype.refresh = function()
|
||
{
|
||
this.contents.clear();
|
||
|
||
var x = this.itemPadding();
|
||
var w = this.contentsWidth() - this.itemPadding() * 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 ww = this.windowWidth();
|
||
const wh = this.fittingHeight(6);
|
||
const rect = new Rectangle(x, y, ww, wh);
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
this.refresh();
|
||
this.selectLast();
|
||
this.activate();
|
||
};
|
||
|
||
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;
|
||
};
|
||
|
||
const removeSaveFile = $plugins.some(plugin => Utils.extractFileName(plugin.name) === "RemoveSaveFile" && plugin.status);
|
||
Window_DebugCommand.prototype.makeCommandList = function()
|
||
{
|
||
this.addCommand(TextManager.DebugUtil.itemNumber, 'itemNumber');
|
||
this.addCommand(TextManager.DebugUtil.gold, 'gold');
|
||
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');
|
||
this.addCommand(TextManager.DebugUtil.forceSave, 'forceSave');
|
||
this.addCommand(TextManager.DebugUtil.forceLoad, 'forceLoad');
|
||
if (removeSaveFile) {
|
||
this.addCommand(TextManager.DebugUtil.removeSaveFile, 'removeSaveFile');
|
||
}
|
||
this.addCommand(TextManager.gameEnd, 'gameEnd');
|
||
|
||
// 追加コマンド
|
||
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 = $gameSystem.windowPadding() * 2;
|
||
if (isItemObject(this._caption))
|
||
{
|
||
captionWidth +=
|
||
this.textWidth(this._caption.name) +
|
||
ImageManager.iconWidth + 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.windowHeight = function() {
|
||
const rows = this._caption ? 2 : 1;
|
||
if (ConfigManager.touchUI) {
|
||
return this.fittingHeight(rows) + this.buttonSpacing() + 48;
|
||
} else {
|
||
return this.fittingHeight(rows);
|
||
}
|
||
};
|
||
|
||
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()
|
||
{
|
||
Window_NumberInput.prototype.refresh.call(this);
|
||
|
||
if (this.contents)
|
||
{
|
||
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_NumberInput.prototype.buttonY = function() {
|
||
return this.lineHeight() * (this._caption ? 2 : 1) + this.buttonSpacing();
|
||
};
|
||
|
||
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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.refresh();
|
||
this.selectLast();
|
||
this.hide();
|
||
};
|
||
|
||
Window_DebugItemList.prototype.maxCols = function()
|
||
{
|
||
return 2;
|
||
};
|
||
|
||
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 = this.itemLineRect(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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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;
|
||
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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, rect.x, 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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_SkillList.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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());
|
||
};
|
||
|
||
const nameArray = [tilesetExName, regionCollisionExName].filter(mapName => !!mapName);
|
||
Window_DebugMapList.prototype.makeItemList = function() {
|
||
this._data = $dataMapInfos.filter(info => {
|
||
return !!info && !nameArray.some(mapName => info.name.includes(mapName))
|
||
});
|
||
};
|
||
|
||
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 = this.itemLineRect(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);
|
||
const rect = new Rectangle(x, y, width, wh);
|
||
Window_Base.prototype.initialize.call(this, rect);
|
||
};
|
||
|
||
/**
|
||
* マップサイズの設定
|
||
*/
|
||
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)
|
||
{
|
||
if (Params.mapCursorSpeed) {
|
||
this._mapCursorPressedTime = 0;
|
||
this._mapCursorTriggered = 0;
|
||
}
|
||
this._lastDir = [];
|
||
this._data = [];
|
||
this._map = new Game_Map();
|
||
this._positionWindow = null;
|
||
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.createArrowSprites();
|
||
|
||
// Pixi.js が古いと Tilemap が大きめに出るので、padding を増やす
|
||
this.padding += (Const.pixiVersion >= 4 ? 18 : 26);
|
||
|
||
this.createBaseSprite();
|
||
this.createGridSprite();
|
||
this.createDestinationSprite();
|
||
this.cursorVisible = false;
|
||
this.select(0);
|
||
this.hide();
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.drawItemBackground = function() {};
|
||
|
||
Window_DebugMapTile.prototype.reselect = function() {
|
||
Window_Selectable.prototype.reselect.call(this);
|
||
this.cursorVisible = false;
|
||
};
|
||
|
||
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._scrollX = scrollX;
|
||
this.refresh();
|
||
//this.updateCursor();
|
||
}
|
||
};
|
||
/**
|
||
* ページ内の最大列数を取得
|
||
*/
|
||
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.maxVisibleItems = function() {
|
||
const visibleRows = Math.ceil(this.contentsHeight() / this.itemHeight());
|
||
return visibleRows * this.maxCols();
|
||
};
|
||
|
||
/**
|
||
* 右端の列を取得
|
||
*/
|
||
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.contentsWidth = function() {
|
||
return this.innerWidth + this.itemWidth();
|
||
};
|
||
|
||
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();
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.updateArrows = function()
|
||
{
|
||
Window_Selectable.prototype.updateArrows.call(this);
|
||
// 左右アローの表示
|
||
this._rightArrowSprite.visible = this._scrollX < this.maxScrollX();
|
||
this._leftArrowSprite.visible = this._scrollX > 0;
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.smoothScrollRight = function(n) {
|
||
this.smoothScrollBy(this.itemWidth() * n, 0);
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.smoothScrollLeft = function(n) {
|
||
this.smoothScrollBy(-this.itemWidth() * n, 0);
|
||
};
|
||
//スクロール範囲補正
|
||
Window_DebugMapTile.prototype.overallWidth = function() {
|
||
return this.maxCols() * this.itemWidth();
|
||
};
|
||
|
||
const _Window_DebugMapTile_processWheelScroll =Window_DebugMapTile.prototype.processWheelScroll;
|
||
Window_DebugMapTile.prototype.processWheelScroll = function() {
|
||
_Window_DebugMapTile_processWheelScroll.call(this);
|
||
if (this.isWheelScrollEnabled() && this.isTouchedInsideFrame()) {
|
||
const threshold = 20;
|
||
if (TouchInput.wheelX >= threshold) {
|
||
this.smoothScrollRight(1);
|
||
}
|
||
if (TouchInput.wheelX <= -threshold) {
|
||
this.smoothScrollLeft(1);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.onTouch = function(triggered)
|
||
{
|
||
var lastIndex = this.index();
|
||
|
||
Window_Selectable.prototype.onTouch.call(this, triggered);
|
||
|
||
if (this.index() !== lastIndex)
|
||
{
|
||
// カーソル移動が行われた場合は後続の処理は不要
|
||
return;
|
||
}
|
||
|
||
if (this._stayCount >= 10)
|
||
{
|
||
// 左右端のタップ判定
|
||
var x = this.canvasToLocalX(TouchInput.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.hitTest = function(x, y)
|
||
{
|
||
if (!this.innerRect.contains(x, y)) {
|
||
return -1;
|
||
}
|
||
|
||
var cx = x - this.padding;
|
||
var cy = y - this.padding;
|
||
var maxCols = this.maxCols();
|
||
var maxPageCols = this.maxPageCols();
|
||
var maxPageCols = Math.ceil(this.contentsWidth() / this.itemWidth());
|
||
var topIndex = this.leftCol() + this.topRow() * maxCols;
|
||
for (var i = 0; i < this.maxVisibleItems(); 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.cursorDown = function(wrap) {
|
||
const index = this.index();
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
const maxRows = this.maxRows();
|
||
if (index < maxItems - maxCols) {
|
||
this.smoothSelect((index + maxCols) % maxItems);
|
||
} else if (wrap && maxRows >= 2) {
|
||
if (Params.mapCursorSpeed) this._mapCursorPressedTime = 0;
|
||
this.smoothSelect((index + maxCols) % maxItems);
|
||
}
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.cursorUp = function(wrap) {
|
||
const index = Math.max(0, this.index());
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
const maxRows = this.maxRows();
|
||
if (index >= maxCols) {
|
||
this.smoothSelect((index - maxCols + maxItems) % maxItems);
|
||
} else if (wrap && maxRows >= 2) {
|
||
if (Params.mapCursorSpeed) this._mapCursorPressedTime = 0;
|
||
this.smoothSelect((index - maxCols + maxItems) % maxItems);
|
||
}
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.cursorRight = function(wrap) {
|
||
const index = this.index();
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
if (maxCols >= 2) {
|
||
if (index % maxCols + 1 < maxCols) {
|
||
this.smoothSelect((index + 1) % maxItems);
|
||
} else if (wrap) {
|
||
if (Params.mapCursorSpeed) this._mapCursorPressedTime = 0;
|
||
this.smoothSelect((index + 1 - maxCols) % maxItems);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.cursorLeft = function(wrap) {
|
||
const index = Math.max(0, this.index());
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
if (maxCols >= 2) {
|
||
if (index % maxCols > 0) {
|
||
this.smoothSelect((index - 1 + maxItems) % maxItems);
|
||
} else if (wrap) {
|
||
if (Params.mapCursorSpeed) this._mapCursorPressedTime = 0;
|
||
this.smoothSelect((index - 1 + maxCols + maxItems) % maxItems);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.cursorPagedown = function() {
|
||
const index = this.index();
|
||
const maxItems = this.maxItems();
|
||
if (this.topRow() + this.maxPageRows() < this.maxRows()) {
|
||
this.smoothScrollDown(this.maxPageRows());
|
||
const maxCols = this.maxCols();
|
||
this.select(Math.min(index + maxCols * this.maxPageRows(), maxItems - maxCols + index % maxCols));
|
||
}
|
||
};
|
||
|
||
Window_DebugMapTile.prototype.cursorPageup = function() {
|
||
const index = this.index();
|
||
if (this.topRow() > 0) {
|
||
this.smoothScrollUp(this.maxPageRows());
|
||
this.select(Math.max(index - this.maxCols() * this.maxPageRows(), 0));
|
||
}
|
||
};
|
||
//斜め移動に対応(DS風)
|
||
if (Params.mapCursorSpeed) {
|
||
const keyRepeatInterval = Params.mapCursorSpeed;
|
||
Window_DebugMapTile.prototype.processCursorMove = function() {
|
||
if (this.isCursorMovable()) {
|
||
const lastIndex = this.index();
|
||
if (!this._mapCursorTriggered) {
|
||
this._mapCursorTriggered = Input.isTriggered("down") || Input.isTriggered("up") || Input.isTriggered("right") || Input.isTriggered("left");
|
||
}
|
||
if (Input.dir8 && this._mapCursorPressedTime === 0 || (this._mapCursorPressedTime >= Input.keyRepeatWait && this._mapCursorPressedTime % keyRepeatInterval === 0)) {
|
||
if (Input.isPressed("down")) {
|
||
this.cursorDown(this._mapCursorTriggered);
|
||
}
|
||
if (Input.isPressed("up")) {
|
||
this.cursorUp(this._mapCursorTriggered);
|
||
}
|
||
if (Input.isPressed("right")) {
|
||
this.cursorRight(this._mapCursorTriggered);
|
||
}
|
||
if (Input.isPressed("left")) {
|
||
this.cursorLeft(this._mapCursorTriggered);
|
||
}
|
||
this._mapCursorTriggered = false;
|
||
}
|
||
if (!this.isHandled("pagedown") && Input.isTriggered("pagedown")) {
|
||
this.cursorPagedown();
|
||
}
|
||
if (!this.isHandled("pageup") && Input.isTriggered("pageup")) {
|
||
this.cursorPageup();
|
||
}
|
||
if (this.index() !== lastIndex) {
|
||
this.playCursorSound();
|
||
}
|
||
} else {
|
||
this._mapCursorTriggered = false;
|
||
}
|
||
if (Input.dir8) {
|
||
this._mapCursorPressedTime++
|
||
} else {
|
||
this._mapCursorPressedTime = 0;
|
||
this._mapCursorTriggered = false;
|
||
}
|
||
};
|
||
}
|
||
|
||
Window_DebugMapTile.prototype.ensureCursorVisible = function(smooth) {
|
||
if (this._cursorAll) {
|
||
this.scrollTo(0, 0);
|
||
} else if ((this.innerHeight > 0 && this.row() >= 0) || (this.innerWidth > 0 && this.col() >= 0)) {
|
||
const scrollX = this.scrollX();
|
||
const scrollY = this.scrollY();
|
||
const itemLeft = this.col() * this.itemWidth();
|
||
const itemRight = itemLeft + this.itemWidth();
|
||
const itemTop = this.row() * this.itemHeight();
|
||
const itemBottom = itemTop + this.itemHeight();
|
||
const scrollXMin = itemRight - this.innerWidth;
|
||
const scrollYMin = itemBottom - this.innerHeight;
|
||
let targetX = scrollX;
|
||
let targetY = scrollY;
|
||
|
||
if (scrollX > itemLeft) {
|
||
targetX = itemLeft;
|
||
} else if (scrollX < scrollXMin) {
|
||
targetX = scrollXMin;
|
||
}
|
||
if (scrollY > itemTop) {
|
||
targetY = itemTop;
|
||
} else if (scrollY < scrollYMin) {
|
||
targetY = scrollYMin;
|
||
}
|
||
if (targetX !== scrollX || targetY !== scrollY) {
|
||
if (smooth) {
|
||
this.smoothScrollTo(targetX, targetY);
|
||
} else {
|
||
this.scrollTo(targetX, targetY);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* 対象のマップを指定
|
||
*/
|
||
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;
|
||
}
|
||
|
||
if (tilesetExName) {
|
||
DataManager.onMapExLoaded();
|
||
}
|
||
|
||
// この時点でマップデータはロード済みでなければならない
|
||
debuglog('Window_DebugMapTile.setupMap() called');
|
||
this._map.setup(mapId);
|
||
if (this._positionWindow)
|
||
{
|
||
this._positionWindow.setMapSize(this._map.width(), this._map.height());
|
||
}
|
||
|
||
this.makeItemList();
|
||
this.forceSelect(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 = 0//this.padding;
|
||
var sy = 0//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);
|
||
this._clientArea.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;
|
||
}
|
||
/*
|
||
if (Graphics.isWebGL())
|
||
{
|
||
this._tilemap = new ShaderTilemap();
|
||
}
|
||
else
|
||
{
|
||
|
||
}
|
||
*/
|
||
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();
|
||
//this._tilemap.refreshTileset()が存在しないので置き換え
|
||
const bitmaps = [];
|
||
|
||
const tilesetNames = this._map.tileset().tilesetNames;
|
||
for (const name of tilesetNames) {
|
||
bitmaps.push(ImageManager.loadTileset(name));
|
||
}
|
||
this._tilemap.setBitmaps(bitmaps);
|
||
//置き換えここまで
|
||
|
||
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]);
|
||
this._tilemap._bitmaps[i] = ImageManager.loadTileset(tilesetNames[i]);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* タイルマップ表示の更新
|
||
*/
|
||
|
||
const _Window_DebugMapTile_updateOrigin = Window_DebugMapTile.prototype.updateOrigin;
|
||
Window_DebugMapTile.prototype.updateOrigin = function() {
|
||
_Window_DebugMapTile_updateOrigin.call(this);
|
||
this.updateTilemap();
|
||
this.updateDestinationPosition();
|
||
this.origin.x = 0;
|
||
this.origin.y = 0;
|
||
};
|
||
|
||
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;
|
||
|
||
const offsetX = this._tilemap.origin.x % this._tilemap.tileWidth;
|
||
const offsetY = this._tilemap.origin.y % this._tilemap.tileHeight;
|
||
this._gridSprite.x = -offsetX;
|
||
this._gridSprite.y = -offsetY;
|
||
};
|
||
|
||
/**
|
||
* 移動先スプライトの位置を更新
|
||
*/
|
||
Window_DebugMapTile.prototype.updateDestinationPosition = function()
|
||
{
|
||
if (!this._destinationSprite || !this._tilemap)
|
||
{
|
||
return;
|
||
}
|
||
|
||
const x = -this._tilemap.origin.x % this._tilemap.tileWidth;
|
||
const y = -this._tilemap.origin.y % this._tilemap.tileHeight;
|
||
this._destinationSprite.setOffsets(x, y);
|
||
|
||
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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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();
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.createContents();
|
||
this.refresh();
|
||
this.select(0);
|
||
this.hide();
|
||
};
|
||
|
||
Window_DebugSystemValue.prototype.windowWidth = function()
|
||
{
|
||
return 360 + $gameSystem.windowPadding() * 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 = this.itemLineRect(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;
|
||
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Base.prototype.initialize.call(this, rect);
|
||
this.opacity = 0;
|
||
|
||
// Dimmer より手前に更新通知演出を出すため、先に更新通知スプライトを作成
|
||
this.createUpdateSprites();
|
||
this.showBackgroundDimmer();
|
||
this.refresh();
|
||
this.hide();
|
||
};
|
||
|
||
/**
|
||
* 更新通知スプライトの作成
|
||
*/
|
||
Window_DebugWatch.prototype.createUpdateSprites = function()
|
||
{
|
||
this._updateSprites = [];
|
||
|
||
var lineHeight = this.lineHeight();
|
||
var padding = $gameSystem.windowPadding();
|
||
var count = Math.max(
|
||
Math.floor((Graphics.boxHeight - this.y - $gameSystem.windowPadding() * 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 / $gameSystem.mainFontSize();
|
||
};
|
||
|
||
/**
|
||
* ウォッチ対象を取得
|
||
*/
|
||
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;
|
||
|
||
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.itemLineRect = function(index)
|
||
{
|
||
// Window_Selectable の処理を流用
|
||
return Window_Selectable.prototype.itemLineRect.call(this, index);
|
||
};
|
||
|
||
Window_DebugWatch.prototype.itemRectWithPadding = function(index) {
|
||
return Window_Selectable.prototype.itemRectWithPadding.call(this, index);
|
||
};
|
||
|
||
|
||
Window_DebugWatch.prototype.clearItem = function(index)
|
||
{
|
||
// Window_Selectable の処理を流用
|
||
return 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 = this.itemRectWithPadding(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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(index);
|
||
var item = this._data[index];
|
||
switch (item)
|
||
{
|
||
case 'target':
|
||
this.drawItemType(rect.x, rect.y - this.lineHeight() / 2, rect.width);
|
||
this.drawItemId(rect.x, rect.y + this.lineHeight() / 2, 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)
|
||
{
|
||
const rect = new Rectangle(x, y, width, height);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
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 = this.itemLineRect(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);
|
||
//チラつき防止
|
||
if (this._debugWatchWindow.getWatchList().length > 0) {
|
||
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('gold', this.onSelectGold.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("forceSave", this.onForceSave.bind(this));
|
||
this._commandWindow.setHandler('forceLoad', this.onForceLoad.bind(this));
|
||
this._commandWindow.setHandler('removeSaveFile', this.onRemoveSaveFile.bind(this));
|
||
this._commandWindow.setHandler('gameEnd', this.onGameEnd.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);
|
||
const height = this._commandWindow.fittingHeight(Math.ceil(this._commandWindow.maxItems() / this._commandWindow.maxCols()));
|
||
const maxHeight = Graphics.boxHeight - this._commandWindow.y;
|
||
this._commandWindow.height = Math.min(height, maxHeight);
|
||
this._commandWindow.forceSelect(0);
|
||
this._commandWindow.selectLast();
|
||
this._commandWindow.createContents();
|
||
this._commandWindow.refresh();
|
||
};
|
||
|
||
/**
|
||
* アイテムウィンドウを作成
|
||
*/
|
||
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() &&
|
||
(!tilesetExName || DataManager.isMapExLoaded()) &&
|
||
(!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.onSelectGold = function() {
|
||
this._titleWindow.setText(TextManager.DebugUtil.gold);
|
||
this._numberWindow.setHandler('cancel', this.onGoldCancel.bind(this));
|
||
|
||
const number = $gameParty.gold();
|
||
const digits = $gameParty.maxGold().toString().length;
|
||
this._numberWindow.setCaption(TextManager.DebugUtil.goldCaption);
|
||
this._numberWindow.setAllowNegative(false);
|
||
this._numberWindow.start(number, digits, this.onGoldOk.bind(this));
|
||
};
|
||
|
||
/**
|
||
* 所持金入力の決定
|
||
*/
|
||
Scene_Debug.prototype.onGoldOk = function(number)
|
||
{
|
||
// アイテム所持数の設定 (Game_Party に対して呼ぶ)
|
||
const setGold = function(number)
|
||
{
|
||
const currNumber = this.gold();
|
||
const amount = number - currNumber;
|
||
this.gainGold(amount);
|
||
};
|
||
|
||
setGold.call($gameParty, number);
|
||
|
||
this.onGoldCancel();
|
||
};
|
||
|
||
/**
|
||
* 所持金のキャンセル処理
|
||
*/
|
||
Scene_Debug.prototype.onGoldCancel = function() {
|
||
this._numberWindow.close();
|
||
this.activateCommandWindow();
|
||
};
|
||
|
||
/**
|
||
* アクター選択の実行
|
||
*/
|
||
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);
|
||
const ch = $gamePlayer;
|
||
ch.center(ch.x, ch.y);
|
||
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);
|
||
if (tilesetExName) {
|
||
DataManager.loadMapExData(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);
|
||
BattleManager.saveBgmAndBgs();
|
||
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);
|
||
};
|
||
|
||
Scene_Debug.prototype.onForceSave = function() {
|
||
SceneManager.push(Scene_Save);
|
||
};
|
||
|
||
Scene_Debug.prototype.onForceLoad = function() {
|
||
SceneManager.push(Scene_Load);
|
||
};
|
||
|
||
Scene_Debug.prototype.onRemoveSaveFile = function() {
|
||
SceneManager.push(Scene_Remove);
|
||
};
|
||
|
||
Scene_Debug.prototype.onGameEnd = function() {
|
||
SceneManager.push(Scene_GameEnd);
|
||
};
|
||
|
||
})();
|
||
|
||
} // <-- if (Utils.isOptionValid('test'))
|