var Saba; (function (Saba) { Saba.applyMyMethods = function (myClass, presetClass, applyConstructor) { for (var p in myClass.prototype) { if (myClass.prototype.hasOwnProperty(p)) { if (p === 'constructor' && !applyConstructor) { continue; } Object.defineProperty(presetClass.prototype, p, Object.getOwnPropertyDescriptor(myClass.prototype, p)); } } }; })(Saba || (Saba = {})); var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; //============================================================================= // Saba_BackLog.js //============================================================================= /*:ja * @author Sabakan * @plugindesc バックログを表示するプラグインです。 * * * @param backLogButton * @desc バックログを表示するボタンです * @default pageup * * @param marginLeft * @desc 本文の左のスペースです。変更した場合、改行位置がずれる場合があります。 * @default 70 * * @param marginRight * @desc 本文の右のスペースです。変更した場合、改行位置がずれる場合があります。 * @default 30 * * @param nameLeft * @desc 名前の左のスペースです。 * @default 20 * * @param fontSize * @desc フォントサイズです。変更した場合、改行位置がずれる場合があります。 * @default 24 * * @param scrollSpeed * @desc カーソルキーでスクロールするときの速度です * @default 5 * * @param windowHeight * @desc ウィンドウの高さです。大きいほど多く表示できます。 * @default 2000 * * @param maxLogCount * @desc ログを保存しておく最大数です * @default 50 * * @param bottmMargin * @desc バックログウィンドウの下の空き空間です * @default 50 * * @param logMargin * @desc ログとログの間の隙間です * @default 44 * * @param windowSkin * @desc バックログ表示に使うウィンドウです * @default WindowBacklog * @require 1 * @dir img/system/ * @type file * * @param backOpacity * @desc 背景の透明度です * @default 230 * * * @help * Ver 2016-03-30 20:06:42 * * テキストのバックログを表示するプラグインです。 * 立ち絵スクリプトとの併用を想定しています。 * 併用しない場合、独自に * $gameBackLog.addLog(name, message); * を呼ぶ必要があります。 * */ var Saba; (function (Saba) { var BackLog; (function (BackLog) { var parameters = PluginManager.parameters('Saba_BackLog'); var backLogButton = parameters['backLogButton']; var scrollSpeed = parseInt(parameters['scrollSpeed']); var bottmMargin = parseInt(parameters['bottmMargin']); var windowHeight = parseInt(parameters['windowHeight']); var maxLogCount = parseInt(parameters['maxLogCount']); var fontSize = parseInt(parameters['fontSize']); var logMargin = parseInt(parameters['logMargin']); var marginLeft = parseInt(parameters['marginLeft']); var marginRight = parseInt(parameters['marginRight']); var nameLeft = parseInt(parameters['nameLeft']); var windowSkin = parameters['windowSkin']; var backOpacity = parseInt(parameters['backOpacity']); var Game_BackLog = (function () { function Game_BackLog() { this.logList = []; } Game_BackLog.prototype.addLog = function (name, message) { this.logList.push(new Game_TalkLog(name, message)); if (this.logList.length >= maxLogCount) { this.logList.shift(); } }; return Game_BackLog; }()); var Game_TalkLog = (function () { function Game_TalkLog(name, message) { this.name = name; this.message = Window_Base.prototype.convertEscapeCharacters(message); } return Game_TalkLog; }()); /** * バックログを表示するウィンドウクラスです。 */ var Window_BackLog = (function (_super) { __extends(Window_BackLog, _super); function Window_BackLog() { _super.call(this, 0, 0, Graphics.width, windowHeight); this._margin = 0; this._windowFrameSprite.visible = false; this.backOpacity = backOpacity; this.opacity = 255; this.contentsOpacity = 255; this._refreshBack(); this.drawLogs(); } Window_BackLog.prototype.loadWindowskin = function () { this.windowskin = ImageManager.loadSystem(windowSkin); }; Window_BackLog.prototype.drawLogs = function () { var y = 0; for (var _i = 0, _a = BackLog.$gameBackLog.logList; _i < _a.length; _i++) { var log = _a[_i]; y += this.drawLog(log, y); y += this.logMargin(); } if (y > windowHeight) { this._maxHeight = windowHeight; // 一回目の描画ではみだしていたら、はみ出す部分をけずって歳描画 var diff = y - windowHeight + bottmMargin; while (true) { if (BackLog.$gameBackLog.logList.length === 0) { break; } var log = BackLog.$gameBackLog.logList.shift(); if (diff < log.y) { break; } } this.contents.clear(); y = 0; for (var _b = 0, _c = BackLog.$gameBackLog.logList; _b < _c.length; _b++) { var log = _c[_b]; y += this.drawLog(log, y); y += this.logMargin(); } this._maxHeight = y + bottmMargin; if (this._maxHeight > windowHeight) { this._maxHeight = windowHeight; } // 一番下までスクロールさせる this.y = Graphics.height - this._maxHeight; } else { this._maxHeight = y + bottmMargin; if (this._maxHeight > windowHeight) { this._maxHeight = windowHeight; } if (this._maxHeight < Graphics.height) { this._maxHeight = Graphics.height; } this.y = Graphics.height - this._maxHeight; } }; /** * ログをひとつ描画します * @param {Game_TalkLog} log 描画するログ * @param {number} y 描画する y 座標 * @return {number} 描画した高さ */ Window_BackLog.prototype.drawLog = function (log, y) { this._lineCount = 1; var message = log.message; var height = 0; if (log.name) { this.drawTextEx(log.name, nameLeft, y); console.log(message.charAt(message.length - 1)); if (message.charAt(message.length - 1) === '。') { message = message.substring(0, message.length - 1); } message = message + '」'; y += this.standardFontSize() + 8; height = this.standardFontSize() + 8; this.drawTextEx('「', marginLeft - this.standardFontSize(), y); } this.drawTextEx(message, marginLeft, y); height += this._lineCount * (this.standardFontSize() + 8); log.y = y + height; return height; }; Window_BackLog.prototype.processNewLine = function (textState) { this._lineCount++; _super.prototype.processNewLine.call(this, textState); }; Window_BackLog.prototype.logMargin = function () { return logMargin; }; Window_BackLog.prototype.textAreaWidth = function () { return this.contentsWidth() - marginRight; }; Window_BackLog.prototype.update = function () { _super.prototype.update.call(this); if (Input.isPressed('down')) { this.y -= scrollSpeed; if (this.y < Graphics.height - this._maxHeight) { this.y = Graphics.height - this._maxHeight; } } else if (Input.isPressed('up')) { this.y += scrollSpeed; if (this.y > 0) { this.y = 0; } } }; Window_BackLog.prototype.standardFontSize = function () { return fontSize; }; Window_BackLog.prototype.backPaintOpacity = function () { return 128; }; return Window_BackLog; }(Window_Base)); var _Scene_Map_update = Scene_Map.prototype.update; Scene_Map.prototype.update = function () { if (this._windowBackLog) { this._windowBackLog.update(); if (Input.isTriggered(backLogButton) || Input.isTriggered('cancel')) { this.removeChild(this._windowBackLog); this._windowBackLog = null; SoundManager.playCancel(); } return; } _Scene_Map_update.call(this); if (Input.isTriggered(backLogButton)) { this._windowBackLog = new Window_BackLog(); SoundManager.playOk(); this.addChild(this._windowBackLog); } }; var Scene_Boot_loadSystemImages = Scene_Boot.prototype.loadSystemImages; Scene_Boot.prototype.loadSystemImages = function () { Scene_Boot_loadSystemImages.call(this); if (windowSkin.length > 0) { ImageManager.loadSystem(windowSkin); } }; BackLog.$gameBackLog = new Game_BackLog(); })(BackLog = Saba.BackLog || (Saba.BackLog = {})); })(Saba || (Saba = {}));