OMORI_Android/www.eng/js/plugins/Omori Photo Album.js
2024-01-15 18:44:53 +03:00

2672 lines
105 KiB
JavaScript

//=============================================================================
// TDS Omori Photo Album
// Version: 1.0
//=============================================================================
// Add to Imported List
var Imported = Imported || {} ; Imported.TDS_OmoriPhotoAlbum = true;
// Initialize Alias Object
var _TDS_ = _TDS_ || {} ; _TDS_.OmoriPhotoAlbum = _TDS_.OmoriPhotoAlbum || {};
//=============================================================================
/*:
* @plugindesc
* Omori Photo Album Menu.
*
* @author TDS
*
*/
//=============================================================================
//=============================================================================
// ** Game_Interpreter
//-----------------------------------------------------------------------------
// The interpreter for running event commands.
//=============================================================================
// * Call Album Menu
//=============================================================================
Game_Interpreter.prototype.callAlbumMenu = function(itemId, interfaceMode = 1) {
SceneManager.push(Scene_OmoriPhotoAlbum);
SceneManager.prepareNextScene($dataItems[itemId], interfaceMode);
};
//=============================================================================
// * Set Picture in Album
//=============================================================================
Game_Interpreter.prototype.setPictureInAlbum = function(album, index, id) {
$gameParty.addPictureToAlbum(album, index, id);
};
//=============================================================================
// * Remove Picture in Album
//=============================================================================
Game_Interpreter.prototype.clearPictureInAlbum = function(album, index, id) {
$gameParty.removePictureToAlbum(album, index, id);
};
//melon edit
//=============================================================================
// ** Game_Party
//-----------------------------------------------------------------------------
// The game object class for the party. Information such as gold and items is
// included.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriPhotoAlbum.Game_Party_initialize = Game_Party.prototype.initialize;
//=============================================================================
// * Object Initialize
//=============================================================================
Game_Party.prototype.initialize = function() {
// Run Original Function
_TDS_.OmoriPhotoAlbum.Game_Party_initialize.call(this);
// Initialize Scanned Enemy List
this._albumPictures = {};
// Initialize the positions
this._albumPicturePositions = {}
};
//=============================================================================
// * Create Picture Album
//=============================================================================
Game_Party.prototype.createPictureAlbum = function(album) {
// Initialize Album if its undefined
if (this._albumPictures[album] === undefined) { this._albumPictures[album] = []; };
};
//=============================================================================
// * Create Picture Album
//=============================================================================
Game_Party.prototype.randomizeAlbumPicturePositions = function(album, pictures, force = false) {
// If album positions is undefined or forced
if (this._albumPicturePositions[album] === undefined || force) {
// Initialize Album
let list = this._albumPicturePositions[album] = pictures.clone();
// Set Index, Random Index, and Temporary Value
var index = 0, randomIndex = 0, tempValue = 0;
for (i = list.length - 1; i > 0; i -= 1) {
randomIndex = Math.floor(Math.random() * (i + 1));
temp = list[i];
list[i] = list[randomIndex];
list[randomIndex] = temp;
};
};
};
//=============================================================================
// * Add Picture to Album
//=============================================================================
Game_Party.prototype.albumSize = function(album) {
// Create Picture Album
this.createPictureAlbum(album);
// Return Album Size
return this._albumPictures[album].filter(Boolean).length
};
//=============================================================================
// * Add Picture to Album
//=============================================================================
Game_Party.prototype.addPictureToAlbum = function(album, index, id) {
// Create Picture Album
this.createPictureAlbum(album);
// Set Album Index Picture ID
this._albumPictures[album][index] = id;
};
//=============================================================================
// * Remove Picture from Album
//=============================================================================
Game_Party.prototype.removePictureToAlbum = function(album, index, id) {
// Create Picture Album
this.createPictureAlbum(album);
// Set Album Index Picture ID
this._albumPictures[album][index] = undefined;
};
//melon edit
//=============================================================================
// * Add Picture to Album
//=============================================================================
Game_Party.prototype.getAlbumPictureAtIndex = function(album, index) {
// If Album is undefined return
if (this._albumPictures[album] === undefined) { return; };
// Return Album Picture at Index
return this._albumPictures[album][index];
};
//=============================================================================
// * Determine if Album has picture
//=============================================================================
Game_Party.prototype.albumHasPicture = function(album, index) {
// If Album is undefined return
if (this._albumPictures[album] === undefined) { return; };
// Determine if Album Contains Index
return this._albumPictures[album].contains(index);
}
_TDS_.OmoriPhotoAlbum.Scene_Map_needsFadeIn = Scene_Map.prototype.needsFadeIn;
Scene_Map.prototype.needsFadeIn = function() {
return (_TDS_.OmoriPhotoAlbum.Scene_Map_needsFadeIn.call(this) || SceneManager.isPreviousScene(Scene_OmoriPhotoAlbum));
};
//=============================================================================
// ** Scene_OmoriPhotoAlbum
//-----------------------------------------------------------------------------
// This scene shows the album
//=============================================================================
function Scene_OmoriPhotoAlbum() { this.initialize.apply(this, arguments);}
Scene_OmoriPhotoAlbum.prototype = Object.create(Scene_BaseEX.prototype);
Scene_OmoriPhotoAlbum.prototype.constructor = Scene_OmoriPhotoAlbum;
//=============================================================================
// * Object Initialization
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.initialize = function() {
// Set Image Reservation ID
this._imageReservationId = 'photoAlbum';
// Super Call
Scene_BaseEX.prototype.initialize.call(this);
// Interface Mode (0: Place, 1: Browse)
this._interfaceMode = 0;
// Viewing Mode Flag
this._viewingMode = false;
// Placing Mode Flag
this._placingMode = false;
// Browsing Mode Flag
this._browsingMode = false;
// Set Viewing Message Flag to false
this._viewingMessage = false;
// Set Viewing Index to 0
this._viewingIndex = 0;
// Set Block All Input flag
this._blockAllInput = false;
// Reset Flip Show Count
this._flipShowCount = 0;
// Flip Show Delay
this._flipShowDelay = 100;
// Required Picture Amount
this._requiredPictures = 0;
// Starting Page
this._startingPage = 1;
};
//=============================================================================
// * Initialize Atlas Lists
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.initAtlastLists = function() {
// Run Original Function
Scene_BaseEX.prototype.initAtlastLists.call(this);
};
//=============================================================================
// * Prepare
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.prepare = function(item, interfaceMode = 0, requiredAmount = 0, page = 1) {
// Set Required Amount
this._requiredPictures = requiredAmount;
// Set Interface Mode
this._interfaceMode = interfaceMode;
// Set Starting Page
this._startingPage = page - 1;
// Initialize Album Data
this._albumData = {id: item.id};
// Set Album Data Properties
this._albumData.maxPages = Number(item.meta.AlbumMaxPages);
this._albumData.maxImages = Number(item.meta.AlbumMaxPictures);
this._albumData.group = item.meta.AlbumGroup.trim();
this._albumData.bookImageName = item.meta.AlbumBookImage.trim();
this._albumData.bookCoverImageName = item.meta.AlbumBookCoverImage.trim();
this._albumData.pageTextImageName = item.meta.AlbumTextPageImage.trim();
this._albumData.backgroundName = item.meta.AlbumBackground.trim();
this._albumData.backgroundParallax = item.meta.AlbumParallax.trim();
this._albumData.backgroundParallaxSpeed = new Point(Number(item.meta.ParallaxSpeedX), Number(item.meta.ParallaxSpeedY));
this._albumData.defaultBackImageName = item.meta.AlbumDefaultBackImage.trim();
// Initialize Picture Array
var pictures = [];
for (var i = 0; i < this._albumData.maxPages; i++) {
// Get Data
var data = item.meta["AlbumPage" + (i + 1) + "Pictures"]
// If Data Exist
if (data) {
// Get Ids
var ids = data.split(',').map(function(id) { return Number(id) });
// Join ID's to Pictures Array
pictures = pictures.concat(ids);
} else {
// Add Empty List
pictures = pictures.concat([0, 0, 0, 0, 0, 0]);
};
};
// Randomize Album Picture Positions
$gameParty.randomizeAlbumPicturePositions(this._albumData.group, pictures);
// // For testing remove when done
// for (var i = 0; i < pictures.length; i++) {
// if (i > 0) {
// $gameParty.addPictureToAlbum(this._albumData.group, i, pictures[i]);
// };
// };
// Set album Pictures Array
this._albumData.pictures = pictures;
// Initialize Album Items
this._albumData.albumItems = [];
// Get Items
var items = $gameParty.items().filter(function(item) { return item.meta.AlbumGraphicsName; }, this);
// Atlas Checks Types
var atlasChecks = ['thumbnailName', 'graphicsName', 'backGraphicsName'];
// Go Through Items
for (var i = 0; i < items.length; i++) {
// Get Item
var item = items[i];
// Item Data
var data = { id: item.id, group: item.meta.AlbumGroup.trim(), graphicsName: item.meta.AlbumGraphicsName.trim(), thumbnailName: item.meta.AlbumThumbnailName.trim(), text: item.meta.AlbumText.trim()};
if (item.meta.AlbumPlacingMessage) { data.placingMessage = item.meta.AlbumPlacingMessage.trim(); };
// If Item has Back Graphics name
if (item.meta.AlbumBackGraphicsName) {
// Set Back Graphics Name
data.backGraphicsName = item.meta.AlbumBackGraphicsName.trim();
} else {
// Set it from default back image name
data.backGraphicsName = this._albumData.defaultBackImageName;
};
// If Group Matches Album group add it to item list
if (data.group === this._albumData.group) { this._albumData.albumItems.push(data); };
// Go Through atlas checks
for (var i2 = 0; i2 < atlasChecks.length; i2++) {
// Get Check Name
var checkName = atlasChecks[i2];
// Get Bitmap Name
var bitmapName = '%1_%2'.format(data.group, data[checkName])
// Get Atlas Path
var atlasPath = 'img/pictures/' + bitmapName + '.png';
// Get Atlas Name
var atlasName = AtlasManager.getImageAtlasName(atlasPath);
// If Atlas name exists
if (atlasName) { this.addRequiredAtlas(atlasName); }
};
// // // FOR TESTING REMOVE WHEN DONE
// if (i > -1 && data.group === this._albumData.group) {
// // Add Picture to album
// $gameParty.addPictureToAlbum(data.group, i, data.id);
// };
};
// Load Background Images
if (this._albumData.backgroundParallax) { ImageManager.loadPicture('%1_%2'.format(this._albumData.group, this._albumData.backgroundParallax)) };
if (this._albumData.backgroundName) { ImageManager.loadPicture('%1_%2'.format(this._albumData.group, this._albumData.backgroundName)); };
// Go Through Max Pages
for (var i = 0; i < this._albumData.maxPages; i++) {
// Get Bitmap Name
var bitmapName = '%1_%2'.format(this._albumData.group, this._albumData.pageTextImageName + (i + 1));
// // Get Bitmap
// var bitmap = ImageManager.reservePicture(bitmapName, 0, this._imageReservationId);
// Get Atlas Path
var atlasPath = 'img/pictures/' + bitmapName + '.png';
// Get Atlas Name
var atlasName = AtlasManager.getImageAtlasName(atlasPath);
// If Atlas name exists
if (atlasName) { this.addRequiredAtlas(atlasName); }
};
// Add Required Atlas
this.addRequiredAtlas('PhotoAlbumCovers');
// Load Input Icons
ImageManager.loadInputIcons();
// Reserve Bitmap
ImageManager.reserveSystem('ACSArrows', 0, this._imageReservationId);
};
//=============================================================================
// * Start
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.start = function() {
this.startFadeIn(this.slowFadeSpeed());
// If Interface mode is 0 (Placing)
if (this._interfaceMode === 0) {
this.startPlacing();
} else {
this.startBrowsing();
}
};
//=============================================================================
// * Start Placing
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.startPlacing = function() {
// If tutorial switch is on
if ($gameSwitches.value(42)) {
this._blockAllInput = true;
this._albumPictureListWindow.y = Graphics.height
var messages = ['dreamworld_extras_misc.message_2', 'dreamworld_extras_misc.message_3'];
messages.forEach(function(message) {
this.queue(function() {
// Start Message
this.startMessage(message);
}.bind(this))
// Wait
this.queue('setWaitMode', 'message');
}, this);
this.queue('wait', 60);
this.queue(function() {
var duration = 15;
// Set Duration
var obj = this._albumPictureListWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: Graphics.height - this._albumPictureListWindow.height, opacity: 255}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
}.bind(this))
this.queue('wait', 15);
this.queue(function() {
this._albumPictureListWindow.activate();
this._albumPictureListWindow.select(0);
this._blockAllInput = false;
}.bind(this))
} else {
// Move Album Picture List window into screen
this._albumPictureListWindow.y = Graphics.height - this._albumPictureListWindow.height;
this._albumPictureListWindow.activate();
this._albumPictureListWindow.select(0);
};
};
//=============================================================================
// * Start Browsing
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.startBrowsing = function() {
// Move Album Picture List Outside the screen
this._albumPictureListWindow.y = Graphics.height;
// Move Album to center
this._albumSprite.y = ((Graphics.height - 320) / 2);
// Move Legend Window to Position
this._legendWindow.y = -6;
this._legendWindow.opacity = 255;
this._legendWindow.contentsOpacity = 255;
this._legendWindow.setTextList('browsing');
this._albumSprite._usePictureCursor = false;
this._albumSprite.activate();
// Set Browsing Mode to true
this._browsingMode = true;
};
//=============================================================================
// * Create
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.create = function() {
// Super Call
Scene_BaseEX.prototype.create.call(this);
// Create Background
this.createBackground();
this.createLegendWindow();
// Create Viewing Sprites
this.createPictureAlbum();
// Create Album Picture List Window
this.createAlbumPictureListWindow();
// Create Viewing Sprites
this.createViewingSprites();
// Create Message Window
this.createMessageWindow();
// Create Picture Cursor
this.createPictureCursor();
};
//=============================================================================
// * Create Background
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.createBackground = function() {
// Create Background Parallax
this._backgroundParallax = new TilingSprite();
this._backgroundParallax.move(0, 0, Graphics.width, Graphics.height);
this.addChild(this._backgroundParallax)
if (this._albumData.backgroundParallax) {
let bitmap = ImageManager.loadPicture('%1_%2'.format(this._albumData.group, this._albumData.backgroundParallax));
bitmap.addLoadListener(() => this._backgroundParallax.bitmap = bitmap)
};
// Create Background Sprite
this._backgroundSprite = new Sprite();
this.addChild(this._backgroundSprite);
if (this._albumData.backgroundName) {
let bitmap = ImageManager.loadPicture('%1_%2'.format(this._albumData.group, this._albumData.backgroundName));
bitmap.addLoadListener(() => this._backgroundSprite.bitmap = bitmap);
};
};
//=============================================================================
// * Create Legend Window
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.createLegendWindow = function() {
// Create Legend Window
this._legendWindow = new Window_OmoriAlbumLegend();
this._legendWindow.y = -this._legendWindow.height;
this._legendWindow.opacity = 0;
this._legendWindow.contentsOpacity = 0;
this.addChild(this._legendWindow)
}
//=============================================================================
// * Create Picture Cursor
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.createPictureCursor = function() {
// Create Picture Cursor
this._pictureCursor = new Sprite_OmoriAlbumPictureCursor(this._albumData);
this._pictureCursor.x = 42;
this._pictureCursor.y = 364;
this.addChild(this._pictureCursor);
};
//=============================================================================
// * Create Picture Album
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.createPictureAlbum = function() {
// Create Album Sprite
this._albumSprite = new Sprite_OmoriPictureAlbum(this._albumData, this._startingPage);
this._albumSprite.x = (Graphics.width - 453) / 2;
this._albumSprite.y = ((Graphics.height - 320) / 2) - 65;
this._albumSprite.deactivate();
this.addChild(this._albumSprite);
// Create Closed Album Sprite
this._closedAlbumSprite = new Sprite(ImageManager.loadPicture('%1_%2'.format(this._albumData.group, this._albumData.bookCoverImageName)))
this._closedAlbumSprite.anchor.set(0.5, 0.5)
this._closedAlbumSprite.x = Graphics.width / 2;
this._closedAlbumSprite.y = Graphics.height / 2;
this._closedAlbumSprite.visible = false;
this.addChild(this._closedAlbumSprite);
};
//=============================================================================
// * Create Album Picture List Window
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.createAlbumPictureListWindow = function() {
// var width = 453, height = 320;
this._albumPictureListWindow = new Window_OmoriPictureList(this._albumData);
this._albumPictureListWindow.x = 0;
this._albumPictureListWindow.y = Graphics.height - this._albumPictureListWindow.height;
this._albumPictureListWindow.setHandler('ok', this.startPicturePlacing.bind(this));
// this._albumPictureListWindow.setHandler('cancel', this.onPicturePlacingCancel.bind(this));
this.addChild(this._albumPictureListWindow);
// Set Album Sprite
// this._albumPictureListWindow._albumSprite = this._albumSprite;
}
//=============================================================================
// * Create Viewing Sprites
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.createViewingSprites = function() {
// Create Viewing Picture
this._viewingPicture = new Sprite_OmoriAlbumBigPicture();
this.addChild(this._viewingPicture);
// Create Viewing Picture Slide
this._viewingPictureSlide = new Sprite_OmoriAlbumBigPicture();
this.addChild(this._viewingPictureSlide);
// this._bigPictureSprite = new Sprite_OmoriAlbumBigPicture();
// this._bigPictureSprite.x = Graphics.width / 2;
// this._bigPictureSprite.y = Graphics.height / 2;
// this.addChild(this._bigPictureSprite );
// Get Pointer Bitmap
var pointerBitmap = ImageManager.loadSystem('ACSArrows');
// Create Box Bitmap
var boxBitmap = new Bitmap(45, 25);
boxBitmap.fillAll('rgba(0, 0, 0, 1)')
boxBitmap.fillRect(1, 1, boxBitmap.width - 2, boxBitmap.height - 2, 'rgba(255, 255, 255, 1)');
boxBitmap.fillRect(4, 4, boxBitmap.width - 8, boxBitmap.height - 8, 'rgba(0, 0, 0, 1)');
// // Get Pointer Bitmap
// var pointerBitmap = ImageManager.loadSystem('ACSArrows');
// // Create Box Bitmap
// var boxBitmap = new Bitmap(55, 40);
// boxBitmap.fillAll('rgba(0, 0, 0, 1)')
// boxBitmap.fillRect(1, 1, boxBitmap.width - 2, boxBitmap.height - 2, 'rgba(255, 255, 255, 1)');
// boxBitmap.fillRect(4, 4, boxBitmap.width - 8, boxBitmap.height - 8, 'rgba(0, 0, 0, 1)');
// Create Viewing Picture Left Box
this._viewingPictureLeftBox = new Sprite(boxBitmap);
this._viewingPictureLeftBox.x = -this._viewingPictureLeftBox.width;
this._viewingPictureLeftBox.y = (Graphics.height - this._viewingPictureLeftBox.height - 125) / 2;
this._viewingPictureLeftBox.opacity = 0;
this.addChild(this._viewingPictureLeftBox);
// Create Viewing Picture Box Pointer Sprite
this._viewingPictureLeftBox._pointerSprite = new Sprite(pointerBitmap);
this._viewingPictureLeftBox._pointerSprite.x = 4;
this._viewingPictureLeftBox._pointerSprite.y = -2;
this._viewingPictureLeftBox._pointerSprite.setFrame(2 * 32, 0, 32, 32);
this._viewingPictureLeftBox.addChild(this._viewingPictureLeftBox._pointerSprite);
// Create Viewing Picture Right Box
this._viewingPictureRightBox = new Sprite(boxBitmap);
this._viewingPictureRightBox.x = (Graphics.width - this._viewingPictureRightBox.width);
this._viewingPictureRightBox.y = (Graphics.height - this._viewingPictureRightBox.height - 125) / 2;
this._viewingPictureRightBox.opacity = 0;
this.addChild(this._viewingPictureRightBox);
// Create Viewing Picture Box Pointer Sprite
this._viewingPictureRightBox._pointerSprite = new Sprite(pointerBitmap);
this._viewingPictureRightBox._pointerSprite.x = 38;
this._viewingPictureRightBox._pointerSprite.y = -2;
this._viewingPictureRightBox._pointerSprite.scale.x = -1;
this._viewingPictureRightBox._pointerSprite.setFrame(2 * 32, 0, 32, 32);
this._viewingPictureRightBox.addChild(this._viewingPictureRightBox._pointerSprite);
// Get Flip Text
var text = LanguageManager.getPluginText('albumMenu', 'flipText');
var flipWidth = pointerBitmap.measureTextWidth(text);
var flipBitmap = new Bitmap(flipWidth + 80, 30);
flipBitmap.drawInputIcon('shift', 0, 4, false);
flipBitmap.drawText(text, 0, -5, flipBitmap.width, flipBitmap.height, 'center');
// flipBitmap.blt(pointerBitmap, 2 * 32, 0, 32, 29, 4, 0)
// flipBitmap.blt(pointerBitmap, 1 * 32, 0, 32, 29, flipBitmap.width - 36, 0)
// Create Flip Picture Box
this._flipPictureBox = new Sprite(flipBitmap)
this._flipPictureBox.x = (Graphics.width - flipBitmap.width) / 2
this._flipPictureBox.y = Graphics.height - 30;
this._flipPictureBox.opacity = 0;
this.addChild(this._flipPictureBox);
};
//=============================================================================
// * Create Message Window
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.createMessageWindow = function() {
// Create Message Window
this._messageWindow = new Window_Message();
this.addChild(this._messageWindow);
this._messageWindow.subWindows().forEach(function(window) {
this.addChild(window);
}, this);
};
//=============================================================================
// * Frame Update
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.update = function() {
// Super Call
Scene_BaseEX.prototype.update.call(this);
// Update Parallax Movement
this.updateParallaxMovement();
// Return if all input is being blocked
if (this._blockAllInput) { return; }
if(!!this._closedAlbumSprite.visible) {
if(Input.isTriggered("ok") || Input.isTriggered("cancel")) {
this._blockAllInput = true;
this.queue('startFadeOut', 30, false)
this.queue('wait', 30);
this.queue(() => this.popScene());
return Input.clear();
}
}
// If Viewing Message
if (this._viewingMessage) {
// End Message
if (!$gameMessage.isBusy()) { this.endMessage(); };
return;
} else if (this._placingMode) {
// Update Picture Placgin
this.updatePicturePlacing();
return
} else if (this._browsingMode) {
// If Shift is triggered
if (Input.isTriggered('shift')) {
// Get Picture at index
var picture = this._albumSprite.picture();
// If Picture exists
if (picture && !!this.hasComment(picture)) {
// Start Message
this.startMessage(picture.text)
};
return
};
// If Cancel is triggered
if (Input.isTriggered('cancel')) {
// If moving return
if (this.move.isMoving()) { return; }
// Block all input
this._blockAllInput = true;
// Pop scene
this.popScene();
return;
};
// If Ok is triggered
if (Input.isTriggered('ok')) {
// Get Picture at index
var picture = this._albumSprite.picture();
// If Picture Exists
if (picture) {
// Start Viewing Picture
this.startViewingPicture();
};
return;
};
} else if (this._viewingMode) {
// Update Viewing Mode
this.updateViewingMode();
} else {
// If Cancel is triggered
if (Input.isTriggered('cancel')) {
// If moving return
if (this.move.isMoving()) { return; }
// Get Album Size
var albumSize = $gameParty.albumSize(this._albumData.group);
if (albumSize < this._requiredPictures) { return; }
this._albumPictureListWindow.deactivate();
this._blockAllInput = true;
// Start Fadeout
this.queue('startFadeOut', 30, false)
this.queue('wait', 30);
this.queue('popScene');
return;
};
}
};
//=============================================================================
// * Update Parallax Movement
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.updateParallaxMovement = function() {
// Get Speed
var speed = this._albumData.backgroundParallaxSpeed;
// Move Parallax Origin X & Y
this._backgroundParallax.origin.x += speed.x;
this._backgroundParallax.origin.y += speed.y;
};
//=============================================================================
// * Start Message
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.startMessage = function(message) {
// Show Language Message
$gameMessage.showLanguageMessage(message);
// Deactivate Album Sprite
this._albumSprite.deactivate();
// Set Duration
var duration = 15;
if (this._browsingMode) {
var obj = this._albumSprite;
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: ((Graphics.height - 320) / 2) - 55, opacity: 255}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
// Set Duration
var obj = this._albumPictureListWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: Graphics.height, opacity: 255}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
var obj = this._legendWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: -obj.height, opacity: 0, contentsOpacity: 0}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
}
// If Viewing Message
this._viewingMessage = true;
};
//=============================================================================
// * End Message
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.endMessage = function() {
// If Viewing Message
this._viewingMessage = false;
// If in browsing mode
if (this._browsingMode) {
// Set Duration
var duration = 15;
var obj = this._albumSprite;
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: ((Graphics.height - 320) / 2), opacity: 255}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
data.onFinish = function() {
this._albumSprite.activate();
}.bind(this);
var obj = this._legendWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: -6, opacity: 255, contentsOpacity: 255}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
};
//=============================================================================
// * Frame Update
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.updatePicturePlacing = function() {
// If Cancel Input
if (Input.isTriggered('cancel')) {
// End Picture Placing
this.endPicturePlacing();
return;
};
// If Ok Input is triggered
if (Input.isTriggered('ok')) {
// Place Picture in Album
this.placePictureInAlbum();
return;
};
};
//=============================================================================
// * Start Picture Placing
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.startPicturePlacing = function() {
// Set Placing Mode flag to true
this._placingMode = true;
// Get Position and Picture
var pos = this._albumPictureListWindow.pictureCursorPosition();
var picture = this._albumPictureListWindow.picture();
// this._albumSprite.activate();
this.queue(function() {
this._albumPictureListWindow.clearSelected();
this._albumPictureListWindow._index = -1;
// this._albumPictureListWindow.deselect();
// Set Picture Cursor Position
this._pictureCursor.x = pos.x;
this._pictureCursor.y = pos.y;
// Select Picture Cursor
this._pictureCursor.select();
// Set Picture Data
this._pictureCursor.setPictureData(picture);
}.bind(this))
// Wait
this.queue('wait', 8);
this.queue(function() {
// Set Duration
var duration = 15;
var obj = this._albumPictureListWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: Graphics.height, opacity: 0, contentsOpacity: 0}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
data.onFinish = function() {
// this._albumPictureListWindow.activate();
}.bind(this);
this.move.startMove(data);
var obj = this._legendWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: -6, opacity: 255, contentsOpacity: 255}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
var obj = this._albumSprite;
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: ((Graphics.height - 320) / 2), opacity: 255}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
this._albumSprite._pictureCursor = this._pictureCursor;
this._albumSprite._index = 0;
this._albumSprite.setHome(obj.x, ((Graphics.height - 320) / 2));
this._albumSprite.updateCursorPosition();
}.bind(this))
// Wait
this.queue('setWaitMode', 'movement');
this.queue(function() {
this._albumSprite.activate();
// Set Placing Picture
this._albumSprite.setPlacingPicture(picture);
}.bind(this))
};
//=============================================================================
// * End Picture Placing
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.endPicturePlacing = function() {
// Set Placing Mode flag to true
this._placingMode = false;
// Set Album Sprite Picture Cursor to null
this._albumSprite._pictureCursor = null;
this._albumSprite.hidePictureBorder();
this._albumSprite.deactivate();
// Set Block All Input flag
this._blockAllInput = true;
// Get Position and Picture
var picture = this._pictureCursor._picture;
// Refresh Album Picture List Window
this._albumPictureListWindow.refresh();
if (picture) {
this._albumPictureListWindow.selectPictureByID(picture.id);
this._albumPictureListWindow.clearSelected();
} else {
this._albumPictureListWindow.select(0);
};
// Get Position
var pos = this._albumPictureListWindow.pictureCursorPosition();
this.queue(function() {
// Set Duration
var duration = 15;
var obj = this._albumPictureListWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: Graphics.height - obj.height, opacity: 255, contentsOpacity: 255}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
data.onFinish = function() {
// this._albumPictureListWindow.activate();
}.bind(this);
this.move.startMove(data);
var obj = this._legendWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: -obj.height, opacity: 0, contentsOpacity: 0}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
var obj = this._albumSprite;
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: ((Graphics.height - 320) / 2) - 65, opacity: 255}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
var obj = this._pictureCursor;
var data = { obj: obj, properties: ['x', 'y'], from: {x: obj.x, y: obj.y}, to: {x: pos.x, y: (Graphics.height - this._albumPictureListWindow.height) + 15 }, durations: {x: duration, y: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
}.bind(this))
// Wait
this.queue('setWaitMode', 'movement');
this.queue(function() {
this._pictureCursor.deselect();
}.bind(this))
this.queue('wait', 5);
this.queue(function() {
// Set Block All Input flag
this._blockAllInput = false;
// Update Input
Input.update();
// Set Picture Data to null
this._pictureCursor.setPictureData(null);
this._albumPictureListWindow.redrawCurrentItem();
this._albumPictureListWindow.activate();
}.bind(this))
};
//=============================================================================
// * Place Picture in Album
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.placePictureInAlbum = function() {
// Get Position and Picture
var picture = this._pictureCursor._picture;
// Get Picture ID
var pictureId = this._albumData.pictures[this._albumSprite.pictureIndex()];
// If Picture Matches Picture ID
if (picture.id === pictureId) {
// Set Block All Input flag
this._blockAllInput = true;
// Set Placing mode to false
this._placingMode = false;
// Deselect Picture Cursor
this.queue(function() { this._pictureCursor.deselect(); }.bind(this))
this.queue('wait', 5);
this.queue(function() {
// Get Page Index
var pageIndex = this._albumSprite.pictureIndex();
var albumSlotId = this._albumData.pictures[pageIndex];
// Add Picture to album
$gameParty.addPictureToAlbum(this._albumData.group, pageIndex, picture.id);
// Refresh Page
this._albumSprite.refreshPage(2);
// Refresh Album Picture List Window
this._albumPictureListWindow.refresh();
// Hide Border
this._albumSprite.hidePictureBorder();
// Set Album Sprite Picture Cursor to null
this._albumSprite._pictureCursor = null;
this._albumSprite.hidePictureBorder();
this._albumSprite.deactivate();
// Set Picture Data to null
this._pictureCursor.setPictureData(null);
}.bind(this))
if (picture.placingMessage) {
this.queue(function() {
// Start Message
this.startMessage(picture.placingMessage);
}.bind(this))
// Wait
this.queue('setWaitMode', 'message');
};
this.queue(function() {
// If Album is full
if ($gameParty.albumSize(this._albumData.group) >= this._albumData.maxImages) {
this.queue('startAlbumFullAnimation')
return
};
// Set Duration
this._albumPictureListWindow.select(0); // For not having the effect of back;
var duration = 15;
var obj = this._albumPictureListWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: Graphics.height - obj.height, opacity: 255, contentsOpacity: 255}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
data.onFinish = function() {
// this._albumPictureListWindow.activate();
}.bind(this);
this.move.startMove(data);
var obj = this._legendWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: -obj.height, opacity: 0, contentsOpacity: 0}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
var obj = this._albumSprite;
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: ((Graphics.height - 320) / 2) - 65, opacity: 255}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
}.bind(this))
// Wait
this.queue('setWaitMode', 'movement');
this.queue(function() {
this._albumPictureListWindow.activate();
// Set Block All Input flag
this._blockAllInput = false;
}.bind(this))
};
};
//=============================================================================
// * Start Album Full animation
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.startAlbumFullAnimation = function() {
// Start Fadeout
this.queue('startFadeOut', 30, false)
this.queue('wait', 40);
// Set Block All Input flag
this._blockAllInput = true;
let needsCoverToShow = this._albumData.id !== 914 || (this._albumData.id === 914 && $gameMap.mapId() === 393)
if (needsCoverToShow) {
this.queue(function() {
this._albumSprite.visible = false;
this._legendWindow.visible = false;
this._legendWindow.deactivate();
// Deactivate album
this._albumSprite.deactivate();
this._albumPictureListWindow.deactivate();
// Make Closed Album Sprite Visible
this._closedAlbumSprite.visible = true;
}.bind(this))
this.queue('startFadeIn', 30, false)
this.queue('wait', 30);
this.queue(() => {
this._blockAllInput = false;
})
return;
}
this.queue(function() {
this.popScene();
// // Set Block All Input flag
// this._blockAllInput = false;
}.bind(this))
};
Scene_OmoriPhotoAlbum.prototype.hasComment = function(picture) {
if(!picture) {return false;}
if(!picture.text) {return false;}
let data = LanguageManager.getMessageData(picture.text)
return data.text !== "...";
}
//=============================================================================
// * Show Viewing Picture
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.startViewingPicture = function() {
// Set Duration
var duration = 25;
// Get Picture at index
var picture = this._albumSprite.picture();
// Set viewing mode to true
this._viewingMode = true;
// Set Browsing mode to false
this._browsingMode = false;
// Set Viewing Index
this._viewingIndex = (this._albumSprite._page * this._albumSprite.maxPagePictures()) + this._albumSprite._index;
// Set Flip Delay Count
this._flipShowDelay = -1;
// Setup Viewing Picture Bitmaps
this._viewingPicture._facing = 0;
this._viewingPicture.setupBitmaps(ImageManager.loadPicture('%1_%2'.format(this._albumData.group, picture.graphicsName)), ImageManager.loadPicture('%1_%2'.format(this._albumData.group, picture.backGraphicsName)))
this._viewingPicture.x = (Graphics.width / 2)
this._viewingPicture.y = Graphics.height + (this._viewingPicture.height / 2);
// Deactivate album
this._albumSprite.deactivate();
var obj = this._viewingPicture;
var data = { obj: obj, properties: ['x', 'y', 'opacity'], from: {x: obj.x, y: obj.y, opacity: obj.opacity}, to: {x: Graphics.width / 2, y: Graphics.height / 2, opacity: 255}, durations: {x: duration, y: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
duration = 15;
var obj = this._albumSprite;
// var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 0}, durations: {opacity: duration}}
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: Graphics.height , opacity: 0}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
duration = 25;
var obj = this._legendWindow;
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: -obj.height, opacity: 0, contentsOpacity: 0}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
if(!!this.hasComment(picture)) {
duration = 25;
var obj = this._flipPictureBox
var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 255}, durations: {opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
}
if (this.previousViewingPictureExists()) {
var obj = this._viewingPictureLeftBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: 80, opacity: 255}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
if (this.nextViewingPictureExists()) {
var obj = this._viewingPictureRightBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: (Graphics.width - obj.width) - 80, opacity: 255}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
};
//=============================================================================
// * End Viewing Picture
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.endViewingPicture = function() {
// Set viewing mode to false
this._viewingMode = false;
// Set Browsing mode to true
this._browsingMode = true;
var pageMax = this._albumSprite.maxPagePictures();
var page = Math.floor(this._viewingIndex / pageMax);
// Set Page
this._albumSprite._page = page;
this._albumSprite._index = this._viewingIndex % pageMax;
this._albumSprite.updateCursorPosition();
this._albumSprite.refreshPage(2);
// Set Duration
var duration = 25;
var obj = this._albumSprite;
// var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 255}, durations: {opacity: duration}}
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: ((Graphics.height - 320) / 2), opacity: 255}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
data.onFinish = function() {
this._viewingMode = false;
this._albumSprite.activate();
}.bind(this);
duration = 15;
var obj = this._viewingPicture;
var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: Graphics.height + (obj.height / 2), opacity: 0}, durations: {y: duration, opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
duration = 25;
var obj = this._legendWindow;
// var data = { obj: obj, properties: ['y', 'opacity'], from: {y: obj.y, opacity: obj.opacity}, to: {y: 0, opacity: 255}, durations: {y: duration, opacity: duration}};
var data = { obj: obj, properties: ['y', 'opacity', 'contentsOpacity'], from: {y: obj.y, opacity: obj.opacity, contentsOpacity: obj.contentsOpacity}, to: {y: -6, opacity: 255, contentsOpacity: 255}, durations: {y: duration, opacity: duration, contentsOpacity: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
duration = 15;
var obj = this._viewingPictureLeftBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: -obj.width, opacity: 0}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
var obj = this._viewingPictureRightBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: (Graphics.width + obj.width), opacity: 0}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
duration = 10;
var obj = this._flipPictureBox
var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 0}, durations: {opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
};
//=============================================================================
// * Update Viewing Mode
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.updateViewingMode = function() {
/*if (this._flipShowDelay > 0) { this._flipShowDelay--; }
if (this._flipShowDelay === 0) {
var duration = 10;
var obj = this._flipPictureBox
var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 0}, durations: {opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
// Set Flip Show Delay to minus 1
this._flipShowDelay = -1;
};*/
// If not moving
if (!this.move.isMoving() && !this._viewingPicture.isFlipping()) {
// If Shift is triggered
if (Input.isTriggered('shift')) {
// Get Page max and page
var pageMax = this._albumSprite.maxPagePictures();
var page = Math.floor(this._viewingIndex / pageMax);
// Set Page
this._albumSprite._page = page;
this._albumSprite._index = this._viewingIndex % pageMax;
// Get Picture at index
var picture = this._albumSprite.picture();
// If Picture exists
if (picture && !!this.hasComment(picture)) {
// Start Message
this.startMessage(picture.text);
};
return
};
// If Left Input
if (Input.isRepeated('left')) {
this.showPrevViewingPicture();
// Start Toggle Flip
// this._viewingPicture.startToggleFlip();
return
};
// If Right Input
if (Input.isRepeated('right')) {
// Start Toggle Flip
this.showNextViewingPicture();
// this._viewingPicture.startToggleFlip();
return
};
// If Left Input
if (Input.isRepeated('up')) {
// this.showPrevViewingPicture();
return
};
// If Right Input
if (Input.isRepeated('down')) {
// this.showNextViewingPicture();
return
};
// If Cancelled
if (Input.isTriggered('cancel')) {
// End Picture Viewing
this.endViewingPicture();
return;
};
};
};
//=============================================================================
// * UPDATE SHIFT BOX
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.updateShiftToRead = function(picture) {
if(!!this.hasComment(picture)) {
duration = 25;
var obj = this._flipPictureBox
var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 255}, durations: {opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
}
else {
duration = 10;
var obj = this._flipPictureBox
var data = { obj: obj, properties: ['opacity'], from: {opacity: obj.opacity}, to: {opacity: 0}, durations: {opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
}
}
//=============================================================================
// * Show Next Picture
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.showNextViewingPicture = function(duration) {
// Get Next Picture
var nextPicture;
// Get Max Per Page
var maxPerPage = this._albumSprite.maxPagePictures();
// Go Through Pictures
for (var i = this._viewingIndex + 1; i <= this._albumData.maxImages; i++) {
// Get Page Index
var pageIndex = i % maxPerPage;
// Get Page
var page = Math.floor(i / maxPerPage);
// Get Picture
var picture = this._albumSprite.picture(pageIndex, page);
// If Picture
if (picture) {
// Set Next Picture
nextPicture = picture;
// Set Viewing Index
this._viewingIndex = i;
break
};
};
if (this.nextViewingPictureExists()) {
// Set Duration
var duration = 15;
var obj = this._viewingPictureRightBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: (Graphics.width - obj.width) - 80, opacity: 255}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
} else {
// Set Duration
var duration = 15;
var obj = this._viewingPictureRightBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: (Graphics.width + obj.width), opacity: 0}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
if (this.previousViewingPictureExists()) {
// Set Duration
var duration = 15;
var obj = this._viewingPictureLeftBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: 80, opacity: 255}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
} else {
// Set Duration
var duration = 15;
var obj = this._viewingPictureLeftBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: -obj.width, opacity: 0}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
// If Next Picture Exists
if (nextPicture) {
// Set Duration
AudioManager.playSe({name: "SE_turn_page", pan: 0, pitch: 100, volume: 90});
var duration = 25;
var obj = this._viewingPicture;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: Graphics.width / 2, opacity: 0}, durations: {x: duration, opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
// Reset Sliding Picture
this._viewingPictureSlide.x = Graphics.width + (this._viewingPicture.width / 2);
this._viewingPictureSlide.y = Graphics.height / 2
// this._viewingPictureSlide.bitmap = ImageManager.loadPicture('%1_%2'.format(this._albumData.group, nextPicture.graphicsName));
this._viewingPictureSlide.setupBitmaps(ImageManager.loadPicture('%1_%2'.format(this._albumData.group, nextPicture.graphicsName)), ImageManager.loadPicture('%1_%2'.format(this._albumData.group, nextPicture.backGraphicsName)));
this.updateShiftToRead(nextPicture);
var obj = this._viewingPictureSlide;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: Graphics.width / 2, opacity: 255}, durations: {x: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
data.onFinish = this.onPictureShowFinish.bind(this);
this.move.startMove(data);
};
};
//=============================================================================
// * Show Prev Picture
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.showPrevViewingPicture = function(duration) {
// Get Prev Picture
var prevPicture;
// Get Max Per Page
var maxPerPage = this._albumSprite.maxPagePictures();
// Go Through Pictures
for (var i = this._viewingIndex - 1; i >= 0; i--) {
// Get Page Index
var pageIndex = i % maxPerPage;
// Get Page
var page = Math.floor(i / maxPerPage);
// Get Picture
var picture = this._albumSprite.picture(pageIndex, page);
// If Picture
if (picture) {
// Set Prev Picture
prevPicture = picture;
// Set Viewing Index
this._viewingIndex = i;
break
};
};
if (this.nextViewingPictureExists()) {
// Set Duration
var duration = 15;
var obj = this._viewingPictureRightBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: (Graphics.width - obj.width) - 80, opacity: 255}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
} else {
// Set Duration
var duration = 15;
var obj = this._viewingPictureRightBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: (Graphics.width + obj.width), opacity: 0}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
if (this.previousViewingPictureExists()) {
// Set Duration
var duration = 15;
var obj = this._viewingPictureLeftBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: 80, opacity: 255}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
} else {
// Set Duration
var duration = 15;
var obj = this._viewingPictureLeftBox;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: -obj.width, opacity: 0}, durations: {x: duration, opacity: duration}};
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
// If Previous Picture Exists
if (prevPicture) {
// Set Duration
AudioManager.playSe({name: "SE_turn_page", pan: 0, pitch: 100, volume: 90});
var duration = 25;
var obj = this._viewingPicture;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: Graphics.width / 2, opacity: 0}, durations: {x: duration, opacity: duration}}
data.easing = Object_Movement.easeInCirc;
this.move.startMove(data);
// Reset Sliding Picture
this._viewingPictureSlide.x = -(Graphics.width + (this._viewingPicture.width / 2));
this._viewingPictureSlide.y = Graphics.height / 2
this.updateShiftToRead(prevPicture);
// this._viewingPictureSlide.bitmap = ImageManager.loadPicture('%1_%2'.format(this._albumData.group, prevPicture.graphicsName));
this._viewingPictureSlide.setupBitmaps(ImageManager.loadPicture('%1_%2'.format(this._albumData.group, prevPicture.graphicsName)), ImageManager.loadPicture('%1_%2'.format(this._albumData.group, prevPicture.backGraphicsName)));
var obj = this._viewingPictureSlide;
var data = { obj: obj, properties: ['x', 'opacity'], from: {x: obj.x, opacity: obj.opacity}, to: {x: Graphics.width / 2, opacity: 255}, durations: {x: duration, opacity: duration}}
data.easing = Object_Movement.easeOutCirc;
data.onFinish = this.onPictureShowFinish.bind(this);
this.move.startMove(data);
};
};
//=============================================================================
// * Show Prev Picture
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.onPictureShowFinish = function() {
// Set Facing to 0
this._viewingPicture._facing = 0;
// Set Front & Back Bitmaps
this._viewingPicture.setupBitmaps(this._viewingPictureSlide._frontBitmap, this._viewingPictureSlide._backBitmap);
// this._viewingPicture.x = 0;
// this._viewingPicture.y = 0;
this._viewingPicture.opacity = 255;
// this._viewingPicture.x = Graphics.width;
this._viewingPictureSlide.opacity = 0;;
};
//=============================================================================
// * Determine if Next Viewing Picture Exists
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.nextViewingPictureExists = function() {
// Get Next Picture
var nextPicture;
// Get Max Per Page
var maxPerPage = this._albumSprite.maxPagePictures();
// Go Through Pictures
for (var i = this._viewingIndex + 1; i <= this._albumData.maxImages; i++) {
// Get Page Index
var pageIndex = i % maxPerPage;
// Get Page
var page = Math.floor(i / maxPerPage);
// Get Picture
var picture = this._albumSprite.picture(pageIndex, page);
// If Picture
if (picture) {
// Set Next Picture
nextPicture = picture;
break
};
};
// Return Next Picture
return nextPicture;
};
//=============================================================================
// * Determine if Previous Viewing Picture Exists
//=============================================================================
Scene_OmoriPhotoAlbum.prototype.previousViewingPictureExists = function() {
// Get Prev Picture
var prevPicture;
// Get Max Per Page
var maxPerPage = this._albumSprite.maxPagePictures();
// Go Through Pictures
for (var i = this._viewingIndex - 1; i >= 0; i--) {
// Get Page Index
var pageIndex = i % maxPerPage;
// Get Page
var page = Math.floor(i / maxPerPage);
// Get Picture
var picture = this._albumSprite.picture(pageIndex, page);
// If Picture
if (picture) {
// Set Prev Picture
prevPicture = picture;
break
};
};
// Return Previous Picture
return prevPicture
};
//=============================================================================
// ** Sprite_OmoriAlbumPictureCursor
//-----------------------------------------------------------------------------
// This sprite is used to display the picture album.
//=============================================================================
function Sprite_OmoriAlbumPictureCursor() { this.initialize.apply(this, arguments);}
Sprite_OmoriAlbumPictureCursor.prototype = Object.create(Sprite.prototype);
Sprite_OmoriAlbumPictureCursor.prototype.constructor = Sprite_OmoriAlbumPictureCursor;
//=============================================================================
// * Initialize Object
//=============================================================================
Sprite_OmoriAlbumPictureCursor.prototype.initialize = function(data) {
// Set Album Data
this._albumData = data;
// Super Call
Sprite.prototype.initialize.call(this);
// Set Picture to null
this._picture = null;
// Create Movement Object
this.move = new Object_Movement();
// Create Sprites
this.createSprites();
// Selected flag
this._selected = false;
};
//=============================================================================
// * Create Sprites
//=============================================================================
Sprite_OmoriAlbumPictureCursor.prototype.createSprites = function() {
// Create Shadow Sprite
this._shadowSprite = new Sprite(ImageManager.loadPicture('photo_shadow'));
this._shadowSprite.visible = false;
this.addChild(this._shadowSprite);
// Create Picture Sprite
this._pictureSprite = new Sprite();
this._pictureSprite.x = -15;
this._pictureSprite.y = -15;
this.addChild(this._pictureSprite);
};
//=============================================================================
// * Select or Deselect
//=============================================================================
Sprite_OmoriAlbumPictureCursor.prototype.select = function() { this._selected = true; };
Sprite_OmoriAlbumPictureCursor.prototype.deselect = function() { this._selected = false; };
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_OmoriAlbumPictureCursor.prototype.setPictureData = function(picture) {
// Set Picture Data
this._picture = picture;
// If Picture Exists
if (this._picture) {
// Set Picture Bitmap
this.setPictureBitmap(ImageManager.loadPicture('%1_%2'.format(this._albumData.group, picture.thumbnailName)))
} else {
// Set Picture Bitmap
this.setPictureBitmap(null);
}
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_OmoriAlbumPictureCursor.prototype.setPictureBitmap = function(bitmap = null) {
// Set Picture Sprite Bitmap
this._pictureSprite.bitmap = bitmap;
// Set Shadow Sprite Visibility
this._shadowSprite.visible = bitmap !== null
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_OmoriAlbumPictureCursor.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// Update Move
this.move.update();
// Update Selected Animation
this.updateSelectedAnimation();
};
//=============================================================================
// * Update Selected Animation
//=============================================================================
Sprite_OmoriAlbumPictureCursor.prototype.updateSelectedAnimation = function() {
// If Selected
if (this._selected) {
if ( this._pictureSprite.x > -7) { this._pictureSprite.x = Math.max(this._pictureSprite.x - 1, -7); };
if ( this._pictureSprite.y > -7) { this._pictureSprite.y = Math.max(this._pictureSprite.y - 1, -7); };
} else {
if ( this._pictureSprite.x < 0) { this._pictureSprite.x = Math.min(this._pictureSprite.x + 1, 0); };
if ( this._pictureSprite.y < 0) { this._pictureSprite.y = Math.min(this._pictureSprite.y + 1, 0); };
};
};
//=============================================================================
// ** Sprite_OmoriAlbumBigPicture
//-----------------------------------------------------------------------------
// This sprite is used to display a large flippable picture.
//=============================================================================
function Sprite_OmoriAlbumBigPicture() { this.initialize.apply(this, arguments);}
Sprite_OmoriAlbumBigPicture.prototype = Object.create(Sprite.prototype);
Sprite_OmoriAlbumBigPicture.prototype.constructor = Sprite_OmoriAlbumBigPicture;
//=============================================================================
// * Initialize Object
//=============================================================================
Sprite_OmoriAlbumBigPicture.prototype.initialize = function(data) {
// Super Call
Sprite.prototype.initialize.call(this);
// Set Anchor
this.anchor.set(0.5, 0.5);
// Set Flipping Values
this._flipCount = 0;
this._flipTarget = 0;
this._facing = 0;
};
//=============================================================================
// * Determine if Flipping
//=============================================================================
Sprite_OmoriAlbumBigPicture.prototype.isFlipping = function() { return this._flipCount > 0; };
//=============================================================================
// * Setup Bitmaps
//=============================================================================
Sprite_OmoriAlbumBigPicture.prototype.setupBitmaps = function(front, back, refresh = true) {
// Set Front and Back Bitmaps
this._frontBitmap = front;
this._backBitmap = back;
// Set Bitmap
this.bitmap = this._facing === 0 ? this._frontBitmap : this._backBitmap;
};
//=============================================================================
// * Start Flip
//=============================================================================
Sprite_OmoriAlbumBigPicture.prototype.startFlip = function(facing, duration = 10) {
// If Facing is not the same as current one
if (this._facing !== facing) {
// Set Flipping Values
this._facing = facing;
this._flipCount = duration;
this._flipPhase = 0;
this._flipTarget = 0;
};
};
//=============================================================================
// * Start Toggle Flip
//=============================================================================
Sprite_OmoriAlbumBigPicture.prototype.startToggleFlip = function(duration) {
// Start Flip
this.startFlip((this._facing + 1) % 2, duration);
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_OmoriAlbumBigPicture.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// Update Flipping Animation
this.updateFlippingAnimation();
};
//=============================================================================
// * Update Flipping Animation
//=============================================================================
Sprite_OmoriAlbumBigPicture.prototype.updateFlippingAnimation = function() {
// If Flip count is more than 0.
if (this._flipCount > 0) {
var d = this._flipCount;
var t = this._flipTarget;
this.scale.x = (this.scale.x * (d - 1) + this._flipTarget) / d;
// Decrease Flip Count
this._flipCount--;
// If Flip count is 0 and flip target is 0
if (this._flipCount === 0 && this._flipTarget === 0) {
// Increase Flip Target
this._flipTarget = (this._flipTarget + 1) % 2
this.bitmap = this._facing === 0 ? this._frontBitmap : this._backBitmap;
this._flipCount = 10;
}
};
};
//=============================================================================
// ** Sprite_OmoriPictureAlbum
//-----------------------------------------------------------------------------
// This sprite is used to display the picture album.
//=============================================================================
function Sprite_OmoriPictureAlbum() { this.initialize.apply(this, arguments);}
Sprite_OmoriPictureAlbum.prototype = Object.create(Sprite.prototype);
Sprite_OmoriPictureAlbum.prototype.constructor = Sprite_OmoriPictureAlbum;
//=============================================================================
// * Initialize Object
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.initialize = function(data, page = 0) {
// Super Call
Sprite.prototype.initialize.call(this);
// Set Data
this._albumData = data;
// Active flag
this._active = true;
// Set Index
this._index = 0;
// Set Page
this._page = page;
// Picture Positions
this._picturePositions = [[18, 19], [119, 108], [18, 202], [245, 19], [346, 108], [245, 202]];
// Set Home
this._home = new Point(0, 0);
// Picture Object
this._placingPicture = null;
// Use Picture Cursor Flag
this._usePictureCursor = true;
// Create Movement Object
this.move = new Object_Movement();
// Create Background Sprite
this.createBackgroundSprite();
// Create Contents Sprite
this.createContentsSprite();
// Create Picture Border Sprite
this.createPictureBorderSprite();
// Create Page Sprite
this.createPageSprite();
// Create Page Legend Sprite
this.createPageLegendSprite();
// Create Cursor Sprites
this.createCursorSprites();
// // Refresh Page
this.refreshPage(2);
};
//=============================================================================
// * Max Amount of pages
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.maxPages = function() { return this._albumData.maxPages - 1; };
//=============================================================================
// * Max Amount of pictures per pages
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.maxPagePictures = function() { return 6; };
//=============================================================================
// * Activate & Deactivate
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.activate = function() { this._active = true; this.updateCursorPosition(); };
Sprite_OmoriPictureAlbum.prototype.deactivate = function() { this._active = false; this.updateCursorPosition(); };
//=============================================================================
// * Get Picture Index
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.pictureIndex = function() {
return (this._page * this.maxPagePictures()) + this._index;
};
//=============================================================================
// * Set Home Position
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.setHome = function(x = this.x, y = this.y) { this._home.set(x, y); };
//=============================================================================
// * Get Picture Data at Index
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.picture = function(index = this._index, page = this._page) {
// Get Page Index
var pageIndex = (page * this.maxPagePictures()) + index;
// Get Item ID
var itemId = $gameParty.getAlbumPictureAtIndex(this._albumData.group, pageIndex);
// If Item ID exists
if (itemId) {
// Find Item Data in Array
return this._albumData.albumItems.find(function(item) { return item.id === itemId; })
};
// Return Null
return null;
};
//=============================================================================
// * Set Placing Picture
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.setPlacingPicture = function(picture) {
// Set Placing Picture
this._placingPicture = picture;
// Update Picture Border Visibility
this.updatePictureBorderVisibility();
};
//=============================================================================
// * Create Background Sprite
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.createBackgroundSprite = function() {
// Get Filename
var filename = '%1_%2'.format(this._albumData.group, this._albumData.bookImageName);
// Create Background Sprite
this._backgroundSprite = new Sprite(ImageManager.loadPicture(filename));
this.addChild(this._backgroundSprite);
};
//=============================================================================
// * Create Contents Sprite
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.createContentsSprite = function() {
// Create Contents Sprite
this._contentsSprite = new Sprite(new Bitmap(this._backgroundSprite.width, this._backgroundSprite.height));
this.addChild(this._contentsSprite);
};
//=============================================================================
// * Create Picture Border Sprite
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.createPictureBorderSprite = function() {
// Create Picture Border Sprite
this._pictureBorderSprite = new Sprite(ImageManager.loadPicture('puzzle_border'));
this._pictureBorderSprite._amplitude = 128;
this._pictureBorderSprite._angle = 0;
this._pictureBorderSprite._angleSpeed = 0.12;
this._pictureBorderSprite._delay = 0;
this._pictureBorderSprite.visible = false;
this.addChild(this._pictureBorderSprite);
};
//=============================================================================
// * Create Page Sprite
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.createPageSprite = function() {
// Get Width & Height for pages
var width = this._contentsSprite.width / 2;
var height = this._contentsSprite.height;
// Create Cover Page Sprite
this._coverPageSprite = new Sprite(new Bitmap(width, height));
this._coverPageSprite.x = Math.floor(this._backgroundSprite.width / 2);
this._coverPageSprite.anchor.set(0, 0);
this.addChild(this._coverPageSprite)
// Create Page Sprite
this._pageSprite = new Sprite(new Bitmap(width, height));
this._pageSprite.x = Math.floor(this._backgroundSprite.width / 2);
this._pageSprite.opacity = 255;
this._pageSprite.anchor.set(1, 0);
this.addChild(this._pageSprite);
};
//=============================================================================
// * Create Cursor Sprites
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.createPageLegendSprite = function() {
// Create Bitmap
var bitmap = new Bitmap(this._backgroundSprite.width + 130, 60);
bitmap.fillAll('rgba(32, 32, 32, 0.5)')
// bitmap.drawText('←', 5, 20, 40, 32)
// bitmap.drawText('→', bitmap.width - 35, 20, 40, 32);
var width = 60//48
bitmap.fillRect(0, 0, width, bitmap.height, 'rgba(0, 0, 0, 1)')
bitmap.fillRect(1, 1, width - 2, bitmap.height - 2, 'rgba(255, 255, 255, 1)')
bitmap.fillRect(4, 4, width - 8, bitmap.height - 8, 'rgba(0, 0, 0, 1)')
bitmap.fillRect(bitmap.width - width, 0, width, bitmap.height, 'rgba(0, 0, 0, 1)')
bitmap.fillRect((bitmap.width - width) + 1, 1, width - 2, bitmap.height - 2, 'rgba(255, 255, 255, 1)')
bitmap.fillRect((bitmap.width - width) + 4, 4, width - 8, bitmap.height - 8, 'rgba(0, 0, 0, 1)')
bitmap.clearRect(width, 0, bitmap.width - (width * 2), bitmap.height);
// Draw Input Icons
bitmap.drawAlginedKeyIcon(Input.inputKeyCode('pageup'), 0, 5, width, 32, 'center')
bitmap.drawAlginedKeyIcon(Input.inputKeyCode('pagedown'), bitmap.width - width, 5, width, 32, 'center')
// Create Page Legend Sprite
this._pageLegendSprite = new Sprite(bitmap);
this._pageLegendSprite.x = -50 - 15;
// this._pageLegendSprite.y = (this._backgroundSprite.height - this._pageLegendSprite.height) / 2;
// this._pageLegendSprite.y = this._backgroundSprite.height - this._pageLegendSprite.height
// this._pageLegendSprite.y = -this._pageLegendSprite.height;
this.addChild(this._pageLegendSprite);
};
//=============================================================================
// * Create Cursor Sprites
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.createCursorSprites = function() {
// Get Bitmap
var bitmap = ImageManager.loadSystem('ACSArrows');
this._cursorSprite = new Sprite_WindowCustomCursor();
this._cursorSprite.x = -10;
this._cursorSprite.y = 70;
// this._cursorSprite.setFrame(32, 0, 32, 29)
this.addChild(this._cursorSprite);
// Create Left Page Cursor Sprite
this._leftPageCursorSprite = new Sprite(bitmap);
this._leftPageCursorSprite.x = -52;
this._leftPageCursorSprite.y = 28;
this._leftPageCursorSprite.setFrame(64, 0, 32, 29);
this._leftPageCursorSprite.setColorTone([0, 0, 0, 255])
this.addChild(this._leftPageCursorSprite);
// Create Right Page Cursor Sprite
this._rightPageCursorSprite = new Sprite(bitmap);
this._rightPageCursorSprite.x = 435 + 40;
this._rightPageCursorSprite.y = this._leftPageCursorSprite.y;
this._rightPageCursorSprite.setFrame(32, 0, 32, 29);
this._rightPageCursorSprite.setColorTone([0, 0, 0, 255])
this.addChild(this._rightPageCursorSprite);
// Update Page Cursor Visibility
this.updatePageCursorVisibility();
};
//=============================================================================
// * Make Page Bitmap
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.makePageBitmap = function(side) {
// Create Bitmap
var bitmap = new Bitmap(this._pageSprite.width, this._pageSprite.height)
// Get Contents
var contents = this._contentsSprite.bitmap;
// Get Page Bitmap
var pageBitmap = this._backgroundSprite.bitmap;
// Get Starting X
var sx = bitmap.width * side;
// If Side is 0
if (side === 0) {
bitmap.blt(pageBitmap, sx + 2, 2, bitmap.width - 2, bitmap.height - 4, 2, 2);
} else {
bitmap.blt(pageBitmap, sx, 2, bitmap.width - 2, bitmap.height - 4, 0, 2);
};
// Transfer Contents to bitmap
bitmap.blt(contents, sx, 0, bitmap.width, bitmap.height, 0, 0);
// Return Bitmap
return bitmap;
};
//=============================================================================
// * Refresh Page
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.refreshPage = function(side, page = this._page) {
// Set Ranges and Page Pics
var startRange = 0;
var endRange = 0;
var pagePics = this.maxPagePictures() / 2;
// Get contents
var contents = this._contentsSprite.bitmap;
var halfWidth = contents.width / 2;
// Get Filename
var filename = '%1_%2'.format(this._albumData.group, this._albumData.pageTextImageName + (page + 1));
// Get Text Bitmap
var textBitmap = ImageManager.loadPicture(filename);
// Set Paint Opacity
contents.paintOpacity = 179;
// Switch Side Case
switch (side) {
case 0: // Left
startRange = 0; endRange = pagePics;
contents.clearRect(0, 0, halfWidth, contents.height)
contents.blt(textBitmap, 0, 0, halfWidth, contents.height, 0, 0)
break;
case 1: // Right
startRange = pagePics; endRange = pagePics * 2;
contents.clearRect(halfWidth, 0, halfWidth, contents.height)
contents.blt(textBitmap, halfWidth, 0, halfWidth, contents.height, halfWidth, 0)
break;
case 2: // All
startRange = 0; endRange = pagePics * 2;
// Clear Bitmap
contents.clear();
contents.blt(textBitmap, 0, 0, textBitmap.width, contents.height, 0, 0)
break;
};
// Set Paint Opacity
contents.paintOpacity = 255;
// Positions
var positions = this._picturePositions;
// Go Through Ranges
for (var i = startRange; i < endRange; i++) {
// If Past max index
if ((page * this.maxPagePictures()) + i > this._albumData.maxImages) { break; };
// Get Data
var data = this.picture(i, page);
// Get Position
var pos = positions[i];
// Get X & Y Coordinates
var x = pos[0], y = pos[1]
// Get Data
if (data) {
// Get Filename
var filename = '%1_%2'.format(this._albumData.group, data.thumbnailName);
// Get Bitmap
var bitmap = ImageManager.loadPicture(filename);
this._contentsSprite.bitmap.blt(bitmap, 0, 0, bitmap.width, bitmap.height, pos[0], pos[1]);
} else {
// this._contentsSprite.bitmap.fillRect(pos[0], pos[1], 86, 101, 'rgba(200, 200, 200, 1)')
}
};
};
//=============================================================================
// * Show Picture Border
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.showPictureBorder = function(index = this._index) {
// Set Picture Border Visibility
this._pictureBorderSprite.visible = true;
// Set Picture Border Sprite Position
this._pictureBorderSprite.x = this._picturePositions[index][0] - 34;
this._pictureBorderSprite.y = this._picturePositions[index][1] - 46;
// Reset Angle
this._pictureBorderSprite._angle = 215//20;
this._pictureBorderSprite.opacity = 0;
this._pictureBorderSprite._skipDelay = true;
// this._pictureBorderSprite._delay = 30;
this.updatePictureBorder();
};
//=============================================================================
// * Hide Picture Border
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.hidePictureBorder = function() {
// Set Picture Border Visibility
this._pictureBorderSprite.visible = false
this._pictureBorderSprite._delay = 0;
this._pictureBorderSprite.opacity = 0;
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// Update Move
this.move.update();
// Update Cursor Input
this.updateCursorInput();
// Update Picture Border
this.updatePictureBorder();
};
//=============================================================================
// * Update Picture Border
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.updatePictureBorder = function() {
// Get Sprite
var sprite = this._pictureBorderSprite;
if (!sprite.visible) { return; }
if (sprite._delay <= 0) {
sprite._amplitude = 130
sprite._angleSpeed = 0.05
var change = 127 + ((Math.sin(sprite._angle * sprite._angleSpeed) * sprite._amplitude));
sprite.opacity = change
sprite._angle = (sprite._angle + 1) % 500;
if (sprite.opacity <= 0) {
if (sprite._skipDelay ) {
sprite._skipDelay = false;
sprite._delay = 0;
} else {
sprite._delay = 120;
}
sprite._angle = 100;
};
} else {
// Decrease Sprite Delay
sprite._delay--;
};
};
//=============================================================================
// * Update Cursor Input
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.updateCursorInput = function() {
// Return if nto active
if (!this._active || this.move.isMoving()) { return; }
// If Input Page Up is repeated
if (Input.isRepeated('pageup')) {
// Turn Page Right
var oldPage = this._page;
var page = (this._page - 1).clamp(0, this.maxPages());
if(oldPage !== page) {this.hidePictureBorder();}
this.turnPageRight();
return;
};
// If Input Page Down is repeated
if (Input.isRepeated('pagedown')) {
// Turn Page Left
var oldPage = this._page;
var page = (this._page - 1).clamp(0, this.maxPages());
if(oldPage !== page) {this.hidePictureBorder();}
this.turnPageLeft();
return;
};
// If Input Down is repeated
if (Input.isRepeated('down')) {
// If Index is 2 or 5
if (this._index === 2 || this._index >= 5) { return; }
// Get Page Index
var pageIndex = (this._page * this.maxPagePictures()) + this._index;
// If Less Than Max Images
if (pageIndex < this._albumData.maxImages) {
// Play cursor
SoundManager.playCursor();
// Increase Index
this._index++;
// Update Cursor Position
this.updateCursorPosition();
};
return;
};
// If Input Up is repeated
if (Input.isRepeated('up')) {
// If Index is 0 or 3
if (this._index === 0 || this._index === 3) { return; }
// Play Cursor Sound
SoundManager.playCursor();
// Decrease Index
this._index--;
// Update Cursor Position
this.updateCursorPosition();
return;
};
// If Input Right is repeated
if (Input.isRepeated('right')) {
// Get Page Index
var pageIndex = (this._page * this.maxPagePictures()) + this._index;
// If Index is 4
if (this._index === 4) {
// Turn Page Left
this.turnPageLeft();
return;
};
// If Index is less than 3
if (this._index < 3) {
// If Less Than Max Images
if (pageIndex + 3 <= this._albumData.maxImages) {
// Increase Index
this._index += 3;
};
} else {
// If Less Than Max Images
if (this._albumData.maxImages > 4) {
// Set index to 4
this._index = 4;
};
};
// Play Cursor Sound
SoundManager.playCursor();
// Update Cursor Position
this.updateCursorPosition();
return;
};
// If Input Left is repeated
if (Input.isRepeated('left')) {
if ([0, 2].contains(this._index)) {
// Turn Page Right
this.turnPageRight();
return;
};
// Decrease Index
this._index -= this._index === 1 ? 1 : 3;
// Play Cursor Sound
SoundManager.playCursor();
// Update Cursor Position
this.updateCursorPosition();
return;
};
};
//=============================================================================
// * Update Cursor Position
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.updateCursorPosition = function() {
// If Index is 0 or more
if (this._index >= 0) {
// Get Position
var pos = this._picturePositions[this._index % this.maxPagePictures()];
this._cursorSprite.x = pos[0] - 10;
this._cursorSprite.y = pos[1] + 55;
this._cursorSprite.visible = this._usePictureCursor ? false : true;
// If Picture Cursor
if (this._pictureCursor) {
var duration = 15;
var obj = this._pictureCursor;
var data = { obj: obj, properties: ['x', 'y'], from: {x: obj.x, y: obj.y}, to: {x: this._home.x + pos[0], y: this._home.y + pos[1] }, durations: {x: duration, y: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
};
};
// Update Page Cursor Visibility
this.updatePageCursorVisibility();
// Set Active State of the cursor
this._active ? this._cursorSprite.activate() : this._cursorSprite.deactivate();
this._cursorSprite.setColorTone(this._active ? [0, 0, 0, 0] : [-80, -80, -80, 255]);
if(!!this.parent) {
let picture = this.picture();
this.parent._legendWindow.refresh(!!this.parent.hasComment(picture));
}
};
//=============================================================================
// * Update Page Cursor Visibility
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.updatePageCursorVisibility = function() {
// Set Page Cursor Visibility
// this._leftPageCursorSprite.visible = this._page > 0;
// this._rightPageCursorSprite.visible = this._page < this.maxPages();
// Set Active & Inactive Colors
var activeColor = [0, 0, 0, 0], inactiveColor =[0, 0, 0, 255]
this._leftPageCursorSprite.setColorTone(this._page > 0 ? activeColor : inactiveColor);
this._rightPageCursorSprite.setColorTone(this._page < this.maxPages() ? activeColor : inactiveColor);
};
//=============================================================================
// * Update Picture Border Visibility
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.updatePictureBorderVisibility = function() {
// Get Picture
var picture = this._placingPicture;
if (picture) {
// Get Max Page Pictures
var maxPagePics = this.maxPagePictures();
var startIndex = this._page * maxPagePics
// Hide Border Flag
var hideBorder = true;
// Iterate to Max Page Pictures
for (var i = 0; i < maxPagePics; i++) {
// Get Picture ID at position
var positionId = this._albumData.pictures[startIndex + i];
// If Position ID matches the picture ID
if (positionId === picture.id) {
// Show Picture Border
this.showPictureBorder(i);
// Hide Border
hideBorder = false;
break;
};
};
// Hide Picture Border
if (hideBorder) { this.hidePictureBorder(); };
} else {
// Hide Picture Border
this.hidePictureBorder();
}
};
//=============================================================================
// * Turn Page Right
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.turnPageRight = function() {
// Get Old Page
var oldPage = this._page;
// Set Page
this._page = (this._page - 1).clamp(0, this.maxPages());
// Update Cursor Page Visibility
this.updatePageCursorVisibility();
// If Old page is not the same as new page
if (oldPage !== this._page) {
// Get Bitmaps
var leftBitmap = this.makePageBitmap(0);
var rightBitmap = this.makePageBitmap(1);
// Update Picture Side Graphics
this.refreshPage(0);
AudioManager.playSe({name: "SE_turn_page", pan: 0, pitch: 100, volume: 90});
// Set Page Sprite Anchor
this._pageSprite.anchor.x = 0;
// Make Page Bitmap
this._pageSprite.bitmap = leftBitmap
// Set Page Sprite scale
this._pageSprite.anchor.x = 1;
// Set Cover Page Bitmap
this._coverPageSprite.bitmap = rightBitmap;
this._coverPageSprite.anchor.x = 0;
// Update Picture Side Graphics
this.refreshPage(2);
var duration = 20;
var obj = this._pageSprite;
var data = { obj: obj, properties: ['scaleX'], from: {scaleX: obj.scaleX}, to: {scaleX: 0}, durations: {scaleX: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
data.onFinish = function() {
var duration = 15;
var obj = this._pageSprite;
// Make Page Bitmap
this._pageSprite.bitmap = this.makePageBitmap(1);
obj.anchor.x = 0;
var data = { obj: obj, properties: ['scaleX'], from: {scaleX: obj.scaleX}, to: {scaleX: 1.0}, durations: {scaleX: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
// Update Picture Border Visibility
this.updatePictureBorderVisibility();
// Run Original Function
data.onFinish = function() {
// Set Page Sprite Bitmap to null
this._pageSprite.bitmap = null;
this._coverPageSprite.bitmap = null;
}.bind(this);
}.bind(this);
};
};
//=============================================================================
// * Turn Page Left
//=============================================================================
Sprite_OmoriPictureAlbum.prototype.turnPageLeft = function() {
// Get Old Page
var oldPage = this._page;
// Set Page
this._page = (this._page + 1).clamp(0, this.maxPages());
// Get Page Index
var pageIndex = (this._page * this.maxPagePictures()) + this._index;
if (pageIndex > this._albumData.maxImages) {
this._index -= pageIndex % this._albumData.maxImages;
this.updateCursorPosition();
};
// Update Picture Border Visibility
this.updatePictureBorderVisibility();
// If Old page is not the same as new page
if (oldPage !== this._page) {
// Get Bitmaps
var leftBitmap = this.makePageBitmap(0);
var rightBitmap = this.makePageBitmap(1);
// Set Page Sprite Anchor
AudioManager.playSe({name: "SE_turn_page", pan: 0, pitch: 100, volume: 90});
this._pageSprite.anchor.x = 0;
// Make Page Bitmap
this._pageSprite.bitmap = rightBitmap
// Set Page Sprite scale
this._pageSprite.scale.x = 1;
// Update Cursor Page Visibility
this.updatePageCursorVisibility();
// Set Cover Page Bitmap
this._coverPageSprite.bitmap = leftBitmap;
this._coverPageSprite.anchor.x = 1;
// Update Picture Side Graphics
this.refreshPage(2);
var duration = 20;
var obj = this._pageSprite;
var data = { obj: obj, properties: ['scaleX'], from: {scaleX: obj.scaleX}, to: {scaleX: 0}, durations: {scaleX: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
data.onFinish = function() {
var duration = 15;
var obj = this._pageSprite;
// Make Page Bitmap
this._pageSprite.bitmap = this.makePageBitmap(0);
obj.anchor.x = 1;
var data = { obj: obj, properties: ['scaleX'], from: {scaleX: obj.scaleX}, to: {scaleX: 1.0}, durations: {scaleX: duration}}
data.easing = Object_Movement.easeOutCirc;
this.move.startMove(data);
// Run Original Function
data.onFinish = function() {
// Set Page Sprite Bitmap to null
this._pageSprite.bitmap = null;
this._coverPageSprite.bitmap = null;
}.bind(this);
}.bind(this);
};
};
//=============================================================================
// ** Window_OmoriAlbumLegend
//-----------------------------------------------------------------------------
// This window displays legend text in the Omori Album scene.
//=============================================================================
function Window_OmoriAlbumLegend() { this.initialize.apply(this, arguments); };
Window_OmoriAlbumLegend.prototype = Object.create(Window_Base.prototype);
Window_OmoriAlbumLegend.prototype.constructor = Window_OmoriAlbumLegend;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_OmoriAlbumLegend.prototype.initialize = function() {
// Super Call
Window_Base.prototype.initialize.call(this, -5, -1, this.windowWidth(), this.windowHeight());
// Set Text List
this.setTextList('placing');
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriAlbumLegend.prototype.windowWidth = function() { return Graphics.width + 10; };
Window_OmoriAlbumLegend.prototype.windowHeight = function() { return 35 };
Window_OmoriAlbumLegend.prototype.standardPadding = function() { return 4; }
//=============================================================================
// * Set Text List
//=============================================================================
Window_OmoriAlbumLegend.prototype.setTextList = function(name) {
// Set Text List
this._textList = name;
// Redraw Contents
this.refresh();
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriAlbumLegend.prototype.refresh = function(canRead = true) {
// Clear Contents
this.contents.clear();
// Get Width
var width = this.contents.width;
// Get Text List
var textList = LanguageManager.getPluginText('albumMenu', 'legendText')[this._textList];
// If Text List Exists
if (textList) {
// Get Segment Width
var segmentWidth = Math.floor(this.contents.width / textList.length);
// Go through text list
for (var i = 0; i < textList.length; i++) {
// Get Data
var data = textList[i];
if(this._textList.toLowerCase() === "browsing" && i === 0 && !canRead) {continue;}
var inputRects = data.inputs.map(input => this.contents.keyIconRects(Input.inputKeyCode(input)).up)
// Get Total Width
var tw = Math.floor(this.textWidth(data.text)) + 8;
// Get Icons Width
var iw = inputRects.reduce(function(r, rect) { return r + (rect.width + 2) }, 0);
// Get Starting X position
var sx = (i * segmentWidth) + ((segmentWidth - (tw + iw)) / 2)
// Draw Header Text
this.contents.drawText(data.text, sx, -4, tw, this.contents.height);
// Get Starting Icon X Position
var ix = sx + tw;
// Go Through Inputs
for (var i2 = 0; i2 < data.inputs.length; i2++) {
// Get Input
var input = data.inputs[i2];
this.contents.drawInputIcon(input, ix, 2);
// Increase Icon X
ix += inputRects[i2].width;
};
};
};
};
//=============================================================================
// ** Window_OmoriPictureList
//-----------------------------------------------------------------------------
// The window for showing picture items for sorting
//=============================================================================
function Window_OmoriPictureList() { this.initialize.apply(this, arguments); }
Window_OmoriPictureList.prototype = Object.create(Window_Selectable.prototype);
Window_OmoriPictureList.prototype.constructor = Window_OmoriPictureList;
//=============================================================================
// * Object Initialization
//=============================================================================
Window_OmoriPictureList.prototype.initialize = function(data) {
// Initialize Data
this._data = [];
// Set Data
this._albumData = data;
// Get Album Spot ID
this._albumSpotId = null;
// Super Call
Window_Selectable.prototype.initialize.call(this, 0, 0, this.windowWidth(), this.windowHeight());
// Refresh Contents
this.refresh();
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriPictureList.prototype.isUsingCustomCursorRectSprite = function() { return true; };
Window_OmoriPictureList.prototype.standardPadding = function() { return 8; }
Window_OmoriPictureList.prototype.windowWidth = function () { return Graphics.width; };
Window_OmoriPictureList.prototype.windowHeight = function() { return 116 + 15; }
Window_OmoriPictureList.prototype.maxItems = function() { return this._data.length;};
Window_OmoriPictureList.prototype.maxCols = function() { return 5;};
Window_OmoriPictureList.prototype.itemHeight = function() { return 100 + 15; };
Window_OmoriPictureList.prototype.itemWidth = function() { return Window_Selectable.prototype.itemWidth.call(this) - 5 };
Window_OmoriPictureList.prototype.spacing = function() { return 5; };
Window_OmoriPictureList.prototype.customCursorRectXOffset = function() { return -8; }
Window_OmoriPictureList.prototype.customCursorRectYOffset = function() { return -35; }
//=============================================================================
// * Determine if Current Item is enabled
//=============================================================================
Window_OmoriPictureList.prototype.isCurrentItemEnabled = function() {
return this._data[this.index()] !== undefined;
};
//=============================================================================
// * Refresh Arrows
//=============================================================================
Window_OmoriPictureList.prototype.itemRect = function(index) {
var rect = Window_Selectable.prototype.itemRect.call(this, index);
rect.x += 20;
return rect;
};
//=============================================================================
// * Get Picture
//=============================================================================
Window_OmoriPictureList.prototype.picture = function() { return this._data[this.index()]; };
//=============================================================================
// * Set Spot Picture ID
//=============================================================================
Window_OmoriPictureList.prototype.setSpotPictureID = function(id) {
this._albumSpotId = id;
this.refresh();
};
//=============================================================================
// * Select Picture by ID
//=============================================================================
Window_OmoriPictureList.prototype.selectPictureByID = function(id) {
// Go Through Data
for (var i = 0; i < this._data.length; i++) {
// Get Item
var item = this._data[i];
// If Item ID matches argument ID
if (item.id === id) {
// Select index
this.select(i);
break;
};
};
};
//=============================================================================
// * Get Picture Cursor X
//=============================================================================
Window_OmoriPictureList.prototype.pictureCursorPosition = function() {
// Get Item Rect
var rect = this.itemRect(this.index());
var padding = this.standardPadding() * 2;
return new Point(this.x + padding + rect.x + 6, this.y + padding + rect.y - 1);
};
//=============================================================================
// * On Cursr Down
//=============================================================================
Window_OmoriPictureList.prototype.cursorDown = function(wrap) {
var index = this.index();
var maxItems = this.maxItems();
var maxCols = this.maxCols();
if (index + maxCols > maxItems-1 && this.row() < this.maxRows()-1) {
this.select(maxItems-1);
return;
};
if (index < maxItems - maxCols || (wrap && maxCols === 1)) {
this.select((index + maxCols) % maxItems);
return
};
};
//=============================================================================
// * Make Item List
//=============================================================================
Window_OmoriPictureList.prototype.makeItemList = function() {
// Initialize Data
this._data = [];
// Get Items
var items = this._albumData.albumItems;
// Get Positions
const positions = $gameParty._albumPicturePositions[this._albumData.group];
// Go through Items
for (var i = 0; i < items.length; i++) {
// Get Item
var item = items[i];
// If Album does not have picture
if (!$gameParty.albumHasPicture(this._albumData.group, item.id)) {
// Add Item to DAta
this._data.push(item);
};
};
// Go through data
this._data.sort(function(a, b) {
return positions.indexOf(a.id) - positions.indexOf(b.id);
});
// // Randomize Item List Positions
// this.shuffleItemList();
};
//=============================================================================
// * Shuffle Item List
//=============================================================================
Window_OmoriPictureList.prototype.shuffleItemList = function() {
// // Set Index, Random Index, and Temporary Value
// let index = 0, randomIndex = 0, tempValue = 0, seed;
// // Replant THE SEED!
// $gameSystem.replantMagicalSeed();
// // Iterate Through Length
// for (i = this._data.length - 1; i > 0; i -= 1) {
// // Get Seed
// temp = this._data[i];
// seed = $gameSystem.getMagicalSeed(this._albumData.id);
// randomIndex = Math.floor(seed * (i + 1));
// this._data[i] = this._data[randomIndex];
// this._data[randomIndex] = temp;
// };
};
//=============================================================================
// * Refresh Arrows
//=============================================================================
Window_OmoriPictureList.prototype._refreshArrows = function() {
// Run Original Function
Window_Selectable.prototype._refreshArrows.call(this);
var w = this._width;
var h = this._height;
var p = 28;
var q = p/2;
this._downArrowSprite.move(w - q, h - q);
this._upArrowSprite.move(w - q, q);
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriPictureList.prototype.refresh = function() {
// Make Item List
this.makeItemList();
// Run Original Function
Window_Selectable.prototype.refresh.call(this);
};
//=============================================================================
// * Clear Selected
//=============================================================================
Window_OmoriPictureList.prototype.clearSelected = function() { this.clearItem(this.index()); };
//=============================================================================
// * Draw Item
//=============================================================================
Window_OmoriPictureList.prototype.drawItem = function(index) {
// Get Rect
var rect = this.itemRect(index);
// Get Data
var data = this._data[index];
// Get Filename
var filename = '%1_%2'.format(this._albumData.group, data.thumbnailName);
// Get Bitmap
var bitmap = ImageManager.loadPicture(filename);
// Get Width & Height
var width = bitmap.width, height = bitmap.height;
// Get X & Y
var x = rect.x + (rect.width - width) / 2;
var y = rect.y + (rect.height - height) / 2;
// Transfer Bitmap to contents
this.contents.blt(bitmap, 0, 0, width, height, x, y);
};