/* * GDevelop JS Platform * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved. * This project is released under the MIT License. */ /** * A Variable is an object storing a value (number or a string) or children variables. * * @memberof gdjs * @class Variable * @param {Object} varData optional object used to initialize the variable. */ gdjs.Variable = function(varData) { this._value = 0; this._str = ""; this._numberDirty = false; this._stringDirty = true; this._isStructure = false; this._children = {}; this._undefinedInContainer = false; if ( varData !== undefined ) { if ( varData.value !== undefined ) { //Variable is a string or a number var initialValue = varData.value; //Try to guess the type of the value, as GD has no way ( for now ) to specify //the type of a variable. var valueWhenConsideredAsNumber = parseFloat(initialValue, 10); if(valueWhenConsideredAsNumber === valueWhenConsideredAsNumber && valueWhenConsideredAsNumber.toString() === initialValue) { //"Since NaN is the only JavaScript value that is treated as unequal to itself, you can always test if a value is NaN by checking it for equality to itself" this._value = parseFloat(initialValue, 10); } else { //We have a string (Maybe empty). if ( initialValue.length === 0 ) this._value = 0; else { this._str = initialValue; this._numberDirty = true; this._stringDirty = false; } } } else { //Variable is a structure this._isStructure = true; if (varData.children !== undefined) { for(var i = 0, len = varData.children.length;i} All the children of the variable */ gdjs.Variable.prototype.getAllChildren = function() { return this._children; } /** * Add the given number to the variable value * @param {number} number the number to add */ gdjs.Variable.prototype.add = function(val) { this.setNumber(this.getAsNumber()+val); }; /** * Subtract the given number to the variable value * @param {number} number the number to subtract */ gdjs.Variable.prototype.sub = function(val) { this.setNumber(this.getAsNumber()-val); }; /** * Multiply the variable value by the given number * @param {number} number the factor */ gdjs.Variable.prototype.mul = function(val) { this.setNumber(this.getAsNumber()*val); }; /** * Divide the variable value by the given number * @param {number} number the divisor */ gdjs.Variable.prototype.div = function(val) { this.setNumber(this.getAsNumber()/val); }; /** * Concatenate the given string at the end of the variable value * @param {string} str the string to append */ gdjs.Variable.prototype.concatenate = function(str) { this.setString(this.getAsString()+str); };