Код:
//-----------------------------------------------------------------------------
// Galv's Variable Bar
//-----------------------------------------------------------------------------
// For: RPGMAKER MV
// Galv_VariableBar.js
//-----------------------------------------------------------------------------
// 2017-09-08 - Version 1.0 - release
//-----------------------------------------------------------------------------
// Terms can be found at:
// galvs-scripts.com
//-----------------------------------------------------------------------------
var Imported = Imported || {};
Imported.Galv_VariableBar = true;
var Galv = Galv || {}; // Galv's main object
Galv.VBAR = Galv.VBAR || {}; // Galv's plugin stuff
//-----------------------------------------------------------------------------
/*:
* @plugindesc (v.1.0) A graphical bar that displays in the map scene to show the current value of a max value visually using variables.
*
* @author Galv - galvs-scripts.com
*
* @help
* Galv's Variable Bar
* ----------------------------------------------------------------------------
* This plugin displays a graphical bar on the map scene based on two variables
* that are chosen when each bar is created.
*
* ----------------------------------------------------------------------------
* SCRIPT CALLS
* ----------------------------------------------------------------------------
* To create a variable bar on screen, you can use the following script call:
*
* Galv.VBAR.create(id,"barimage","barimage2",var1,var2,x,y,ox,oy);
*
* id = A unique id number and index to reference the variable bar
* barimage = Image name from /img/pictures/ to use for the variable bar
* barimage2 = Image name from /img/pictures/ to use for the bar underlay
* var1 = Variable id to use for current value of bar
* var2 = Variable id to use for maximum value of bar
* x = X position of the bar images on the screen
* y = Y position of the bar images on the screen
* ox = The x offset of the barimage in relation to barimage2
* oy = The y offset of the barimage in relation to barimage2
*
* If you create a new bar using the same id as another bar you have already
* created, it will remove that bar and create the new one.
*
*
* To remove a variable bar from the screen, you can use:
*
* Galv.VBAR.remove(id);
*
*
* To modify a variable bar, you can use the following:
*
* Galv.VBAR.mod(id).barimage = "image";
* Galv.VBAR.mod(id).barimage2 = "image";
* Galv.VBAR.mod(id).var1 = currentVarId;
* Galv.VBAR.mod(id).var2 = maxVarId;
* Galv.VBAR.mod(id).x = xPos;
* Galv.VBAR.mod(id).y = yPos;
* Galv.VBAR.mod(id).ox = oxPos;
* Galv.VBAR.mod(id).oy = oyPos;
*/
//-----------------------------------------------------------------------------
// CODE STUFFS
//-----------------------------------------------------------------------------
(function() {
Galv.VBAR.create = function(id,image,image2,var1,var2,x,y,ox,oy) {
if (id >= 0) {
$gameSystem._varBars[id] = {
barimage:image || "",
barimage2: image2 || "",
var1:var1 || 0,
var2:var2 || 0,
x:x || 0,
y:y || 0,
ox:ox || 0,
oy:oy || 0
};
}
// refresh scene
if (SceneManager._scene.createVarBars) SceneManager._scene.createVarBars();
};
Galv.VBAR.remove = function(id) {
$gameSystem._varBars[id] = null;
// refresh scene
if (SceneManager._scene.createVarBars) SceneManager._scene.createVarBars();
};
Galv.VBAR.mod = function(id) {
return $gameSystem._varBars[id];
};
//-----------------------------------------------------------------------------
// GAME SYSTEM
//-----------------------------------------------------------------------------
Galv.VBAR.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
Galv.VBAR.Game_System_initialize.call(this);
this._varBars = []; // list of all bars existing in game
};
//-----------------------------------------------------------------------------
// SCENE MAP
//-----------------------------------------------------------------------------
Galv.VBAR.Scene_Map_createDisplayObjects = Scene_Map.prototype.createDisplayObjects;
Scene_Map.prototype.createDisplayObjects = function() {
Galv.VBAR.Scene_Map_createDisplayObjects.call(this);
this.createVarBars();
};
Scene_Map.prototype.createVarBars = function() {
// if bars exist, remove them all
if (this._varBars) {
for (var i = 0; i < this._varBars.length; i++) {
this.removeChild(this._varBars[i]);
}
}
// init varBar sprite container
this._varBars = [];
// create varBar sprites
for (var i = 0; i < $gameSystem._varBars.length; i++) {
// if index exists in array, add as sprite
if ($gameSystem._varBars[i]) {
this._varBars.push(new Sprite_VarBar(i));
}
}
// make children
for (var i = 0; i < this._varBars.length; i++) {
this.addChild(this._varBars[i]);
}
};
})();
//-----------------------------------------------------------------------------
// SPRITE VARBAR
//-----------------------------------------------------------------------------
function Sprite_VarBar() {
this.initialize.apply(this, arguments);
}
Sprite_VarBar.prototype = Object.create(Sprite.prototype);
Sprite_VarBar.prototype.constructor = Sprite_VarBar;
Sprite_VarBar.prototype.initialize = function(index) {
Sprite.prototype.initialize.call(this);
this._id = index;
this._barWidth = 0;
this.createGraphics();
};
Sprite_VarBar.prototype.obj = function() {
return $gameSystem._varBars[this._id];
};
Sprite_VarBar.prototype.createGraphics = function() {
var obj = this.obj();
// under image
this._barimage2 = obj.barimage2;
this.bitmap = ImageManager.loadPicture(obj.barimage2);
// bar image
if (this._bar) this.removeChild(this._bar);
this._bar = new Sprite();
this._barimage = obj.barimage;
this._bar.bitmap = ImageManager.loadPicture(obj.barimage);
this.addChild(this._bar);
this._barNeedsInit = true;
this.updatePos(obj);
};
Sprite_VarBar.prototype.update = function() {
Sprite.prototype.update.call(this);
var obj = this.obj();
if (!obj) return;
this.updatePos(obj);
this.updateImages(obj);
};
Sprite_VarBar.prototype.updatePos = function(obj) {
this.x = obj.x;
this.y = obj.y;
this._bar.x = obj.ox;
this._bar.y = obj.oy;
};
Sprite_VarBar.prototype.updateImages = function(obj) {
if (this._barimage2 != obj.barimage2 || this._barimage != obj.barimage) {
this.createGraphics();
}
// update bar sprite
if (this._bar.bitmap.isReady()) {
if (this._barNeedsInit) {
// store full bar image width for max width
this._barWidth = this._bar.width;
this._barNeedsInit = false;
}
// set width based on current/max values
var curVal = $gameVariables.value(obj.var1);
var maxVal = $gameVariables.value(obj.var2);
var percent = curVal > 0 && maxVal > 0 ? curVal / maxVal : 0;
this._bar.width = Math.max(0,Math.min(this._barWidth * percent,this._barWidth));
}
};
Социальные закладки