mirror of
https://github.com/photonstorm/phaser
synced 2024-11-29 16:10:56 +00:00
220 lines
4.2 KiB
JavaScript
220 lines
4.2 KiB
JavaScript
var Between = require('./Between');
|
|
var FloatBetween = require('./FloatBetween');
|
|
var Class = require('../utils/Class');
|
|
var Percent = require('./Percent');
|
|
var Wrap = require('./Wrap');
|
|
var Vector2 = require('./Vector2');
|
|
|
|
// A Helper Class that allows you to specify a range between min and max, and then
|
|
// keep the value within those bounds, or get random ints or floats from the range.
|
|
|
|
var MinMax4 = new Class({
|
|
|
|
initialize:
|
|
|
|
function MinMax4 (xMin, xMax, yMin, yMax)
|
|
{
|
|
this.xMin = 0;
|
|
this.xMax = 0;
|
|
|
|
this.yMin = 0;
|
|
this.yMax = 0;
|
|
|
|
this._currentX = 0;
|
|
this._currentY = 0;
|
|
|
|
if (xMin !== undefined)
|
|
{
|
|
this.set(xMin, xMax, yMin, yMax);
|
|
}
|
|
},
|
|
|
|
setX: function (min, max)
|
|
{
|
|
if (min === undefined) { min = 0; }
|
|
if (max === undefined) { max = min; }
|
|
|
|
this.xMin = min;
|
|
this.xMax = max;
|
|
this._currentX = min;
|
|
|
|
return this;
|
|
},
|
|
|
|
setY: function (min, max)
|
|
{
|
|
if (min === undefined) { min = 0; }
|
|
if (max === undefined) { max = min; }
|
|
|
|
this.yMin = min;
|
|
this.yMax = max;
|
|
this._currentY = min;
|
|
|
|
return this;
|
|
},
|
|
|
|
set: function (xMin, xMax, yMin, yMax)
|
|
{
|
|
if (Array.isArray(xMin))
|
|
{
|
|
var arr = xMin;
|
|
|
|
xMin = arr[0];
|
|
xMax = arr[1];
|
|
yMin = arr[2];
|
|
yMax = arr[3];
|
|
}
|
|
else if (typeof xMin === 'object')
|
|
{
|
|
var obj = xMin;
|
|
|
|
xMin = obj.xMin || obj.min;
|
|
xMax = obj.xMax || obj.max;
|
|
yMin = obj.yMin;
|
|
yMax = obj.yMax;
|
|
}
|
|
|
|
if (xMin === undefined) { xMin = 0; }
|
|
if (xMax === undefined) { xMax = xMin; }
|
|
if (yMin === undefined) { yMin = xMin; }
|
|
if (yMax === undefined) { yMax = xMax; }
|
|
|
|
this.setX(xMin, xMax);
|
|
this.setY(yMin, yMax);
|
|
|
|
return this;
|
|
},
|
|
|
|
clone: function ()
|
|
{
|
|
return new MinMax4(this.xMin, this.xMax, this.yMin, this.yMax);
|
|
},
|
|
|
|
copyX: function (dest)
|
|
{
|
|
dest.x = this.xMin;
|
|
dest.y = this.xMax;
|
|
|
|
return this;
|
|
},
|
|
|
|
copyY: function (dest)
|
|
{
|
|
dest.x = this.yMin;
|
|
dest.y = this.yMax;
|
|
|
|
return this;
|
|
},
|
|
|
|
copy: function (dest)
|
|
{
|
|
dest.xMin = this.xMin;
|
|
dest.xMax = this.xMax;
|
|
|
|
dest.yMin = this.yMin;
|
|
dest.yMax = this.yMax;
|
|
|
|
return dest;
|
|
},
|
|
|
|
copyXToMinMax: function (dest)
|
|
{
|
|
dest.min = this.xMin;
|
|
dest.max = this.xMax;
|
|
|
|
return this;
|
|
},
|
|
|
|
copyYToMinMax: function (dest)
|
|
{
|
|
dest.min = this.yMin;
|
|
dest.max = this.yMax;
|
|
|
|
return this;
|
|
},
|
|
|
|
/*
|
|
// Given U (a value between 0 and 1) return the value in the range
|
|
getU: function (u)
|
|
{
|
|
// TODO
|
|
},
|
|
|
|
// Returns a value between 0 and 1 based on value
|
|
getPercent: function (value)
|
|
{
|
|
return Percent(value, this.min, this.max);
|
|
},
|
|
*/
|
|
|
|
getRandom: function (vec2)
|
|
{
|
|
if (vec2 === undefined) { vec2 = new Vector2(); }
|
|
|
|
vec2.x = this.getRandomX();
|
|
vec2.y = this.getRandomY();
|
|
|
|
return vec2;
|
|
},
|
|
|
|
getRandomFloat: function (vec2)
|
|
{
|
|
if (vec2 === undefined) { vec2 = new Vector2(); }
|
|
|
|
vec2.x = this.getRandomXFloat();
|
|
vec2.y = this.getRandomYFloat();
|
|
|
|
return vec2;
|
|
},
|
|
|
|
getRandomX: function ()
|
|
{
|
|
return Between(this.xMin, this.xMax);
|
|
},
|
|
|
|
getRandomY: function ()
|
|
{
|
|
return Between(this.yMin, this.yMax);
|
|
},
|
|
|
|
getRandomXFloat: function ()
|
|
{
|
|
return FloatBetween(this.xMin, this.xMax);
|
|
},
|
|
|
|
getRandomYFloat: function ()
|
|
{
|
|
return FloatBetween(this.yMin, this.yMax);
|
|
},
|
|
|
|
x: {
|
|
|
|
get: function ()
|
|
{
|
|
return this._currentX
|
|
},
|
|
|
|
set: function (value)
|
|
{
|
|
this._currentX = Wrap(this._currentX, this.xMin, this.xMax);
|
|
}
|
|
|
|
},
|
|
|
|
y: {
|
|
|
|
get: function ()
|
|
{
|
|
return this._currentY;
|
|
},
|
|
|
|
set: function (value)
|
|
{
|
|
this._currentY = Wrap(this._currentY, this.yMin, this.yMax);
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
module.exports = MinMax4;
|