mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-11-11 04:54:06 +01:00
181 lines
4.2 KiB
Plaintext
181 lines
4.2 KiB
Plaintext
|
function __vec2(_x = 0, _y = _x) constructor {
|
||
|
static set = function(_x = 0, _y = _x) { #region
|
||
|
if(is_struct(_x) && is_instanceof(_x, __vec2)) {
|
||
|
x = _x.x;
|
||
|
y = _x.y;
|
||
|
return self;
|
||
|
}
|
||
|
|
||
|
if(is_struct(_x) && is_instanceof(_x, BBMOD_Vec2)) {
|
||
|
x = _x.X;
|
||
|
y = _x.Y;
|
||
|
return self;
|
||
|
}
|
||
|
|
||
|
if(is_array(_x)) {
|
||
|
x = _x[0];
|
||
|
y = _x[1];
|
||
|
return self;
|
||
|
}
|
||
|
|
||
|
x = _x;
|
||
|
y = _y;
|
||
|
return self;
|
||
|
} set(_x, _y); #endregion
|
||
|
|
||
|
static setIndex = function(index, value) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
switch(index) {
|
||
|
case 0 : x = value; break;
|
||
|
case 1 : y = value; break;
|
||
|
}
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static getIndex = function(index) { #region
|
||
|
switch(index) {
|
||
|
case 0 : return x;
|
||
|
case 1 : return y;
|
||
|
}
|
||
|
return 0;
|
||
|
} #endregion
|
||
|
|
||
|
static addElement = function(_x, _y) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return new __vec2(x + _x, y + _y);
|
||
|
} #endregion
|
||
|
static _addElement = function(_x, _y) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
x += _x;
|
||
|
y += _y;
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static add = function(_vec2) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return new __vec2(x + _vec2.x, y + _vec2.y);
|
||
|
} #endregion
|
||
|
static _add = function(_vec2) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
x += _vec2.x;
|
||
|
y += _vec2.y;
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static subtract = function(_vec2) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return new __vec2(x - _vec2.x, y - _vec2.y);
|
||
|
} #endregion
|
||
|
static _subtract = function(_vec2) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
x -= _vec2.x;
|
||
|
y -= _vec2.y;
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static multiply = function(_scalar) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return new __vec2(x * _scalar, y * _scalar);
|
||
|
} #endregion
|
||
|
static _multiply = function(_scalar) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
x *= _scalar;
|
||
|
y *= _scalar;
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static multiplyVec = function(_vec) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return new __vec2(x * _vec.x, y * _vec.y);
|
||
|
} #endregion
|
||
|
static _multiplyVec = function(_vec) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
x *= _vec.x;
|
||
|
y *= _vec.y;
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static divide = function(_scalar) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
if (_scalar != 0)
|
||
|
return new __vec2(x / _scalar, y / _scalar);
|
||
|
|
||
|
return new __vec2(x, y, z); // Avoid division by zero
|
||
|
} #endregion
|
||
|
static _divide = function(_scalar) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
if (_scalar != 0) {
|
||
|
x /= _scalar;
|
||
|
y /= _scalar;
|
||
|
}
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static dot = function(_vec2) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return x * _vec2.x + y * _vec2.y;
|
||
|
} #endregion
|
||
|
|
||
|
static distance = function(_vec2) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
var dx = _vec2.x - x;
|
||
|
var dy = _vec2.y - y;
|
||
|
return sqrt(dx * dx + dy * dy);
|
||
|
} #endregion
|
||
|
|
||
|
static directionTo = function(_vec2) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return point_direction(x, y, _vec2.x, _vec2.y);
|
||
|
} #endregion
|
||
|
|
||
|
static length = function() { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return sqrt(x * x + y * y);
|
||
|
} #endregion
|
||
|
|
||
|
static normalize = function() { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return clone()._normalize();
|
||
|
} #endregion
|
||
|
static _normalize = function() { #region
|
||
|
gml_pragma("forceinline");
|
||
|
var _length = length();
|
||
|
if (_length != 0) {
|
||
|
x /= _length;
|
||
|
y /= _length;
|
||
|
}
|
||
|
return self;
|
||
|
} #endregion
|
||
|
|
||
|
static lerpTo = function(to, speed = 0.3) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return new __vec2(lerp(x, to.x, speed), lerp(y, to.y, speed));
|
||
|
} #endregion
|
||
|
static _lerpTo = function(to, speed = 0.3) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
x = lerp(x, to.x, speed);
|
||
|
y = lerp(y, to.y, speed);
|
||
|
} #endregion
|
||
|
|
||
|
static _lerp_float = function(to, speed = 5, pre = 0.01) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
x = lerp_float(x, to.x, speed, pre);
|
||
|
y = lerp_float(y, to.y, speed, pre);
|
||
|
} #endregion
|
||
|
|
||
|
static equal = function(to) { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return x == to.x && y == to.y;
|
||
|
} #endregion
|
||
|
|
||
|
static clone = function() { #region
|
||
|
gml_pragma("forceinline");
|
||
|
return new __vec2(x, y);
|
||
|
} #endregion
|
||
|
|
||
|
static toString = function() { return $"[{x}, {y}]"; }
|
||
|
|
||
|
static toBBMOD = function() { return new BBMOD_Vec2(x, y); }
|
||
|
|
||
|
static toArray = function() { return [ x, y ]; }
|
||
|
}
|