This commit is contained in:
Vortrex
2022-06-07 10:24:19 -05:00
parent 3298aabca3
commit e34c8c9636
2 changed files with 287 additions and 429 deletions

View File

@@ -5,67 +5,56 @@ mexui.util.monthNames = ['january', 'february', 'march', 'april', 'may', 'june',
mexui.util.weekDayNames = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']; mexui.util.weekDayNames = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
// functions // functions
mexui.util.extend = function(d, b) mexui.util.extend = function (d, b) {
{
d.prototype = Object.create(b.prototype); d.prototype = Object.create(b.prototype);
d.prototype.constructor = b; d.prototype.constructor = b;
}; };
mexui.util.isPointInRectangle = function(point, position, size) mexui.util.isPointInRectangle = function (point, position, size) {
{ if (!point)
if(!point)
return false; // temp bug fix return false; // temp bug fix
return point.x >= position.x && point.y >= position.y && point.x <= (position.x + size.x) && point.y <= (position.y + size.y); return point.x >= position.x && point.y >= position.y && point.x <= (position.x + size.x) && point.y <= (position.y + size.y);
}; };
mexui.util.isCursorInRectangle = function(position, size) mexui.util.isCursorInRectangle = function (position, size) {
{
return mexui.util.isPointInRectangle(gui.cursorPosition, position, size); return mexui.util.isPointInRectangle(gui.cursorPosition, position, size);
}; };
mexui.util.addVec2 = function(vec2a, vec2b) mexui.util.addVec2 = function (vec2a, vec2b) {
{
return new Vec2(vec2a.x + vec2b.x, vec2a.y + vec2b.y); return new Vec2(vec2a.x + vec2b.x, vec2a.y + vec2b.y);
}; };
mexui.util.subtractVec2 = function(vec2a, vec2b) mexui.util.subtractVec2 = function (vec2a, vec2b) {
{
return new Vec2(vec2a.x - vec2b.x, vec2a.y - vec2b.y); return new Vec2(vec2a.x - vec2b.x, vec2a.y - vec2b.y);
}; };
mexui.util.addVec3 = function(vec3a, vec3b) mexui.util.addVec3 = function (vec3a, vec3b) {
{
return new Vec3(vec3a.x + vec3b.x, vec3a.y + vec3b.y, vec3a.z + vec3b.z); return new Vec3(vec3a.x + vec3b.x, vec3a.y + vec3b.y, vec3a.z + vec3b.z);
}; };
mexui.util.createControlConstructor = function(controlName, hasEntries, constructor) mexui.util.createControlConstructor = function (controlName, hasEntries, constructor) {
{
mexui.Control[controlName] = constructor; mexui.Control[controlName] = constructor;
mexui.util.extend(mexui.Control[controlName], hasEntries ? mexui.Entity.ControlWithEntries : mexui.Component.Control); mexui.util.extend(mexui.Control[controlName], hasEntries ? mexui.Entity.ControlWithEntries : mexui.Component.Control);
}; };
mexui.util.linkBaseControlStyles = function(controlName, derivedStyles) mexui.util.linkBaseControlStyles = function (controlName, derivedStyles) {
{
mexui.Control[controlName].defaultStyles = mexui.util.linkStyles(mexui.Component.Control.defaultStyles, derivedStyles); mexui.Control[controlName].defaultStyles = mexui.util.linkStyles(mexui.Component.Control.defaultStyles, derivedStyles);
}; };
mexui.util.linkStyles = function(baseStyles, derivedStyles) mexui.util.linkStyles = function (baseStyles, derivedStyles) {
{
derivedStyles = derivedStyles || {}; derivedStyles = derivedStyles || {};
for(var k in baseStyles) for (var k in baseStyles) {
{ switch (k) {
switch(k)
{
case 'focus': case 'focus':
case 'hover': case 'hover':
continue; continue;
} }
if(!derivedStyles[k]) if (!derivedStyles[k])
derivedStyles[k] = {}; derivedStyles[k] = {};
if(!(derivedStyles[k].__proto__ instanceof Object)) if (!(derivedStyles[k].__proto__ instanceof Object))
derivedStyles[k].__proto__ = baseStyles[k]; derivedStyles[k].__proto__ = baseStyles[k];
/* /*
@@ -81,29 +70,23 @@ mexui.util.linkStyles = function(baseStyles, derivedStyles)
//return derivedStyles; //return derivedStyles;
}; };
mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles) mexui.util.linkGlobalStyles = function (baseStyles, derivedStyles) {
{
derivedStyles = derivedStyles || {}; derivedStyles = derivedStyles || {};
for(var k in derivedStyles) for (var k in derivedStyles) {
{ switch (k) {
switch(k)
{
case 'focus': case 'focus':
case 'hover': case 'hover':
continue; continue;
} }
if(!(derivedStyles[k].__proto__ instanceof Object)) if (!(derivedStyles[k].__proto__ instanceof Object)) {
{
derivedStyles[k].__proto__ = baseStyles.all; derivedStyles[k].__proto__ = baseStyles.all;
} }
} }
for(var k in derivedStyles) for (var k in derivedStyles) {
{ switch (k) {
switch(k)
{
case 'focus': case 'focus':
case 'hover': case 'hover':
continue; continue;
@@ -117,26 +100,20 @@ mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
} }
*/ */
if(derivedStyles[k].focus) if (derivedStyles[k].focus) {
{ if (!(derivedStyles[k].focus.__proto__ instanceof Object)) {
if(!(derivedStyles[k].focus.__proto__ instanceof Object))
{
derivedStyles[k].focus.__proto__ = baseStyles.all; derivedStyles[k].focus.__proto__ = baseStyles.all;
} }
if(derivedStyles[k].focus.hover) if (derivedStyles[k].focus.hover) {
{ if (!(derivedStyles[k].focus.hover.__proto__ instanceof Object)) {
if(!(derivedStyles[k].focus.hover.__proto__ instanceof Object))
{
derivedStyles[k].focus.hover.__proto__ = baseStyles.all; derivedStyles[k].focus.hover.__proto__ = baseStyles.all;
} }
} }
} }
if(derivedStyles[k].hover) if (derivedStyles[k].hover) {
{ if (!(derivedStyles[k].hover.__proto__ instanceof Object)) {
if(!(derivedStyles[k].hover.__proto__ instanceof Object))
{
derivedStyles[k].hover.__proto__ = baseStyles.all; derivedStyles[k].hover.__proto__ = baseStyles.all;
} }
} }
@@ -145,59 +122,49 @@ mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
return derivedStyles; return derivedStyles;
}; };
String.prototype.repeat = function(count) String.prototype.repeat = function (count) {
{
return Array(count + 1).join(this); return Array(count + 1).join(this);
}; };
mexui.util.isLetter = function(character) mexui.util.isLetter = function (character) {
{
var ord = character.charCodeAt(0); var ord = character.charCodeAt(0);
return (ord >= 65 && ord <= 90) || (ord >= 97 && ord <= 122); return (ord >= 65 && ord <= 90) || (ord >= 97 && ord <= 122);
}; };
mexui.util.isDigit = function(character) mexui.util.isDigit = function (character) {
{
var ord = character.charCodeAt(0); var ord = character.charCodeAt(0);
return ord >= 48 && ord <= 57; return ord >= 48 && ord <= 57;
}; };
mexui.util.isLetterOrDigit = function(character) mexui.util.isLetterOrDigit = function (character) {
{
return mexui.util.isLetter(character) || mexui.util.isDigit(character); return mexui.util.isLetter(character) || mexui.util.isDigit(character);
}; };
mexui.util.isCharacterInOctetRange = function(character, min, max) mexui.util.isCharacterInOctetRange = function (character, min, max) {
{
var ord = character.charCodeAt(0); var ord = character.charCodeAt(0);
return ord >= min && ord <= max; return ord >= min && ord <= max;
}; };
mexui.util.interpolateScalar = function(a, b, f) mexui.util.interpolateScalar = function (a, b, f) {
{
return a + ((b - a) * f); return a + ((b - a) * f);
}; };
mexui.util.doesContainEOLChar = function(text) mexui.util.doesContainEOLChar = function (text) {
{
return text.indexOf("\n") != -1 || text.indexOf("\r") != -1; return text.indexOf("\n") != -1 || text.indexOf("\r") != -1;
}; };
mexui.util.splitLines = function(text) mexui.util.splitLines = function (text) {
{
text = text.replace("\r\n", "\n"); text = text.replace("\r\n", "\n");
text = text.replace("\r", "\n"); text = text.replace("\r", "\n");
return text.split("\n"); return text.split("\n");
}; };
mexui.util.getStringCount = function(text, find) mexui.util.getStringCount = function (text, find) {
{
var count = 0; var count = 0;
var index = 0; var index = 0;
for(;;) for (; ;) {
{
index = text.indexOf(find, index); index = text.indexOf(find, index);
if(index == -1) if (index == -1)
break; break;
count++; count++;
index += find.length; index += find.length;
@@ -205,72 +172,59 @@ mexui.util.getStringCount = function(text, find)
return count; return count;
}; };
mexui.util.stack = function() mexui.util.stack = function () {
{
var err = new Error(); var err = new Error();
console.log(err.stack); console.log(err.stack);
}; };
mexui.util.deg = function(rad) mexui.util.deg = function (rad) {
{
return rad * (180 / Math.PI); return rad * (180 / Math.PI);
}; };
mexui.util.rad = function(deg) mexui.util.rad = function (deg) {
{
return deg * (Math.PI / 180); return deg * (Math.PI / 180);
}; };
mexui.util.round = function(x, n) mexui.util.round = function (x, n) {
{
return parseFloat(Math.round(x * Math.pow(10, n)) / Math.pow(10, n)).toFixed(n); return parseFloat(Math.round(x * Math.pow(10, n)) / Math.pow(10, n)).toFixed(n);
}; };
mexui.util.getCenterPosition = function(largerSize, smallerSize) mexui.util.getCenterPosition = function (largerSize, smallerSize) {
{
return new Vec2( return new Vec2(
(largerSize.x - smallerSize.x) / 2.0, (largerSize.x - smallerSize.x) / 2.0,
(largerSize.y - smallerSize.y) / 2.0 (largerSize.y - smallerSize.y) / 2.0
); );
}; };
mexui.util.getWindowSize = function() mexui.util.getWindowSize = function () {
{ return new Vec2(game.width, game.height);
return new Vec2(gta.width, gta.height);
}; };
mexui.util.isRectangleInsideRectangle = function(pos1, size1, pos2, size2) mexui.util.isRectangleInsideRectangle = function (pos1, size1, pos2, size2) {
{
return !(pos2.x > (pos1.x + size1.x) || return !(pos2.x > (pos1.x + size1.x) ||
(pos2.x + size2.x) < pos1.x || (pos2.x + size2.x) < pos1.x ||
pos2.y > (pos1.y + size1.y) || pos2.y > (pos1.y + size1.y) ||
(pos2.y + size2.y) < pos1.y); (pos2.y + size2.y) < pos1.y);
}; };
mexui.util.mergeStyles = function(styles, pseudoPartNames) mexui.util.mergeStyles = function (styles, pseudoPartNames) {
{
var styles3 = {}; var styles3 = {};
var styles2 = [styles]; var styles2 = [styles];
while(styles2[0]) while (styles2[0]) {
{
styles2 = [styles2[0]]; styles2 = [styles2[0]];
for(var i in pseudoPartNames) for (var i in pseudoPartNames) {
{
var pseudoPartName = pseudoPartNames[i]; var pseudoPartName = pseudoPartNames[i];
if(styles2[0] && styles2[0].hasOwnProperty(pseudoPartName)) if (styles2[0] && styles2[0].hasOwnProperty(pseudoPartName))
styles2.push(styles2[0][pseudoPartName]); styles2.push(styles2[0][pseudoPartName]);
} }
for(var i=styles2.length-1; i>=0; i--) for (var i = styles2.length - 1; i >= 0; i--) {
{ if (styles2[i] == null)
if(styles2[i] == null)
continue; continue;
for(var k in styles2[i]) for (var k in styles2[i]) {
{ switch (k) {
switch(k)
{
case 'focus': case 'focus':
case 'hover': case 'hover':
@@ -285,8 +239,7 @@ mexui.util.mergeStyles = function(styles, pseudoPartNames)
continue; continue;
} }
if(styles2[i].hasOwnProperty(k) && styles3[k] == null) if (styles2[i].hasOwnProperty(k) && styles3[k] == null) {
{
var styleValue = styles2[i][k]; var styleValue = styles2[i][k];
/* /*
@@ -354,9 +307,8 @@ mexui.util.mergeStyles = function(styles, pseudoPartNames)
} }
} }
for(var i in styles2) for (var i in styles2) {
{ if (styles2[i])
if(styles2[i])
styles2[i] = styles2[i].__proto__; styles2[i] = styles2[i].__proto__;
} }
} }
@@ -364,30 +316,24 @@ mexui.util.mergeStyles = function(styles, pseudoPartNames)
return styles3; return styles3;
}; };
mexui.util.getTransitionStyles = function(styles, pseudoPartNames, progress) mexui.util.getTransitionStyles = function (styles, pseudoPartNames, progress) {
{
var styles3 = {}; var styles3 = {};
var styles2 = [styles]; var styles2 = [styles];
while(styles2[0]) while (styles2[0]) {
{
styles2 = [styles2[0]]; styles2 = [styles2[0]];
for(var i in pseudoPartNames) for (var i in pseudoPartNames) {
{
var pseudoPartName = pseudoPartNames[i]; var pseudoPartName = pseudoPartNames[i];
if(styles2[0] && styles2[0].hasOwnProperty(pseudoPartName)) if (styles2[0] && styles2[0].hasOwnProperty(pseudoPartName))
styles2.push(styles2[0][pseudoPartName]); styles2.push(styles2[0][pseudoPartName]);
} }
for(var i=styles2.length-1; i>=0; i--) for (var i = styles2.length - 1; i >= 0; i--) {
{ if (styles2[i] == null)
if(styles2[i] == null)
continue; continue;
for(var k in styles2[i]) for (var k in styles2[i]) {
{ switch (k) {
switch(k)
{
case 'focus': case 'focus':
case 'hover': case 'hover':
@@ -396,12 +342,10 @@ mexui.util.getTransitionStyles = function(styles, pseudoPartNames, progress)
continue; continue;
} }
if(styles2[i].hasOwnProperty(k) && styles3[k] == null) if (styles2[i].hasOwnProperty(k) && styles3[k] == null) {
{
var styleValue = styles2[i][k]; var styleValue = styles2[i][k];
if(i > 0) if (i > 0) {
{
var mainStyleValue = styles2[0][k]; var mainStyleValue = styles2[0][k];
var pseudoStyleValue = styles2[i][k]; var pseudoStyleValue = styles2[i][k];
@@ -415,9 +359,8 @@ mexui.util.getTransitionStyles = function(styles, pseudoPartNames, progress)
} }
} }
for(var i in styles2) for (var i in styles2) {
{ if (styles2[i])
if(styles2[i])
styles2[i] = styles2[i].__proto__; styles2[i] = styles2[i].__proto__;
} }
} }
@@ -425,10 +368,8 @@ mexui.util.getTransitionStyles = function(styles, pseudoPartNames, progress)
return styles3; return styles3;
}; };
mexui.util.interpolateStyle = function(styleName, progress, styleValueFrom, styleValueTo) mexui.util.interpolateStyle = function (styleName, progress, styleValueFrom, styleValueTo) {
{ switch (styleName) {
switch(styleName)
{
case 'backgroundColour': case 'backgroundColour':
case 'backgroundColor': case 'backgroundColor':
case 'textColour': case 'textColour':
@@ -437,9 +378,9 @@ mexui.util.interpolateStyle = function(styleName, progress, styleValueFrom, styl
case 'lineColor': case 'lineColor':
case 'borderColour': case 'borderColour':
case 'borderColor': case 'borderColor':
if(styleValueFrom == 'none') if (styleValueFrom == 'none')
styleValueFrom = toColour(255, 255, 255, 0); styleValueFrom = toColour(255, 255, 255, 0);
if(styleValueTo == 'none') if (styleValueTo == 'none')
styleValueTo = toColour(255, 255, 255, 0); styleValueTo = toColour(255, 255, 255, 0);
return mexui.util.interpolateColour(progress, styleValueFrom, styleValueTo); return mexui.util.interpolateColour(progress, styleValueFrom, styleValueTo);
default: default:
@@ -447,25 +388,21 @@ mexui.util.interpolateStyle = function(styleName, progress, styleValueFrom, styl
} }
}; };
mexui.util.interpolateColour = function(progress, styleValueFrom, styleValueTo) mexui.util.interpolateColour = function (progress, styleValueFrom, styleValueTo) {
{
var rgbFrom = mexui.util.fromColour(styleValueFrom); var rgbFrom = mexui.util.fromColour(styleValueFrom);
var rgbTo = mexui.util.fromColour(styleValueTo); var rgbTo = mexui.util.fromColour(styleValueTo);
var rgba = []; var rgba = [];
for(var i=0; i<4; i++) for (var i = 0; i < 4; i++) {
{
rgba[i] = mexui.util.interpolateScalar(progress, rgbFrom[i], rgbTo[i]); rgba[i] = mexui.util.interpolateScalar(progress, rgbFrom[i], rgbTo[i]);
} }
return toColour.apply(null, rgba); return toColour.apply(null, rgba);
}; };
mexui.util.interpolateScalar = function(progress, valueFrom, valueTo) mexui.util.interpolateScalar = function (progress, valueFrom, valueTo) {
{
return valueFrom + ((valueTo - valueFrom) * progress); return valueFrom + ((valueTo - valueFrom) * progress);
}; };
mexui.util.fromColour = function(colour) mexui.util.fromColour = function (colour) {
{
return [ return [
(colour >> 16) & 0xFF, (colour >> 16) & 0xFF,
(colour >> 8) & 0xFF, (colour >> 8) & 0xFF,
@@ -474,77 +411,64 @@ mexui.util.fromColour = function(colour)
]; ];
}; };
mexui.util.time = function() mexui.util.time = function () {
{ return sdl.ticks;
return gta.tickCount;
}; };
mexui.util.isIntChar = function(character) mexui.util.isIntChar = function (character) {
{
return mexui.util.isPositiveIntChar(character); return mexui.util.isPositiveIntChar(character);
}; };
mexui.util.isPositiveIntChar = function(character) mexui.util.isPositiveIntChar = function (character) {
{
return mexui.util.isDigit(character) || character == '-' || character == '+' || character == 'e' || character == 'E'; return mexui.util.isDigit(character) || character == '-' || character == '+' || character == 'e' || character == 'E';
}; };
mexui.util.isFloatChar = function(character) mexui.util.isFloatChar = function (character) {
{
return mexui.util.isIntChar(character) || character == '.'; return mexui.util.isIntChar(character) || character == '.';
}; };
mexui.util.isPositiveFloatChar = function(character) mexui.util.isPositiveFloatChar = function (character) {
{
return mexui.util.isPositiveIntChar(character) || character == '.'; return mexui.util.isPositiveIntChar(character) || character == '.';
}; };
mexui.util.isInt = function(str) mexui.util.isInt = function (str) {
{
var strInt = parseInt(str); var strInt = parseInt(str);
return !isNaN(strInt) && str.length == (strInt+'').length; return !isNaN(strInt) && str.length == (strInt + '').length;
}; };
mexui.util.isPositiveInt = function(str) mexui.util.isPositiveInt = function (str) {
{
var strInt = parseInt(str); var strInt = parseInt(str);
return !isNaN(strInt) && strInt >= 0 && str.length == (strInt+'').length; return !isNaN(strInt) && strInt >= 0 && str.length == (strInt + '').length;
}; };
mexui.util.isFloat = function(str) mexui.util.isFloat = function (str) {
{
var strFloat = parseFloat(str); var strFloat = parseFloat(str);
var firstDot = str.indexOf('.'); var firstDot = str.indexOf('.');
var addOffset = (str.substr(str.length - 2, 2) == '.0' && firstDot == (str.length - 2)) ? 2 : 0; var addOffset = (str.substr(str.length - 2, 2) == '.0' && firstDot == (str.length - 2)) ? 2 : 0;
if(firstDot == 0) if (firstDot == 0)
addOffset--; addOffset--;
return !isNaN(strFloat) && str.length == ((strFloat+'').length + addOffset); return !isNaN(strFloat) && str.length == ((strFloat + '').length + addOffset);
}; };
mexui.util.isPositiveFloat = function(str) mexui.util.isPositiveFloat = function (str) {
{
var strFloat = parseFloat(str); var strFloat = parseFloat(str);
var firstDot = str.indexOf('.'); var firstDot = str.indexOf('.');
var addOffset = (str.substr(str.length - 2, 2) == '.0' && firstDot == (str.length - 2)) ? 2 : 0; var addOffset = (str.substr(str.length - 2, 2) == '.0' && firstDot == (str.length - 2)) ? 2 : 0;
if(firstDot == 0) if (firstDot == 0)
addOffset--; addOffset--;
return !isNaN(strFloat) && strFloat >= 0.0 && str.length == ((strFloat+'').length + addOffset); return !isNaN(strFloat) && strFloat >= 0.0 && str.length == ((strFloat + '').length + addOffset);
}; };
mexui.util.isMonthName = function(text) mexui.util.isMonthName = function (text) {
{
return mexui.util.inArrayOrStartsWithInArray(text, mexui.util.monthNames, 3); return mexui.util.inArrayOrStartsWithInArray(text, mexui.util.monthNames, 3);
}; };
mexui.util.isWeekDayName = function(text) mexui.util.isWeekDayName = function (text) {
{
return mexui.util.inArrayOrStartsWithInArray(text, mexui.util.weekDayNames, 3); return mexui.util.inArrayOrStartsWithInArray(text, mexui.util.weekDayNames, 3);
}; };
mexui.util.isDayIdSuffix = function(text) mexui.util.isDayIdSuffix = function (text) {
{ switch (text.toLowerCase()) {
switch(text.toLowerCase())
{
case 'st': case 'st':
case 'nd': case 'nd':
case 'rd': case 'rd':
@@ -554,46 +478,38 @@ mexui.util.isDayIdSuffix = function(text)
return false; return false;
}; };
mexui.util.isDayIdSuffixForDayId = function(dayId, text) mexui.util.isDayIdSuffixForDayId = function (dayId, text) {
{ switch (text.toLowerCase()) {
switch(text.toLowerCase()) case 'st': return dayId == 1 || dayId == 21 || dayId == 31;
{ case 'nd': return dayId == 2 || dayId == 22;
case 'st': return dayId == 1 || dayId == 21 || dayId == 31; case 'rd': return dayId == 3 || dayId == 23;
case 'nd': return dayId == 2 || dayId == 22; case 'th': return !(dayId >= 1 && dayId <= 3) && !(dayId >= 21 && dayId <= 23) && dayId != 31;
case 'rd': return dayId == 3 || dayId == 23; default: return false;
case 'th': return !(dayId >= 1 && dayId <= 3) && !(dayId >= 21 && dayId <= 23) && dayId != 31;
default: return false;
} }
}; };
mexui.util.isDayId = function(text) mexui.util.isDayId = function (text) {
{ if (text.length == 2 && text.substr(0, 1) == '0')
if(text.length == 2 && text.substr(0, 1) == '0')
text = text.substr(1); text = text.substr(1);
if(mexui.util.isPositiveInt(text)) if (mexui.util.isPositiveInt(text)) {
{
var _int = parseInt(text); var _int = parseInt(text);
if(_int >= 1 && _int <= 31) if (_int >= 1 && _int <= 31)
return true; return true;
} }
return false; return false;
}; };
mexui.util.isDayIdWithOptionalSuffix = function(text) mexui.util.isDayIdWithOptionalSuffix = function (text) {
{ if (mexui.util.isDayId(text))
if(mexui.util.isDayId(text))
return true; return true;
if(text.length > 2) if (text.length > 2) {
{
var last2Chars = text.substr(text.length - 2, 2); var last2Chars = text.substr(text.length - 2, 2);
if(mexui.util.isDayIdSuffix(last2Chars)) if (mexui.util.isDayIdSuffix(last2Chars)) {
{
var textWithoutLast2Chars = text.substr(0, text.length - 2); var textWithoutLast2Chars = text.substr(0, text.length - 2);
if(mexui.util.isDayId(textWithoutLast2Chars) && mexui.util.isDayIdSuffixForDayId(parseInt(textWithoutLast2Chars), last2Chars)) if (mexui.util.isDayId(textWithoutLast2Chars) && mexui.util.isDayIdSuffixForDayId(parseInt(textWithoutLast2Chars), last2Chars)) {
{
return true; return true;
} }
} }
@@ -602,24 +518,18 @@ mexui.util.isDayIdWithOptionalSuffix = function(text)
return false; return false;
}; };
mexui.util.inArrayOrStartsWithInArray = function(text, arr, startsWithCharCount) mexui.util.inArrayOrStartsWithInArray = function (text, arr, startsWithCharCount) {
{
text = text.toLowerCase(); text = text.toLowerCase();
for(var i in arr) for (var i in arr) {
{ if (text === arr[i]) {
if(text === arr[i])
{
return true; return true;
} }
} }
if(text.length == startsWithCharCount) if (text.length == startsWithCharCount) {
{ for (var i in arr) {
for(var i in arr) if (text === arr[i].substr(0, startsWithCharCount)) {
{
if(text === arr[i].substr(0, startsWithCharCount))
{
return true; return true;
} }
} }
@@ -628,76 +538,68 @@ mexui.util.inArrayOrStartsWithInArray = function(text, arr, startsWithCharCount)
return false; return false;
}; };
mexui.util.isMonthIdOrName = function(text) mexui.util.isMonthIdOrName = function (text) {
{
var text2 = text; var text2 = text;
if(text2.length == 2 && text2.substr(0, 1) == '0') if (text2.length == 2 && text2.substr(0, 1) == '0')
text2 = text2.substr(1); text2 = text2.substr(1);
if(mexui.util.isPositiveInt(text2)) if (mexui.util.isPositiveInt(text2)) {
{
var _int = parseInt(text2); var _int = parseInt(text2);
if(_int >= 1 && _int <= 12) if (_int >= 1 && _int <= 12)
return true; return true;
} }
return mexui.util.isMonthName(text); return mexui.util.isMonthName(text);
}; };
mexui.util.isWeekDayId = function(text) mexui.util.isWeekDayId = function (text) {
{
var text2 = text; var text2 = text;
if(text2.length == 2 && text2.substr(0, 1) == '0') if (text2.length == 2 && text2.substr(0, 1) == '0')
text2 = text2.substr(1); text2 = text2.substr(1);
if(mexui.util.isPositiveInt(text2)) if (mexui.util.isPositiveInt(text2)) {
{
var _int = parseInt(text2); var _int = parseInt(text2);
if(_int >= 1 && _int <= 7) if (_int >= 1 && _int <= 7)
return true; return true;
} }
return false; return false;
}; };
mexui.util.isWeekDayIdOrName = function(text) mexui.util.isWeekDayIdOrName = function (text) {
{
var text2 = text; var text2 = text;
if(text2.length == 2 && text2.substr(0, 1) == '0') if (text2.length == 2 && text2.substr(0, 1) == '0')
text2 = text2.substr(1); text2 = text2.substr(1);
if(mexui.util.isPositiveInt(text2)) if (mexui.util.isPositiveInt(text2)) {
{
var _int = parseInt(text2); var _int = parseInt(text2);
if(_int >= 1 && _int <= 7) if (_int >= 1 && _int <= 7)
return true; return true;
} }
return mexui.util.isWeekDayName(text); return mexui.util.isWeekDayName(text);
}; };
mexui.util.expand2DigitYear = function(year, twoDigitYearCapOffset) mexui.util.expand2DigitYear = function (year, twoDigitYearCapOffset) {
{
var currentFullYear = new Date().getFullYear(); var currentFullYear = new Date().getFullYear();
var currentTwoDigitYearPlusCapOffset = parseInt((currentFullYear+'').substr(2, 2)) + twoDigitYearCapOffset; var currentTwoDigitYearPlusCapOffset = parseInt((currentFullYear + '').substr(2, 2)) + twoDigitYearCapOffset;
if(year <= currentTwoDigitYearPlusCapOffset) if (year <= currentTwoDigitYearPlusCapOffset)
year += currentFullYear - (currentFullYear % 100); year += currentFullYear - (currentFullYear % 100);
else else
year += (currentFullYear - (currentFullYear % 100)) - 100; year += (currentFullYear - (currentFullYear % 100)) - 100;
return year; return year;
}; };
mexui.util.isYear = function(text, minYear, maxYear, twoDigitYearCapOffset) mexui.util.isYear = function (text, minYear, maxYear, twoDigitYearCapOffset) {
{
var _int = parseInt(text); var _int = parseInt(text);
if(isNaN(_int)) if (isNaN(_int))
return false; return false;
if(_int >= 0 && _int <= 99) if (_int >= 0 && _int <= 99)
_int = mexui.util.expand2DigitYear(_int, twoDigitYearCapOffset); _int = mexui.util.expand2DigitYear(_int, twoDigitYearCapOffset);
if(_int < minYear || _int > maxYear) if (_int < minYear || _int > maxYear)
return false; return false;
return true; return true;

View File

@@ -1,92 +1,78 @@
var mexui = {}; var mexui = {};
// data initialization // data initialization
mexui.Entity = {}; mexui.Entity = {};
mexui.Component = {}; mexui.Component = {};
mexui.Control = {}; mexui.Control = {};
mexui.Entry = {}; mexui.Entry = {};
mexui.windows = []; mexui.windows = [];
mexui.fonts = {}; mexui.fonts = {};
mexui.images = {}; mexui.images = {};
mexui.focusedControl = null; mexui.focusedControl = null;
mexui.hoveredComponent = null; mexui.hoveredComponent = null;
// initialization // initialization
mexui.init = function() mexui.init = function () {
{
mexui.native.loadImage('mexui/Images/down-arrow.png', 'downArrow'); mexui.native.loadImage('mexui/Images/down-arrow.png', 'downArrow');
mexui.bindEvents(); mexui.bindEvents();
mexui.startTimers(); mexui.startTimers();
}; };
// events // events
mexui.bindEvents = function() mexui.bindEvents = function () {
{ addEventHandler('onMouseDown', function (event, mouse, button) {
addEventHandler('onMouseDown', function(event, mouse, button) var e = mexui.triggerEvent('onMouseDown', { button: button });
{ if (!e.clickedAControl) {
var e = mexui.triggerEvent('onMouseDown', {button: button});
if(!e.clickedAControl)
{
mexui.focusedControl = null; mexui.focusedControl = null;
} }
}); });
addEventHandler('onMouseUp', function(event, mouse, button) addEventHandler('onMouseUp', function (event, mouse, button) {
{ mexui.triggerEvent('onMouseUp', { button: button });
mexui.triggerEvent('onMouseUp', {button: button});
}); });
addEventHandler('onMouseMove', function(event, mouse, isAbsolute, position) addEventHandler('onMouseMove', function (event, mouse, isAbsolute, position) {
{ if (isAbsolute)
if(isAbsolute)
return; return;
mexui.triggerEvent('onMouseMove', new Vec2(position.x, position.y), true); mexui.triggerEvent('onMouseMove', new Vec2(position.x, position.y), true);
}); });
addEventHandler('onMouseWheel', function(event, mouse, offset, flipped) addEventHandler('onMouseWheel', function (event, mouse, offset, flipped) {
{
mexui.triggerEvent('onMouseWheel', offset); mexui.triggerEvent('onMouseWheel', offset);
}); });
addEventHandler('onKeyDown', function(event, key, pkey, mods) addEventHandler('onKeyDown', function (event, key, pkey, mods) {
{
mexui.triggerEvent('onKeyDown', key, mods); mexui.triggerEvent('onKeyDown', key, mods);
if(key == SDLK_TAB) if (key == SDLK_TAB) {
{
mexui.cycleFocusedControl(); mexui.cycleFocusedControl();
} }
}); });
addEventHandler('onCharacter', function(event, character) addEventHandler('onCharacter', function (event, character) {
{
mexui.triggerEvent('onCharacter', character); mexui.triggerEvent('onCharacter', character);
if(character == 't' || character == 'T') if (character == 't' || character == 'T') {
{
var textInput = mexui.getFocusedTextInput(); var textInput = mexui.getFocusedTextInput();
if(textInput) if (textInput) {
{
//event.preventDefault(); //event.preventDefault();
} }
} }
}); });
{ {
var eventName = gta.game == GAME_GTA_SA ? 'onDrawnHUD' : 'onBeforeDrawHUD'; var eventName = (game.game == VRR_GAME_GTA_SA || game.game == VRR_GAME_MAFIA_ONE) ? 'onDrawnHUD' : 'onBeforeDrawHUD';
addEventHandler(eventName, function(event) addEventHandler(eventName, function (event) {
{
mexui.render(); mexui.render();
}); });
} }
}; };
mexui.unbindEvents = function() mexui.unbindEvents = function () {
{
removeEventHandler('onMouseDown'); removeEventHandler('onMouseDown');
removeEventHandler('onMouseUp'); removeEventHandler('onMouseUp');
removeEventHandler('onMouseMove'); removeEventHandler('onMouseMove');
@@ -97,62 +83,51 @@ mexui.unbindEvents = function()
}; };
// timers // timers
mexui.startTimers = function() mexui.startTimers = function () {
{
setInterval(mexui.toggleTextInputCaretShownForBlink, 400); setInterval(mexui.toggleTextInputCaretShownForBlink, 400);
}; };
// render // render
mexui.render = function() mexui.render = function () {
{ for (var i in mexui.windows) {
for(var i in mexui.windows) if (mexui.windows[i].shown)
{
if(mexui.windows[i].shown)
mexui.windows[i].render.call(mexui.windows[i]); mexui.windows[i].render.call(mexui.windows[i]);
} }
for(var i in mexui.windows) for (var i in mexui.windows) {
{ if (mexui.windows[i].shown)
if(mexui.windows[i].shown)
mexui.windows[i].renderAfter.call(mexui.windows[i]); mexui.windows[i].renderAfter.call(mexui.windows[i]);
} }
}; };
// model // model
mexui.triggerEvent = function(eventName, data, callBaseMethodFirst) mexui.triggerEvent = function (eventName, data, callBaseMethodFirst) {
{
var e = new mexui.Component.Event(); var e = new mexui.Component.Event();
if(data.button !== undefined) if (data.button !== undefined)
e.button = data.button; e.button = data.button;
var windows = mexui.windows.slice(0, mexui.windows.length).reverse(); var windows = mexui.windows.slice(0, mexui.windows.length).reverse();
for(var i in windows) for (var i in windows) {
{ if (windows[i].shown) {
if(windows[i].shown) if (callBaseMethodFirst) {
{ if (mexui.Entity.Component.prototype[eventName]) {
if(callBaseMethodFirst)
{
if(mexui.Entity.Component.prototype[eventName])
{
mexui.Entity.Component.prototype[eventName].call(windows[i], e, data); mexui.Entity.Component.prototype[eventName].call(windows[i], e, data);
if(e.used) if (e.used)
break; break;
} }
windows[i][eventName].call(windows[i], e, data); windows[i][eventName].call(windows[i], e, data);
if(e.used) if (e.used)
break; break;
} }
else else {
{
windows[i][eventName].call(windows[i], e, data); windows[i][eventName].call(windows[i], e, data);
if(e.used) if (e.used)
break; break;
if(mexui.Entity.Component.prototype[eventName]) if (mexui.Entity.Component.prototype[eventName]) {
{
mexui.Entity.Component.prototype[eventName].call(windows[i], e, data); mexui.Entity.Component.prototype[eventName].call(windows[i], e, data);
if(e.used) if (e.used)
break; break;
} }
} }
@@ -161,29 +136,24 @@ mexui.triggerEvent = function(eventName, data, callBaseMethodFirst)
return e; return e;
}; };
mexui.getTopWindow = function() mexui.getTopWindow = function () {
{ for (var i = mexui.windows.length - 1, j = 0; i >= j; i--) {
for(var i = mexui.windows.length - 1, j = 0; i >= j; i--) if (mexui.windows[i].shown)
{
if(mexui.windows[i].shown)
return mexui.windows[i]; return mexui.windows[i];
} }
return null; return null;
}; };
mexui.getShownWindows = function() mexui.getShownWindows = function () {
{
var shownWindows = []; var shownWindows = [];
for(var i = mexui.windows.length - 1, j = 0; i >= j; i--) for (var i = mexui.windows.length - 1, j = 0; i >= j; i--) {
{ if (mexui.windows[i].shown)
if(mexui.windows[i].shown)
shownWindows.push(mexui.windows[i]); shownWindows.push(mexui.windows[i]);
} }
return shownWindows; return shownWindows;
}; };
mexui.getNextShownWindows = function(afterWindow) mexui.getNextShownWindows = function (afterWindow) {
{
var shownWindows = mexui.getShownWindows(); var shownWindows = mexui.getShownWindows();
var windowIndex = shownWindows.indexOf(afterWindow); var windowIndex = shownWindows.indexOf(afterWindow);
@@ -197,17 +167,15 @@ mexui.getNextShownWindows = function(afterWindow)
return shownWindows; return shownWindows;
}; };
mexui.cycleFocusedControl = function() mexui.cycleFocusedControl = function () {
{
// no windows are created // no windows are created
if(mexui.windows.length == 0) if (mexui.windows.length == 0)
return; return;
// no control is focused // no control is focused
if(!mexui.focusedControl) if (!mexui.focusedControl) {
{
var topWindow = mexui.getTopWindow(); var topWindow = mexui.getTopWindow();
if(!topWindow) if (!topWindow)
return; return;
mexui.focusedControl = topWindow.getFirstShownControl(); mexui.focusedControl = topWindow.getFirstShownControl();
@@ -217,85 +185,73 @@ mexui.cycleFocusedControl = function()
// a control is focused // a control is focused
var focusedControlWindow = mexui.focusedControl.window; var focusedControlWindow = mexui.focusedControl.window;
var nextControl = focusedControlWindow.getNextShownControl(mexui.focusedControl); var nextControl = focusedControlWindow.getNextShownControl(mexui.focusedControl);
if(nextControl) if (nextControl) {
{
mexui.focusedControl = nextControl; mexui.focusedControl = nextControl;
return; return;
} }
// set focus to first control on next window that has a control shown // set focus to first control on next window that has a control shown
var shownWindows = mexui.getNextShownWindows(focusedControlWindow); var shownWindows = mexui.getNextShownWindows(focusedControlWindow);
for(var i in shownWindows) for (var i in shownWindows) {
{
var window = shownWindows[i]; var window = shownWindows[i];
var firstControl = window.getFirstShownControl(); var firstControl = window.getFirstShownControl();
if(firstControl) if (firstControl) {
{
mexui.focusedControl = firstControl; mexui.focusedControl = firstControl;
return; return;
} }
} }
}; };
mexui.getFocusedTextInput = function() mexui.getFocusedTextInput = function () {
{ if (!mexui.focusedControl)
if(!mexui.focusedControl)
return null; return null;
if(!(mexui.focusedControl instanceof mexui.Control.TextInput)) if (!(mexui.focusedControl instanceof mexui.Control.TextInput))
return null; return null;
return mexui.focusedControl; return mexui.focusedControl;
}; };
mexui.toggleTextInputCaretShownForBlink = function() mexui.toggleTextInputCaretShownForBlink = function () {
{
var textInput = mexui.getFocusedTextInput(); var textInput = mexui.getFocusedTextInput();
if(!textInput) if (!textInput)
return; return;
textInput.caretShownForBlink = !textInput.caretShownForBlink; textInput.caretShownForBlink = !textInput.caretShownForBlink;
}; };
mexui.setHoveredComponent = function(component) mexui.setHoveredComponent = function (component) {
{
//component.hovered = true; //component.hovered = true;
mexui.hoveredComponent = component; mexui.hoveredComponent = component;
}; };
mexui.clearHoveredComponent = function() mexui.clearHoveredComponent = function () {
{
//mexui.hoveredComponent.hovered = false; //mexui.hoveredComponent.hovered = false;
mexui.hoveredComponent = null; mexui.hoveredComponent = null;
}; };
// api // api
mexui.window = function(x, y, w, h, title, styles) mexui.window = function (x, y, w, h, title, styles) {
{
var window = new mexui.Component.Window(x, y, w, h, title, styles); var window = new mexui.Component.Window(x, y, w, h, title, styles);
mexui.windows.push(window); mexui.windows.push(window);
return window; return window;
}; };
mexui.isAnyWindowShown = function() mexui.isAnyWindowShown = function () {
{ for (var i in mexui.windows) {
for(var i in mexui.windows) if (mexui.windows[i].shown)
{
if(mexui.windows[i].shown)
return true; return true;
} }
return false; return false;
}; };
mexui.setInput = function(showInput) mexui.setInput = function (showInput) {
{
gui.showCursor(showInput, !showInput); gui.showCursor(showInput, !showInput);
if(localClient.player && gta.game != GAME_GTA_IV)
{ if (localClient.player && game.game >= GAME_GTA_IV) {
if(showInput) if (showInput)
gta.setCameraLookAtEntity(new Vec3(gta.cameraMatrix.m41, gta.cameraMatrix.m42, gta.cameraMatrix.m43), localPlayer, false); game.setCameraLookAtEntity(new Vec3(game.cameraMatrix.m41, game.cameraMatrix.m42, game.cameraMatrix.m43), localPlayer, false);
else else
gta.restoreCamera(false); game.restoreCamera(false);
} }
}; };