832 lines
27 KiB
JavaScript
832 lines
27 KiB
JavaScript
/*:
|
|
* @plugindesc Allows developers to preform various camera motions including focusing and zooming.
|
|
* @author SumRndmDde
|
|
*
|
|
* @param Default Zoom
|
|
* @desc The default zoom used by your RPG Maker game.
|
|
* @default 1
|
|
*
|
|
* @param Zoom Pictures?
|
|
* @desc If 'true', then Pictures created with the "Show Pictures" event will zoom with the camera.
|
|
* @default true
|
|
*
|
|
* @param Margin Formula
|
|
* @desc The formula used to determine the rendering margin when zooming out.
|
|
* @default (Graphics.width / scale) - Graphics.width
|
|
*
|
|
* @param Fix Black Lines
|
|
* @desc Yanfly's Core Engine may cause black lines to appear when zooming. Set this to 'true' to fix.
|
|
* @default false
|
|
*
|
|
* @help
|
|
*
|
|
* Camera Core
|
|
* Version 1.05
|
|
* SumRndmDde
|
|
*
|
|
*
|
|
* This plugin allows developers to preform various camera motions including
|
|
* focusing and zooming.
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
* Camera Focusing
|
|
* ==============================================================================
|
|
*
|
|
* If you wish for the camera to focus on something, use the following
|
|
* Plugin Commands:
|
|
*
|
|
*
|
|
* FocusCamera [x] [y] [duration]
|
|
*
|
|
* Insert an X and Y coordinate on the map to have the camera focus on it.
|
|
* The duration determines how many frames it takes the camera to transition.
|
|
*
|
|
*
|
|
* FocusCamera event [id] [duration]
|
|
*
|
|
* Replace "id" with an Event's ID on the current map to have the camera focus
|
|
* on that specific event. The duration determines how many frames it takes the
|
|
* camera to transition.
|
|
*
|
|
*
|
|
* FocusCamera follower [id] [duration]
|
|
*
|
|
* Replace "id" with a Follower's index in the current party to have the camera
|
|
* focus on that specific follower. The duration determines how many frames it
|
|
* takes the camera to transition.
|
|
*
|
|
*
|
|
* FocusCamera player [duration]
|
|
*
|
|
* Focues the camera onto the player.
|
|
* The duration determines how many frames it takes the camera to transition.
|
|
*
|
|
*
|
|
* ResetFocus [duration]
|
|
*
|
|
* Resets the focus on the camera back to the player.
|
|
* The duration determines how many frames it takes the camera to transition.
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
* Zooming
|
|
* ==============================================================================
|
|
*
|
|
* In order to zoom the camera in and out, use the following commands:
|
|
*
|
|
*
|
|
* ZoomIn [scale] [duration]
|
|
*
|
|
* Set "scale" to the scale you wish the camera to zoom in.
|
|
* Setting scale to 1 would be the normal scale, greater than 1 would zoom in.
|
|
* The duration determines how many frames it takes the camera to transition.
|
|
*
|
|
*
|
|
* ZoomOut [scale] [duration]
|
|
*
|
|
* Set "scale" to the scale you wish the camera to zoom in.
|
|
* Setting scale to 1 would be the normal scale, greater than 1 would zoom out.
|
|
* The duration determines how many frames it takes the camera to transition.
|
|
*
|
|
*
|
|
* ResetZoom [duration]
|
|
*
|
|
* Resets the zoom back to its default.
|
|
* The duration determines how many frames it takes the camera to transition.
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
* Camera Shifting
|
|
* ==============================================================================
|
|
*
|
|
* If you wish to shift the camera, use the following Plugin Command:
|
|
*
|
|
* ShiftCamera [x-shift] [y-shift] [duration]
|
|
*
|
|
* This shifts the camera a certain x and/or y blocks.
|
|
* This does NOT change the camera's focus. If the camera's focused on the
|
|
* player, for example, and the camera is shifted upward 2 squares, the camera
|
|
* will continue to follow the player, only it will be shifted up two squares.
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
* Camera Waiting
|
|
* ==============================================================================
|
|
*
|
|
* If you wish to have an event "wait" before a camera is done moving, use the
|
|
* following Plugin Commands:
|
|
*
|
|
*
|
|
* WaitForCamera
|
|
*
|
|
* This will stop the event processing until the camera has completed its focus
|
|
* and zooming.
|
|
*
|
|
*
|
|
* WaitForCameraFocus
|
|
*
|
|
* This will wait for the camera to complete its movement to a new focus.
|
|
*
|
|
*
|
|
* WaitForCameraZoom
|
|
*
|
|
* This will wait for the camera to finish its zoom motion.
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
* Examples
|
|
* ==============================================================================
|
|
*
|
|
* Here are some examples of the Plugin Commands:
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
*
|
|
* FocusCamera 5 7 60
|
|
*
|
|
* FocusCamera event 2 60
|
|
*
|
|
* FocusCamera follower 1 60
|
|
*
|
|
* FocusCamera player 60
|
|
*
|
|
* ResetFocus 60
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
*
|
|
* ZoomIn 1.2 60
|
|
*
|
|
* ZoomOut 1.2 60
|
|
*
|
|
* ResetZoom 60
|
|
*
|
|
*
|
|
* ==============================================================================
|
|
* End of Help File
|
|
* ==============================================================================
|
|
*
|
|
* Welcome to the bottom of the Help file.
|
|
*
|
|
*
|
|
* Thanks for reading!
|
|
* If you have questions, or if you enjoyed this Plugin, please check
|
|
* out my YouTube channel!
|
|
*
|
|
* https://www.youtube.com/c/SumRndmDde
|
|
*
|
|
*
|
|
* Until next time,
|
|
* ~ SumRndmDde
|
|
*
|
|
*/
|
|
/*:ja
|
|
* @plugindesc フォーカスやズーム等の様々なカメラの動きを事前設定できます。
|
|
* @author SumRndmDde
|
|
*
|
|
* @param Default Zoom
|
|
* @text デフォルトのズーム
|
|
* @desc デフォルトのズーム
|
|
* @default 1
|
|
*
|
|
* @param Zoom Pictures?
|
|
* @text ピクチャをズーム
|
|
* @type boolean
|
|
* @on 有効
|
|
* @off 無効
|
|
* @desc "ピクチャの表示"で作成されたピクチャをカメラでズーム
|
|
* 有効:true / 無効:false
|
|
* @default true
|
|
*
|
|
* @param Margin Formula
|
|
* @text マージン式
|
|
* @desc ズームアウト時のレンダリングマージンを決定する式
|
|
* @default (Graphics.width / scale) - Graphics.width
|
|
*
|
|
* @param Fix Black Lines
|
|
* @text 黒線の修正
|
|
* @type boolean
|
|
* @on 有効
|
|
* @off 無効
|
|
* @desc YEP_CoreEngine使用時、黒線が表示される不具合を修正
|
|
* 有効:true / 無効:false
|
|
* @default false
|
|
*
|
|
* @help
|
|
* 翻訳:ムノクラ
|
|
* https://fungamemake.com/
|
|
* https://twitter.com/munokura/
|
|
*
|
|
* 元プラグイン: http://sumrndm.site/camera-core/
|
|
*
|
|
*
|
|
* Camera Core
|
|
* Version 1.05
|
|
* SumRndmDde
|
|
*
|
|
*
|
|
* フォーカスやズーム等の様々なカメラの動きを事前設定できます。
|
|
*
|
|
* ==========================================================================
|
|
* カメラのフォーカス
|
|
* ==========================================================================
|
|
*
|
|
* カメラを何かにフォーカスさせたい場合、
|
|
* 以下のプラグインコマンドを使用します。
|
|
*
|
|
* FocusCamera [x] [y] [duration]
|
|
*
|
|
* マップ上にXとYの座標を挿入して、
|
|
* カメラがその座標にフォーカスします。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* FocusCamera event [id] [duration]
|
|
*
|
|
* idを現在のマップ上のイベントのIDに置き換えて、
|
|
* カメラを特定のイベントにフォーカスします。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* FocusCamera follower [id] [duration]
|
|
*
|
|
* idを現在のパーティ内のフォロワーのインデックスに置き換えて、
|
|
* カメラが特定のフォロワーにフォーカスします。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* FocusCamera player [duration]
|
|
*
|
|
* カメラをプレイヤーにフォーカスします。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* ResetFocus [duration]
|
|
*
|
|
* カメラのフォーカスをプレーヤーに戻します。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* ==========================================================================
|
|
* ズーム
|
|
* ==========================================================================
|
|
*
|
|
* カメラを拡大・縮小するには、以下のコマンドを使用します。
|
|
*
|
|
*
|
|
* ZoomIn [scale] [duration]
|
|
*
|
|
* scaleは、カメラをズームさせたい拡縮率を設定します。
|
|
* scaleを1に設定すると通常の拡縮率になり、
|
|
* 1より大きくすると拡大します。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* ZoomOut [scale] [duration]
|
|
*
|
|
* scaleは、カメラをズームさせたい拡縮率を設定します。
|
|
* scaleを1に設定すると通常の拡縮率になり、
|
|
* 1より大きくすると縮小します。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* ResetZoom [duration]
|
|
*
|
|
* ズームをデフォルトに戻します。
|
|
* durationは、カメラが遷移するのにかかるフレーム数を決定します。
|
|
*
|
|
*
|
|
* ==========================================================================
|
|
* カメラの移動
|
|
* ==========================================================================
|
|
*
|
|
* カメラをずらしたい場合、以下のプラグインコマンドを使用します。
|
|
*
|
|
* ShiftCamera [x-shift] [y-shift] [duration]
|
|
*
|
|
* カメラを指定のx/yブロック移動します。カメラのフォーカスは変わりません。
|
|
* 例えば、カメラがプレイヤーにフォーカスを合わせていて、
|
|
* カメラを2マス上に移動させた場合、カメラはプレイヤーを追い続けますが、
|
|
* 2マス上に移動します。
|
|
*
|
|
*
|
|
* ==========================================================================
|
|
* カメラ待機
|
|
* ==========================================================================
|
|
*
|
|
* カメラの移動が終わる前にイベントを'待機'させたい場合、
|
|
* 以下のプラグインコマンドを使用します。
|
|
*
|
|
* WaitForCamera
|
|
*
|
|
* カメラのフォーカスとズームが完了するまでイベント処理を停止します。
|
|
*
|
|
*
|
|
* WaitForCameraFocus
|
|
*
|
|
* カメラが新しいフォーカスに移動を完了するのを待ちます。
|
|
*
|
|
*
|
|
* WaitForCameraZoom
|
|
*
|
|
* カメラのズーム動作が終了するのを待ちます。
|
|
*
|
|
*
|
|
* ==========================================================================
|
|
* 例
|
|
* ==========================================================================
|
|
*
|
|
* プラグインコマンドの例を紹介します。
|
|
*
|
|
*
|
|
* ==========================================================================
|
|
*
|
|
* FocusCamera 5 7 60
|
|
*
|
|
* FocusCamera event 2 60
|
|
*
|
|
* FocusCamera follower 1 60
|
|
*
|
|
* FocusCamera player 60
|
|
*
|
|
* ResetFocus 60
|
|
*
|
|
*
|
|
* ==========================================================================
|
|
*
|
|
* ZoomIn 1.2 60
|
|
*
|
|
* ZoomOut 1.2 60
|
|
*
|
|
* ResetZoom 60
|
|
*
|
|
*
|
|
* ==========================================================================
|
|
* ヘルプファイルの終わり
|
|
* ==========================================================================
|
|
*
|
|
* ヘルプファイルの終わりへようこそ。
|
|
*
|
|
* 読んでくれてありがとう!
|
|
* 質問があったり、このプラグインを楽しめたら、
|
|
* 私のYouTubeチャンネルを登録してください!!
|
|
*
|
|
* https://www.youtube.com/c/SumRndmDde
|
|
*
|
|
*
|
|
* 次の機会まで
|
|
* ~ SumRndmDde
|
|
*
|
|
*/
|
|
|
|
var SRD = SRD || {};
|
|
SRD.CameraCore = SRD.CameraCore || {};
|
|
|
|
var Imported = Imported || {};
|
|
Imported["SumRndmDde Camera Core"] = 1.05;
|
|
|
|
(function (_) {
|
|
"use strict";
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SRD.CameraCore
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const params = PluginManager.parameters("SRD_CameraCore");
|
|
|
|
_.zoom = parseFloat(params["Default Zoom"]);
|
|
_.pics = String(params["Zoom Pictures?"]).trim().toLowerCase() === "true";
|
|
_.margin = String(params["Margin Formula"]);
|
|
_.fixYan1 = String(params["Fix Black Lines"]).trim().toLowerCase() === "true";
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Screen
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const _Game_Screen_clear = Game_Screen.prototype.clear;
|
|
Game_Screen.prototype.clear = function () {
|
|
_Game_Screen_clear.apply(this, arguments);
|
|
this._playerRegionId = 0;
|
|
this._playerZoomInfo = null;
|
|
this._completeZoomIn = 0;
|
|
this._zoomXTarget = this._zoomX;
|
|
this._zoomYTarget = this._zoomY;
|
|
this._zoomXSpeed = 0;
|
|
this._zoomYSpeed = 0;
|
|
this.focusEvent = 0;
|
|
};
|
|
|
|
const _Game_Screen_updateZoom = Game_Screen.prototype.updateZoom;
|
|
Game_Screen.prototype.updateZoom = function () {
|
|
_Game_Screen_updateZoom.apply(this, arguments);
|
|
this.updateTilemapMargin();
|
|
};
|
|
|
|
//NO ONE ELSE BETTER OVERWRITE THIS!!!! >:D
|
|
Game_Screen.prototype.clearZoom = function () {
|
|
//Overwrite
|
|
this._zoomX = Graphics.boxWidth / 2;
|
|
this._zoomY = Graphics.boxHeight / 2;
|
|
this._zoomScale = _.zoom;
|
|
this._zoomScaleTarget = _.zoom;
|
|
this._zoomDuration = 0;
|
|
//Overwrite
|
|
|
|
this.refreshZoomInfo();
|
|
this.refreshTilemapMargin(this._zoomScale);
|
|
if (SceneManager.isNextScene(Scene_Battle)) {
|
|
this.ultraClearZoom();
|
|
}
|
|
};
|
|
|
|
Game_Screen.prototype.refreshZoomInfo = function () {
|
|
if (this._playerZoomInfo) {
|
|
this._zoomX = this._playerZoomInfo.x;
|
|
this._zoomY = this._playerZoomInfo.y;
|
|
this._zoomScale = this._playerZoomInfo.scale;
|
|
this._zoomScaleTarget = this._playerZoomInfo.scale;
|
|
this._zoomDuration = this._playerZoomInfo.duration;
|
|
}
|
|
};
|
|
|
|
Game_Screen.prototype.ultraClearZoom = function () {
|
|
this._zoomX = 0;
|
|
this._zoomY = 0;
|
|
this._zoomScale = 1;
|
|
this._zoomScaleTarget = 1;
|
|
this._zoomDuration = 0;
|
|
};
|
|
|
|
const _Game_Screen_onBattleStart = Game_Screen.prototype.onBattleStart;
|
|
Game_Screen.prototype.onBattleStart = function () {
|
|
_Game_Screen_onBattleStart.apply(this, arguments);
|
|
this.ultraClearZoom();
|
|
};
|
|
|
|
Game_Screen.prototype.setCameraFocus = function (scale, duration, nullify) {
|
|
this.setupZoomInfo(scale, duration);
|
|
this.setupZoomStuff();
|
|
if (duration === 0) {
|
|
this._zoomScale = this._zoomScaleTarget;
|
|
this._zoomDuration = 0;
|
|
}
|
|
if (nullify) this._playerZoomInfo = null;
|
|
this.setupTilemapMargin();
|
|
};
|
|
|
|
Game_Screen.prototype.setupZoomInfo = function (scale, duration) {
|
|
this._playerZoomInfo = {};
|
|
this._playerZoomInfo.x = Graphics.boxWidth / 2;
|
|
this._playerZoomInfo.y = Graphics.boxHeight / 2;
|
|
this._playerZoomInfo.scale = eval(scale) * _.zoom;
|
|
this._playerZoomInfo.duration = eval(duration);
|
|
};
|
|
|
|
Game_Screen.prototype.setupZoomStuff = function () {
|
|
this._zoomX = this._playerZoomInfo.x;
|
|
this._zoomY = this._playerZoomInfo.y;
|
|
this._zoomScaleTarget = this._playerZoomInfo.scale;
|
|
this._zoomDuration = this._playerZoomInfo.duration;
|
|
};
|
|
|
|
Game_Screen.prototype.resetCameraFocus = function (duration) {
|
|
this.setCameraFocus(_.zoom, duration, true);
|
|
};
|
|
|
|
Game_Screen.prototype.setupTilemapMargin = function () {
|
|
if (this._zoomScaleTarget < this._zoomScale) {
|
|
this.refreshTilemapMargin(this._zoomScaleTarget);
|
|
this._completeZoomIn = 2;
|
|
} else {
|
|
this._completeZoomIn = 1;
|
|
}
|
|
};
|
|
|
|
Game_Screen.prototype.updateTilemapMargin = function () {
|
|
if (this._zoomDuration === 0 && this._completeZoomIn) {
|
|
this.refreshTilemapMargin(this._zoomScale);
|
|
this._completeZoomIn = 0;
|
|
} else if (this._zoomDuration === 0 && this._completeZoomIn) {
|
|
this.refreshTilemapMargin(this._zoomScaleTarget);
|
|
this._completeZoomIn = 0;
|
|
}
|
|
};
|
|
|
|
Game_Screen.prototype.refreshTilemapMargin = function (scale) {
|
|
if (SceneManager._scene.constructor === Scene_Map) {
|
|
const margin = this._zoomScaleTarget < 1 ? eval(_.margin) : 1;
|
|
const tilemap = SceneManager._scene._spriteset._tilemap;
|
|
tilemap._margin = margin;
|
|
tilemap.width = Graphics.width + margin * 2;
|
|
tilemap.height = Graphics.height + margin * 2;
|
|
}
|
|
};
|
|
|
|
Game_Screen.prototype.isCameraZooming = function () {
|
|
return Boolean(this._zoomDuration > 0);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_CharacterBase
|
|
//-----------------------------------------------------------------------------
|
|
|
|
Game_CharacterBase.prototype.centerX = function () {
|
|
return (Graphics.width / $gameMap.tileWidth() - 1) / 2.0;
|
|
};
|
|
|
|
Game_CharacterBase.prototype.centerY = function () {
|
|
return (Graphics.height / $gameMap.tileHeight() - 1) / 2.0;
|
|
};
|
|
|
|
Game_CharacterBase.prototype.centerCamera = function (dur) {
|
|
return $gameMap.setDisplayPosStart(
|
|
this.x - this.centerX(),
|
|
this.y - this.centerY(),
|
|
dur
|
|
);
|
|
};
|
|
|
|
Game_CharacterBase.prototype.centerCameraOnPos = function (x, y, dur) {
|
|
return $gameMap.setDisplayPosStart(
|
|
x - this.centerX(),
|
|
y - this.centerY(),
|
|
dur
|
|
);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Character
|
|
//-----------------------------------------------------------------------------
|
|
|
|
Game_Character.prototype.updateScroll = Game_Player.prototype.updateScroll;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Player
|
|
//-----------------------------------------------------------------------------
|
|
|
|
Game_Player.prototype.updateScroll = function (lastScrolledX, lastScrolledY) {
|
|
if ($gameScreen.focusEvent === 0) {
|
|
Game_Character.prototype.updateScroll.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Event
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const _Game_Event_update = Game_Event.prototype.update;
|
|
Game_Event.prototype.update = function () {
|
|
var lastScrolledX = this.scrolledX();
|
|
var lastScrolledY = this.scrolledY();
|
|
_Game_Event_update.apply(this, arguments);
|
|
this.updateScroll(lastScrolledX, lastScrolledY);
|
|
};
|
|
|
|
Game_Event.prototype.updateScroll = function (lastScrolledX, lastScrolledY) {
|
|
if ($gameScreen.focusEvent === this._eventId) {
|
|
Game_Character.prototype.updateScroll.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Event
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const _Game_Follower_update = Game_Follower.prototype.update;
|
|
Game_Follower.prototype.update = function () {
|
|
var lastScrolledX = this.scrolledX();
|
|
var lastScrolledY = this.scrolledY();
|
|
_Game_Follower_update.apply(this, arguments);
|
|
this.updateScroll(lastScrolledX, lastScrolledY);
|
|
};
|
|
|
|
Game_Follower.prototype.updateScroll = function (
|
|
lastScrolledX,
|
|
lastScrolledY
|
|
) {
|
|
if ($gameScreen.focusEvent === this._memberIndex * -1) {
|
|
Game_Character.prototype.updateScroll.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Map
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const _Game_Map_initialize = Game_Map.prototype.initialize;
|
|
Game_Map.prototype.initialize = function () {
|
|
_Game_Map_initialize.apply(this, arguments);
|
|
this._newDisplayX = 0;
|
|
this._newDisplayY = 0;
|
|
this._newParallaxX = 0;
|
|
this._newParallaxY = 0;
|
|
this._scrollDuration = 0;
|
|
this._displayXSpeed = 0;
|
|
this._displayYSpeed = 0;
|
|
this._parallaxXSpeed = 0;
|
|
this._parallaxYSpeed = 0;
|
|
};
|
|
|
|
const _Game_Map_setup = Game_Map.prototype.setup;
|
|
Game_Map.prototype.setup = function (mapId) {
|
|
this._newDisplayX = 0;
|
|
this._newDisplayY = 0;
|
|
this._scrollDuration = 0;
|
|
$gameScreen.focusEvent = 0;
|
|
$gameScreen.resetCameraFocus(0);
|
|
_Game_Map_setup.apply(this, arguments);
|
|
};
|
|
|
|
Game_Map.prototype.setDisplayPosStart = function (x, y, dur) {
|
|
if (dur === 0) {
|
|
this.setDisplayPos.call(this, x, y);
|
|
} else {
|
|
this.setDisplayPosInfo(x, y);
|
|
this.setDisplayPosSpeeds(dur);
|
|
}
|
|
};
|
|
|
|
Game_Map.prototype.shiftCameraPosition = function (x, y, dur) {
|
|
this.setDisplayPosStart(this._displayX + x, this._displayY + y, dur);
|
|
};
|
|
|
|
Game_Map.prototype.setDisplayPosInfo = function (x, y) {
|
|
if (this.isLoopHorizontal()) {
|
|
this._newDisplayX = x.mod(this.width());
|
|
this._newParallaxX = x;
|
|
} else {
|
|
var endX = this.width() - this.screenTileX();
|
|
this._newDisplayX = endX < 0 ? endX / 2 : x.clamp(0, endX);
|
|
this._newParallaxX = this._newDisplayX;
|
|
}
|
|
if (this.isLoopVertical()) {
|
|
this._newDisplayY = y.mod(this.height());
|
|
this._newParallaxY = y;
|
|
} else {
|
|
var endY = this.height() - this.screenTileY();
|
|
this._newDisplayY = endY < 0 ? endY / 2 : y.clamp(0, endY);
|
|
this._newParallaxY = this._newDisplayY;
|
|
}
|
|
};
|
|
|
|
Game_Map.prototype.setDisplayPosSpeeds = function (dur) {
|
|
this._scrollDuration = dur;
|
|
this._displayXSpeed =
|
|
(this._newDisplayX - this._displayX) / this._scrollDuration;
|
|
this._displayYSpeed =
|
|
(this._newDisplayY - this._displayY) / this._scrollDuration;
|
|
this._parallaxXSpeed =
|
|
(this._newParallaxX - this._parallaxX) / this._scrollDuration;
|
|
this._parallaxYSpeed =
|
|
(this._newParallaxY - this._parallaxY) / this._scrollDuration;
|
|
};
|
|
|
|
const _Game_Map_updateScroll = Game_Map.prototype.updateScroll;
|
|
Game_Map.prototype.updateScroll = function () {
|
|
_Game_Map_updateScroll.apply(this, arguments);
|
|
this.updateCameraScroll();
|
|
};
|
|
|
|
Game_Map.prototype.updateCameraScroll = function () {
|
|
if (this._scrollDuration > 0) {
|
|
this._scrollDuration--;
|
|
this._displayX += this._displayXSpeed;
|
|
this._displayY += this._displayYSpeed;
|
|
this._parallaxX += this._parallaxXSpeed;
|
|
this._parallaxY += this._parallaxYSpeed;
|
|
}
|
|
};
|
|
|
|
Game_Map.prototype.isCameraScrolling = function () {
|
|
return Boolean(this._scrollDuration > 0);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Game_Interpreter
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const _Game_Interpreter_pluginCommand =
|
|
Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function (command, args) {
|
|
_Game_Interpreter_pluginCommand.apply(this, arguments);
|
|
const com = command.trim().toLowerCase();
|
|
const checkDur = function (i) {
|
|
return args[i] ? eval(args[i]) : 0;
|
|
};
|
|
if (com === "zoomin") {
|
|
$gameScreen.setCameraFocus(String(args[0]), checkDur(1));
|
|
} else if (com === "zoomout") {
|
|
$gameScreen.setCameraFocus("1/(" + String(args[0]) + ")", checkDur(1));
|
|
} else if (com === "focuscamera") {
|
|
const com2 = String(args[0]).trim().toLowerCase();
|
|
if (com2 === "event") {
|
|
const eventId = eval(args[1]);
|
|
if ($gameMap.event(eventId)) {
|
|
$gameScreen.focusEvent = eventId;
|
|
$gameMap.event(eventId).centerCamera(checkDur(2));
|
|
}
|
|
} else if (com2 === "follower") {
|
|
const followerId = eval(args[1]);
|
|
if ($gamePlayer.followers().follower(followerId - 1)) {
|
|
$gameScreen.focusEvent = followerId * -1;
|
|
$gamePlayer
|
|
.followers()
|
|
.follower(followerId - 1)
|
|
.centerCamera(checkDur(2));
|
|
}
|
|
} else if (com2 === "player") {
|
|
$gameScreen.focusEvent = 0;
|
|
$gamePlayer.centerCamera(checkDur(1));
|
|
} else {
|
|
$gameScreen.focusEvent = null;
|
|
$gamePlayer.centerCameraOnPos(
|
|
eval(args[0]),
|
|
eval(args[1]),
|
|
checkDur(2)
|
|
);
|
|
}
|
|
} else if (com === "resetfocus") {
|
|
$gameScreen.focusEvent = 0;
|
|
$gamePlayer.centerCamera(checkDur(0));
|
|
} else if (com === "resetzoom") {
|
|
$gameScreen.resetCameraFocus(checkDur(0));
|
|
} else if (com === "setdefaultzoom") {
|
|
_.zoom = eval(args[0]);
|
|
} else if (com === "shiftcamera") {
|
|
$gameMap.shiftCameraPosition(eval(args[0]), eval(args[1]), checkDur(2));
|
|
} else if (com === "waitforcamera") {
|
|
this.setWaitMode("camera");
|
|
} else if (com === "waitforcamerafocus") {
|
|
this.setWaitMode("camera-focus");
|
|
} else if (com === "waitforcamerazoom") {
|
|
this.setWaitMode("camera-zoom");
|
|
}
|
|
};
|
|
|
|
const _Game_Interpreter_updateWaitMode =
|
|
Game_Interpreter.prototype.updateWaitMode;
|
|
Game_Interpreter.prototype.updateWaitMode = function () {
|
|
let waiting = null;
|
|
if (this._waitMode === "camera") {
|
|
waiting = $gameMap.isCameraScrolling() || $gameScreen.isCameraZooming();
|
|
} else if (this._waitMode === "camera-focus") {
|
|
waiting = $gameMap.isCameraScrolling();
|
|
} else if (this._waitMode === "camera-zoom") {
|
|
waiting = $gameScreen.isCameraZooming();
|
|
}
|
|
if (waiting) {
|
|
return true;
|
|
} else if (waiting === false) {
|
|
this._waitMode = "";
|
|
return false;
|
|
}
|
|
return _Game_Interpreter_updateWaitMode.apply(this, arguments);
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Scene_Map
|
|
//-----------------------------------------------------------------------------
|
|
|
|
const _Scene_Map_start = Scene_Map.prototype.start;
|
|
Scene_Map.prototype.start = function () {
|
|
_Scene_Map_start.apply(this, arguments);
|
|
$gameScreen.clearZoom();
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// SRD.CameraCore.pics Compatibility
|
|
//-----------------------------------------------------------------------------
|
|
|
|
if (_.pics) {
|
|
Scene_Base.prototype.createPicturesForCameraCore =
|
|
Spriteset_Base.prototype.createPictures;
|
|
|
|
const _Scene_Map_createSpriteset = Scene_Map.prototype.createSpriteset;
|
|
Scene_Map.prototype.createSpriteset = function () {
|
|
_Scene_Map_createSpriteset.apply(this, arguments);
|
|
this.createPicturesForCameraCore();
|
|
};
|
|
|
|
const _Scene_Battle_createSpriteset =
|
|
Scene_Battle.prototype.createSpriteset;
|
|
Scene_Battle.prototype.createSpriteset = function () {
|
|
_Scene_Battle_createSpriteset.apply(this, arguments);
|
|
this.createPicturesForCameraCore();
|
|
};
|
|
|
|
Spriteset_Base.prototype.createPictures = function () {};
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Yanfly Engine Core Compatibility
|
|
//-----------------------------------------------------------------------------
|
|
|
|
if (Imported.YEP_CoreEngine && _.fixYan1) {
|
|
Sprite.prototype.updateTransform = function () {
|
|
PIXI.Sprite.prototype.updateTransform.call(this);
|
|
this.worldTransform.tx += this._offset.x;
|
|
this.worldTransform.ty += this._offset.y;
|
|
};
|
|
}
|
|
})(SRD.CameraCore);
|