OMORI_Android/www.eng/js/plugins/TDS Map Fog.js
2024-01-15 18:44:53 +03:00

557 lines
No EOL
18 KiB
JavaScript

//=============================================================================
// TDS Map Fog
// Version: 1.0
//=============================================================================
// Add to Imported List
var Imported = Imported || {} ; Imported.TDS_MapFog = true;
// Initialize Alias Object
var _TDS_ = _TDS_ || {} ; _TDS_.MapFog = _TDS_.MapFog || {};
//=============================================================================
/*:
* @plugindesc
* Adds fog sprites to map.
*
* @author TDS
*
*/
//=============================================================================
(function($) {
// Use Strict
"use strict";
//=============================================================================
// ** ImageManager
//-----------------------------------------------------------------------------
// The static class that loads images, creates bitmap objects and retains them.
//=============================================================================
// * Load Overlay Image
//=============================================================================
ImageManager.loadOverlay = function(filename, hue) {
return this.loadBitmap('img/overlays/', filename, hue, true);
};
//=============================================================================
// ** Game_Interpreter
//-----------------------------------------------------------------------------
// The interpreter for running event commands.
//=============================================================================
// * Generate Map Fog
//=============================================================================
Game_Interpreter.prototype.generateMapFog = function() { return new Game_MapFog(); };
//=============================================================================
// * Create Map Fog
//=============================================================================
Game_Interpreter.prototype.createMapFog = function(id, fog) {
// Get Container
let container = SceneManager._scene._spriteset._mapFogContainer;
// Add Map Fog
$gameMap.addMapFog('fog1', fog);
if (container) { container.addFog(id); };
};
//=============================================================================
// ** Game_Map
//-----------------------------------------------------------------------------
// The game object class for a map. It contains scrolling and passage
// determination functions.
//=============================================================================
// Alias Listing
//=============================================================================
$.Game_Map_initialize = Game_Map.prototype.initialize;
$.Game_Map_setup = Game_Map.prototype.setup;
//=============================================================================
// * Object Initialization
//=============================================================================
Game_Map.prototype.initialize = function() {
// Run Original Function
$.Game_Map_initialize.call(this);
// Initialize Map Fog
this.clearMapFogs();
};
//=============================================================================
// * Clear Map Fogs
//=============================================================================
Game_Map.prototype.clearMapFogs = function() {
if (this._mapFogs) { delete this._mapFogs; };
// Initialize Map Fogs Object
this._mapFogs = {}
};
//=============================================================================
// * Get Map Fog
//=============================================================================
Game_Map.prototype.getMapFog = function(name) { return this._mapFogs[name]; };
//=============================================================================
// * Add Map Fog
//=============================================================================
Game_Map.prototype.addMapFog = function(name, fog) { this._mapFogs[name] = fog; };
//=============================================================================
// * Remove Map Fog
//=============================================================================
Game_Map.prototype.removeMapFog = function(name) { delete this._mapFogs[name]; };
//=============================================================================
// ** Game_MapFog
//-----------------------------------------------------------------------------
// The game object class for Map Fog.
//=============================================================================
function Game_MapFog() { this.initialize.apply(this, arguments); }
//=============================================================================
// * Object Initialization
//=============================================================================
Game_MapFog.prototype.initialize = function(id) {
this._id = id;
this.name = '';
this.opacity = 255;
this.blendMode = 0;
this.scaleX = 1;
this.scaleY = 1;
this.moveX = 0;
this.moveY = 0;
this.width = Graphics.width;
this.height = Graphics.height;
this.mapBind = true;
this.visible = true;
this.deactivateOnInvisible = true;
this.active = true;
this.priority = 0;
this.origin = new Point();
this.move = new Point();
};
//=============================================================================
// * Show
//=============================================================================
Game_MapFog.prototype.show = function() {
this.visible = true;
this.active = true;
}
//=============================================================================
// ** Spriteset_Map
//-----------------------------------------------------------------------------
// The set of sprites on the map screen.
//=============================================================================
// Alias Listing
//=============================================================================
$.Spriteset_Map_createLowerLayer = Spriteset_Map.prototype.createLowerLayer;
//=============================================================================
// * Create Lower Layer
//=============================================================================
Spriteset_Map.prototype.createLowerLayer = function() {
// Run Original Function
$.Spriteset_Map_createLowerLayer.call(this);
// Create Map Fog Container
this.createMapFogContainer();
};
//=============================================================================
// * Create Map Fog Container
//=============================================================================
Spriteset_Map.prototype.createMapFogContainer = function() {
// Create Map Fog Container
this._mapFogContainer = new Sprite_MapFogContainer();
this.addChild(this._mapFogContainer);
};
//=============================================================================
// ** MapFog Container
//-----------------------------------------------------------------------------
// Container for Map Fog.
//=============================================================================
function Sprite_MapFogContainer() { this.initialize.apply(this, arguments); }
Sprite_MapFogContainer.prototype = Object.create(PIXI.Container.prototype);
Sprite_MapFogContainer.prototype.constructor = Sprite_MapFogContainer;
//=============================================================================
// * Object Initialization
//=============================================================================
Sprite_MapFogContainer.prototype.initialize = function() {
// Super Call
PIXI.Container.call(this);
// Initialize Sprites Array
this._sprites = []
// Get Map Fogs
let mapFogs = Object.entries($gameMap._mapFogs)
// Sort Map Fogs
mapFogs = mapFogs.sort(function(a, b) {
return a[1].priority - b[1].priority;
});
// Add Map Fog
for (let i = 0; i < mapFogs.length; i++) { this.addFog(mapFogs[i][0]); };
// this.addFog('titties');
// this.addFog('fog2');
// // Set Width & Height
// this._width = Graphics.width;
// this._height = Graphics.height;
// // Origin Position
// this.origin = new Point();
// // Initialize Sprites Array
// this._sprites = [];
// // Get MapFog
// let MapFog = $gameMap.MapFog();
// // Go through Footprint Objects
// for (let i = 0; i < MapFog.length; i++) {
// // Get Footprint
// let footprint = MapFog[i];
// // If footprint is not finished
// if (!footprint.isFinished()) {
// // Create Footprint
// this.addFootprint(footprint)
// };
// };
// this._fogSprite = new Sprite_MapFog();
// this.addChild(this._fogSprite)
};
//=============================================================================
// * Add Fog
//=============================================================================
Sprite_MapFogContainer.prototype.addFog = function(id) {
// Check for ID duplicates
let idCheck = this._sprites.some(function(sprite) { return sprite._id === id });
// If ID check then return
if (idCheck) { return; };
// Get Map fog data
let data = $gameMap.getMapFog(id);
// If Data Exists
if (data) {
let sprite = new Sprite_MapFog(id);
this._sprites.push(sprite);
this.addChild(sprite);
};
};
//=============================================================================
// * Remove Fog
//=============================================================================
Sprite_MapFogContainer.prototype.removeFog = function(fog) {
// Get Sprite Index
let index = this._sprites.indexOf(fog);
// If Index is more than 0
if (index >= 0) {
this._sprites.splice(index, 1);
this.removeChild(fog);
};
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_MapFogContainer.prototype.update = function() {
// Go through sprites
this._sprites.forEach( function(sprite) {
// Update Sprite
sprite.update();
}, this);
};
//=============================================================================
// ** Sprite_MapFog
//-----------------------------------------------------------------------------
// Sprite for displaying Map Fog.
//=============================================================================
function Sprite_MapFog() { this.initialize.apply(this, arguments);}
Sprite_MapFog.prototype = Object.create(TilingSprite.prototype);
Sprite_MapFog.prototype.constructor = Sprite_MapFog;
//=============================================================================
// * Initialize Object
//=============================================================================
Sprite_MapFog.prototype.initialize = function(id) {
// Super Call
TilingSprite.prototype.initialize.call(this);
// Set ID
this._id = id;
// Set Bitmap name
this._bitmapName = '';
// Update
this.update();
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_MapFog.prototype.update = function() {
// Super Call
TilingSprite.prototype.update.call(this);
// Get Data
let data = $gameMap.getMapFog(this._id);
// If Data Exists
if (data && data.active) {
// If Bitmap name has changed
if (this._bitmapName !== data.name) {
// Set bitmap
this.bitmap = ImageManager.loadOverlay(data.name);
this.move(0, 0, data.width, data.height);
this._bitmapName = data.name;
};
// Apply Data
this.opacity = data.opacity;
this.blendMode = data.blendMode;
this.scale.x = data.scaleX;
this.scale.y = data.scaleY;
this.visible = data.visible;
// Deactivate if not visible
if (!data.visible && data.deactivateOnInvisible) { data.active = false; };
// If Bitmap width is more than 0
if (this.bitmap.width > 0) {
// Set Base Origin Position
data.origin.x = (data.origin.x + data.move.x) % this.bitmap.width;
data.origin.y = (data.origin.y + data.move.y) % this.bitmap.height;
// Set Origin
this.origin.x = data.origin.x;
this.origin.y = data.origin.y;
// If Fog should be boudn to map
if (data.mapBind) {
this.origin.x += ($gameMap.displayX() * $gameMap.tileWidth())
this.origin.y += ($gameMap.displayY() * $gameMap.tileHeight());
};
};
} else {
// Remove From parent
this.parent.removeFog(this);
};
};
})(_TDS_.MapFog);
/*
//=============================================================================
// ** SceneManager
//-----------------------------------------------------------------------------
// The static class that manages scene transitions.
//=============================================================================
// * Add Footprint
//=============================================================================
SceneManager.addFootprint = function(footprint) {
// If on Scene Map
if (SceneManager._scene.constructor === Scene_Map) {
// Add Footprint object to map
$gameMap.addFootprint(footprint);
// Get Container
let container = SceneManager._scene._spriteset._MapFogContainer;
// Add Footprint to container
container.addFootprint(footprint);
};
};
//=============================================================================
// ** Game_CharacterBase
//-----------------------------------------------------------------------------
// The superclass of Game_Character. It handles basic information, such as
// coordinates and images, shared by all characters.
//=============================================================================
// Alias Listing
//=============================================================================
$.Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers;
$.Game_CharacterBase_moveStraight = Game_CharacterBase.prototype.moveStraight;
//=============================================================================
// * Initialize Members
//=============================================================================
Game_CharacterBase.prototype.initMembers = function() {
// Run Original Function
$.Game_CharacterBase_initMembers.call(this);
// Set Disable MapFog flag
this._disableMapFog = true;
// Initialize Footprint position
this._footprintPos = new Point();
// Set Last Direction
this._lastDirection = this._direction;
};
//=============================================================================
// * Determine if Character can create MapFog
//=============================================================================
Game_CharacterBase.prototype.canCreateMapFog = function() {
return this._disableMapFog;
};
//=============================================================================
// * Move Straight
//=============================================================================
Game_CharacterBase.prototype.moveStraight = function(d) {
// Get Old Values
let oldX = this._x, oldY = this._y, oldDir = d;
// Set Last Direction
this._lastDirection = this._direction;
// Run Original Function
$.Game_CharacterBase_moveStraight.call(this, d);
// If position has changed
if (oldX !== this._x || oldY !== this._y || oldDir !== this._direction) {
// Set Footprint Position
this._footprintPos.set(oldX, oldY);
// Process Footprint Movement
this.footprintMovement();
};
};
//=============================================================================
// * Process Footprint Movement
//=============================================================================
Game_CharacterBase.prototype.footprintMovement = function() {
// If Can Create MapFog
if (this.canCreateMapFog()) {
// Add Footprint
SceneManager.addFootprint(this.genererateFootprint());
};
};
//=============================================================================
// * Generate Footprint Object
//=============================================================================
Game_CharacterBase.prototype.genererateFootprint = function() {
// Create Footprint Object
let footprint = new Game_MapFog();
footprint._frame = this.pattern();
footprint._direction = this._direction;
footprint._lastDirection = this._lastDirection;
footprint.setPosition(this._footprintPos.x, this._footprintPos.y);
// Return Footprint
return footprint;
};
//=============================================================================
// ** Game_Follower
//-----------------------------------------------------------------------------
// The game object class for a follower. A follower is an allied character,
// other than the front character, displayed in the party.
//=============================================================================
// * Determine if Character can create MapFog
//=============================================================================
Game_Follower.prototype.canCreateMapFog = function() {
return false
};
//=============================================================================
// ** Spriteset_Map
//-----------------------------------------------------------------------------
// The set of sprites on the map screen.
//=============================================================================
// Alias Listing
//=============================================================================
$.Spriteset_Map_createLowerLayer = Spriteset_Map.prototype.createLowerLayer;
$.Spriteset_Map_update = Spriteset_Map.prototype.update;
//=============================================================================
// * Create Screen Sprites
//=============================================================================
Spriteset_Map.prototype.createLowerLayer = function() {
// Run Original Function
$.Spriteset_Map_createLowerLayer.call(this);
// Create MapFog Layer
this.createMapFogLayer();
};
//=============================================================================
// * Frame Update
//=============================================================================
Spriteset_Map.prototype.update = function() {
// Set MapFog Layer
this._MapFogContainer.origin.x = $gameMap.displayX() * $gameMap.tileWidth();
this._MapFogContainer.origin.y = $gameMap.displayY() * $gameMap.tileHeight();
// Run Original Function
$.Spriteset_Map_update.call(this);
};
//=============================================================================
// * Create MapFog Layer
//=============================================================================
Spriteset_Map.prototype.createMapFogLayer = function() {
// Create MapFog Layer
this._MapFogContainer = new Sprite_MapFogContainer();
this._MapFogContainer.z = 3;
this._tilemap.addChild(this._MapFogContainer);
};
*/