525 lines
17 KiB
JavaScript
525 lines
17 KiB
JavaScript
// ============================================================================
|
|
// Plug-in: DMV_Core.js
|
|
// Version: 1.0.1
|
|
// Author: David Bow (Dekita)
|
|
// MailTo: dekita@dekyde.com
|
|
// ============================================================================
|
|
|
|
/*:
|
|
* @author Dekita (www.dekyde.com)
|
|
*
|
|
* @plugindesc DMV_Core contains functions that are used within some of
|
|
* the more advanced RPG Maker MV plugins of mine.
|
|
*
|
|
* @help
|
|
* ============================================================================
|
|
* ■ System Information:
|
|
* ============================================================================
|
|
* This plugin is a requirement for almost all of my other RPG Maker MV plugins.
|
|
* You should ensure this plugin is also loaded before all other DMV plugins.
|
|
*
|
|
* Frequent updates will also be applied to this particular plugin, therefore,
|
|
* it is advised that you check to ensure you have the latest version whenever
|
|
* you install a new DMV Engine Plugin.
|
|
*
|
|
* ============================================================================
|
|
* ■ Terms && Conditions:
|
|
* ============================================================================
|
|
* This plugin is completely free to use, both commercially and privately -
|
|
* Providing the following copy is shown within the project credits;
|
|
*
|
|
* Copyright (C) 2015 - Dekyde Studios
|
|
* Dekyde Studios Developer: Dekita - dekita(at)dekyde.com
|
|
*
|
|
* Additionally, this header should remain intact at all times.
|
|
*
|
|
* You are not allowed to redistribute this plugin directly. Instead, provide
|
|
* a link to the following website;
|
|
* www.dekyde.com
|
|
*
|
|
* ============================================================================
|
|
* ■ Financial Contributions:
|
|
* ============================================================================
|
|
* If you like my work and want to see more of it in the future, I ask that you
|
|
* consider offering a financial donation.
|
|
*
|
|
* Most of the plugins I write are free to use commercially, and many hours of
|
|
* work go into each and every one - not including the time spent bug hunting
|
|
* and performing optimization modifications.
|
|
*
|
|
* If you do wish to provide your support, you can do so at the following link;
|
|
* www.patreon.com/Dekita
|
|
*
|
|
* ============================================================================
|
|
* ■ Stay Up To Date:
|
|
* ============================================================================
|
|
* I advise that you check regularly to see if any of the plugins you use
|
|
* have been updated. The plugin updates will include things like bugfixes and
|
|
* new features, so it is highly recommended.
|
|
*
|
|
* You can get the latest versions of my Mv plugins from www.dekyde.com/DMV
|
|
*
|
|
* ============================================================================
|
|
* ■ Change Log:
|
|
* ============================================================================
|
|
* v.1.0.1 - Added Function: DMV.isScene(sceneClass),
|
|
* v.1.0.0 - Initial Release,
|
|
*
|
|
* ============================================================================
|
|
* www.dekyde.com
|
|
* ============================================================================
|
|
*/
|
|
|
|
/**
|
|
* Checks to ensure DMV Core plugin exists.
|
|
*/
|
|
(function(){
|
|
if (typeof MVC === 'undefined') {
|
|
var strA = "You need to install the MVCommons plugin ";
|
|
var strB = "in order for the DMV_Core plugin to work!";
|
|
var strC = "\nvisit www.dekyde.com/mvcommons to get an";
|
|
var strD = " up to date version."
|
|
throw new Error(strA + strB + strC + strD);
|
|
}else{
|
|
var name = "DMV_Core";
|
|
var vers = "1.0.1";
|
|
var date = "16/11/2o15";
|
|
var desc = "DMV plugins by dekita @ www.dekyde.com"
|
|
var auth = {name:"David Bow (Dekita)",
|
|
email:"dekita@dekyde.com",website:"www.dekyde.com",
|
|
}
|
|
PluginManager.register(name, vers, desc, auth, date);
|
|
if (console){console.log("Loaded: "+name+' v'+vers)};
|
|
};
|
|
})();
|
|
|
|
/**
|
|
* Setup DMV
|
|
*/
|
|
var DMV = MVC.extend();
|
|
|
|
/**
|
|
* Function to keep everything within a dedicated scope
|
|
*/
|
|
(function($){
|
|
/**\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
* DMV General Variables && Functions
|
|
**//////////////////////////////////
|
|
|
|
/**
|
|
* DMV.author
|
|
* Holds object for the author of the DMV plugins (me)
|
|
*/
|
|
$.author = {
|
|
name: "David Bow (Dekita)",
|
|
email: "dekita@dekyde.com",
|
|
website: "www.dekyde.com",
|
|
};
|
|
|
|
/**
|
|
* base_static_error
|
|
* Holds string for base static error, to save retyping..
|
|
*/
|
|
var base_static_error = " is a static class, cannot create instance!"
|
|
|
|
/**
|
|
* Convenience methods taken from MVCommons script.
|
|
*/
|
|
$.extend = MVC.extend;
|
|
$.reader = MVC.reader;
|
|
$.writer = MVC.writer;
|
|
$.accessor = MVC.accessor;
|
|
|
|
/**
|
|
* [ private ] map2n
|
|
* @param e the element of the array currently being mapped
|
|
* @return the number obtained from the array element
|
|
* @note used internally from within DMV.map2n(array)
|
|
*/
|
|
function map2n(e) {
|
|
return Number(e);
|
|
};
|
|
|
|
/**
|
|
* DMV.map2n(array)
|
|
* @param array the array to map into a number array
|
|
* @return the number array that has been mapped
|
|
*/
|
|
$.map2n = function(array){
|
|
return array.map(map2n);
|
|
};
|
|
|
|
/**
|
|
* DMV.mapParams2n(paramstring, splitter)
|
|
* @param paramstring the paramter string to map to a number array
|
|
* @param splitter [optional] the character to use to delimit the string
|
|
* @return the number array that has been mapped
|
|
*/
|
|
$.mapParams2n = function(paramstring /*, splitter */){
|
|
if (!paramstring){ return [] };
|
|
var spl = (arguments.length > 1 ? arguments[1] : ',');
|
|
return $.map2n(paramstring.split(spl));
|
|
};
|
|
|
|
/**
|
|
* DMV.mapMeta2n(object, metaid, splitter)
|
|
* @param object the meta object to extract data from
|
|
* @param metaid the meta identifier string value
|
|
* @param splitter [optional] the character to use to split meta
|
|
* @return an integer array containing the required meta information
|
|
*/
|
|
$.mapMeta2n = function(object, metaid /* , splitter*/){
|
|
return $.mapParams2n($.extractMetaData(object, metaid)/* , splitter*/);
|
|
};
|
|
|
|
/**
|
|
* DMV.extractMetaData(object, metaid)
|
|
* @param object the meta object to extract data from
|
|
* @param metaid the meta identifier to return if found
|
|
* @return the meta id information or null if not found
|
|
*/
|
|
$.extractMetaData = function(object, metaid){
|
|
var meta = object.meta[metaid];
|
|
return meta !== undefined ? meta : null;
|
|
};
|
|
|
|
/**
|
|
* DMV.reduceMeta(array, vname)
|
|
* @param array the array of database object, such as equips().
|
|
* @param vname the variable name to scan meta data for
|
|
* @return the total value gained from all vname notetags, or 0.
|
|
*/
|
|
$.reduceMeta = function(array, vname){
|
|
return array.reduce(function(prev, curr, i, obj){
|
|
return (obj[i] ? (prev + curr[vname]) : prev);
|
|
}, 0);
|
|
};
|
|
|
|
/**
|
|
* DMV.reduceMetaID(array, vname, id)
|
|
* @param array the array of database object, such as equips().
|
|
* @param vname the variable name to scan meta data for
|
|
* @param id the array index to use for adding values..
|
|
* @return the total value gained from all vname notetags, or 0.
|
|
* @note this function is used when scanning meta that is an array
|
|
*/
|
|
$.reduceMetaID = function(array, vname, id){
|
|
return array.reduce(function(prev, curr, i, obj){
|
|
return (obj[i] ? (prev + curr[vname][id]) : prev);
|
|
}, 0);
|
|
};
|
|
|
|
|
|
/**
|
|
* DMV.extractFunkString(objekt, funkName, defaultFunkString)
|
|
* @param objekt the object to scan the meta for funkName
|
|
* @param funkName the function name to get from meta
|
|
* @param defaultFunkString the default function string
|
|
* @return a string that can be used to create functions
|
|
*/
|
|
$.extractFunkString = function(objekt, funkName, defaultFunkString){
|
|
var meta = $.extractMetaData(objekt, funkName);
|
|
return "return " + (meta ? meta : defaultFunkString);
|
|
};
|
|
|
|
/**
|
|
* DMV.extractFunkStringF(objekt, funkName, defaultFunkString)
|
|
* @param objekt the object to scan the meta for funkName
|
|
* @param funkName the function name to get from meta
|
|
* @param defaultFunkString the default function string
|
|
* @return a function that is bound to the objekt
|
|
*/
|
|
$.extractFunkStringF = function(objekt, funkName, defaultFunkString){
|
|
var str = $.extractFunkString(objekt, funkName, defaultFunkString);
|
|
return Function(str).bind(objekt);
|
|
};
|
|
|
|
/**
|
|
* DMV.register(pluginName, pluginVer, date, reqr, exit)
|
|
* @param pluginName the plugin name to br registered
|
|
* @param pluginVer the plugin version to be registered
|
|
* @param date the date the plugin was written
|
|
* @param reqr array of all required plugins
|
|
* @param exit boolean value to determine exit
|
|
* @return N/A
|
|
*/
|
|
$.register = function(pluginName, pluginVer, date, reqr, exit){
|
|
var name = "DMV_" + pluginName;
|
|
var desc = pluginName + " by dekita @ www.dekyde.com"
|
|
PluginManager.register(name, pluginVer, desc, $.author, date, reqr, exit);
|
|
if (console){console.log("Loaded: " + name + ' v' + pluginVer)};
|
|
};
|
|
|
|
/**
|
|
* DMV.require(pluginName, pluginVer)
|
|
* @param pluginName the name of plugin to check for
|
|
* @param pluginVer the version of plugin to check for
|
|
* @return boolean value based on if plugin available
|
|
*/
|
|
$.require = function(pluginName, pluginVer){
|
|
return PluginManager.version(pluginName, ">=", pluginVer);
|
|
};
|
|
|
|
/**
|
|
* DMV.rand(max, min)
|
|
* @param max the maximum value that can be returned
|
|
* @param min [optional] same as max, but minimum value
|
|
* @return a random value between min (0 if not given) and max
|
|
*/
|
|
$.rand = function(max, min){
|
|
if (min === undefined){ var min = 0 };
|
|
return Math.floor(Math.random()*(max-min+1)+min);
|
|
};
|
|
|
|
/**
|
|
* DMV.createIconButton(icon1, icon2, parent)
|
|
* @param icon1 the icon to show for buttons cold frame
|
|
* @param icon2 the icon to show for buttons hot frame
|
|
* @param parent [optional] if given will call addChild
|
|
* to add the button into the parents child list
|
|
* @return new button
|
|
*/
|
|
$.createIconButton = function(icon1, icon2, parent) {
|
|
var bw = 32, bh = 32, button = new Sprite_Button();
|
|
button.bitmap = ImageManager.loadSystem('IconSet');
|
|
button.setColdFrame(icon1%16*bw, Math.floor(icon1/16)*bh, bw, bh);
|
|
button.setHotFrame(icon2%16*bw, Math.floor(icon2/16)*bh ,bw, bh);
|
|
if (parent != undefined && parent.addChild){
|
|
parent.addChild(button);
|
|
};button.visible = true;
|
|
return button;
|
|
};
|
|
|
|
/**
|
|
* Setup metadata helper functions
|
|
* Game_BattlerBase.prototype.meta
|
|
* Game_Actor.prototype.meta
|
|
* Game_Enemy.prototype.meta
|
|
*/
|
|
$.reader(Game_BattlerBase.prototype,'meta', function(){
|
|
return {};
|
|
});
|
|
$.reader(Game_Actor.prototype,'meta', function(){
|
|
return this.actor() ? this.actor().meta : {};
|
|
});
|
|
$.reader(Game_Enemy.prototype,'meta', function(){
|
|
return this.enemy() ? this.enemy().meta : {};
|
|
});
|
|
|
|
/**\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
* DMV HTTP Variables && Functions
|
|
**///////////////////////////////
|
|
|
|
/**
|
|
* HTTP::KnownErrors
|
|
* Cross-Origin Request Blocked: The Same Origin Policy disallows reading the
|
|
* remote resource at http://www.dekyde.com/BasicHTTPDemo/BasicPost.php5
|
|
* (Reason: CORS header 'Access-Control-Allow-Origin' missing).
|
|
* ^CORS header was available and this only happens 1/100 times...
|
|
* I suspect some other underlying cause - continuing to research...
|
|
*/
|
|
$.HTTP = function() {
|
|
throw new Error('DMV.HTTP' + base_static_error);
|
|
};
|
|
|
|
/**
|
|
* DMV.HTTP functions
|
|
*/
|
|
(function(http){
|
|
/**
|
|
* DMV.HTTP.FORM_ENCODE
|
|
* Content-type used when performing post requests
|
|
*/
|
|
http.FORM_ENCODE = "application/x-www-form-urlencoded";
|
|
|
|
/**
|
|
* [ private ] aSyncRequest(cbk)
|
|
* @param cbk The main callback function
|
|
* @param obj The object to perform the cbk on
|
|
* @return an asyncronous request
|
|
*/
|
|
function aSyncRequest(cbk, thisobj){
|
|
var request = new XMLHttpRequest();
|
|
request.onreadystatechange = function() {
|
|
if (request.readyState == 4 && request.status == 200){
|
|
cbk.apply(thisobj, [request.responseText]);
|
|
};
|
|
};
|
|
return request;
|
|
};
|
|
|
|
/**
|
|
* DMV.HTTP.getAsync(url, str, cbk, obj)
|
|
* @param url URL to send request to
|
|
* @param str string to pass with url
|
|
* @param cbk Callback function
|
|
* @param obj The object to perform the cbk on
|
|
*/
|
|
http.getAsync = function(url, str, cbk, obj){
|
|
var request = aSyncRequest(cbk, obj);
|
|
request.open("GET", url, true);
|
|
request.send(str);
|
|
};
|
|
|
|
/**
|
|
* DMV.HTTP.postAsync(url, str, cbk)
|
|
* @param url URL to send request to
|
|
* @param str string to pass with url
|
|
* @param cbk Callback function
|
|
* @param obj The object to perform the cbk on
|
|
*/
|
|
http.postAsync = function(url, str, cbk, obj){
|
|
var request = aSyncRequest(cbk, obj);
|
|
request.open("POST", url, true);
|
|
request.setRequestHeader("Content-type", http.FORM_ENCODE);
|
|
request.send(str);
|
|
};
|
|
/**
|
|
* End HTTP Declarations
|
|
*/
|
|
})($.HTTP);
|
|
|
|
/**\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
* DMV Scene Related Variables && Functions
|
|
**////////////////////////////////////////
|
|
|
|
/**
|
|
* DMV.isScene(sceneClass)
|
|
* @param sceneClass the class to check for
|
|
* @return true if the current class is sceneClass
|
|
*/
|
|
$.isScene = function(sceneClass){
|
|
var scene = SceneManager._scene;
|
|
return scene && scene.constructor === sceneClass;
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite
|
|
* Container to hold my custom sprite classes
|
|
*/
|
|
$.Sprite = function() {
|
|
throw new Error('DMV.Sprite'+base_static_error)
|
|
};
|
|
|
|
/**
|
|
* DMV.Window
|
|
* Container to hold my custom window classes
|
|
*/
|
|
$.Window = function() {
|
|
throw new Error('DMV.Window'+base_static_error)
|
|
};
|
|
|
|
/**
|
|
* DMV.Scene
|
|
* Container to hold my custom scene classes
|
|
*/
|
|
$.Scene = function() {
|
|
throw new Error('DMV.Scene'+base_static_error)
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton
|
|
* Sprite_Button class with dedicated toggled state
|
|
*/
|
|
$.Sprite.TogButton = $.extend(Sprite_Button);
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype functions
|
|
*/
|
|
(function (butt){
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype.initialize(bitmap)
|
|
* Initiailizes toggle button sprite.
|
|
* @param bitmap [optional] the bitmap image to use for the button
|
|
*/
|
|
butt.initialize = function(/* bitmap */){
|
|
Sprite_Button.prototype.initialize.call(this);
|
|
if (arguments[0]){
|
|
this.bitmap = arguments[0];
|
|
};
|
|
this._dmv_toggled = false;
|
|
this.update();
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype.updateFrame()
|
|
* Overwrite parent function to allow for toggle state
|
|
*/
|
|
butt.updateFrame = function() {
|
|
var frame = null, touch = this._touching;
|
|
if (this._dmv_toggled){
|
|
frame = touch ? this._dmv_tog_hotFrame : this._dmv_tog_coldFrame;
|
|
} else {
|
|
frame = touch ? this._hotFrame : this._coldFrame;
|
|
};
|
|
if (frame) {
|
|
this.setFrame(frame.x, frame.y, frame.width, frame.height);
|
|
};
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype.setTogColdFrame(x, y, w, h)
|
|
* Sets the button sprites cold frame for toggled state.
|
|
* @param x the x position to use for this frame
|
|
* @param y the y position to use for this frame
|
|
* @param w the width to use for this frame
|
|
* @param h the height to use for this frame
|
|
*/
|
|
butt.setTogColdFrame = function(x, y, width, height) {
|
|
this._dmv_tog_coldFrame = new Rectangle(x, y, width, height);
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype.setTogHotFrame(x, y, w, h)
|
|
* Sets the button sprites hot frame for toggled state.
|
|
* @param x the x position to use for this frame
|
|
* @param y the y position to use for this frame
|
|
* @param w the width to use for this frame
|
|
* @param h the height to use for this frame
|
|
*/
|
|
butt.setTogHotFrame = function(x, y, width, height) {
|
|
this._dmv_tog_hotFrame = new Rectangle(x, y, width, height);
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype.setRegularFrames(coldArray, hotArray)
|
|
* Sets the regular state hot and cold frames for this button.
|
|
* @param coldArray the array of [x,y,w,h] to use for the cold frame
|
|
* @param hotArray the array of [x,y,w,h] to use for the hot frame
|
|
*/
|
|
butt.setRegularFrames = function(coldArray, hotArray) {
|
|
butt.setColdFrame.apply(this,coldArray);
|
|
butt.setHotFrame.apply(this,hotArray);
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype.setToggledFrames(coldArray, hotArray)
|
|
* Sets the toggled state hot and cold frames for this button.
|
|
* @param coldArray the array of [x,y,w,h] to use for the cold frame
|
|
* @param hotArray the array of [x,y,w,h] to use for the hot frame
|
|
*/
|
|
butt.setToggledFrames = function(coldArray, hotArray) {
|
|
butt.setTogColdFrame.apply(this,coldArray);
|
|
butt.setTogHotFrame.apply(this,hotArray);
|
|
};
|
|
|
|
/**
|
|
* DMV.Sprite.TogButton.prototype.callClickHandler()
|
|
* Calls the handler that processes when the button is clicked,
|
|
* if it is available, and also toggles the toggle state flag.
|
|
*/
|
|
butt.callClickHandler = function() {
|
|
if (this._clickHandler) {
|
|
this._dmv_toggled = !this._dmv_toggled;
|
|
this._clickHandler();
|
|
}
|
|
};
|
|
})($.Sprite.TogButton.prototype);
|
|
/**
|
|
* End DMV declarations
|
|
*/
|
|
})(DMV);
|
|
/**
|
|
* End plugin
|
|
* www.dekyde.com
|
|
*/ |