Просмотр исходного кода

Merge pull request #1691 from seanpaultaylor/next

Added Node::setUserObject(Ref* obj) and other fixes.
Sean Taylor 11 лет назад
Родитель
Сommit
1309fe4d45

+ 3 - 25
gameplay/src/Control.cpp

@@ -45,14 +45,12 @@ Control::AutoSize Control::parseAutoSize(const char* str)
 {
 {
     if (str == NULL)
     if (str == NULL)
         return _autoSize;
         return _autoSize;
-
     if (strcmpnocase(str, "AUTO_SIZE_WIDTH") == 0 )
     if (strcmpnocase(str, "AUTO_SIZE_WIDTH") == 0 )
         return AUTO_SIZE_WIDTH;
         return AUTO_SIZE_WIDTH;
     if (strcmpnocase(str, "AUTO_SIZE_HEIGHT") == 0)
     if (strcmpnocase(str, "AUTO_SIZE_HEIGHT") == 0)
         return AUTO_SIZE_HEIGHT;
         return AUTO_SIZE_HEIGHT;
     if (strcmpnocase(str, "AUTO_SIZE_BOTH") == 0)
     if (strcmpnocase(str, "AUTO_SIZE_BOTH") == 0)
         return AUTO_SIZE_BOTH;
         return AUTO_SIZE_BOTH;
-
     return _autoSize;
     return _autoSize;
 }
 }
 
 
@@ -69,8 +67,7 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
             // The passed in style is our parent control's style : attempt to load our style from it.
             // The passed in style is our parent control's style : attempt to load our style from it.
             _style = style->getTheme()->getStyle(styleName);
             _style = style->getTheme()->getStyle(styleName);
         }
         }
-
-        if (!_style)
+        else
         {
         {
             // Use an empty style from our parent's theme
             // Use an empty style from our parent's theme
             _style = style->getTheme()->getEmptyStyle();
             _style = style->getTheme()->getEmptyStyle();
@@ -86,17 +83,14 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
     {
     {
         // Search for a style from the default theme that matches this control's name
         // Search for a style from the default theme that matches this control's name
         _style = Theme::getDefault()->getStyle(typeName);
         _style = Theme::getDefault()->getStyle(typeName);
-
         if (!_style)
         if (!_style)
         {
         {
             // No style was found, use an empty style
             // No style was found, use an empty style
             _style = style ? style->getTheme()->getEmptyStyle() : Theme::getDefault()->getEmptyStyle();
             _style = style ? style->getTheme()->getEmptyStyle() : Theme::getDefault()->getEmptyStyle();
         }
         }
     }
     }
-
     // Increase the reference count of the style's theme while we hold the style
     // Increase the reference count of the style's theme while we hold the style
     _style->getTheme()->addRef();
     _style->getTheme()->addRef();
-
     if (properties)
     if (properties)
     {
     {
         const char* id = properties->getId();
         const char* id = properties->getId();
@@ -105,11 +99,8 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
 
 
 		// Properties not defined by the style.
 		// Properties not defined by the style.
 		const char* alignmentString = properties->getString("alignment");
 		const char* alignmentString = properties->getString("alignment");
-
 		_alignment = getAlignment(alignmentString);
 		_alignment = getAlignment(alignmentString);
-
 		_consumeInputEvents = properties->getBool("consumeInputEvents", true);
 		_consumeInputEvents = properties->getBool("consumeInputEvents", true);
-
 		_visible = properties->getBool("visible", true);
 		_visible = properties->getBool("visible", true);
 
 
 		if (properties->exists("zIndex"))
 		if (properties->exists("zIndex"))
@@ -120,10 +111,8 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
 		{
 		{
 			_zIndex = -1;
 			_zIndex = -1;
 		}
 		}
-
 		if (properties->exists("canFocus"))
 		if (properties->exists("canFocus"))
 			_canFocus = properties->getBool("canFocus", false);
 			_canFocus = properties->getBool("canFocus", false);
-
 		if (properties->exists("focusIndex"))
 		if (properties->exists("focusIndex"))
 		{
 		{
 			_focusIndex = properties->getInt("focusIndex");
 			_focusIndex = properties->getInt("focusIndex");
@@ -132,7 +121,6 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
 		{
 		{
 			_focusIndex = -1;
 			_focusIndex = -1;
 		}
 		}
-
 		float bounds[2];
 		float bounds[2];
 		bool boundsBits[2];
 		bool boundsBits[2];
         const char* position = properties->getString("position");
         const char* position = properties->getString("position");
@@ -154,7 +142,6 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
                 setY(bounds[1], boundsBits[1]);
                 setY(bounds[1], boundsBits[1]);
             }
             }
 		}
 		}
-
         // If there is an explicitly specified size, width or height, unset the corresponding autoSize bit
         // If there is an explicitly specified size, width or height, unset the corresponding autoSize bit
         const char* size = properties->getString("size");
         const char* size = properties->getString("size");
         if (size && parseCoordPair(size, &bounds[0], &bounds[1], &boundsBits[0], &boundsBits[1]))
         if (size && parseCoordPair(size, &bounds[0], &bounds[1], &boundsBits[0], &boundsBits[1]))
@@ -177,7 +164,6 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
                 setHeight(bounds[1], boundsBits[1]);
                 setHeight(bounds[1], boundsBits[1]);
             }
             }
 		}
 		}
-
         // Backwards Compatibility: Support deprecated autoWidth and autoHeight properties,
         // Backwards Compatibility: Support deprecated autoWidth and autoHeight properties,
         // which resolve to width=100% and height=100%.
         // which resolve to width=100% and height=100%.
         if (properties->getBool("autoWidth"))
         if (properties->getBool("autoWidth"))
@@ -248,7 +234,6 @@ void Control::initialize(const char* typeName, Theme::Style* style, Properties*
 				setPadding(innerSpace->getFloat("top"), innerSpace->getFloat("bottom"),
 				setPadding(innerSpace->getFloat("top"), innerSpace->getFloat("bottom"),
 					innerSpace->getFloat("left"), innerSpace->getFloat("right"));
 					innerSpace->getFloat("left"), innerSpace->getFloat("right"));
 			}
 			}
-
 			innerSpace = properties->getNextNamespace();
 			innerSpace = properties->getNextNamespace();
 		}
 		}
 	}
 	}
@@ -561,10 +546,10 @@ void Control::setEnabled(bool enabled)
     if (enabled != isEnabled())
     if (enabled != isEnabled())
     {
     {
         if (!enabled)
         if (!enabled)
+        {
             Form::controlDisabled(this);
             Form::controlDisabled(this);
-
+        }
         _state = enabled ? NORMAL : DISABLED;
         _state = enabled ? NORMAL : DISABLED;
-
         setDirty(DIRTY_STATE);
         setDirty(DIRTY_STATE);
     }
     }
 }
 }
@@ -578,7 +563,6 @@ bool Control::isEnabledInHierarchy() const
 {
 {
     if (!isEnabled())
     if (!isEnabled())
         return false;
         return false;
-
     if (_parent)
     if (_parent)
         return _parent->isEnabledInHierarchy();
         return _parent->isEnabledInHierarchy();
 
 
@@ -596,7 +580,6 @@ void Control::setBorder(float top, float bottom, float left, float right, unsign
         if (overlays[i])
         if (overlays[i])
             overlays[i]->setBorder(top, bottom, left, right);
             overlays[i]->setBorder(top, bottom, left, right);
     }
     }
-
     setDirty(DIRTY_BOUNDS);
     setDirty(DIRTY_BOUNDS);
 }
 }
 
 
@@ -1734,7 +1717,6 @@ void Control::overrideThemedProperties(Properties* properties, unsigned char sta
     {
     {
         setTextRightToLeft(properties->getBool("rightToLeft"), states);
         setTextRightToLeft(properties->getBool("rightToLeft"), states);
     }
     }
-
     if (properties->exists("opacity"))
     if (properties->exists("opacity"))
     {
     {
         setOpacity(properties->getFloat("opacity"), states);
         setOpacity(properties->getFloat("opacity"), states);
@@ -1752,7 +1734,6 @@ void Control::setImageList(Theme::ImageList* imageList, unsigned char states)
         if( overlays[i] )
         if( overlays[i] )
             overlays[i]->setImageList(imageList);
             overlays[i]->setImageList(imageList);
     }
     }
-
     if (_autoSize != AUTO_SIZE_NONE)
     if (_autoSize != AUTO_SIZE_NONE)
         setDirty(DIRTY_BOUNDS);
         setDirty(DIRTY_BOUNDS);
 }
 }
@@ -1781,7 +1762,6 @@ void Control::setSkin(Theme::Skin* skin, unsigned char states)
         if( overlays[i] )
         if( overlays[i] )
             overlays[i]->setSkin(skin);
             overlays[i]->setSkin(skin);
     }
     }
-
     if (_autoSize != AUTO_SIZE_NONE)
     if (_autoSize != AUTO_SIZE_NONE)
         setDirty(DIRTY_BOUNDS);
         setDirty(DIRTY_BOUNDS);
 }
 }
@@ -1864,8 +1844,6 @@ Control::Alignment Control::getAlignment(const char* alignment)
     {
     {
         GP_ERROR("Failed to get corresponding control alignment for unsupported value '%s'.", alignment);
         GP_ERROR("Failed to get corresponding control alignment for unsupported value '%s'.", alignment);
     }
     }
-
-    // Default.
     return Control::ALIGN_TOP_LEFT;
     return Control::ALIGN_TOP_LEFT;
 }
 }
 
 

+ 8 - 8
gameplay/src/JoystickControl.cpp

@@ -125,7 +125,7 @@ unsigned int JoystickControl::getIndex() const
     return _index;
     return _index;
 }
 }
 
 
-void setBit(bool set, int& bitSetOut, int bit)
+void JoystickControl::setBoundsBit(bool set, int& bitSetOut, int bit)
 {
 {
     if(set)
     if(set)
     {
     {
@@ -140,7 +140,7 @@ void setBit(bool set, int& bitSetOut, int bit)
 void JoystickControl::setRadius(float radius, bool isPercentage)
 void JoystickControl::setRadius(float radius, bool isPercentage)
 {
 {
     _radiusCoord = radius;
     _radiusCoord = radius;
-    setBit(isPercentage, _boundsBits, BOUNDS_RADIUS_PERCENTAGE_BIT);
+    setBoundsBit(isPercentage, _boundsBits, BOUNDS_RADIUS_PERCENTAGE_BIT);
     updateAbsoluteSizes();
     updateAbsoluteSizes();
 }
 }
 
 
@@ -174,7 +174,7 @@ void JoystickControl::initialize(const char* typeName, Theme::Style* style, Prop
         const char* radiusStr = properties->getString(radiusId);
         const char* radiusStr = properties->getString(radiusId);
         bool isPercentage = false;
         bool isPercentage = false;
         _radiusCoord = parseCoord(radiusStr, &isPercentage);
         _radiusCoord = parseCoord(radiusStr, &isPercentage);
-        setBit(isPercentage, _boundsBits, BOUNDS_RADIUS_PERCENTAGE_BIT);
+        setBoundsBit(isPercentage, _boundsBits, BOUNDS_RADIUS_PERCENTAGE_BIT);
     }
     }
 
 
     const char* relativeId = "relative";
     const char* relativeId = "relative";
@@ -213,17 +213,17 @@ void JoystickControl::updateAbsoluteBounds(const Vector2& offset)
 void JoystickControl::setRegion(const Vector2& regionSizeIn, Vector2& regionSizeOut, int& regionBoundsBitsOut, bool isWidthPercentage, bool isHeightPercentage)
 void JoystickControl::setRegion(const Vector2& regionSizeIn, Vector2& regionSizeOut, int& regionBoundsBitsOut, bool isWidthPercentage, bool isHeightPercentage)
 {
 {
     regionSizeOut = regionSizeIn;
     regionSizeOut = regionSizeIn;
-    setBit(isWidthPercentage, regionBoundsBitsOut, BOUNDS_WIDTH_PERCENTAGE_BIT);
-    setBit(isHeightPercentage, regionBoundsBitsOut, BOUNDS_HEIGHT_PERCENTAGE_BIT);
+    setBoundsBit(isWidthPercentage, regionBoundsBitsOut, BOUNDS_WIDTH_PERCENTAGE_BIT);
+    setBoundsBit(isHeightPercentage, regionBoundsBitsOut, BOUNDS_HEIGHT_PERCENTAGE_BIT);
 }
 }
 
 
-void JoystickControl::getRegion(Vector2& regionOut, int & regionBoundsBitsOut, const char* regionPropertyId) const
+void JoystickControl::getRegion(Vector2& regionOut, int& regionBoundsBitsOut, const char* regionPropertyId)
 {
 {
     bool isWidthPercent = false;
     bool isWidthPercent = false;
     bool isHeightPercent = false;
     bool isHeightPercent = false;
     parseCoordPair(regionPropertyId, &regionOut.x, &regionOut.y, &isWidthPercent, &isHeightPercent);
     parseCoordPair(regionPropertyId, &regionOut.x, &regionOut.y, &isWidthPercent, &isHeightPercent);
-    setBit(isWidthPercent, regionBoundsBitsOut, BOUNDS_WIDTH_PERCENTAGE_BIT);
-    setBit(isHeightPercent, regionBoundsBitsOut, BOUNDS_HEIGHT_PERCENTAGE_BIT);
+    setBoundsBit(isWidthPercent, regionBoundsBitsOut, BOUNDS_WIDTH_PERCENTAGE_BIT);
+    setBoundsBit(isHeightPercent, regionBoundsBitsOut, BOUNDS_HEIGHT_PERCENTAGE_BIT);
 }
 }
 
 
 Vector2 JoystickControl::getPixelSize(const Vector2& region, const int regionBoundsBits) const
 Vector2 JoystickControl::getPixelSize(const Vector2& region, const int regionBoundsBits) const

+ 3 - 6
gameplay/src/JoystickControl.h

@@ -202,14 +202,11 @@ protected:
 
 
 private:
 private:
 
 
-    /**
-     * Copy constructor.
-     */
     JoystickControl(const JoystickControl& copy);
     JoystickControl(const JoystickControl& copy);
 
 
     void setRegion(const Vector2& regionSizeIn, Vector2& regionSizeOut, int& regionBoundsBitsOut, bool isWidthPercentage, bool isHeightPercentage);
     void setRegion(const Vector2& regionSizeIn, Vector2& regionSizeOut, int& regionBoundsBitsOut, bool isWidthPercentage, bool isHeightPercentage);
 
 
-    void getRegion(Vector2& regionOut, int & regionBoundsBitsOut, const char* regionPropertyId) const;
+    void getRegion(Vector2& regionOut, int& regionBoundsBitsOut, const char* regionPropertyId);
 
 
     Vector2 getPixelSize(const Vector2& region, const int regionBoundsBits) const;
     Vector2 getPixelSize(const Vector2& region, const int regionBoundsBits) const;
 
 
@@ -219,17 +216,17 @@ private:
 
 
     void updateAbsoluteSizes();
     void updateAbsoluteSizes();
 
 
+    void setBoundsBit(bool set, int& bitSetOut, int bit);
+
     float _radiusCoord;
     float _radiusCoord;
     Vector2* _innerRegionCoord;
     Vector2* _innerRegionCoord;
     Vector2* _outerRegionCoord;
     Vector2* _outerRegionCoord;
     int _innerRegionCoordBoundsBits;
     int _innerRegionCoordBoundsBits;
     int _outerRegionCoordBoundsBits;
     int _outerRegionCoordBoundsBits;
-
     float _radiusPixels;
     float _radiusPixels;
     Vector2* _innerSizePixels;
     Vector2* _innerSizePixels;
     Vector2* _outerSizePixels;
     Vector2* _outerSizePixels;
     Rectangle _screenRegionPixels;
     Rectangle _screenRegionPixels;
-
     bool _relative;
     bool _relative;
     Vector2 _value;
     Vector2 _value;
     Vector2 _displacement;
     Vector2 _displacement;

+ 73 - 84
gameplay/src/Node.cpp

@@ -12,19 +12,21 @@
 #include "Game.h"
 #include "Game.h"
 #include "Drawable.h"
 #include "Drawable.h"
 #include "Form.h"
 #include "Form.h"
+#include "Ref.h"
 
 
 // Node dirty flags
 // Node dirty flags
 #define NODE_DIRTY_WORLD 1
 #define NODE_DIRTY_WORLD 1
 #define NODE_DIRTY_BOUNDS 2
 #define NODE_DIRTY_BOUNDS 2
-#define NODE_DIRTY_ALL (NODE_DIRTY_WORLD | NODE_DIRTY_BOUNDS)
+#define NODE_DIRTY_HIERARCHY 4
+#define NODE_DIRTY_ALL (NODE_DIRTY_WORLD | NODE_DIRTY_BOUNDS | NODE_DIRTY_HIERARCHY)
 
 
 namespace gameplay
 namespace gameplay
 {
 {
 
 
 Node::Node(const char* id)
 Node::Node(const char* id)
     : _scene(NULL), _firstChild(NULL), _nextSibling(NULL), _prevSibling(NULL), _parent(NULL), _childCount(0), _enabled(true), _tags(NULL),
     : _scene(NULL), _firstChild(NULL), _nextSibling(NULL), _prevSibling(NULL), _parent(NULL), _childCount(0), _enabled(true), _tags(NULL),
-      _drawable(NULL), _camera(NULL), _light(NULL), _audioSource(NULL), _collisionObject(NULL), _agent(NULL),
-      _dirtyBits(NODE_DIRTY_ALL), _notifyHierarchyChanged(true)
+    _drawable(NULL), _camera(NULL), _light(NULL), _audioSource(NULL), _collisionObject(NULL), _agent(NULL), _userObject(NULL),
+      _dirtyBits(NODE_DIRTY_ALL)
 {
 {
     GP_REGISTER_SCRIPT_EVENTS();
     GP_REGISTER_SCRIPT_EVENTS();
     if (id)
     if (id)
@@ -36,7 +38,6 @@ Node::Node(const char* id)
 Node::~Node()
 Node::~Node()
 {
 {
     removeAllChildren();
     removeAllChildren();
-
     if (_drawable)
     if (_drawable)
         _drawable->setNode(NULL);
         _drawable->setNode(NULL);
     if (_audioSource)
     if (_audioSource)
@@ -47,6 +48,7 @@ Node::~Node()
     SAFE_RELEASE(_light);
     SAFE_RELEASE(_light);
     SAFE_RELEASE(_audioSource);
     SAFE_RELEASE(_audioSource);
     SAFE_DELETE(_collisionObject);
     SAFE_DELETE(_collisionObject);
+    SAFE_RELEASE(_userObject);
     SAFE_DELETE(_tags);
     SAFE_DELETE(_tags);
     setAgent(NULL);
     setAgent(NULL);
 }
 }
@@ -88,7 +90,6 @@ void Node::addChild(Node* child)
         // This node is already present in our hierarchy
         // This node is already present in our hierarchy
         return;
         return;
     }
     }
-
     child->addRef();
     child->addRef();
 
 
     // If the item belongs to another hierarchy, remove it first.
     // If the item belongs to another hierarchy, remove it first.
@@ -100,7 +101,6 @@ void Node::addChild(Node* child)
     {
     {
         child->_scene->removeNode(child);
         child->_scene->removeNode(child);
     }
     }
-
     // Add child to the end of the list.
     // Add child to the end of the list.
     // NOTE: This is different than the original behavior which inserted nodes
     // NOTE: This is different than the original behavior which inserted nodes
     // into the beginning of the list. Although slightly slower to add to the
     // into the beginning of the list. Although slightly slower to add to the
@@ -118,14 +118,11 @@ void Node::addChild(Node* child)
     {
     {
         _firstChild = child;
         _firstChild = child;
     }
     }
-
     child->_parent = this;
     child->_parent = this;
-
     ++_childCount;
     ++_childCount;
-
     setBoundsDirty();
     setBoundsDirty();
 
 
-    if (_notifyHierarchyChanged)
+    if (_dirtyBits & NODE_DIRTY_HIERARCHY)
     {
     {
         hierarchyChanged();
         hierarchyChanged();
     }
     }
@@ -138,23 +135,19 @@ void Node::removeChild(Node* child)
         // The child is not in our hierarchy.
         // The child is not in our hierarchy.
         return;
         return;
     }
     }
-
     // Call remove on the child.
     // Call remove on the child.
     child->remove();
     child->remove();
-
     SAFE_RELEASE(child);
     SAFE_RELEASE(child);
 }
 }
 
 
 void Node::removeAllChildren()
 void Node::removeAllChildren()
 {
 {
-    _notifyHierarchyChanged = false;
-
+    _dirtyBits &= ~NODE_DIRTY_HIERARCHY;
     while (_firstChild)
     while (_firstChild)
     {
     {
         removeChild(_firstChild);
         removeChild(_firstChild);
     }
     }
-
-    _notifyHierarchyChanged = true;
+    _dirtyBits |= NODE_DIRTY_HIERARCHY;
     hierarchyChanged();
     hierarchyChanged();
 }
 }
 
 
@@ -169,7 +162,6 @@ void Node::remove()
     {
     {
         _nextSibling->_prevSibling = _prevSibling;
         _nextSibling->_prevSibling = _prevSibling;
     }
     }
-
     // Update our parent.
     // Update our parent.
     Node* parent = _parent;
     Node* parent = _parent;
     if (parent)
     if (parent)
@@ -178,15 +170,13 @@ void Node::remove()
         {
         {
             parent->_firstChild = _nextSibling;
             parent->_firstChild = _nextSibling;
         }
         }
-
         --parent->_childCount;
         --parent->_childCount;
     }
     }
-
     _nextSibling = NULL;
     _nextSibling = NULL;
     _prevSibling = NULL;
     _prevSibling = NULL;
     _parent = NULL;
     _parent = NULL;
 
 
-    if (parent && parent->_notifyHierarchyChanged)
+    if (parent && parent->_dirtyBits & NODE_DIRTY_HIERARCHY)
     {
     {
         parent->hierarchyChanged();
         parent->hierarchyChanged();
     }
     }
@@ -248,7 +238,6 @@ Node* Node::findNode(const char* id, bool recursive, bool exactMatch) const
             }
             }
         }
         }
     }
     }
-
     // Search immediate children first.
     // Search immediate children first.
     for (Node* child = getFirstChild(); child != NULL; child = child->getNextSibling())
     for (Node* child = getFirstChild(); child != NULL; child = child->getNextSibling())
     {
     {
@@ -258,7 +247,6 @@ Node* Node::findNode(const char* id, bool recursive, bool exactMatch) const
             return child;
             return child;
         }
         }
     }
     }
-
     // Recurse.
     // Recurse.
     if (recursive)
     if (recursive)
     {
     {
@@ -271,7 +259,6 @@ Node* Node::findNode(const char* id, bool recursive, bool exactMatch) const
             }
             }
         }
         }
     }
     }
-
     return NULL;
     return NULL;
 }
 }
 
 
@@ -279,9 +266,8 @@ unsigned int Node::findNodes(const char* id, std::vector<Node*>& nodes, bool rec
 {
 {
     GP_ASSERT(id);
     GP_ASSERT(id);
 
 
-    unsigned int count = 0;
-
     // If the drawable is a model with a mesh skin, search the skin's hierarchy as well.
     // If the drawable is a model with a mesh skin, search the skin's hierarchy as well.
+    unsigned int count = 0;
     Node* rootNode = NULL;
     Node* rootNode = NULL;
     Model* model = dynamic_cast<Model*>(_drawable);
     Model* model = dynamic_cast<Model*>(_drawable);
     if (model)
     if (model)
@@ -296,7 +282,6 @@ unsigned int Node::findNodes(const char* id, std::vector<Node*>& nodes, bool rec
             count += rootNode->findNodes(id, nodes, true, exactMatch);
             count += rootNode->findNodes(id, nodes, true, exactMatch);
         }
         }
     }
     }
-
     // Search immediate children first.
     // Search immediate children first.
     for (Node* child = getFirstChild(); child != NULL; child = child->getNextSibling())
     for (Node* child = getFirstChild(); child != NULL; child = child->getNextSibling())
     {
     {
@@ -307,7 +292,6 @@ unsigned int Node::findNodes(const char* id, std::vector<Node*>& nodes, bool rec
             ++count;
             ++count;
         }
         }
     }
     }
-
     // Recurse.
     // Recurse.
     if (recursive)
     if (recursive)
     {
     {
@@ -332,14 +316,12 @@ Scene* Node::getScene() const
         if (scene)
         if (scene)
             return scene;
             return scene;
     }
     }
-
     return NULL;
     return NULL;
 }
 }
 
 
 bool Node::hasTag(const char* name) const
 bool Node::hasTag(const char* name) const
 {
 {
     GP_ASSERT(name);
     GP_ASSERT(name);
-
     return (_tags ? _tags->find(name) != _tags->end() : false);
     return (_tags ? _tags->find(name) != _tags->end() : false);
 }
 }
 
 
@@ -462,7 +444,6 @@ const Matrix& Node::getWorldMatrix() const
             }
             }
         }
         }
     }
     }
-
     return _world;
     return _world;
 }
 }
 
 
@@ -626,7 +607,6 @@ Vector3 Node::getActiveCameraTranslationWorld() const
             }
             }
         }
         }
     }
     }
-
     return Vector3::zero();
     return Vector3::zero();
 }
 }
 
 
@@ -645,13 +625,13 @@ Vector3 Node::getActiveCameraTranslationView() const
             }
             }
         }
         }
     }
     }
-
     return Vector3::zero();
     return Vector3::zero();
 }
 }
 
 
 void Node::hierarchyChanged()
 void Node::hierarchyChanged()
 {
 {
     // When our hierarchy changes our world transform is affected, so we must dirty it.
     // When our hierarchy changes our world transform is affected, so we must dirty it.
+    _dirtyBits |= NODE_DIRTY_HIERARCHY;
     transformChanged();
     transformChanged();
 }
 }
 
 
@@ -677,7 +657,6 @@ void Node::transformChanged()
             n->transformChanged();
             n->transformChanged();
         }
         }
     }
     }
-
     Transform::transformChanged();
     Transform::transformChanged();
 }
 }
 
 
@@ -758,21 +737,21 @@ Camera* Node::getCamera() const
 
 
 void Node::setCamera(Camera* camera)
 void Node::setCamera(Camera* camera)
 {
 {
-    if (_camera != camera)
+    if (_camera == camera)
+        return;
+
+    if (_camera)
     {
     {
-        if (_camera)
-        {
-            _camera->setNode(NULL);
-            SAFE_RELEASE(_camera);
-        }
+        _camera->setNode(NULL);
+        SAFE_RELEASE(_camera);
+    }
 
 
-        _camera = camera;
+    _camera = camera;
 
 
-        if (_camera)
-        {
-            _camera->addRef();
-            _camera->setNode(this);
-        }
+    if (_camera)
+    {
+        _camera->addRef();
+        _camera->setNode(this);
     }
     }
 }
 }
 
 
@@ -783,24 +762,24 @@ Light* Node::getLight() const
 
 
 void Node::setLight(Light* light)
 void Node::setLight(Light* light)
 {
 {
-    if (_light != light)
-    {
-        if (_light)
-        {
-            _light->setNode(NULL);
-            SAFE_RELEASE(_light);
-        }
+    if (_light == light)
+        return;
 
 
-        _light = light;
+    if (_light)
+    {
+        _light->setNode(NULL);
+        SAFE_RELEASE(_light);
+    }
 
 
-        if (_light)
-        {
-            _light->addRef();
-            _light->setNode(this);
-        }
+    _light = light;
 
 
-        setBoundsDirty();
+    if (_light)
+    {
+        _light->addRef();
+        _light->setNode(this);
     }
     }
+
+    setBoundsDirty();
 }
 }
 
 
 Drawable* Node::getDrawable() const
 Drawable* Node::getDrawable() const
@@ -1032,20 +1011,20 @@ AudioSource* Node::getAudioSource() const
 void Node::setAudioSource(AudioSource* audio)
 void Node::setAudioSource(AudioSource* audio)
 {
 {
     if (_audioSource != audio)
     if (_audioSource != audio)
+        return;
+
+    if (_audioSource)
     {
     {
-        if (_audioSource)
-        {
-            _audioSource->setNode(NULL);
-            SAFE_RELEASE(_audioSource);
-        }
+        _audioSource->setNode(NULL);
+        SAFE_RELEASE(_audioSource);
+    }
         
         
-        _audioSource = audio;
+    _audioSource = audio;
 
 
-        if (_audioSource)
-        {
-            _audioSource->addRef();
-            _audioSource->setNode(this);
-        }
+    if (_audioSource)
+    {
+        _audioSource->addRef();
+        _audioSource->setNode(this);
     }
     }
 }
 }
 
 
@@ -1196,26 +1175,36 @@ AIAgent* Node::getAgent() const
 
 
 void Node::setAgent(AIAgent* agent)
 void Node::setAgent(AIAgent* agent)
 {
 {
-    if (agent != _agent)
+    if (agent == _agent)
+        return;
+
+    if (_agent)
     {
     {
-        if (_agent)
-        {
-            Game::getInstance()->getAIController()->removeAgent(_agent);
-            _agent->setNode(NULL);
-            SAFE_RELEASE(_agent);
-        }
+        Game::getInstance()->getAIController()->removeAgent(_agent);
+        _agent->setNode(NULL);
+        SAFE_RELEASE(_agent);
+    }
 
 
-        _agent = agent;
+    _agent = agent;
 
 
-        if (_agent)
-        {
-            _agent->addRef();
-            _agent->setNode(this);
-            Game::getInstance()->getAIController()->addAgent(_agent);
-        }
+    if (_agent)
+    {
+        _agent->addRef();
+        _agent->setNode(this);
+        Game::getInstance()->getAIController()->addAgent(_agent);
     }
     }
 }
 }
 
 
+Ref* Node::getUserObject() const
+{
+    return _userObject;
+}
+
+void Node::setUserObject(Ref* obj)
+{
+    _userObject = obj;
+}
+
 NodeCloneContext::NodeCloneContext()
 NodeCloneContext::NodeCloneContext()
 {
 {
 }
 }

+ 21 - 90
gameplay/src/Node.h

@@ -30,14 +30,14 @@ class Drawable;
  * Defines a hierarchical structure of objects in 3D transformation spaces.
  * Defines a hierarchical structure of objects in 3D transformation spaces.
  *
  *
  * This object allow you to attach components to a scene such as:
  * This object allow you to attach components to a scene such as:
- * Model, Camera, Light, PhysicsCollisionObject, AudioSource, ParticleEmitter and
- * Form components.
+ * Drawable's(Model, Camera, Light, PhysicsCollisionObject, AudioSource, etc.
  *
  *
  * @see http://gameplay3d.github.io/GamePlay/docs/file-formats.html#wiki-Node
  * @see http://gameplay3d.github.io/GamePlay/docs/file-formats.html#wiki-Node
  */
  */
 class Node : public Transform, public Ref
 class Node : public Transform, public Ref
 {
 {
     friend class Scene;
     friend class Scene;
+    friend class SceneLoader;
     friend class Bundle;
     friend class Bundle;
     friend class MeshSkin;
     friend class MeshSkin;
     friend class Light;
     friend class Light;
@@ -540,7 +540,6 @@ public:
                                                PhysicsRigidBody::Parameters* rigidBodyParameters = NULL,
                                                PhysicsRigidBody::Parameters* rigidBodyParameters = NULL,
                                                int group = PHYSICS_COLLISION_GROUP_DEFAULT,
                                                int group = PHYSICS_COLLISION_GROUP_DEFAULT,
                                                int mask = PHYSICS_COLLISION_MASK_DEFAULT);
                                                int mask = PHYSICS_COLLISION_MASK_DEFAULT);
-
     /**
     /**
      * Sets the physics collision object for this node using the data from the Properties object defined at the specified URL,
      * Sets the physics collision object for this node using the data from the Properties object defined at the specified URL,
      * where the URL is of the format "<file-path>.<extension>#<namespace-id>/<namespace-id>/.../<namespace-id>"
      * where the URL is of the format "<file-path>.<extension>#<namespace-id>/<namespace-id>/.../<namespace-id>"
@@ -551,14 +550,7 @@ public:
     PhysicsCollisionObject* setCollisionObject(const char* url);
     PhysicsCollisionObject* setCollisionObject(const char* url);
 
 
     /**
     /**
-     * Sets the physics collision object for this node from the given properties object.
-     *
-     * @param properties The properties object defining the collision object.
-     */
-    PhysicsCollisionObject* setCollisionObject(Properties* properties);
-
-    /**
-     * Returns the AI agent assigned to this node.
+     * Gets the AI agent assigned to this node
      *
      *
      * @return The AI agent for this node.
      * @return The AI agent for this node.
      */
      */
@@ -571,6 +563,20 @@ public:
      */
      */
     void setAgent(AIAgent* agent);
     void setAgent(AIAgent* agent);
 
 
+    /**
+     * Gets the user object assigned to this node.
+     *
+     * @return The user object assigned object to this node.
+     */
+    Ref* getUserObject() const;
+
+    /**
+    * Sets a user object to be assigned object to this node.
+    *
+    * @param obj The user object assigned object to this node.
+    */
+    void setUserObject(Ref* obj);
+
     /**
     /**
      * Returns the bounding sphere for the Node, in world space.
      * Returns the bounding sphere for the Node, in world space.
      *
      *
@@ -670,108 +676,33 @@ private:
      */
      */
     Node& operator=(const Node&);
     Node& operator=(const Node&);
 
 
+    PhysicsCollisionObject* setCollisionObject(Properties* properties);
+
 protected:
 protected:
 
 
-    /**
-     * The Scene this node belongs to.
-     */
     Scene* _scene;
     Scene* _scene;
-
-    /**
-     * Node's ID.
-     */
     std::string _id;
     std::string _id;
-
-    /**
-     * Node's first child.
-     */
     Node* _firstChild;
     Node* _firstChild;
-
-    /**
-     * Node's next child.
-     */
     Node* _nextSibling;
     Node* _nextSibling;
-
-    /**
-     * Node's previous sibling.
-     */
     Node* _prevSibling;
     Node* _prevSibling;
-
-    /**
-     * Node's parent.
-     */
     Node* _parent;
     Node* _parent;
-
-    /**
-     * The number of children belonging to the Node.
-     */
     unsigned int _childCount;
     unsigned int _childCount;
-
-    /**
-     * If this node is enabled in the scene.
-     * This may not be enabled in hierarchy if its parents are not enabled.
-     */
-    bool _enabled;
-
-    /**
-     * List of tags for a node.
-     */
+    bool _enabled; 
     std::map<std::string, std::string>* _tags;
     std::map<std::string, std::string>* _tags;
-
-    /**
-     * Drawable objects attached to the Node.
-     */
     Drawable* _drawable;
     Drawable* _drawable;
-
-    /**
-     * Camera attached to the Node.
-     */
     Camera* _camera;
     Camera* _camera;
-
-    /**
-     * Light attached to the Node.
-     */
     Light* _light;
     Light* _light;
-
-    /**
-     * Pointer to the AudioSource attached to the Node.
-     */
     AudioSource* _audioSource;
     AudioSource* _audioSource;
-
-    /**
-     * Pointer to the PhysicsCollisionObject attached to the Node.
-     */
     PhysicsCollisionObject* _collisionObject;
     PhysicsCollisionObject* _collisionObject;
-
-    /**
-     * Pointer to the AI agent attached to the Node.
-     */
     mutable AIAgent* _agent;
     mutable AIAgent* _agent;
-
-    /**
-     * World Matrix representation of the Node.
-     */
+    Ref* _userObject;
     mutable Matrix _world;
     mutable Matrix _world;
-
-    /**
-     * Dirty bits flag for the Node.
-     */
     mutable int _dirtyBits;
     mutable int _dirtyBits;
-
-    /**
-     * A flag indicating if the Node's hierarchy has changed.
-     */
-    bool _notifyHierarchyChanged;
-
-    /**
-     * The Bounding Sphere containing the Node.
-     */
     mutable BoundingSphere _bounds;
     mutable BoundingSphere _bounds;
 };
 };
 
 
 /**
 /**
  * NodeCloneContext represents the context data that is kept when cloning a node.
  * NodeCloneContext represents the context data that is kept when cloning a node.
- *
  * The NodeCloneContext is used to make sure objects don't get cloned twice.
  * The NodeCloneContext is used to make sure objects don't get cloned twice.
  */
  */
 class NodeCloneContext
 class NodeCloneContext

+ 88 - 30
gameplay/src/lua/lua_Joint.cpp

@@ -98,6 +98,7 @@ void luaRegister_Joint()
         {"getTypeName", lua_Joint_getTypeName},
         {"getTypeName", lua_Joint_getTypeName},
         {"getUpVector", lua_Joint_getUpVector},
         {"getUpVector", lua_Joint_getUpVector},
         {"getUpVectorWorld", lua_Joint_getUpVectorWorld},
         {"getUpVectorWorld", lua_Joint_getUpVectorWorld},
+        {"getUserObject", lua_Joint_getUserObject},
         {"getViewMatrix", lua_Joint_getViewMatrix},
         {"getViewMatrix", lua_Joint_getViewMatrix},
         {"getViewProjectionMatrix", lua_Joint_getViewProjectionMatrix},
         {"getViewProjectionMatrix", lua_Joint_getViewProjectionMatrix},
         {"getWorldMatrix", lua_Joint_getWorldMatrix},
         {"getWorldMatrix", lua_Joint_getWorldMatrix},
@@ -143,6 +144,7 @@ void luaRegister_Joint()
         {"setTranslationX", lua_Joint_setTranslationX},
         {"setTranslationX", lua_Joint_setTranslationX},
         {"setTranslationY", lua_Joint_setTranslationY},
         {"setTranslationY", lua_Joint_setTranslationY},
         {"setTranslationZ", lua_Joint_setTranslationZ},
         {"setTranslationZ", lua_Joint_setTranslationZ},
+        {"setUserObject", lua_Joint_setUserObject},
         {"transformPoint", lua_Joint_transformPoint},
         {"transformPoint", lua_Joint_transformPoint},
         {"transformVector", lua_Joint_transformVector},
         {"transformVector", lua_Joint_transformVector},
         {"translate", lua_Joint_translate},
         {"translate", lua_Joint_translate},
@@ -3591,6 +3593,50 @@ int lua_Joint_getUpVectorWorld(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Joint_getUserObject(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 1:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA))
+            {
+                Joint* instance = getInstance(state);
+                void* returnPtr = ((void*)instance->getUserObject());
+                if (returnPtr)
+                {
+                    gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Ref");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_Joint_getUserObject - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Joint_getViewMatrix(lua_State* state)
 int lua_Joint_getViewMatrix(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.
@@ -5096,36 +5142,6 @@ int lua_Joint_setCollisionObject(lua_State* state)
                 }
                 }
             } while (0);
             } while (0);
 
 
-            do
-            {
-                if ((lua_type(state, 1) == LUA_TUSERDATA) &&
-                    (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TNIL))
-                {
-                    // Get parameter 1 off the stack.
-                    bool param1Valid;
-                    gameplay::ScriptUtil::LuaArray<Properties> param1 = gameplay::ScriptUtil::getObjectPointer<Properties>(2, "Properties", false, &param1Valid);
-                    if (!param1Valid)
-                        break;
-
-                    Joint* instance = getInstance(state);
-                    void* returnPtr = ((void*)instance->setCollisionObject(param1));
-                    if (returnPtr)
-                    {
-                        gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
-                        object->instance = returnPtr;
-                        object->owns = false;
-                        luaL_getmetatable(state, "PhysicsCollisionObject");
-                        lua_setmetatable(state, -2);
-                    }
-                    else
-                    {
-                        lua_pushnil(state);
-                    }
-
-                    return 1;
-                }
-            } while (0);
-
             lua_pushstring(state, "lua_Joint_setCollisionObject - Failed to match the given parameters to a valid function signature.");
             lua_pushstring(state, "lua_Joint_setCollisionObject - Failed to match the given parameters to a valid function signature.");
             lua_error(state);
             lua_error(state);
             break;
             break;
@@ -6073,6 +6089,48 @@ int lua_Joint_setTranslationZ(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Joint_setUserObject(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 2:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TNIL))
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                gameplay::ScriptUtil::LuaArray<Ref> param1 = gameplay::ScriptUtil::getObjectPointer<Ref>(2, "Ref", false, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Ref'.");
+                    lua_error(state);
+                }
+
+                Joint* instance = getInstance(state);
+                instance->setUserObject(param1);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_Joint_setUserObject - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Joint_static_ANIMATE_ROTATE(lua_State* state)
 int lua_Joint_static_ANIMATE_ROTATE(lua_State* state)
 {
 {
     // Validate the number of parameters.
     // Validate the number of parameters.

+ 2 - 0
gameplay/src/lua/lua_Joint.h

@@ -72,6 +72,7 @@ int lua_Joint_getType(lua_State* state);
 int lua_Joint_getTypeName(lua_State* state);
 int lua_Joint_getTypeName(lua_State* state);
 int lua_Joint_getUpVector(lua_State* state);
 int lua_Joint_getUpVector(lua_State* state);
 int lua_Joint_getUpVectorWorld(lua_State* state);
 int lua_Joint_getUpVectorWorld(lua_State* state);
+int lua_Joint_getUserObject(lua_State* state);
 int lua_Joint_getViewMatrix(lua_State* state);
 int lua_Joint_getViewMatrix(lua_State* state);
 int lua_Joint_getViewProjectionMatrix(lua_State* state);
 int lua_Joint_getViewProjectionMatrix(lua_State* state);
 int lua_Joint_getWorldMatrix(lua_State* state);
 int lua_Joint_getWorldMatrix(lua_State* state);
@@ -117,6 +118,7 @@ int lua_Joint_setTranslation(lua_State* state);
 int lua_Joint_setTranslationX(lua_State* state);
 int lua_Joint_setTranslationX(lua_State* state);
 int lua_Joint_setTranslationY(lua_State* state);
 int lua_Joint_setTranslationY(lua_State* state);
 int lua_Joint_setTranslationZ(lua_State* state);
 int lua_Joint_setTranslationZ(lua_State* state);
+int lua_Joint_setUserObject(lua_State* state);
 int lua_Joint_static_ANIMATE_ROTATE(lua_State* state);
 int lua_Joint_static_ANIMATE_ROTATE(lua_State* state);
 int lua_Joint_static_ANIMATE_ROTATE_TRANSLATE(lua_State* state);
 int lua_Joint_static_ANIMATE_ROTATE_TRANSLATE(lua_State* state);
 int lua_Joint_static_ANIMATE_SCALE(lua_State* state);
 int lua_Joint_static_ANIMATE_SCALE(lua_State* state);

+ 383 - 4
gameplay/src/lua/lua_JoystickControl.cpp

@@ -62,6 +62,7 @@ void luaRegister_JoystickControl()
         {"getOuterRegionSize", lua_JoystickControl_getOuterRegionSize},
         {"getOuterRegionSize", lua_JoystickControl_getOuterRegionSize},
         {"getPadding", lua_JoystickControl_getPadding},
         {"getPadding", lua_JoystickControl_getPadding},
         {"getParent", lua_JoystickControl_getParent},
         {"getParent", lua_JoystickControl_getParent},
+        {"getRadius", lua_JoystickControl_getRadius},
         {"getRefCount", lua_JoystickControl_getRefCount},
         {"getRefCount", lua_JoystickControl_getRefCount},
         {"getScriptEvent", lua_JoystickControl_getScriptEvent},
         {"getScriptEvent", lua_JoystickControl_getScriptEvent},
         {"getSkinColor", lua_JoystickControl_getSkinColor},
         {"getSkinColor", lua_JoystickControl_getSkinColor},
@@ -86,6 +87,7 @@ void luaRegister_JoystickControl()
         {"isEnabled", lua_JoystickControl_isEnabled},
         {"isEnabled", lua_JoystickControl_isEnabled},
         {"isEnabledInHierarchy", lua_JoystickControl_isEnabledInHierarchy},
         {"isEnabledInHierarchy", lua_JoystickControl_isEnabledInHierarchy},
         {"isHeightPercentage", lua_JoystickControl_isHeightPercentage},
         {"isHeightPercentage", lua_JoystickControl_isHeightPercentage},
+        {"isRadiusPercentage", lua_JoystickControl_isRadiusPercentage},
         {"isRelative", lua_JoystickControl_isRelative},
         {"isRelative", lua_JoystickControl_isRelative},
         {"isVisible", lua_JoystickControl_isVisible},
         {"isVisible", lua_JoystickControl_isVisible},
         {"isVisibleInHierarchy", lua_JoystickControl_isVisibleInHierarchy},
         {"isVisibleInHierarchy", lua_JoystickControl_isVisibleInHierarchy},
@@ -120,6 +122,7 @@ void luaRegister_JoystickControl()
         {"setOuterRegionSize", lua_JoystickControl_setOuterRegionSize},
         {"setOuterRegionSize", lua_JoystickControl_setOuterRegionSize},
         {"setPadding", lua_JoystickControl_setPadding},
         {"setPadding", lua_JoystickControl_setPadding},
         {"setPosition", lua_JoystickControl_setPosition},
         {"setPosition", lua_JoystickControl_setPosition},
+        {"setRadius", lua_JoystickControl_setRadius},
         {"setRelative", lua_JoystickControl_setRelative},
         {"setRelative", lua_JoystickControl_setRelative},
         {"setSize", lua_JoystickControl_setSize},
         {"setSize", lua_JoystickControl_setSize},
         {"setSkinColor", lua_JoystickControl_setSkinColor},
         {"setSkinColor", lua_JoystickControl_setSkinColor},
@@ -1943,9 +1946,73 @@ int lua_JoystickControl_getInnerRegionSize(lua_State* state)
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
+        case 2:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TLIGHTUSERDATA))
+            {
+                // Get parameter 1 off the stack.
+                gameplay::ScriptUtil::LuaArray<bool> param1 = gameplay::ScriptUtil::getBoolPointer(2);
+
+                JoystickControl* instance = getInstance(state);
+                void* returnPtr = (void*)&(instance->getInnerRegionSize(param1));
+                if (returnPtr)
+                {
+                    gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Vector2");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_getInnerRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        case 3:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TLIGHTUSERDATA) &&
+                (lua_type(state, 3) == LUA_TTABLE || lua_type(state, 3) == LUA_TLIGHTUSERDATA))
+            {
+                // Get parameter 1 off the stack.
+                gameplay::ScriptUtil::LuaArray<bool> param1 = gameplay::ScriptUtil::getBoolPointer(2);
+
+                // Get parameter 2 off the stack.
+                gameplay::ScriptUtil::LuaArray<bool> param2 = gameplay::ScriptUtil::getBoolPointer(3);
+
+                JoystickControl* instance = getInstance(state);
+                void* returnPtr = (void*)&(instance->getInnerRegionSize(param1, param2));
+                if (returnPtr)
+                {
+                    gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Vector2");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_getInnerRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
         default:
         default:
         {
         {
-            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_pushstring(state, "Invalid number of parameters (expected 1, 2 or 3).");
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
@@ -2087,9 +2154,73 @@ int lua_JoystickControl_getOuterRegionSize(lua_State* state)
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
+        case 2:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TLIGHTUSERDATA))
+            {
+                // Get parameter 1 off the stack.
+                gameplay::ScriptUtil::LuaArray<bool> param1 = gameplay::ScriptUtil::getBoolPointer(2);
+
+                JoystickControl* instance = getInstance(state);
+                void* returnPtr = (void*)&(instance->getOuterRegionSize(param1));
+                if (returnPtr)
+                {
+                    gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Vector2");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_getOuterRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        case 3:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TLIGHTUSERDATA) &&
+                (lua_type(state, 3) == LUA_TTABLE || lua_type(state, 3) == LUA_TLIGHTUSERDATA))
+            {
+                // Get parameter 1 off the stack.
+                gameplay::ScriptUtil::LuaArray<bool> param1 = gameplay::ScriptUtil::getBoolPointer(2);
+
+                // Get parameter 2 off the stack.
+                gameplay::ScriptUtil::LuaArray<bool> param2 = gameplay::ScriptUtil::getBoolPointer(3);
+
+                JoystickControl* instance = getInstance(state);
+                void* returnPtr = (void*)&(instance->getOuterRegionSize(param1, param2));
+                if (returnPtr)
+                {
+                    gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Vector2");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_getOuterRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
         default:
         default:
         {
         {
-            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_pushstring(state, "Invalid number of parameters (expected 1, 2 or 3).");
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
@@ -2185,6 +2316,41 @@ int lua_JoystickControl_getParent(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_JoystickControl_getRadius(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 1:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA))
+            {
+                JoystickControl* instance = getInstance(state);
+                float result = instance->getRadius();
+
+                // Push the return value onto the stack.
+                lua_pushnumber(state, result);
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_getRadius - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_JoystickControl_getRefCount(lua_State* state)
 int lua_JoystickControl_getRefCount(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.
@@ -3271,6 +3437,41 @@ int lua_JoystickControl_isHeightPercentage(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_JoystickControl_isRadiusPercentage(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 1:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA))
+            {
+                JoystickControl* instance = getInstance(state);
+                bool result = instance->isRadiusPercentage();
+
+                // Push the return value onto the stack.
+                lua_pushboolean(state, result);
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_isRadiusPercentage - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_JoystickControl_isRelative(lua_State* state)
 int lua_JoystickControl_isRelative(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.
@@ -4595,9 +4796,69 @@ int lua_JoystickControl_setInnerRegionSize(lua_State* state)
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
+        case 3:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TNIL) &&
+                lua_type(state, 3) == LUA_TBOOLEAN)
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                gameplay::ScriptUtil::LuaArray<Vector2> param1 = gameplay::ScriptUtil::getObjectPointer<Vector2>(2, "Vector2", true, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Vector2'.");
+                    lua_error(state);
+                }
+
+                // Get parameter 2 off the stack.
+                bool param2 = gameplay::ScriptUtil::luaCheckBool(state, 3);
+
+                JoystickControl* instance = getInstance(state);
+                instance->setInnerRegionSize(*param1, param2);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_setInnerRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        case 4:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TNIL) &&
+                lua_type(state, 3) == LUA_TBOOLEAN &&
+                lua_type(state, 4) == LUA_TBOOLEAN)
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                gameplay::ScriptUtil::LuaArray<Vector2> param1 = gameplay::ScriptUtil::getObjectPointer<Vector2>(2, "Vector2", true, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Vector2'.");
+                    lua_error(state);
+                }
+
+                // Get parameter 2 off the stack.
+                bool param2 = gameplay::ScriptUtil::luaCheckBool(state, 3);
+
+                // Get parameter 3 off the stack.
+                bool param3 = gameplay::ScriptUtil::luaCheckBool(state, 4);
+
+                JoystickControl* instance = getInstance(state);
+                instance->setInnerRegionSize(*param1, param2, param3);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_setInnerRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
         default:
         default:
         {
         {
-            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_pushstring(state, "Invalid number of parameters (expected 2, 3 or 4).");
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
@@ -4743,9 +5004,69 @@ int lua_JoystickControl_setOuterRegionSize(lua_State* state)
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
+        case 3:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TNIL) &&
+                lua_type(state, 3) == LUA_TBOOLEAN)
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                gameplay::ScriptUtil::LuaArray<Vector2> param1 = gameplay::ScriptUtil::getObjectPointer<Vector2>(2, "Vector2", true, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Vector2'.");
+                    lua_error(state);
+                }
+
+                // Get parameter 2 off the stack.
+                bool param2 = gameplay::ScriptUtil::luaCheckBool(state, 3);
+
+                JoystickControl* instance = getInstance(state);
+                instance->setOuterRegionSize(*param1, param2);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_setOuterRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        case 4:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TNIL) &&
+                lua_type(state, 3) == LUA_TBOOLEAN &&
+                lua_type(state, 4) == LUA_TBOOLEAN)
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                gameplay::ScriptUtil::LuaArray<Vector2> param1 = gameplay::ScriptUtil::getObjectPointer<Vector2>(2, "Vector2", true, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Vector2'.");
+                    lua_error(state);
+                }
+
+                // Get parameter 2 off the stack.
+                bool param2 = gameplay::ScriptUtil::luaCheckBool(state, 3);
+
+                // Get parameter 3 off the stack.
+                bool param3 = gameplay::ScriptUtil::luaCheckBool(state, 4);
+
+                JoystickControl* instance = getInstance(state);
+                instance->setOuterRegionSize(*param1, param2, param3);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_setOuterRegionSize - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
         default:
         default:
         {
         {
-            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_pushstring(state, "Invalid number of parameters (expected 2, 3 or 4).");
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
@@ -4841,6 +5162,64 @@ int lua_JoystickControl_setPosition(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_JoystickControl_setRadius(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 2:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                lua_type(state, 2) == LUA_TNUMBER)
+            {
+                // Get parameter 1 off the stack.
+                float param1 = (float)luaL_checknumber(state, 2);
+
+                JoystickControl* instance = getInstance(state);
+                instance->setRadius(param1);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_setRadius - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        case 3:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                lua_type(state, 2) == LUA_TNUMBER &&
+                lua_type(state, 3) == LUA_TBOOLEAN)
+            {
+                // Get parameter 1 off the stack.
+                float param1 = (float)luaL_checknumber(state, 2);
+
+                // Get parameter 2 off the stack.
+                bool param2 = gameplay::ScriptUtil::luaCheckBool(state, 3);
+
+                JoystickControl* instance = getInstance(state);
+                instance->setRadius(param1, param2);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_JoystickControl_setRadius - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 2 or 3).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_JoystickControl_setRelative(lua_State* state)
 int lua_JoystickControl_setRelative(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.

+ 3 - 0
gameplay/src/lua/lua_JoystickControl.h

@@ -46,6 +46,7 @@ int lua_JoystickControl_getOpacity(lua_State* state);
 int lua_JoystickControl_getOuterRegionSize(lua_State* state);
 int lua_JoystickControl_getOuterRegionSize(lua_State* state);
 int lua_JoystickControl_getPadding(lua_State* state);
 int lua_JoystickControl_getPadding(lua_State* state);
 int lua_JoystickControl_getParent(lua_State* state);
 int lua_JoystickControl_getParent(lua_State* state);
+int lua_JoystickControl_getRadius(lua_State* state);
 int lua_JoystickControl_getRefCount(lua_State* state);
 int lua_JoystickControl_getRefCount(lua_State* state);
 int lua_JoystickControl_getScriptEvent(lua_State* state);
 int lua_JoystickControl_getScriptEvent(lua_State* state);
 int lua_JoystickControl_getSkinColor(lua_State* state);
 int lua_JoystickControl_getSkinColor(lua_State* state);
@@ -70,6 +71,7 @@ int lua_JoystickControl_isContainer(lua_State* state);
 int lua_JoystickControl_isEnabled(lua_State* state);
 int lua_JoystickControl_isEnabled(lua_State* state);
 int lua_JoystickControl_isEnabledInHierarchy(lua_State* state);
 int lua_JoystickControl_isEnabledInHierarchy(lua_State* state);
 int lua_JoystickControl_isHeightPercentage(lua_State* state);
 int lua_JoystickControl_isHeightPercentage(lua_State* state);
+int lua_JoystickControl_isRadiusPercentage(lua_State* state);
 int lua_JoystickControl_isRelative(lua_State* state);
 int lua_JoystickControl_isRelative(lua_State* state);
 int lua_JoystickControl_isVisible(lua_State* state);
 int lua_JoystickControl_isVisible(lua_State* state);
 int lua_JoystickControl_isVisibleInHierarchy(lua_State* state);
 int lua_JoystickControl_isVisibleInHierarchy(lua_State* state);
@@ -104,6 +106,7 @@ int lua_JoystickControl_setOpacity(lua_State* state);
 int lua_JoystickControl_setOuterRegionSize(lua_State* state);
 int lua_JoystickControl_setOuterRegionSize(lua_State* state);
 int lua_JoystickControl_setPadding(lua_State* state);
 int lua_JoystickControl_setPadding(lua_State* state);
 int lua_JoystickControl_setPosition(lua_State* state);
 int lua_JoystickControl_setPosition(lua_State* state);
+int lua_JoystickControl_setRadius(lua_State* state);
 int lua_JoystickControl_setRelative(lua_State* state);
 int lua_JoystickControl_setRelative(lua_State* state);
 int lua_JoystickControl_setSize(lua_State* state);
 int lua_JoystickControl_setSize(lua_State* state);
 int lua_JoystickControl_setSkinColor(lua_State* state);
 int lua_JoystickControl_setSkinColor(lua_State* state);

+ 88 - 30
gameplay/src/lua/lua_Node.cpp

@@ -95,6 +95,7 @@ void luaRegister_Node()
         {"getTypeName", lua_Node_getTypeName},
         {"getTypeName", lua_Node_getTypeName},
         {"getUpVector", lua_Node_getUpVector},
         {"getUpVector", lua_Node_getUpVector},
         {"getUpVectorWorld", lua_Node_getUpVectorWorld},
         {"getUpVectorWorld", lua_Node_getUpVectorWorld},
+        {"getUserObject", lua_Node_getUserObject},
         {"getViewMatrix", lua_Node_getViewMatrix},
         {"getViewMatrix", lua_Node_getViewMatrix},
         {"getViewProjectionMatrix", lua_Node_getViewProjectionMatrix},
         {"getViewProjectionMatrix", lua_Node_getViewProjectionMatrix},
         {"getWorldMatrix", lua_Node_getWorldMatrix},
         {"getWorldMatrix", lua_Node_getWorldMatrix},
@@ -140,6 +141,7 @@ void luaRegister_Node()
         {"setTranslationX", lua_Node_setTranslationX},
         {"setTranslationX", lua_Node_setTranslationX},
         {"setTranslationY", lua_Node_setTranslationY},
         {"setTranslationY", lua_Node_setTranslationY},
         {"setTranslationZ", lua_Node_setTranslationZ},
         {"setTranslationZ", lua_Node_setTranslationZ},
+        {"setUserObject", lua_Node_setUserObject},
         {"transformPoint", lua_Node_transformPoint},
         {"transformPoint", lua_Node_transformPoint},
         {"transformVector", lua_Node_transformVector},
         {"transformVector", lua_Node_transformVector},
         {"translate", lua_Node_translate},
         {"translate", lua_Node_translate},
@@ -3545,6 +3547,50 @@ int lua_Node_getUpVectorWorld(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Node_getUserObject(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 1:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA))
+            {
+                Node* instance = getInstance(state);
+                void* returnPtr = ((void*)instance->getUserObject());
+                if (returnPtr)
+                {
+                    gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Ref");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_Node_getUserObject - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Node_getViewMatrix(lua_State* state)
 int lua_Node_getViewMatrix(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.
@@ -5050,36 +5096,6 @@ int lua_Node_setCollisionObject(lua_State* state)
                 }
                 }
             } while (0);
             } while (0);
 
 
-            do
-            {
-                if ((lua_type(state, 1) == LUA_TUSERDATA) &&
-                    (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TNIL))
-                {
-                    // Get parameter 1 off the stack.
-                    bool param1Valid;
-                    gameplay::ScriptUtil::LuaArray<Properties> param1 = gameplay::ScriptUtil::getObjectPointer<Properties>(2, "Properties", false, &param1Valid);
-                    if (!param1Valid)
-                        break;
-
-                    Node* instance = getInstance(state);
-                    void* returnPtr = ((void*)instance->setCollisionObject(param1));
-                    if (returnPtr)
-                    {
-                        gameplay::ScriptUtil::LuaObject* object = (gameplay::ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(gameplay::ScriptUtil::LuaObject));
-                        object->instance = returnPtr;
-                        object->owns = false;
-                        luaL_getmetatable(state, "PhysicsCollisionObject");
-                        lua_setmetatable(state, -2);
-                    }
-                    else
-                    {
-                        lua_pushnil(state);
-                    }
-
-                    return 1;
-                }
-            } while (0);
-
             lua_pushstring(state, "lua_Node_setCollisionObject - Failed to match the given parameters to a valid function signature.");
             lua_pushstring(state, "lua_Node_setCollisionObject - Failed to match the given parameters to a valid function signature.");
             lua_error(state);
             lua_error(state);
             break;
             break;
@@ -6027,6 +6043,48 @@ int lua_Node_setTranslationZ(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Node_setUserObject(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 2:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TTABLE || lua_type(state, 2) == LUA_TNIL))
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                gameplay::ScriptUtil::LuaArray<Ref> param1 = gameplay::ScriptUtil::getObjectPointer<Ref>(2, "Ref", false, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Ref'.");
+                    lua_error(state);
+                }
+
+                Node* instance = getInstance(state);
+                instance->setUserObject(param1);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_Node_setUserObject - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Node_static_ANIMATE_ROTATE(lua_State* state)
 int lua_Node_static_ANIMATE_ROTATE(lua_State* state)
 {
 {
     // Validate the number of parameters.
     // Validate the number of parameters.

+ 2 - 0
gameplay/src/lua/lua_Node.h

@@ -71,6 +71,7 @@ int lua_Node_getType(lua_State* state);
 int lua_Node_getTypeName(lua_State* state);
 int lua_Node_getTypeName(lua_State* state);
 int lua_Node_getUpVector(lua_State* state);
 int lua_Node_getUpVector(lua_State* state);
 int lua_Node_getUpVectorWorld(lua_State* state);
 int lua_Node_getUpVectorWorld(lua_State* state);
+int lua_Node_getUserObject(lua_State* state);
 int lua_Node_getViewMatrix(lua_State* state);
 int lua_Node_getViewMatrix(lua_State* state);
 int lua_Node_getViewProjectionMatrix(lua_State* state);
 int lua_Node_getViewProjectionMatrix(lua_State* state);
 int lua_Node_getWorldMatrix(lua_State* state);
 int lua_Node_getWorldMatrix(lua_State* state);
@@ -116,6 +117,7 @@ int lua_Node_setTranslation(lua_State* state);
 int lua_Node_setTranslationX(lua_State* state);
 int lua_Node_setTranslationX(lua_State* state);
 int lua_Node_setTranslationY(lua_State* state);
 int lua_Node_setTranslationY(lua_State* state);
 int lua_Node_setTranslationZ(lua_State* state);
 int lua_Node_setTranslationZ(lua_State* state);
+int lua_Node_setUserObject(lua_State* state);
 int lua_Node_static_ANIMATE_ROTATE(lua_State* state);
 int lua_Node_static_ANIMATE_ROTATE(lua_State* state);
 int lua_Node_static_ANIMATE_ROTATE_TRANSLATE(lua_State* state);
 int lua_Node_static_ANIMATE_ROTATE_TRANSLATE(lua_State* state);
 int lua_Node_static_ANIMATE_SCALE(lua_State* state);
 int lua_Node_static_ANIMATE_SCALE(lua_State* state);

+ 56 - 1
gameplay/src/lua/lua_PhysicsCharacter.cpp

@@ -43,6 +43,7 @@ void luaRegister_PhysicsCharacter()
         {"isStatic", lua_PhysicsCharacter_isStatic},
         {"isStatic", lua_PhysicsCharacter_isStatic},
         {"jump", lua_PhysicsCharacter_jump},
         {"jump", lua_PhysicsCharacter_jump},
         {"removeCollisionListener", lua_PhysicsCharacter_removeCollisionListener},
         {"removeCollisionListener", lua_PhysicsCharacter_removeCollisionListener},
+        {"resetVelocityState", lua_PhysicsCharacter_resetVelocityState},
         {"rotate", lua_PhysicsCharacter_rotate},
         {"rotate", lua_PhysicsCharacter_rotate},
         {"setEnabled", lua_PhysicsCharacter_setEnabled},
         {"setEnabled", lua_PhysicsCharacter_setEnabled},
         {"setForwardVelocity", lua_PhysicsCharacter_setForwardVelocity},
         {"setForwardVelocity", lua_PhysicsCharacter_setForwardVelocity},
@@ -696,9 +697,31 @@ int lua_PhysicsCharacter_jump(lua_State* state)
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
+        case 3:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                lua_type(state, 2) == LUA_TNUMBER &&
+                lua_type(state, 3) == LUA_TBOOLEAN)
+            {
+                // Get parameter 1 off the stack.
+                float param1 = (float)luaL_checknumber(state, 2);
+
+                // Get parameter 2 off the stack.
+                bool param2 = gameplay::ScriptUtil::luaCheckBool(state, 3);
+
+                PhysicsCharacter* instance = getInstance(state);
+                instance->jump(param1, param2);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_PhysicsCharacter_jump - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
         default:
         default:
         {
         {
-            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_pushstring(state, "Invalid number of parameters (expected 2 or 3).");
             lua_error(state);
             lua_error(state);
             break;
             break;
         }
         }
@@ -816,6 +839,38 @@ int lua_PhysicsCharacter_removeCollisionListener(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_PhysicsCharacter_resetVelocityState(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 1:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA))
+            {
+                PhysicsCharacter* instance = getInstance(state);
+                instance->resetVelocityState();
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_PhysicsCharacter_resetVelocityState - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_PhysicsCharacter_rotate(lua_State* state)
 int lua_PhysicsCharacter_rotate(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.

+ 1 - 0
gameplay/src/lua/lua_PhysicsCharacter.h

@@ -22,6 +22,7 @@ int lua_PhysicsCharacter_isPhysicsEnabled(lua_State* state);
 int lua_PhysicsCharacter_isStatic(lua_State* state);
 int lua_PhysicsCharacter_isStatic(lua_State* state);
 int lua_PhysicsCharacter_jump(lua_State* state);
 int lua_PhysicsCharacter_jump(lua_State* state);
 int lua_PhysicsCharacter_removeCollisionListener(lua_State* state);
 int lua_PhysicsCharacter_removeCollisionListener(lua_State* state);
+int lua_PhysicsCharacter_resetVelocityState(lua_State* state);
 int lua_PhysicsCharacter_rotate(lua_State* state);
 int lua_PhysicsCharacter_rotate(lua_State* state);
 int lua_PhysicsCharacter_setEnabled(lua_State* state);
 int lua_PhysicsCharacter_setEnabled(lua_State* state);
 int lua_PhysicsCharacter_setForwardVelocity(lua_State* state);
 int lua_PhysicsCharacter_setForwardVelocity(lua_State* state);

+ 1 - 1
tools/encoder/README.md

@@ -2,7 +2,7 @@
 Command-line tool for encoding games assets like true-type fonts and 3D scene files
 Command-line tool for encoding games assets like true-type fonts and 3D scene files
 into a simple binary-based bundle file format for the gameplay 3D game framework runtime. 
 into a simple binary-based bundle file format for the gameplay 3D game framework runtime. 
 The 'bin' folder contains pre-built 64-bit versions of the gameplay-encoder executables for 
 The 'bin' folder contains pre-built 64-bit versions of the gameplay-encoder executables for 
-Windows 7, MacOS X and Linux Ubuntu with support built-in support for:
+Windows, MacOS X and Linux Ubuntu with support built-in support for:
 
 
 ## TrueType Font
 ## TrueType Font
 TrueType Fonts represent a standard in defining outline fonts and has become the 
 TrueType Fonts represent a standard in defining outline fonts and has become the 

+ 2 - 88
tools/encoder/gameplay-encoder.vcxproj

@@ -1,18 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
   <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
     <ProjectConfiguration Include="Debug|x64">
     <ProjectConfiguration Include="Debug|x64">
       <Configuration>Debug</Configuration>
       <Configuration>Debug</Configuration>
       <Platform>x64</Platform>
       <Platform>x64</Platform>
     </ProjectConfiguration>
     </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
     <ProjectConfiguration Include="Release|x64">
     <ProjectConfiguration Include="Release|x64">
       <Configuration>Release</Configuration>
       <Configuration>Release</Configuration>
       <Platform>x64</Platform>
       <Platform>x64</Platform>
@@ -128,25 +120,12 @@
     <RootNamespace>gameplay-encoder</RootNamespace>
     <RootNamespace>gameplay-encoder</RootNamespace>
   </PropertyGroup>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <UseDebugLibraries>true</UseDebugLibraries>
     <CharacterSet>Unicode</CharacterSet>
     <CharacterSet>Unicode</CharacterSet>
     <PlatformToolset>v120</PlatformToolset>
     <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <UseDebugLibraries>false</UseDebugLibraries>
@@ -157,62 +136,23 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
     <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)\windows\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir>windows\$(Platform)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
     <OutDir>$(Configuration)\</OutDir>
     <OutDir>$(Configuration)\</OutDir>
     <IntDir>$(Configuration)\</IntDir>
     <IntDir>$(Configuration)\</IntDir>
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
     <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(SolutionDir)\windows\$(Platform)\$(Configuration)\</OutDir>
-    <IntDir>windows\$(Platform)\$(Configuration)\</IntDir>
+    <OutDir>$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
   </PropertyGroup>
   </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=2;USE_FBX;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.2.1/include;../../external-deps/include</AdditionalIncludeDirectories>
-      <DisableLanguageExtensions>
-      </DisableLanguageExtensions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.2.1/lib/vs2012/x86/debug;../../external-deps/lib/windows/x86/Debug</AdditionalLibraryDirectories>
-      <AdditionalDependencies>libfbxsdk-md.lib;freetype245.lib;gameplay-deps.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
     <ClCompile>
       <PrecompiledHeader>
       <PrecompiledHeader>
@@ -236,32 +176,6 @@
       </Command>
       </Command>
     </PostBuildEvent>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;USE_FBX;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.2.1/include;../../external-deps/include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>libfbxsdk-md.lib;freetype245.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.2.1/lib/vs2012/x86/release;../../external-deps/lib/windows/x86/Release</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>
-      </IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
     <ClCompile>
       <WarningLevel>Level4</WarningLevel>
       <WarningLevel>Level4</WarningLevel>

+ 0 - 16
tools/encoder/gameplay-encoder.vcxproj.user

@@ -1,27 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LocalDebuggerCommandArguments>
-    </LocalDebuggerCommandArguments>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-    <LocalDebuggerEnvironment>
-    </LocalDebuggerEnvironment>
-    <LocalDebuggerWorkingDirectory>.\Debug</LocalDebuggerWorkingDirectory>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LocalDebuggerCommandArguments />
     <LocalDebuggerCommandArguments />
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
     <LocalDebuggerEnvironment />
     <LocalDebuggerEnvironment />
     <LocalDebuggerWorkingDirectory>.\Debug</LocalDebuggerWorkingDirectory>
     <LocalDebuggerWorkingDirectory>.\Debug</LocalDebuggerWorkingDirectory>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LocalDebuggerEnvironment>
-    </LocalDebuggerEnvironment>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-    <LocalDebuggerCommandArguments>
-    </LocalDebuggerCommandArguments>
-    <LocalDebuggerWorkingDirectory>.\Release</LocalDebuggerWorkingDirectory>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LocalDebuggerEnvironment />
     <LocalDebuggerEnvironment />
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>

+ 2 - 0
tools/encoder/src/Base.h

@@ -33,10 +33,12 @@ using std::endl;
 #if defined(WIN32)
 #if defined(WIN32)
     #pragma warning( disable : 4005 )
     #pragma warning( disable : 4005 )
     #pragma warning( disable : 4172 )
     #pragma warning( disable : 4172 )
+    #pragma warning( disable : 4189)
     #pragma warning( disable : 4244 )
     #pragma warning( disable : 4244 )
     #pragma warning( disable : 4267 )
     #pragma warning( disable : 4267 )
     #pragma warning( disable : 4311 )
     #pragma warning( disable : 4311 )
     #pragma warning( disable : 4390 )
     #pragma warning( disable : 4390 )
+    #pragma warning( disable : 4701 )
     #pragma warning( disable : 4800 )
     #pragma warning( disable : 4800 )
     #pragma warning( disable : 4996 )
     #pragma warning( disable : 4996 )
 #endif
 #endif

+ 4 - 110
tools/luagen/gameplay-luagen.vcxproj

@@ -1,18 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
   <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
     <ProjectConfiguration Include="Debug|x64">
     <ProjectConfiguration Include="Debug|x64">
       <Configuration>Debug</Configuration>
       <Configuration>Debug</Configuration>
       <Platform>x64</Platform>
       <Platform>x64</Platform>
     </ProjectConfiguration>
     </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
     <ProjectConfiguration Include="Release|x64">
     <ProjectConfiguration Include="Release|x64">
       <Configuration>Release</Configuration>
       <Configuration>Release</Configuration>
       <Platform>x64</Platform>
       <Platform>x64</Platform>
@@ -37,28 +29,15 @@
   <PropertyGroup Label="Globals">
   <PropertyGroup Label="Globals">
     <ProjectGuid>{CA137C5D-FDE1-4095-926A-59E8472504BF}</ProjectGuid>
     <ProjectGuid>{CA137C5D-FDE1-4095-926A-59E8472504BF}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
     <Keyword>Win32Proj</Keyword>
-    <RootNamespace>gameplayluagen</RootNamespace>
+    <RootNamespace>gameplay-luagen</RootNamespace>
   </PropertyGroup>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <UseDebugLibraries>true</UseDebugLibraries>
     <CharacterSet>Unicode</CharacterSet>
     <CharacterSet>Unicode</CharacterSet>
     <PlatformToolset>v120</PlatformToolset>
     <PlatformToolset>v120</PlatformToolset>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <UseDebugLibraries>false</UseDebugLibraries>
@@ -69,72 +48,25 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <CustomBuildBeforeTargets>
-    </CustomBuildBeforeTargets>
-    <OutDir>$(Configuration)\</OutDir>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LinkIncremental>true</LinkIncremental>
     <LinkIncremental>true</LinkIncremental>
     <CustomBuildBeforeTargets />
     <CustomBuildBeforeTargets />
-    <IntDir>windows\$(Platform)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)\windows\$(Platform)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <CustomBuildBeforeTargets>
-    </CustomBuildBeforeTargets>
+    <IntDir>$(Configuration)\</IntDir>
     <OutDir>$(Configuration)\</OutDir>
     <OutDir>$(Configuration)\</OutDir>
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LinkIncremental>false</LinkIncremental>
     <LinkIncremental>false</LinkIncremental>
     <CustomBuildBeforeTargets />
     <CustomBuildBeforeTargets />
-    <IntDir>windows\$(Platform)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)\windows\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+    <OutDir>$(Configuration)\</OutDir>
   </PropertyGroup>
   </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>GP_ERRORS_AS_WARNINGS;_ITERATOR_DEBUG_LEVEL=0;WIN32;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../external-deps/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>../../external-deps/lib/windows/x86/Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>gameplay-deps.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-    <PreBuildEvent>
-      <Command>
-      </Command>
-    </PreBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-    </CustomBuildStep>
-    <CustomBuildStep>
-      <Message>
-      </Message>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
     <ClCompile>
       <PrecompiledHeader>
       <PrecompiledHeader>
@@ -164,44 +96,6 @@
       </Message>
       </Message>
     </CustomBuildStep>
     </CustomBuildStep>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../external-deps/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalLibraryDirectories>../../external-deps/lib/windows/x86/Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>gameplay-deps.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-    <PreBuildEvent>
-      <Command>
-      </Command>
-    </PreBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-    </CustomBuildStep>
-    <CustomBuildStep>
-      <Message>
-      </Message>
-    </CustomBuildStep>
-    <PostBuildEvent>
-      <Command>copy $(TargetPath) $(ProjectDir)..\..\bin\windows\$(TargetFileName)</Command>
-    </PostBuildEvent>
-    <PostBuildEvent>
-      <Message>Copying executable to bin/windows folder ...</Message>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
     <ClCompile>
       <WarningLevel>Level3</WarningLevel>
       <WarningLevel>Level3</WarningLevel>

+ 0 - 10
tools/luagen/gameplay-luagen.vcxproj.user

@@ -1,20 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LocalDebuggerCommandArguments>"$(ProjectDir)xml/" "$(ProjectDir)../../gameplay/src/lua/" gameplay</LocalDebuggerCommandArguments>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-    <LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <LocalDebuggerCommandArguments>"$(ProjectDir)xml/" "$(ProjectDir)../../gameplay/src/lua/" gameplay</LocalDebuggerCommandArguments>
     <LocalDebuggerCommandArguments>"$(ProjectDir)xml/" "$(ProjectDir)../../gameplay/src/lua/" gameplay</LocalDebuggerCommandArguments>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
     <LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand>
     <LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand>
   </PropertyGroup>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LocalDebuggerCommandArguments>"$(ProjectDir)xml/" "$(ProjectDir)../../gameplay/src/lua/" gameplay</LocalDebuggerCommandArguments>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-    <LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <LocalDebuggerCommandArguments>"$(ProjectDir)xml/" "$(ProjectDir)../../gameplay/src/lua/" gameplay</LocalDebuggerCommandArguments>
     <LocalDebuggerCommandArguments>"$(ProjectDir)xml/" "$(ProjectDir)../../gameplay/src/lua/" gameplay</LocalDebuggerCommandArguments>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>

+ 1 - 0
tools/luagen/src/Base.h

@@ -22,6 +22,7 @@ using namespace std;
 #include <windows.h>
 #include <windows.h>
 #pragma warning(disable : 4996)
 #pragma warning(disable : 4996)
 #pragma warning(disable : 4244)
 #pragma warning(disable : 4244)
+#pragma warning(disable : 4267)
 #pragma warning(disable : 4345)
 #pragma warning(disable : 4345)
 #else
 #else
 #include <dirent.h>
 #include <dirent.h>