968 lines
24 KiB
JavaScript
968 lines
24 KiB
JavaScript
/*:
|
|
* @plugindesc Add Option to Message log
|
|
* @author siguren
|
|
*
|
|
* @target MZ
|
|
* @base ManoUZ_MessageLog
|
|
*
|
|
* @command OpenScene
|
|
* @text Open Option Screen
|
|
*
|
|
* @param optionText
|
|
* @desc Sets display name on Option Screen.
|
|
* @default Message log Setting
|
|
*
|
|
* @param textON
|
|
* @default ON
|
|
*
|
|
* @param textOFF
|
|
* @default OFF
|
|
*
|
|
* @param logLimitBasicText
|
|
* @text Basic number of logs saved:Item Name
|
|
* @default Basic number of logs saved
|
|
*
|
|
* @param logLimitBasicHelp
|
|
* @text Basic number of logs saved:Description
|
|
* @default Affects the size of saved data.
|
|
* @parent logLimitBasicText
|
|
*
|
|
* @param logLimitBasicItemList
|
|
* @text Number of logs saved:List
|
|
* @type struct<EnumItem>[]
|
|
* @default ["{\"text\":\"Few\",\"value\":\"20\"}","{\"text\":\"Standard\",\"value\":\"40\"}","{\"text\":\"Many\",\"value\":\"60\"}","{\"text\":\"Extreme\",\"value\":\"100\"}"]
|
|
* @parent logLimitBasicText
|
|
*
|
|
* @param logLimitExtendsText
|
|
* @text Number of logs saved/added:Item Name
|
|
* @default Number of logs saved(Add)
|
|
*
|
|
* @param logLimitExtendsHelp
|
|
* @type multiline_string
|
|
* @text Number of logs saved/added:Description
|
|
* @default Affects memory consumption.
|
|
* @parent logLimitExtendsText
|
|
*
|
|
* @param logLimitExtendsItemList
|
|
* @text Number of logs saved/added:List
|
|
* @desc This item is for changing settings.
|
|
* @type struct<EnumItem>[]
|
|
* @default ["{\"text\":\"Few\",\"value\":\"20\"}","{\"text\":\"Standard\",\"value\":\"50\"}","{\"text\":\"Many\",\"value\":\"80\"}"]
|
|
* @parent logLimitExtendsText
|
|
*
|
|
* @param autoWaitTimeText
|
|
* @text Auto Read:Item Name
|
|
* @default Auto Read Wait Time
|
|
*
|
|
* @param autoWaitTimeHelp
|
|
* @type multiline_string
|
|
* @text Auto Read Wait Time:Description
|
|
* @default Waiting time after sentence is displayed.
|
|
* @parent autoWaitTimeText
|
|
*
|
|
* @param autoWaitTimeItemList
|
|
* @text Auto Read Wait Time:Item List
|
|
* @type struct<EnumItem>[]
|
|
* @default ["{\"text\":\"Short\",\"value\":\"180\"}","{\"text\":\"Standard\",\"value\":\"360\"}","{\"text\":\"Long\",\"value\":\"480\"}","{\"text\":\"Very Long\",\"value\":\"600\"}"]
|
|
* @parent autoWaitTimeText
|
|
*
|
|
* @param gaugeColorText
|
|
* @text Gauge Color:Item Name
|
|
* @type string
|
|
* @default Gauge Color
|
|
*
|
|
* @param gaugeColorHelp
|
|
* @type multiline_string
|
|
* @text Gauge Color:Description
|
|
* @default The color of the gauge
|
|
* that appears during the Auto Read Wait Time.
|
|
* @parent gaugeColorText
|
|
*
|
|
* @param gaugeColorItemListOld
|
|
* @text Gauge Color List
|
|
* @type number[]
|
|
* @desc Numeric Value
|
|
* Manually convert a hexadecimal number to a decimal number.
|
|
* @default ["13181999","12674371","8104783","3050327","45797","20362","16628736"]
|
|
* @parent gaugeColorText
|
|
*
|
|
* @param keepAutoMode
|
|
* @text Keep Auto Read Mode:Item Name
|
|
* @default Keep Auto Read Mode
|
|
*
|
|
* @param keepAutoModeHelp
|
|
* @type multiline_string
|
|
* @text Keep Auto Read Mode:Description
|
|
* @default After the conversation has ended, keeps Auto Read Mode on.
|
|
* @parent keepAutoMode
|
|
*
|
|
* @param machinakaMode
|
|
* @text NPC convo Mode Line:Item Name
|
|
* @default NPC convo Mode Line
|
|
*
|
|
* @param machinakaModeHelp
|
|
* @text NPC convo Mode Line:Description
|
|
* @type multiline_string
|
|
* @default number for simultaneous displays in NPC convo Mode.
|
|
* @parent machinakaMode
|
|
*
|
|
*
|
|
*
|
|
* @help
|
|
* Attach optional features to ManoUZ_MessageLog.
|
|
*
|
|
* The main unit has Plugin Commands for changing values directly.
|
|
*
|
|
*/
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*:ja
|
|
* @plugindesc メッセージログにオプションを追加
|
|
* @author しぐれん
|
|
*
|
|
* @target MZ
|
|
* @base ManoUZ_MessageLog
|
|
*
|
|
* @command OpenScene
|
|
* @text オプション画面を開く/OpenScene
|
|
*
|
|
* @param optionText
|
|
* @text オプション画面での表示名
|
|
* @default メッセージログ設定
|
|
*
|
|
* @param textON
|
|
* @default ON
|
|
*
|
|
* @param textOFF
|
|
* @default OFF
|
|
*
|
|
*
|
|
* @param logLimitBasicText
|
|
* @text ログ保存数(基本):項目名
|
|
* @default ログ保存数(基本)
|
|
*
|
|
* @param logLimitBasicHelp
|
|
* @text ログの保存数(基本):解説
|
|
* @default セーブデータの大きさに影響します。
|
|
* @parent logLimitBasicText
|
|
*
|
|
* @param logLimitBasicItemList
|
|
* @text ログ保存数:候補リスト
|
|
* @type struct<EnumItem>[]
|
|
* @default ["{\"text\":\"少ない\",\"value\":\"20\"}","{\"text\":\"標準\",\"value\":\"40\"}","{\"text\":\"多い\",\"value\":\"60\"}","{\"text\":\"とても多い\",\"value\":\"100\"}"]
|
|
* @parent logLimitBasicText
|
|
*
|
|
* @param logLimitExtendsText
|
|
* @text ログ保存数・追加分:項目名
|
|
* @default ログ保持数(追加)
|
|
*
|
|
* @param logLimitExtendsHelp
|
|
* @text ログ保存数・追加分:説明文
|
|
* @default メモリの消費量に影響します。
|
|
* @parent logLimitExtendsText
|
|
*
|
|
* @param logLimitExtendsItemList
|
|
* @text 追加のログ保存数:項目リスト
|
|
* @desc 設定変更用の項目です。
|
|
* @type struct<EnumItem>[]
|
|
* @default ["{\"text\":\"少ない\",\"value\":\"20\"}","{\"text\":\"標準\",\"value\":\"50\"}","{\"text\":\"多い\",\"value\":\"80\"}"]
|
|
* @parent logLimitExtendsText
|
|
*
|
|
* @param autoWaitTimeText
|
|
* @text オート待ち時間:項目名
|
|
* @default オート待ち時間
|
|
*
|
|
* @param autoWaitTimeHelp
|
|
* @text オート待ち時間:説明文
|
|
* @default 文章表示完了後の待機時間です。
|
|
* @parent autoWaitTimeText
|
|
*
|
|
* @param autoWaitTimeItemList
|
|
* @text オート待ち時間:項目リスト
|
|
* @type struct<EnumItem>[]
|
|
* @default ["{\"text\":\"短い\",\"value\":\"180\"}","{\"text\":\"標準\",\"value\":\"360\"}","{\"text\":\"長い\",\"value\":\"480\"}","{\"text\":\"とても長い\",\"value\":\"600\"}"]
|
|
* @parent autoWaitTimeText
|
|
*
|
|
* @param gaugeColorText
|
|
* @text ゲージ色:項目名
|
|
* @type string
|
|
* @default ゲージ色
|
|
*
|
|
* @param gaugeColorHelp
|
|
* @text ゲージ色:説明文
|
|
* @type string
|
|
* @default オート待ち時間の間に表示するゲージの色。
|
|
* @parent gaugeColorText
|
|
*
|
|
*
|
|
* @param gaugeColorItemListOld
|
|
* @text ゲージ色一覧
|
|
* @type number[]
|
|
* @desc 数値指定です。
|
|
* 各自で16進数を10進数に変換して設定します。
|
|
* @default ["13181999","12674371","8104783","3050327","45797","20362","16628736"]
|
|
* @parent gaugeColorText
|
|
*
|
|
*
|
|
* @param keepAutoMode
|
|
* @text オートモード保持:項目名
|
|
* @default オートモードを保持
|
|
*
|
|
* @param keepAutoModeHelp
|
|
* @text オートモード保持:説明文
|
|
* @default 会話終了後もオートモードを維持します。
|
|
* @parent keepAutoMode
|
|
*
|
|
* @param machinakaMode
|
|
* @text 街中モード行数:項目名
|
|
* @default 街中モード行数
|
|
*
|
|
* @param machinakaModeHelp
|
|
* @text 街中モード行数:説明文
|
|
* @type string
|
|
* @default 表示する数を増やすと、その分ログを表示する場所が減ります。
|
|
* @parent machinakaMode
|
|
*
|
|
*
|
|
*
|
|
* @help
|
|
* ManoUZ_MessageLogにオプション機能を取り付けます。
|
|
*
|
|
* 数値を直接変更するプラグインコマンドは本体側にあります。
|
|
*
|
|
*/
|
|
/*~struct~EnumItem:
|
|
* @param text
|
|
* @type string
|
|
*
|
|
* @param value
|
|
* @type number
|
|
* @default 0
|
|
*/
|
|
|
|
|
|
(function(){
|
|
'use strict';
|
|
|
|
/**
|
|
* @typedef {Object} OptionParametor
|
|
* @property {number} logLimitBasic
|
|
* @property {number} logLimitExtends
|
|
* @property {number} autoWaitTime
|
|
* @property {boolean} keepingAutoMode
|
|
* @property {number} gaugeColor
|
|
* @property {number} machinakaLines
|
|
*/
|
|
|
|
/**
|
|
* @type {String}
|
|
*/
|
|
const PLUGIN_NAME= ('ManoUZ_MessageLogOption');
|
|
function getParam(){ return PluginManager.parameters(PLUGIN_NAME); }
|
|
|
|
/**
|
|
* @returns {OptionParametor}
|
|
*/
|
|
function getOption(){
|
|
return ManoUZ_MessageLog.cloneOptionValue()
|
|
}
|
|
/**
|
|
* @param {OptionParametor} option
|
|
*/
|
|
function setOption(option){
|
|
ManoUZ_MessageLog.setOptionValue(option);
|
|
}
|
|
|
|
class Option_ItemBase{
|
|
/**
|
|
*
|
|
* @param {string} key
|
|
* @param {string} name
|
|
* @param {string} help
|
|
*/
|
|
constructor(key,name,help){
|
|
this._key=key;
|
|
this._help =help;
|
|
this._name=name;
|
|
|
|
}
|
|
helpText(){
|
|
return this._help;
|
|
}
|
|
key(){
|
|
return this._key;
|
|
}
|
|
|
|
name(){
|
|
return this._name;
|
|
}
|
|
/**
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
text(index){
|
|
return "";
|
|
}
|
|
/**
|
|
*
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
textColor(index){
|
|
return ColorManager.normalColor();
|
|
}
|
|
/**
|
|
* @param {number} value
|
|
* @returns
|
|
*/
|
|
indexOf(value){
|
|
const maxItems = this.maxItems();
|
|
for(let i =0; i < maxItems; ++i){
|
|
const vv = this.value(i);
|
|
if(vv ===value){
|
|
return i;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
maxItems(){
|
|
return 1;
|
|
}
|
|
/**
|
|
* @returns {number}
|
|
* @param {number} _index
|
|
*/
|
|
value(_index){
|
|
return 0;
|
|
}
|
|
}
|
|
/**
|
|
* @typedef {object} ValueTextPair
|
|
* @property {number} value
|
|
* @property {string} text
|
|
*/
|
|
|
|
|
|
class OptionItemEnum extends Option_ItemBase{
|
|
|
|
/**
|
|
* @param {string} key
|
|
* @param {string} name
|
|
* @param {string} help
|
|
* @param {ValueTextPair[]} list
|
|
*/
|
|
constructor(key,name,help,list){
|
|
super(key,name,help);
|
|
//this._defaultValue=defaultValue;
|
|
|
|
this._list=list;
|
|
|
|
}
|
|
/**
|
|
* @param {string} key
|
|
* @param {string} name
|
|
* @param {string} helpText
|
|
* @param {string} listText
|
|
*/
|
|
static create(key,name,helpText,listText){
|
|
/**
|
|
* @type {string[]}
|
|
*/
|
|
const listObj =JSON.parse(listText ||"[]");
|
|
|
|
return new OptionItemEnum(key,name,helpText,listObj.map( (text)=>{
|
|
const obj = JSON.parse(text);
|
|
return {
|
|
text:obj.text,
|
|
value:Number(obj.value),
|
|
}
|
|
}));
|
|
}
|
|
|
|
maxItems(){
|
|
return this._list.length;
|
|
}
|
|
/**
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
text(index){
|
|
const item = this._list[index];
|
|
if(item){
|
|
return item.text;
|
|
}
|
|
return "";
|
|
}
|
|
/**
|
|
*
|
|
* @param {number} index
|
|
*/
|
|
value(index){
|
|
const item = this._list[index];
|
|
if(item){
|
|
return item.value;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
/**
|
|
* @param {string} key
|
|
* @param {string} name
|
|
* @param {string} helpText
|
|
* @param {string} listText
|
|
*/
|
|
function createEnumOption(key,name,helpText,listText){
|
|
return OptionItemEnum.create(key,String(name),String(helpText),listText);
|
|
}
|
|
|
|
class OptionItem_Boolean extends Option_ItemBase{
|
|
/**
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
value(index){
|
|
return index;
|
|
}
|
|
/**
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
text(index){
|
|
return index=== 0 ? "OFF":"ON";
|
|
}
|
|
maxItems(){
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
class OptionItem_Number extends Option_ItemBase{
|
|
/**
|
|
* @param {string} key
|
|
* @param {string} name
|
|
* @param {string} help
|
|
*
|
|
* @param {number} min
|
|
* @param {number} max
|
|
*/
|
|
constructor(key,name,help,min,max){
|
|
super(key,name,help);
|
|
this._min =min;
|
|
this._max =max;
|
|
this._name =name;
|
|
}
|
|
/**
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
text(index){
|
|
return this.value(index).toString();
|
|
}
|
|
maxItems(){
|
|
return this._max -this._min;
|
|
}
|
|
/**
|
|
*
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
value(index){
|
|
return index +this._min;
|
|
}
|
|
|
|
}
|
|
|
|
class OptionItemColorSelect extends Option_ItemBase{
|
|
/**
|
|
* @param {string} name
|
|
* @param {string} help
|
|
* @param {number[]} colorList
|
|
*/
|
|
constructor(name,help,colorList){
|
|
super("color",name,help);
|
|
|
|
this._colorList = colorList;
|
|
}
|
|
|
|
text(){
|
|
return "????";
|
|
}
|
|
/**
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
textColor(index){
|
|
const color = this.value(index);
|
|
const _0x =color.toString(16)
|
|
const zzz =_0x.padStart(6,"0")
|
|
|
|
return `#${zzz}`;
|
|
}
|
|
maxItems(){
|
|
return this._colorList.length;
|
|
}
|
|
/**
|
|
*
|
|
* @param {number} index
|
|
* @returns
|
|
*/
|
|
value(index){
|
|
return this._colorList[index];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @template {Option_ItemBase} OptionItemType
|
|
*/
|
|
class OptionItemCase{
|
|
/**
|
|
*
|
|
* @param {OptionItemType} obj
|
|
* @param {(opt:OptionParametor)=>number} optionReadFunc
|
|
*
|
|
*/
|
|
constructor(obj,optionReadFunc){
|
|
this._index=0;
|
|
this._item=obj;
|
|
this._readFunc =optionReadFunc;
|
|
}
|
|
/**
|
|
* @param {OptionParametor} option
|
|
*/
|
|
readIndex(option){
|
|
const value = this._readFunc(option)
|
|
this._index= this._item.indexOf(value);
|
|
}
|
|
helpText(){
|
|
return this._item.helpText();
|
|
}
|
|
name(){
|
|
return this._item.name();
|
|
}
|
|
text(){
|
|
return this._item.text(this._index);
|
|
}
|
|
textColor(){
|
|
return this._item.textColor(this._index);
|
|
}
|
|
changePrev(){
|
|
if(this._index > 0){
|
|
this._index -=1;
|
|
return true;
|
|
}
|
|
this._index = this._item.maxItems()-1;
|
|
return true;
|
|
}
|
|
changeNext(){
|
|
if(this._index + 1 < this._item.maxItems() ){
|
|
this._index +=1;
|
|
return true;
|
|
}
|
|
this._index =0;
|
|
return true;
|
|
}
|
|
/**
|
|
* @returns {OptionItemType | Option_ItemBase}
|
|
*/
|
|
item(){
|
|
return this._item;
|
|
}
|
|
maxItems(){
|
|
return this._item.maxItems();
|
|
}
|
|
value(){
|
|
return this._item.value(this._index);
|
|
}
|
|
/**
|
|
* @param {number} value
|
|
*/
|
|
selectValue(value){
|
|
const index = this._item.indexOf(value);
|
|
this._index =index;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class OptionClass{
|
|
/**
|
|
*
|
|
* @param {Option_ItemBase[]} list
|
|
*/
|
|
constructor(list){
|
|
/**
|
|
* @type {Map<string,OptionItemCase< Option_ItemBase > >}
|
|
*/
|
|
this._map = new Map();
|
|
this.addItem(setting.logLimitBasic,(opt)=> opt.logLimitBasic);
|
|
this.addItem(setting.logLimitExtends,(opt)=>opt.logLimitExtends);
|
|
this.addItem(setting.autoSpeed,(opt)=>opt.autoWaitTime);
|
|
this.addItem(setting.keepAutoMode,(opt)=>opt.keepingAutoMode ? 1:0);
|
|
this.addItem(setting.colorList,(opt)=> opt.gaugeColor);
|
|
this.addItem(setting.machinaka,(opt)=> opt.machinakaLines);
|
|
|
|
}
|
|
/**
|
|
*
|
|
* @param {string} key
|
|
*/
|
|
getValue(key){
|
|
const item = this._map.get(key);
|
|
if(item){
|
|
return item.value();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* @returns {OptionParametor}
|
|
*
|
|
*/
|
|
createOption(){
|
|
const autokeep =this.getValue(setting.keepAutoMode.key()) !==0
|
|
return {
|
|
autoWaitTime :this.getValue(setting.autoSpeed.key()),
|
|
logLimitBasic:this.getValue(setting.logLimitBasic.key()),
|
|
logLimitExtends:this.getValue(setting.logLimitExtends.key()),
|
|
keepingAutoMode:autokeep,
|
|
gaugeColor:this.getValue(setting.colorList.key()),
|
|
machinakaLines:this.getValue(setting.machinaka.key()),
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* @param {Option_ItemBase} item
|
|
* @param {(option:OptionParametor)=>number} func
|
|
*/
|
|
addItem(item,func){
|
|
const key = item.key();
|
|
this._map.set(key,new OptionItemCase(item,func));
|
|
}
|
|
/**
|
|
*
|
|
* @param {OptionParametor} option
|
|
*/
|
|
setOption(option){
|
|
for (const iterator of this._map.values()) {
|
|
iterator.readIndex(option);
|
|
}
|
|
}
|
|
/**
|
|
* @returns
|
|
*/
|
|
createKeyList(){
|
|
return Array.from(this._map.keys() );
|
|
}
|
|
/**
|
|
* @param {string} key
|
|
* @returns {OptionItemCase<Option_ItemBase>}
|
|
*/
|
|
getItem(key){
|
|
return this._map.get(key);
|
|
}
|
|
}
|
|
|
|
const setting = (function(){
|
|
const param =getParam();
|
|
const logLimitBasic = createEnumOption(
|
|
"logbasic",
|
|
param.logLimitBasicText,
|
|
param.logLimitBasicHelp ||"",
|
|
(param.logLimitBasicItemList||"[]")
|
|
);
|
|
|
|
const logLimitExtends = createEnumOption(
|
|
"logextends",
|
|
param.logLimitExtendsText,
|
|
(param.logLimitExtendsHelp ||""),
|
|
(param.logLimitExtendsItemList||"[]")
|
|
);
|
|
|
|
const autoSpeed =createEnumOption(
|
|
"autospeed",
|
|
param.autoWaitTimeText,
|
|
param.autoWaitTimeHelp,
|
|
(param.autoWaitTimeItemList||"[]")
|
|
);
|
|
|
|
/**
|
|
* @type {String[]}
|
|
*/
|
|
const colorArray =JSON.parse(param.gaugeColorItemListOld);
|
|
const colorList = new OptionItemColorSelect(
|
|
String(param.gaugeColorText),
|
|
String(param.gaugeColorHelp),
|
|
colorArray.map( (c)=> Number(c) )
|
|
);
|
|
const keepAutoMode = new OptionItem_Boolean(
|
|
"autokeep",
|
|
String(param.keepAutoMode),
|
|
String(param.keepAutoModeHelp)
|
|
);
|
|
|
|
const machinaka = new OptionItem_Number(
|
|
"machinaka",
|
|
String(param.machinkaMode||param.machinakaMode),
|
|
String(param.machinakaModeHelp||param.machinkaModeHelp),
|
|
1,9);
|
|
|
|
const optionText =String(param.optionText);
|
|
|
|
const result ={
|
|
optionText,
|
|
logLimitBasic,
|
|
logLimitExtends,
|
|
colorList,
|
|
autoSpeed,
|
|
keepAutoMode,
|
|
machinaka,
|
|
};
|
|
return result;
|
|
})();
|
|
|
|
|
|
class Window_LogOption extends Window_Selectable{
|
|
/**
|
|
* @param {Rectangle} rect
|
|
*/
|
|
constructor(rect){
|
|
super(rect);
|
|
this._optionClass = new OptionClass(setting.itemList);
|
|
this._list = this._optionClass.createKeyList();
|
|
}
|
|
/**
|
|
*
|
|
* @param {OptionParametor} value
|
|
*/
|
|
setOption(value){
|
|
this._optionClass.setOption(value);
|
|
this.refresh();
|
|
}
|
|
/**
|
|
* @returns {OptionParametor}
|
|
*/
|
|
createOption(){
|
|
return this._optionClass.createOption();
|
|
}
|
|
maxItems(){
|
|
if(this._list){
|
|
return this._list.length;
|
|
}
|
|
return 0;
|
|
}
|
|
changeNextValue(){
|
|
const index = this.index();
|
|
const key = this._list[index];
|
|
const item = this._optionClass.getItem(key);
|
|
if(item){
|
|
if(item.changeNext()){
|
|
this.playCursorSound();
|
|
this.redrawItem(index);
|
|
}
|
|
}
|
|
}
|
|
changePrevValue(){
|
|
const index = this.index();
|
|
const key = this._list[index];
|
|
const item = this._optionClass.getItem(key);
|
|
if(item){
|
|
if(item.changePrev()){
|
|
this.playCursorSound();
|
|
this.redrawItem(index);
|
|
}
|
|
}
|
|
}
|
|
cursorLeft(){
|
|
this.changePrevValue();
|
|
}
|
|
playOkSound(){}
|
|
cursorRight(){
|
|
this.changeNextValue()
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param {OptionItemCase<Option_ItemBase>} item
|
|
* @param {Rectangle} rect
|
|
*/
|
|
drawItemText(item,rect){
|
|
const color = item.textColor();
|
|
this.changeTextColor(color);
|
|
this.drawText(item.text(),rect.x,rect.y,rect.width,"right");
|
|
|
|
}
|
|
/**
|
|
* @param {number} index
|
|
*/
|
|
itemAt(index){
|
|
const key = this._list[index];
|
|
if(!key){
|
|
return null;
|
|
}
|
|
return this._optionClass.getItem(key);
|
|
}
|
|
/**
|
|
* @param {number} index
|
|
*/
|
|
drawItem(index){
|
|
const item = this.itemAt(index);
|
|
if(item){
|
|
const rect = this.itemRectWithPadding(index);
|
|
const nameWidth = Math.min(rect.width,200);
|
|
const name = item.name()||"";
|
|
this.drawTextEx(name,rect.x,rect.y,nameWidth);
|
|
if(item.item()!==setting.colorList){
|
|
this.drawItemText(item,rect);
|
|
}else{
|
|
const colorRect = new Rectangle(rect.x +240,rect.y + 2,rect.width- 240,rect.height-4);
|
|
const color = item.textColor()
|
|
this.drawColorBar(colorRect,color);
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* @param {Rectangle} rect
|
|
* @param {string} color
|
|
*/
|
|
drawColorBar(rect,color){
|
|
this.contents.fillRect(rect.x,rect.y,rect.width,rect.height,color);
|
|
}
|
|
updateHelp(){
|
|
const item = this.itemAt(this.index());
|
|
if(item){
|
|
this._helpWindow.setText(item.helpText());
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
/**
|
|
*
|
|
* @param {string} symbol
|
|
* @param {Sprite_Button} other
|
|
* @param {number} buttonY
|
|
* @param {number} spacing
|
|
*/
|
|
function createButton(symbol,other,buttonY,spacing){
|
|
const button =new Sprite_Button(symbol);
|
|
button.x = other.x - button.width -spacing;
|
|
button.y = buttonY;
|
|
return button;
|
|
}
|
|
|
|
class Scene_MessageLogOption extends Scene_MenuBase{
|
|
constructor(){
|
|
super();
|
|
this._helpWindow =null;
|
|
this._opitonWindow=null;
|
|
}
|
|
create(){
|
|
super.create();
|
|
this.createAllWindows();
|
|
}
|
|
createAllWindows(){
|
|
this.createHelpWindow();
|
|
this.createLogOpitonWindow();
|
|
|
|
}
|
|
logWindowRect(){
|
|
const x = 0;
|
|
const y = this.mainAreaTop();
|
|
const w = Graphics.boxWidth;
|
|
const h = this.mainAreaHeight();
|
|
return new Rectangle(x,y,w,h);
|
|
}
|
|
createButtons(){
|
|
super.createButtons();
|
|
if(ConfigManager.touchUI){
|
|
this.createCursorButton();
|
|
}
|
|
}
|
|
|
|
createCursorButton(){
|
|
if(!this._cancelButton){
|
|
return;
|
|
}
|
|
const spacing = 4;
|
|
const buttonY = this.buttonY();
|
|
|
|
const right =createButton("pagedown",this._cancelButton,buttonY,spacing);
|
|
const left =createButton("pageup",right,buttonY,spacing);
|
|
|
|
this.addWindow(right);
|
|
this.addWindow(left);
|
|
|
|
|
|
}
|
|
createLogOpitonWindow(){
|
|
const low = new Window_LogOption(this.logWindowRect());
|
|
low.setOption(getOption());
|
|
low.setHandler("ok",this.onOptionOk.bind(this));
|
|
low.setHandler("cancel",this.saveOption.bind(this));
|
|
low.setHandler("pageup",this.onOptionPageup.bind(this));
|
|
low.setHandler("pagedown",this.onOptionPagedown.bind(this));
|
|
|
|
this._opitonWindow=low;
|
|
this.addWindow(low);
|
|
low.select(0);
|
|
low.setHelpWindow(this._helpWindow);
|
|
low.activate();
|
|
}
|
|
onOptionOk(){
|
|
this._opitonWindow.changeNextValue();
|
|
this._opitonWindow.activate();
|
|
}
|
|
onOptionPageup(){
|
|
this._opitonWindow.changePrevValue();
|
|
this._opitonWindow.activate();
|
|
}
|
|
onOptionPagedown(){
|
|
this._opitonWindow.changeNextValue();
|
|
this._opitonWindow.activate();
|
|
}
|
|
|
|
saveOption(){
|
|
const value =this._opitonWindow.createOption();
|
|
setOption(value);
|
|
this.popScene();
|
|
}
|
|
}
|
|
|
|
const MESSAGELOG_OPTION ="MSGLOG_OPTION";
|
|
|
|
const Window_Options_makeCommandList =Window_Options.prototype.makeCommandList;
|
|
|
|
Window_Options.prototype.makeCommandList =function(){
|
|
Window_Options_makeCommandList.call(this);
|
|
this.addCommand(setting.optionText,MESSAGELOG_OPTION);
|
|
};
|
|
const Window_Options_drawItem=Window_Options.prototype.drawItem;
|
|
Window_Options.prototype.drawItem =function(index){
|
|
|
|
const symbol = this.commandSymbol(index);
|
|
if(symbol ===MESSAGELOG_OPTION){
|
|
const rect = this.itemRectWithPadding(index);
|
|
this.drawTextEx(setting.optionText,rect.x,rect.y,rect.width);
|
|
}else{
|
|
Window_Options_drawItem.call(this,index);
|
|
}
|
|
};
|
|
const Window_Options_processOk=Window_Options.prototype.processOk;
|
|
Window_Options.prototype.processOk =function(){
|
|
Window_Options_processOk.call(this);
|
|
if(SceneManager.isSceneChanging()){
|
|
return;
|
|
}
|
|
const symbol = this.currentSymbol();
|
|
if(symbol ===MESSAGELOG_OPTION){
|
|
SceneManager.push(Scene_MessageLogOption);
|
|
return;
|
|
}
|
|
};
|
|
|
|
PluginManager.registerCommand(PLUGIN_NAME,"OpenScene",()=>{
|
|
SceneManager.push(Scene_MessageLogOption);
|
|
})
|
|
|
|
}());
|