Browse Source

Variant pointer refactoring. Variant can now hold a weak pointer to a RefCounted object, which is safer, and is returned using GetPtr(). Engine events have been converted to use that mechanism. GetPtr() is also directly available in AngelScript, as well as assigning a RefCounted or derived class handle to a Variant.

Important: when you assign a non-RefCounted object as a void pointer to a Variant, you must now retrieve it with GetVoidPtr() instead.

The legacy methods in AngelScript for obtaining object handles from Variant, ie. GetNode(), GetUIElement() etc. still exist, but are considered deprecated.
Lasse Öörni 12 years ago
parent
commit
47836474e2
60 changed files with 439 additions and 332 deletions
  1. 3 2
      Bin/Data/LuaScripts/02_HelloGUI.lua
  2. 3 4
      Bin/Data/Scripts/02_HelloGUI.as
  3. 1 1
      Bin/Data/Scripts/16_Chat.as
  4. 2 2
      Bin/Data/Scripts/17_SceneReplication.as
  5. 5 5
      Bin/Data/Scripts/Editor/AttributeEditor.as
  6. 18 18
      Bin/Data/Scripts/Editor/EditorHierarchyWindow.as
  7. 4 4
      Bin/Data/Scripts/Editor/EditorInspectorWindow.as
  8. 13 13
      Bin/Data/Scripts/Editor/EditorMaterial.as
  9. 21 21
      Bin/Data/Scripts/Editor/EditorPreferences.as
  10. 24 24
      Bin/Data/Scripts/Editor/EditorSettings.as
  11. 22 22
      Bin/Data/Scripts/Editor/EditorToolBar.as
  12. 3 3
      Bin/Data/Scripts/Editor/EditorUI.as
  13. 1 1
      Bin/Data/Scripts/Editor/EditorView.as
  14. 2 2
      Bin/Data/Scripts/NinjaSnowWar/GameObject.as
  15. 5 5
      Docs/Reference.dox
  16. 2 2
      Source/Engine/Core/Context.cpp
  17. 36 9
      Source/Engine/Core/Variant.cpp
  18. 72 20
      Source/Engine/Core/Variant.h
  19. 1 1
      Source/Engine/Engine/Engine.cpp
  20. 1 1
      Source/Engine/Graphics/AnimatedModel.cpp
  21. 1 1
      Source/Engine/Graphics/AnimationState.cpp
  22. 1 1
      Source/Engine/Graphics/Octree.cpp
  23. 8 8
      Source/Engine/Graphics/Renderer.cpp
  24. 1 1
      Source/Engine/Graphics/Terrain.cpp
  25. 2 0
      Source/Engine/IO/Deserializer.cpp
  26. 2 0
      Source/Engine/IO/Serializer.cpp
  27. 4 3
      Source/Engine/LuaScript/pkgs/Core/Variant.pkg
  28. 5 5
      Source/Engine/Network/Connection.cpp
  29. 3 3
      Source/Engine/Network/Network.cpp
  30. 24 24
      Source/Engine/Physics/PhysicsWorld.cpp
  31. 9 9
      Source/Engine/Resource/ResourceCache.cpp
  32. 9 9
      Source/Engine/Resource/ResourceCache.h
  33. 3 3
      Source/Engine/Scene/Component.cpp
  34. 16 16
      Source/Engine/Scene/Node.cpp
  35. 3 3
      Source/Engine/Scene/Scene.cpp
  36. 1 1
      Source/Engine/Scene/Serializable.cpp
  37. 12 7
      Source/Engine/Script/APITemplates.h
  38. 14 2
      Source/Engine/Script/CoreAPI.cpp
  39. 3 3
      Source/Engine/Script/GraphicsAPI.cpp
  40. 1 1
      Source/Engine/Script/NetworkAPI.cpp
  41. 3 3
      Source/Engine/Script/PhysicsAPI.cpp
  42. 4 4
      Source/Engine/Script/ResourceAPI.cpp
  43. 2 2
      Source/Engine/Script/SceneAPI.cpp
  44. 10 6
      Source/Engine/Script/ScriptFile.cpp
  45. 1 1
      Source/Engine/Script/UIAPI.cpp
  46. 3 3
      Source/Engine/UI/Button.cpp
  47. 1 1
      Source/Engine/UI/CheckBox.cpp
  48. 1 1
      Source/Engine/UI/DropDownList.cpp
  49. 3 3
      Source/Engine/UI/LineEdit.cpp
  50. 9 9
      Source/Engine/UI/ListView.cpp
  51. 2 2
      Source/Engine/UI/Menu.cpp
  52. 1 1
      Source/Engine/UI/ScrollBar.cpp
  53. 1 1
      Source/Engine/UI/ScrollView.cpp
  54. 2 2
      Source/Engine/UI/Slider.cpp
  55. 13 11
      Source/Engine/UI/UI.cpp
  56. 17 17
      Source/Engine/UI/UIElement.cpp
  57. 1 1
      Source/Engine/UI/Window.cpp
  58. 1 1
      Source/Samples/13_Ragdolls/CreateRagdoll.cpp
  59. 1 1
      Source/Samples/16_Chat/Chat.cpp
  60. 2 2
      Source/Samples/17_SceneReplication/SceneReplication.cpp

+ 3 - 2
Bin/Data/LuaScripts/02_HelloGUI.lua

@@ -146,6 +146,9 @@ end
 
 
 function HandleDragMove(eventType, eventData)
 function HandleDragMove(eventType, eventData)
     local dragCurrentPosition = IntVector2(eventData:GetInt("X"), eventData:GetInt("Y"))
     local dragCurrentPosition = IntVector2(eventData:GetInt("X"), eventData:GetInt("Y"))
+    -- Get the dragged fish element
+    -- Note difference to C++: in C++ we would call GetPtr() and cast the pointer to UIElement, here we must specify
+    -- what kind of object we are getting. Null will be returned on type mismatch
     local draggedElement = eventData:GetPtr("UIElement", "Element")
     local draggedElement = eventData:GetPtr("UIElement", "Element")
     draggedElement:SetPosition(dragCurrentPosition - dragBeginPosition)
     draggedElement:SetPosition(dragCurrentPosition - dragBeginPosition)
 end
 end
@@ -163,8 +166,6 @@ function HandleControlClicked(eventType, eventData)
     local windowTitle = tolua.cast(element, 'Text')
     local windowTitle = tolua.cast(element, 'Text')
 
 
     -- Get control that was clicked
     -- Get control that was clicked
-    -- Note difference to C++: in C++ we would call GetPtr() and cast the function pointer to UIElement, here we must specify
-    -- what kind of object we are getting. Null will be returned on type mismatch
     local clicked = eventData:GetPtr("UIElement", "Element")
     local clicked = eventData:GetPtr("UIElement", "Element")
     local name = "...?"
     local name = "...?"
     if clicked ~= nil then
     if clicked ~= nil then

+ 3 - 4
Bin/Data/Scripts/02_HelloGUI.as

@@ -144,7 +144,8 @@ void HandleDragBegin(StringHash eventType, VariantMap& eventData)
 void HandleDragMove(StringHash eventType, VariantMap& eventData)
 void HandleDragMove(StringHash eventType, VariantMap& eventData)
 {
 {
     IntVector2 dragCurrentPosition = IntVector2(eventData["X"].GetInt(), eventData["Y"].GetInt());
     IntVector2 dragCurrentPosition = IntVector2(eventData["X"].GetInt(), eventData["Y"].GetInt());
-    UIElement@ draggedElement = eventData["Element"].GetUIElement();
+    // Get the element (fish) that is being dragged. GetPtr() returns a RefCounted handle which can be cast implicitly
+    UIElement@ draggedElement = eventData["Element"].GetPtr();
     draggedElement.position = dragCurrentPosition - dragBeginPosition;
     draggedElement.position = dragCurrentPosition - dragBeginPosition;
 }
 }
 
 
@@ -163,9 +164,7 @@ void HandleControlClicked(StringHash eventType, VariantMap& eventData)
     Text@ windowTitle = window.GetChild("WindowTitle", true);
     Text@ windowTitle = window.GetChild("WindowTitle", true);
 
 
     // Get control that was clicked
     // Get control that was clicked
-    // Note difference to C++: in C++ we would call GetPtr() and cast the void pointer to UIElement, here we must specify
-    // what kind of object we are getting. Null will be returned on type mismatch
-    UIElement@ clicked = eventData["Element"].GetUIElement();
+    UIElement@ clicked = eventData["Element"].GetPtr();
 
 
     String name = "...?";
     String name = "...?";
     if (clicked !is null)
     if (clicked !is null)

+ 1 - 1
Bin/Data/Scripts/16_Chat.as

@@ -200,7 +200,7 @@ void HandleNetworkMessage(StringHash eventType, VariantMap& eventData)
         // If we are a client, just display the message
         // If we are a client, just display the message
         if (network.serverRunning)
         if (network.serverRunning)
         {
         {
-            Connection@ sender = eventData["Connection"].GetConnection();
+            Connection@ sender = eventData["Connection"].GetPtr();
             
             
             text = sender.ToString() + " " + text;
             text = sender.ToString() + " " + text;
             
             

+ 2 - 2
Bin/Data/Scripts/17_SceneReplication.as

@@ -390,7 +390,7 @@ void HandleConnectionStatus(StringHash eventType, VariantMap& eventData)
 void HandleClientConnected(StringHash eventType, VariantMap& eventData)
 void HandleClientConnected(StringHash eventType, VariantMap& eventData)
 {
 {
     // When a client connects, assign to scene to begin scene replication
     // When a client connects, assign to scene to begin scene replication
-    Connection@ newConnection = eventData["Connection"].GetConnection();
+    Connection@ newConnection = eventData["Connection"].GetPtr();
     newConnection.scene = scene_;
     newConnection.scene = scene_;
     
     
     // Then create a controllable object for that client
     // Then create a controllable object for that client
@@ -409,7 +409,7 @@ void HandleClientConnected(StringHash eventType, VariantMap& eventData)
 void HandleClientDisconnected(StringHash eventType, VariantMap& eventData)
 void HandleClientDisconnected(StringHash eventType, VariantMap& eventData)
 {
 {
     // When a client disconnects, remove the controlled object
     // When a client disconnects, remove the controlled object
-    Connection@ connection = eventData["Connection"].GetConnection();
+    Connection@ connection = eventData["Connection"].GetPtr();
     for (uint i = 0; i < clients.length; ++i)
     for (uint i = 0; i < clients.length; ++i)
     {
     {
         if (clients[i].connection is connection)
         if (clients[i].connection is connection)

+ 5 - 5
Bin/Data/Scripts/Editor/AttributeEditor.as

@@ -788,7 +788,7 @@ void EditAttribute(StringHash eventType, VariantMap& eventData)
     if (inLoadAttributeEditor)
     if (inLoadAttributeEditor)
         return;
         return;
 
 
-    UIElement@ attrEdit = eventData["Element"].GetUIElement();
+    UIElement@ attrEdit = eventData["Element"].GetPtr();
     UIElement@ parent = attrEdit.parent;
     UIElement@ parent = attrEdit.parent;
     Array<Serializable@>@ serializables = GetAttributeEditorTargets(attrEdit);
     Array<Serializable@>@ serializables = GetAttributeEditorTargets(attrEdit);
     if (serializables.empty)
     if (serializables.empty)
@@ -901,7 +901,7 @@ ResourcePicker@ GetResourcePicker(ShortStringHash resourceType)
 
 
 void PickResource(StringHash eventType, VariantMap& eventData)
 void PickResource(StringHash eventType, VariantMap& eventData)
 {
 {
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     LineEdit@ attrEdit = button.parent.children[0];
     LineEdit@ attrEdit = button.parent.children[0];
 
 
     Array<Serializable@>@ targets = GetAttributeEditorTargets(attrEdit);
     Array<Serializable@>@ targets = GetAttributeEditorTargets(attrEdit);
@@ -1043,7 +1043,7 @@ String GetResourceNameFromFullName(const String&in resourceName)
 
 
 void OpenResource(StringHash eventType, VariantMap& eventData)
 void OpenResource(StringHash eventType, VariantMap& eventData)
 {
 {
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     LineEdit@ attrEdit = button.parent.children[0];
     LineEdit@ attrEdit = button.parent.children[0];
 
 
     String fileName = attrEdit.text.Trimmed();
     String fileName = attrEdit.text.Trimmed();
@@ -1064,7 +1064,7 @@ void OpenResource(StringHash eventType, VariantMap& eventData)
 
 
 void EditResource(StringHash eventType, VariantMap& eventData)
 void EditResource(StringHash eventType, VariantMap& eventData)
 {
 {
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     LineEdit@ attrEdit = button.parent.children[0];
     LineEdit@ attrEdit = button.parent.children[0];
 
 
     String fileName = attrEdit.text.Trimmed();
     String fileName = attrEdit.text.Trimmed();
@@ -1084,7 +1084,7 @@ void EditResource(StringHash eventType, VariantMap& eventData)
 
 
 void TestResource(StringHash eventType, VariantMap& eventData)
 void TestResource(StringHash eventType, VariantMap& eventData)
 {
 {
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     LineEdit@ attrEdit = button.parent.children[0];
     LineEdit@ attrEdit = button.parent.children[0];
 
 
     ShortStringHash resourceType(attrEdit.vars[TYPE_VAR].GetUInt());
     ShortStringHash resourceType(attrEdit.vars[TYPE_VAR].GetUInt());

+ 18 - 18
Bin/Data/Scripts/Editor/EditorHierarchyWindow.as

@@ -97,7 +97,7 @@ void HideHierarchyWindow()
 
 
 void ExpandCollapseHierarchy(StringHash eventType, VariantMap& eventData)
 void ExpandCollapseHierarchy(StringHash eventType, VariantMap& eventData)
 {
 {
-    Button@ button = eventData["Element"].GetUIElement();
+    Button@ button = eventData["Element"].GetPtr();
     bool enable = button.name == "ExpandButton";
     bool enable = button.name == "ExpandButton";
     CheckBox@ checkBox = hierarchyWindow.GetChild("AllCheckBox", true);
     CheckBox@ checkBox = hierarchyWindow.GetChild("AllCheckBox", true);
     bool all = checkBox.checked;
     bool all = checkBox.checked;
@@ -721,16 +721,16 @@ void HandleHierarchyListSelectionChange()
 
 
 void HandleDragDropTest(StringHash eventType, VariantMap& eventData)
 void HandleDragDropTest(StringHash eventType, VariantMap& eventData)
 {
 {
-    UIElement@ source = eventData["Source"].GetUIElement();
-    UIElement@ target = eventData["Target"].GetUIElement();
+    UIElement@ source = eventData["Source"].GetPtr();
+    UIElement@ target = eventData["Target"].GetPtr();
     int itemType;
     int itemType;
     eventData["Accept"] = TestDragDrop(source, target, itemType);
     eventData["Accept"] = TestDragDrop(source, target, itemType);
 }
 }
 
 
 void HandleDragDropFinish(StringHash eventType, VariantMap& eventData)
 void HandleDragDropFinish(StringHash eventType, VariantMap& eventData)
 {
 {
-    UIElement@ source = eventData["Source"].GetUIElement();
-    UIElement@ target = eventData["Target"].GetUIElement();
+    UIElement@ source = eventData["Source"].GetPtr();
+    UIElement@ target = eventData["Target"].GetPtr();
     int itemType = ITEM_NONE;
     int itemType = ITEM_NONE;
     bool accept = TestDragDrop(source, target, itemType);
     bool accept = TestDragDrop(source, target, itemType);
     eventData["Accept"] = accept;
     eventData["Accept"] = accept;
@@ -977,7 +977,7 @@ void HandleNodeAdded(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
     if (suppressSceneChanges)
         return;
         return;
 
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     if (showTemporaryObject || !node.temporary)
     if (showTemporaryObject || !node.temporary)
         UpdateHierarchyItem(node);
         UpdateHierarchyItem(node);
 }
 }
@@ -987,7 +987,7 @@ void HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
     if (suppressSceneChanges)
         return;
         return;
 
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     uint index = GetListIndex(node);
     uint index = GetListIndex(node);
     UpdateHierarchyItem(index, null, null);
     UpdateHierarchyItem(index, null, null);
 }
 }
@@ -998,8 +998,8 @@ void HandleComponentAdded(StringHash eventType, VariantMap& eventData)
         return;
         return;
 
 
     // Insert the newly added component at last component position but before the first child node position of the parent node
     // Insert the newly added component at last component position but before the first child node position of the parent node
-    Node@ node = eventData["Node"].GetNode();
-    Component@ component = eventData["Component"].GetComponent();
+    Node@ node = eventData["Node"].GetPtr();
+    Component@ component = eventData["Component"].GetPtr();
     if (showTemporaryObject || !component.temporary)
     if (showTemporaryObject || !component.temporary)
     {
     {
         uint nodeIndex = GetListIndex(node);
         uint nodeIndex = GetListIndex(node);
@@ -1016,7 +1016,7 @@ void HandleComponentRemoved(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
     if (suppressSceneChanges)
         return;
         return;
 
 
-    Component@ component = eventData["Component"].GetComponent();
+    Component@ component = eventData["Component"].GetPtr();
     uint index = GetComponentListIndex(component);
     uint index = GetComponentListIndex(component);
     if (index != NO_ITEM)
     if (index != NO_ITEM)
         hierarchyList.RemoveItem(index);
         hierarchyList.RemoveItem(index);
@@ -1027,7 +1027,7 @@ void HandleNodeNameChanged(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
     if (suppressSceneChanges)
         return;
         return;
 
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(node), node.enabled, GetNodeTitle(node));
     UpdateHierarchyItemText(GetListIndex(node), node.enabled, GetNodeTitle(node));
 }
 }
 
 
@@ -1036,7 +1036,7 @@ void HandleNodeEnabledChanged(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
     if (suppressSceneChanges)
         return;
         return;
 
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(node), node.enabled);
     UpdateHierarchyItemText(GetListIndex(node), node.enabled);
     attributesDirty = true;
     attributesDirty = true;
 }
 }
@@ -1046,7 +1046,7 @@ void HandleComponentEnabledChanged(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
     if (suppressSceneChanges)
         return;
         return;
 
 
-    Component@ component = eventData["Component"].GetComponent();
+    Component@ component = eventData["Component"].GetPtr();
     UpdateHierarchyItemText(GetComponentListIndex(component), component.enabledEffective);
     UpdateHierarchyItemText(GetComponentListIndex(component), component.enabledEffective);
     attributesDirty = true;
     attributesDirty = true;
 }
 }
@@ -1056,7 +1056,7 @@ void HandleUIElementAdded(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
     if (suppressUIElementChanges)
         return;
         return;
 
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     if ((showInternalUIElement || !element.internal) && (showTemporaryObject || !element.temporary))
     if ((showInternalUIElement || !element.internal) && (showTemporaryObject || !element.temporary))
         UpdateHierarchyItem(element);
         UpdateHierarchyItem(element);
 }
 }
@@ -1066,7 +1066,7 @@ void HandleUIElementRemoved(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
     if (suppressUIElementChanges)
         return;
         return;
 
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     UpdateHierarchyItem(GetListIndex(element), null, null);
     UpdateHierarchyItem(GetListIndex(element), null, null);
 }
 }
 
 
@@ -1075,7 +1075,7 @@ void HandleElementNameChanged(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
     if (suppressUIElementChanges)
         return;
         return;
 
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(element), element.visible, GetUIElementTitle(element));
     UpdateHierarchyItemText(GetListIndex(element), element.visible, GetUIElementTitle(element));
 }
 }
 
 
@@ -1084,7 +1084,7 @@ void HandleElementVisibilityChanged(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
     if (suppressUIElementChanges)
         return;
         return;
 
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(element), element.visible);
     UpdateHierarchyItemText(GetListIndex(element), element.visible);
 }
 }
 
 
@@ -1094,7 +1094,7 @@ void HandleElementAttributeChanged(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges || inEditAttribute)
     if (suppressUIElementChanges || inEditAttribute)
         return;
         return;
 
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     for (uint i = 0; i < editUIElements.length; ++i)
     for (uint i = 0; i < editUIElements.length; ++i)
     {
     {
         if (editUIElements[i] is element)
         if (editUIElements[i] is element)

+ 4 - 4
Bin/Data/Scripts/Editor/EditorInspectorWindow.as

@@ -531,7 +531,7 @@ void HandleResetToDefault(StringHash eventType, VariantMap& eventData)
 {
 {
     ui.cursor.shape = CS_BUSY;
     ui.cursor.shape = CS_BUSY;
 
 
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     Array<Serializable@>@ serializables = GetAttributeEditorTargets(button);
     Array<Serializable@>@ serializables = GetAttributeEditorTargets(button);
     if (serializables.empty)
     if (serializables.empty)
         return;
         return;
@@ -668,14 +668,14 @@ void DeleteUIElementVariable(StringHash eventType, VariantMap& eventData)
 
 
 String ExtractVariableName(VariantMap& eventData)
 String ExtractVariableName(VariantMap& eventData)
 {
 {
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     LineEdit@ nameEdit = element.parent.GetChild("VarNameEdit");
     LineEdit@ nameEdit = element.parent.GetChild("VarNameEdit");
     return nameEdit.text.Trimmed();
     return nameEdit.text.Trimmed();
 }
 }
 
 
 Variant ExtractVariantType(VariantMap& eventData)
 Variant ExtractVariantType(VariantMap& eventData)
 {
 {
-    DropDownList@ dropDown = eventData["Element"].GetUIElement();
+    DropDownList@ dropDown = eventData["Element"].GetPtr();
     switch (dropDown.selection)
     switch (dropDown.selection)
     {
     {
     case 0:
     case 0:
@@ -741,7 +741,7 @@ void HandleStyleItemSelected(StringHash eventType, VariantMap& eventData)
 
 
     ui.cursor.shape = CS_BUSY;
     ui.cursor.shape = CS_BUSY;
 
 
-    DropDownList@ styleList = eventData["Element"].GetUIElement();
+    DropDownList@ styleList = eventData["Element"].GetPtr();
     Text@ text = cast<Text>(styleList.selectedItem);
     Text@ text = cast<Text>(styleList.selectedItem);
     if (text is null)
     if (text is null)
         return;
         return;

+ 13 - 13
Bin/Data/Scripts/Editor/EditorMaterial.as

@@ -339,7 +339,7 @@ void RotateMaterialPreview(StringHash eventType, VariantMap& eventData)
 
 
 void EditMaterialName(StringHash eventType, VariantMap& eventData)
 void EditMaterialName(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ nameEdit = eventData["Element"].GetUIElement();
+    LineEdit@ nameEdit = eventData["Element"].GetPtr();
     String newMaterialName = nameEdit.text.Trimmed();
     String newMaterialName = nameEdit.text.Trimmed();
     if (!newMaterialName.empty)
     if (!newMaterialName.empty)
     {
     {
@@ -467,7 +467,7 @@ void EditShaderParameter(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
     if (editMaterial is null)
         return;
         return;
 
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     uint coordinate = attrEdit.vars["Coordinate"].GetUInt();
     uint coordinate = attrEdit.vars["Coordinate"].GetUInt();
 
 
     String name = attrEdit.vars["Name"].GetString();
     String name = attrEdit.vars["Name"].GetString();
@@ -501,7 +501,7 @@ void CreateShaderParameter(StringHash eventType, VariantMap& eventData)
     if (newName.empty)
     if (newName.empty)
         return;
         return;
 
 
-    DropDownList@ dropDown = eventData["Element"].GetUIElement();
+    DropDownList@ dropDown = eventData["Element"].GetPtr();
     Variant newValue;
     Variant newValue;
 
 
     switch (dropDown.selection)
     switch (dropDown.selection)
@@ -549,7 +549,7 @@ void PickMaterialTexture(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
     if (editMaterial is null)
         return;
         return;
 
 
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     resourcePickIndex = button.vars["Index"].GetUInt();
     resourcePickIndex = button.vars["Index"].GetUInt();
 
 
     @resourcePicker = GetResourcePicker(ShortStringHash("Texture2D"));
     @resourcePicker = GetResourcePicker(ShortStringHash("Texture2D"));
@@ -594,7 +594,7 @@ void EditMaterialTexture(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
     if (editMaterial is null)
         return;
         return;
 
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     String textureName = attrEdit.text.Trimmed();
     String textureName = attrEdit.text.Trimmed();
     uint index = attrEdit.vars["Index"].GetUInt();
     uint index = attrEdit.vars["Index"].GetUInt();
     
     
@@ -640,7 +640,7 @@ void PickMaterialTechnique(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
     if (editMaterial is null)
         return;
         return;
 
 
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     resourcePickIndex = button.vars["Index"].GetUInt();
     resourcePickIndex = button.vars["Index"].GetUInt();
 
 
     @resourcePicker = GetResourcePicker(ShortStringHash("Technique"));
     @resourcePicker = GetResourcePicker(ShortStringHash("Technique"));
@@ -686,7 +686,7 @@ void EditMaterialTechnique(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
     if (editMaterial is null)
         return;
         return;
 
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     String techniqueName = attrEdit.text.Trimmed();
     String techniqueName = attrEdit.text.Trimmed();
     uint index = attrEdit.vars["Index"].GetUInt();
     uint index = attrEdit.vars["Index"].GetUInt();
 
 
@@ -707,7 +707,7 @@ void EditTechniqueQuality(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
     if (editMaterial is null)
         return;
         return;
 
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     uint newQualityLevel = attrEdit.text.ToUInt();
     uint newQualityLevel = attrEdit.text.ToUInt();
     uint index = attrEdit.vars["Index"].GetUInt();
     uint index = attrEdit.vars["Index"].GetUInt();
 
 
@@ -722,7 +722,7 @@ void EditTechniqueLodDistance(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
     if (editMaterial is null)
         return;
         return;
 
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     float newLodDistance = attrEdit.text.ToFloat();
     float newLodDistance = attrEdit.text.ToFloat();
     uint index = attrEdit.vars["Index"].GetUInt();
     uint index = attrEdit.vars["Index"].GetUInt();
 
 
@@ -751,7 +751,7 @@ void EditConstantBias(StringHash eventType, VariantMap& eventData)
         
         
     BeginMaterialEdit();
     BeginMaterialEdit();
  
  
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     BiasParameters bias = editMaterial.depthBias;
     BiasParameters bias = editMaterial.depthBias;
     bias.constantBias = attrEdit.text.ToFloat();
     bias.constantBias = attrEdit.text.ToFloat();
     editMaterial.depthBias = bias;
     editMaterial.depthBias = bias;
@@ -766,7 +766,7 @@ void EditSlopeBias(StringHash eventType, VariantMap& eventData)
         
         
     BeginMaterialEdit();
     BeginMaterialEdit();
  
  
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     BiasParameters bias = editMaterial.depthBias;
     BiasParameters bias = editMaterial.depthBias;
     bias.slopeScaledBias = attrEdit.text.ToFloat();
     bias.slopeScaledBias = attrEdit.text.ToFloat();
     editMaterial.depthBias = bias;
     editMaterial.depthBias = bias;
@@ -781,7 +781,7 @@ void EditCullMode(StringHash eventType, VariantMap& eventData)
         
         
     BeginMaterialEdit();
     BeginMaterialEdit();
     
     
-    DropDownList@ attrEdit = eventData["Element"].GetUIElement();
+    DropDownList@ attrEdit = eventData["Element"].GetPtr();
     editMaterial.cullMode = CullMode(attrEdit.selection);
     editMaterial.cullMode = CullMode(attrEdit.selection);
 
 
     EndMaterialEdit();
     EndMaterialEdit();
@@ -794,7 +794,7 @@ void EditShadowCullMode(StringHash eventType, VariantMap& eventData)
         
         
     BeginMaterialEdit();
     BeginMaterialEdit();
     
     
-    DropDownList@ attrEdit = eventData["Element"].GetUIElement();
+    DropDownList@ attrEdit = eventData["Element"].GetPtr();
     editMaterial.shadowCullMode = CullMode(attrEdit.selection);
     editMaterial.shadowCullMode = CullMode(attrEdit.selection);
 
 
     EndMaterialEdit();
     EndMaterialEdit();

+ 21 - 21
Bin/Data/Scripts/Editor/EditorPreferences.as

@@ -216,7 +216,7 @@ void HideEditorPreferencesDialog()
 
 
 void EditUIMinOpacity(StringHash eventType, VariantMap& eventData)
 void EditUIMinOpacity(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     uiMinOpacity = edit.text.ToFloat();
     uiMinOpacity = edit.text.ToFloat();
     edit.text = String(uiMinOpacity);
     edit.text = String(uiMinOpacity);
     FadeUI();
     FadeUI();
@@ -225,7 +225,7 @@ void EditUIMinOpacity(StringHash eventType, VariantMap& eventData)
 
 
 void EditUIMaxOpacity(StringHash eventType, VariantMap& eventData)
 void EditUIMaxOpacity(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     uiMaxOpacity = edit.text.ToFloat();
     uiMaxOpacity = edit.text.ToFloat();
     edit.text = String(uiMaxOpacity);
     edit.text = String(uiMaxOpacity);
     FadeUI();
     FadeUI();
@@ -234,20 +234,20 @@ void EditUIMaxOpacity(StringHash eventType, VariantMap& eventData)
 
 
 void ToggleShowInternalUIElement(StringHash eventType, VariantMap& eventData)
 void ToggleShowInternalUIElement(StringHash eventType, VariantMap& eventData)
 {
 {
-    showInternalUIElement = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    showInternalUIElement = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateHierarchyItem(editorUIElement, true);
     UpdateHierarchyItem(editorUIElement, true);
 }
 }
 
 
 void ToggleShowTemporaryObject(StringHash eventType, VariantMap& eventData)
 void ToggleShowTemporaryObject(StringHash eventType, VariantMap& eventData)
 {
 {
-    showTemporaryObject = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    showTemporaryObject = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateHierarchyItem(editorScene, true);
     UpdateHierarchyItem(editorScene, true);
     UpdateHierarchyItem(editorUIElement, true);
     UpdateHierarchyItem(editorUIElement, true);
 }
 }
 
 
 void EditNodeTextColor(StringHash eventType, VariantMap& eventData)
 void EditNodeTextColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     nodeTextColor = Color(nodeItemTextColorEditR.text.ToFloat(), nodeItemTextColorEditG.text.ToFloat(), nodeItemTextColorEditB.text.ToFloat());
     nodeTextColor = Color(nodeItemTextColorEditR.text.ToFloat(), nodeItemTextColorEditG.text.ToFloat(), nodeItemTextColorEditB.text.ToFloat());
     if (edit.name == "NodeItemTextColor.r")
     if (edit.name == "NodeItemTextColor.r")
         edit.text = String(normalTextColor.r);
         edit.text = String(normalTextColor.r);
@@ -260,7 +260,7 @@ void EditNodeTextColor(StringHash eventType, VariantMap& eventData)
 
 
 void EditComponentTextColor(StringHash eventType, VariantMap& eventData)
 void EditComponentTextColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     componentTextColor = Color(componentItemTextColorEditR.text.ToFloat(), componentItemTextColorEditG.text.ToFloat(), componentItemTextColorEditB.text.ToFloat());
     componentTextColor = Color(componentItemTextColorEditR.text.ToFloat(), componentItemTextColorEditG.text.ToFloat(), componentItemTextColorEditB.text.ToFloat());
     if (edit.name == "ComponentItemTextColor.r")
     if (edit.name == "ComponentItemTextColor.r")
         edit.text = String(normalTextColor.r);
         edit.text = String(normalTextColor.r);
@@ -273,13 +273,13 @@ void EditComponentTextColor(StringHash eventType, VariantMap& eventData)
 
 
 void ToggleShowNonEditableAttribute(StringHash eventType, VariantMap& eventData)
 void ToggleShowNonEditableAttribute(StringHash eventType, VariantMap& eventData)
 {
 {
-    showNonEditableAttribute = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    showNonEditableAttribute = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateAttributeInspector(true);
     UpdateAttributeInspector(true);
 }
 }
 
 
 void EditOriginalAttributeTextColor(StringHash eventType, VariantMap& eventData)
 void EditOriginalAttributeTextColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     normalTextColor = Color(originalAttributeTextColorEditR.text.ToFloat(), originalAttributeTextColorEditG.text.ToFloat(), originalAttributeTextColorEditB.text.ToFloat());
     normalTextColor = Color(originalAttributeTextColorEditR.text.ToFloat(), originalAttributeTextColorEditG.text.ToFloat(), originalAttributeTextColorEditB.text.ToFloat());
     if (edit.name == "OriginalAttributeTextColor.r")
     if (edit.name == "OriginalAttributeTextColor.r")
         edit.text = String(normalTextColor.r);
         edit.text = String(normalTextColor.r);
@@ -292,7 +292,7 @@ void EditOriginalAttributeTextColor(StringHash eventType, VariantMap& eventData)
 
 
 void EditModifiedAttributeTextColor(StringHash eventType, VariantMap& eventData)
 void EditModifiedAttributeTextColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     modifiedTextColor = Color(modifiedAttributeTextColorEditR.text.ToFloat(), modifiedAttributeTextColorEditG.text.ToFloat(), modifiedAttributeTextColorEditB.text.ToFloat());
     modifiedTextColor = Color(modifiedAttributeTextColorEditR.text.ToFloat(), modifiedAttributeTextColorEditG.text.ToFloat(), modifiedAttributeTextColorEditB.text.ToFloat());
     if (edit.name == "ModifiedAttributeTextColor.r")
     if (edit.name == "ModifiedAttributeTextColor.r")
         edit.text = String(modifiedTextColor.r);
         edit.text = String(modifiedTextColor.r);
@@ -305,7 +305,7 @@ void EditModifiedAttributeTextColor(StringHash eventType, VariantMap& eventData)
 
 
 void EditNonEditableAttributeTextColor(StringHash eventType, VariantMap& eventData)
 void EditNonEditableAttributeTextColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     nonEditableTextColor = Color(nonEditableAttributeTextColorEditR.text.ToFloat(), nonEditableAttributeTextColorEditG.text.ToFloat(), nonEditableAttributeTextColorEditB.text.ToFloat());
     nonEditableTextColor = Color(nonEditableAttributeTextColorEditR.text.ToFloat(), nonEditableAttributeTextColorEditG.text.ToFloat(), nonEditableAttributeTextColorEditB.text.ToFloat());
     if (edit.name == "NonEditableAttributeTextColor.r")
     if (edit.name == "NonEditableAttributeTextColor.r")
         edit.text = String(nonEditableTextColor.r);
         edit.text = String(nonEditableTextColor.r);
@@ -318,7 +318,7 @@ void EditNonEditableAttributeTextColor(StringHash eventType, VariantMap& eventDa
 
 
 void EditDefaultZoneAmbientColor(StringHash eventType, VariantMap& eventData)
 void EditDefaultZoneAmbientColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     renderer.defaultZone.ambientColor = Color(defaultZoneAmbientColorEditR.text.ToFloat(), defaultZoneAmbientColorEditG.text.ToFloat(), defaultZoneAmbientColorEditB.text.ToFloat());
     renderer.defaultZone.ambientColor = Color(defaultZoneAmbientColorEditR.text.ToFloat(), defaultZoneAmbientColorEditG.text.ToFloat(), defaultZoneAmbientColorEditB.text.ToFloat());
     if (edit.name == "DefaultZoneAmbientColor.r")
     if (edit.name == "DefaultZoneAmbientColor.r")
         edit.text = String(renderer.defaultZone.ambientColor.r);
         edit.text = String(renderer.defaultZone.ambientColor.r);
@@ -330,7 +330,7 @@ void EditDefaultZoneAmbientColor(StringHash eventType, VariantMap& eventData)
 
 
 void EditDefaultZoneFogColor(StringHash eventType, VariantMap& eventData)
 void EditDefaultZoneFogColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     renderer.defaultZone.fogColor = Color(defaultZoneFogColorEditR.text.ToFloat(), defaultZoneFogColorEditG.text.ToFloat(), defaultZoneFogColorEditB.text.ToFloat());
     renderer.defaultZone.fogColor = Color(defaultZoneFogColorEditR.text.ToFloat(), defaultZoneFogColorEditG.text.ToFloat(), defaultZoneFogColorEditB.text.ToFloat());
     if (edit.name == "DefaultZoneFogColor.r")
     if (edit.name == "DefaultZoneFogColor.r")
         edit.text = String(renderer.defaultZone.fogColor.r);
         edit.text = String(renderer.defaultZone.fogColor.r);
@@ -342,33 +342,33 @@ void EditDefaultZoneFogColor(StringHash eventType, VariantMap& eventData)
 
 
 void EditDefaultZoneFogStart(StringHash eventType, VariantMap& eventData)
 void EditDefaultZoneFogStart(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     renderer.defaultZone.fogStart = edit.text.ToFloat();
     renderer.defaultZone.fogStart = edit.text.ToFloat();
     edit.text = String(renderer.defaultZone.fogStart);
     edit.text = String(renderer.defaultZone.fogStart);
 }
 }
 
 
 void EditDefaultZoneFogEnd(StringHash eventType, VariantMap& eventData)
 void EditDefaultZoneFogEnd(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     renderer.defaultZone.fogEnd = edit.text.ToFloat();
     renderer.defaultZone.fogEnd = edit.text.ToFloat();
     edit.text = String(renderer.defaultZone.fogEnd);
     edit.text = String(renderer.defaultZone.fogEnd);
 }
 }
 
 
 void ToggleShowGrid(StringHash eventType, VariantMap& eventData)
 void ToggleShowGrid(StringHash eventType, VariantMap& eventData)
 {
 {
-    showGrid = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    showGrid = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateGrid(false);
     UpdateGrid(false);
 }
 }
 
 
 void ToggleGrid2DMode(StringHash eventType, VariantMap& eventData)
 void ToggleGrid2DMode(StringHash eventType, VariantMap& eventData)
 {
 {
-    grid2DMode = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    grid2DMode = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateGrid();
     UpdateGrid();
 }
 }
 
 
 void EditGridSize(StringHash eventType, VariantMap& eventData)
 void EditGridSize(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridSize = edit.text.ToInt();
     gridSize = edit.text.ToInt();
     edit.text = String(gridSize);
     edit.text = String(gridSize);
     UpdateGrid();
     UpdateGrid();
@@ -376,7 +376,7 @@ void EditGridSize(StringHash eventType, VariantMap& eventData)
 
 
 void EditGridSubdivisions(StringHash eventType, VariantMap& eventData)
 void EditGridSubdivisions(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridSubdivisions = edit.text.ToInt();
     gridSubdivisions = edit.text.ToInt();
     edit.text = String(gridSubdivisions);
     edit.text = String(gridSubdivisions);
     UpdateGrid();
     UpdateGrid();
@@ -384,7 +384,7 @@ void EditGridSubdivisions(StringHash eventType, VariantMap& eventData)
 
 
 void EditGridScale(StringHash eventType, VariantMap& eventData)
 void EditGridScale(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridScale = edit.text.ToFloat();
     gridScale = edit.text.ToFloat();
     edit.text = String(gridScale);
     edit.text = String(gridScale);
     UpdateGrid(false);
     UpdateGrid(false);
@@ -392,7 +392,7 @@ void EditGridScale(StringHash eventType, VariantMap& eventData)
 
 
 void EditGridColor(StringHash eventType, VariantMap& eventData)
 void EditGridColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridColor = Color(gridColorEditR.text.ToFloat(), gridColorEditG.text.ToFloat(), gridColorEditB.text.ToFloat());
     gridColor = Color(gridColorEditR.text.ToFloat(), gridColorEditG.text.ToFloat(), gridColorEditB.text.ToFloat());
     if (edit.name == "GridColor.r")
     if (edit.name == "GridColor.r")
         edit.text = String(gridColor.r);
         edit.text = String(gridColor.r);
@@ -405,7 +405,7 @@ void EditGridColor(StringHash eventType, VariantMap& eventData)
 
 
 void EditGridSubdivisionColor(StringHash eventType, VariantMap& eventData)
 void EditGridSubdivisionColor(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridSubdivisionColor = Color(gridSubdivisionColorEditR.text.ToFloat(), gridSubdivisionColorEditG.text.ToFloat(), gridSubdivisionColorEditB.text.ToFloat());
     gridSubdivisionColor = Color(gridSubdivisionColorEditR.text.ToFloat(), gridSubdivisionColorEditG.text.ToFloat(), gridSubdivisionColorEditB.text.ToFloat());
     if (edit.name == "GridSubdivisionColor.r")
     if (edit.name == "GridSubdivisionColor.r")
         edit.text = String(gridSubdivisionColor.r);
         edit.text = String(gridSubdivisionColor.r);

+ 24 - 24
Bin/Data/Scripts/Editor/EditorSettings.as

@@ -147,7 +147,7 @@ void HideEditorSettingsDialog()
 
 
 void EditCameraNearClip(StringHash eventType, VariantMap& eventData)
 void EditCameraNearClip(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     viewNearClip = edit.text.ToFloat();
     viewNearClip = edit.text.ToFloat();
     UpdateViewParameters();
     UpdateViewParameters();
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
@@ -156,7 +156,7 @@ void EditCameraNearClip(StringHash eventType, VariantMap& eventData)
 
 
 void EditCameraFarClip(StringHash eventType, VariantMap& eventData)
 void EditCameraFarClip(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     viewFarClip = edit.text.ToFloat();
     viewFarClip = edit.text.ToFloat();
     UpdateViewParameters();
     UpdateViewParameters();
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
@@ -165,7 +165,7 @@ void EditCameraFarClip(StringHash eventType, VariantMap& eventData)
 
 
 void EditCameraFOV(StringHash eventType, VariantMap& eventData)
 void EditCameraFOV(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     viewFov = edit.text.ToFloat();
     viewFov = edit.text.ToFloat();
     UpdateViewParameters();
     UpdateViewParameters();
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
@@ -174,7 +174,7 @@ void EditCameraFOV(StringHash eventType, VariantMap& eventData)
 
 
 void EditCameraSpeed(StringHash eventType, VariantMap& eventData)
 void EditCameraSpeed(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     cameraBaseSpeed = Max(edit.text.ToFloat(), 1.0);
     cameraBaseSpeed = Max(edit.text.ToFloat(), 1.0);
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
         edit.text = String(cameraBaseSpeed);
         edit.text = String(cameraBaseSpeed);
@@ -182,13 +182,13 @@ void EditCameraSpeed(StringHash eventType, VariantMap& eventData)
 
 
 void EditLimitRotation(StringHash eventType, VariantMap& eventData)
 void EditLimitRotation(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     limitRotation = edit.checked;
     limitRotation = edit.checked;
 }
 }
 
 
 void EditNewNodeDistance(StringHash eventType, VariantMap& eventData)
 void EditNewNodeDistance(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     newNodeDistance = Max(edit.text.ToFloat(), 0.0);
     newNodeDistance = Max(edit.text.ToFloat(), 0.0);
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
         edit.text = String(newNodeDistance);
         edit.text = String(newNodeDistance);
@@ -196,7 +196,7 @@ void EditNewNodeDistance(StringHash eventType, VariantMap& eventData)
 
 
 void EditMoveStep(StringHash eventType, VariantMap& eventData)
 void EditMoveStep(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     moveStep = Max(edit.text.ToFloat(), 0.0);
     moveStep = Max(edit.text.ToFloat(), 0.0);
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
         edit.text = String(moveStep);
         edit.text = String(moveStep);
@@ -204,7 +204,7 @@ void EditMoveStep(StringHash eventType, VariantMap& eventData)
 
 
 void EditRotateStep(StringHash eventType, VariantMap& eventData)
 void EditRotateStep(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     rotateStep = Max(edit.text.ToFloat(), 0.0);
     rotateStep = Max(edit.text.ToFloat(), 0.0);
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
         edit.text = String(rotateStep);
         edit.text = String(rotateStep);
@@ -212,7 +212,7 @@ void EditRotateStep(StringHash eventType, VariantMap& eventData)
 
 
 void EditScaleStep(StringHash eventType, VariantMap& eventData)
 void EditScaleStep(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     scaleStep = Max(edit.text.ToFloat(), 0.0);
     scaleStep = Max(edit.text.ToFloat(), 0.0);
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
         edit.text = String(scaleStep);
         edit.text = String(scaleStep);
@@ -220,76 +220,76 @@ void EditScaleStep(StringHash eventType, VariantMap& eventData)
 
 
 void EditMoveSnap(StringHash eventType, VariantMap& eventData)
 void EditMoveSnap(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     moveSnap = edit.checked;
     moveSnap = edit.checked;
     toolBarDirty = true;
     toolBarDirty = true;
 }
 }
 
 
 void EditRotateSnap(StringHash eventType, VariantMap& eventData)
 void EditRotateSnap(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     rotateSnap = edit.checked;
     rotateSnap = edit.checked;
     toolBarDirty = true;
     toolBarDirty = true;
 }
 }
 
 
 void EditScaleSnap(StringHash eventType, VariantMap& eventData)
 void EditScaleSnap(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     scaleSnap = edit.checked;
     scaleSnap = edit.checked;
     toolBarDirty = true;
     toolBarDirty = true;
 }
 }
 
 
 void EditRememberResourcePath(StringHash eventType, VariantMap& eventData)
 void EditRememberResourcePath(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     rememberResourcePath = edit.checked;
     rememberResourcePath = edit.checked;
 }
 }
 
 
 void EditApplyMaterialList(StringHash eventType, VariantMap& eventData)
 void EditApplyMaterialList(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     applyMaterialList = edit.checked;
     applyMaterialList = edit.checked;
 }
 }
 
 
 void EditImportOptions(StringHash eventType, VariantMap& eventData)
 void EditImportOptions(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     importOptions = edit.text.Trimmed();
     importOptions = edit.text.Trimmed();
 }
 }
 
 
 void EditPickMode(StringHash eventType, VariantMap& eventData)
 void EditPickMode(StringHash eventType, VariantMap& eventData)
 {
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     pickMode = edit.selection;
     pickMode = edit.selection;
 }
 }
 
 
 void EditTextureQuality(StringHash eventType, VariantMap& eventData)
 void EditTextureQuality(StringHash eventType, VariantMap& eventData)
 {
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     renderer.textureQuality = edit.selection;
     renderer.textureQuality = edit.selection;
 }
 }
 
 
 void EditMaterialQuality(StringHash eventType, VariantMap& eventData)
 void EditMaterialQuality(StringHash eventType, VariantMap& eventData)
 {
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     renderer.materialQuality = edit.selection;
     renderer.materialQuality = edit.selection;
 }
 }
 
 
 void EditShadowResolution(StringHash eventType, VariantMap& eventData)
 void EditShadowResolution(StringHash eventType, VariantMap& eventData)
 {
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     SetShadowResolution(edit.selection);
     SetShadowResolution(edit.selection);
 }
 }
 
 
 void EditShadowQuality(StringHash eventType, VariantMap& eventData)
 void EditShadowQuality(StringHash eventType, VariantMap& eventData)
 {
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     renderer.shadowQuality = edit.selection;
     renderer.shadowQuality = edit.selection;
 }
 }
 
 
 void EditMaxOccluderTriangles(StringHash eventType, VariantMap& eventData)
 void EditMaxOccluderTriangles(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     renderer.maxOccluderTriangles = edit.text.ToInt();
     renderer.maxOccluderTriangles = edit.text.ToInt();
     if (eventType == StringHash("TextFinished"))
     if (eventType == StringHash("TextFinished"))
         edit.text = String(renderer.maxOccluderTriangles);
         edit.text = String(renderer.maxOccluderTriangles);
@@ -297,18 +297,18 @@ void EditMaxOccluderTriangles(StringHash eventType, VariantMap& eventData)
 
 
 void EditSpecularLighting(StringHash eventType, VariantMap& eventData)
 void EditSpecularLighting(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     renderer.specularLighting = edit.checked;
     renderer.specularLighting = edit.checked;
 }
 }
 
 
 void EditDynamicInstancing(StringHash eventType, VariantMap& eventData)
 void EditDynamicInstancing(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     renderer.dynamicInstancing = edit.checked;
     renderer.dynamicInstancing = edit.checked;
 }
 }
 
 
 void EditFrameLimiter(StringHash eventType, VariantMap& eventData)
 void EditFrameLimiter(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     engine.maxFps = edit.checked ? 200 : 0;
     engine.maxFps = edit.checked ? 200 : 0;
 }
 }

+ 22 - 22
Bin/Data/Scripts/Editor/EditorToolBar.as

@@ -174,7 +174,7 @@ UIElement@ CreateToolTip(UIElement@ parent, const String&in title, const IntVect
 
 
 void ToolBarRunUpdatePlay(StringHash eventType, VariantMap& eventData)
 void ToolBarRunUpdatePlay(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         StartSceneUpdate();
         StartSceneUpdate();
     toolBarDirty = true;
     toolBarDirty = true;
@@ -182,7 +182,7 @@ void ToolBarRunUpdatePlay(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarRunUpdatePause(StringHash eventType, VariantMap& eventData)
 void ToolBarRunUpdatePause(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         StopSceneUpdate();
         StopSceneUpdate();
     toolBarDirty = true;
     toolBarDirty = true;
@@ -190,7 +190,7 @@ void ToolBarRunUpdatePause(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarEditModeMove(StringHash eventType, VariantMap& eventData)
 void ToolBarEditModeMove(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         editMode = EDIT_MOVE;
         editMode = EDIT_MOVE;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -198,7 +198,7 @@ void ToolBarEditModeMove(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarEditModeRotate(StringHash eventType, VariantMap& eventData)
 void ToolBarEditModeRotate(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         editMode = EDIT_ROTATE;
         editMode = EDIT_ROTATE;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -206,7 +206,7 @@ void ToolBarEditModeRotate(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarEditModeScale(StringHash eventType, VariantMap& eventData)
 void ToolBarEditModeScale(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         editMode = EDIT_SCALE;
         editMode = EDIT_SCALE;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -214,7 +214,7 @@ void ToolBarEditModeScale(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarEditModeSelect(StringHash eventType, VariantMap& eventData)
 void ToolBarEditModeSelect(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         editMode = EDIT_SELECT;
         editMode = EDIT_SELECT;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -222,7 +222,7 @@ void ToolBarEditModeSelect(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarAxisModeWorld(StringHash eventType, VariantMap& eventData)
 void ToolBarAxisModeWorld(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         axisMode = AXIS_WORLD;
         axisMode = AXIS_WORLD;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -230,7 +230,7 @@ void ToolBarAxisModeWorld(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarAxisModeLocal(StringHash eventType, VariantMap& eventData)
 void ToolBarAxisModeLocal(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         axisMode = AXIS_LOCAL;
         axisMode = AXIS_LOCAL;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -238,28 +238,28 @@ void ToolBarAxisModeLocal(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarMoveSnap(StringHash eventType, VariantMap& eventData)
 void ToolBarMoveSnap(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     moveSnap = edit.checked;
     moveSnap = edit.checked;
     toolBarDirty = true;
     toolBarDirty = true;
 }
 }
 
 
 void ToolBarRotateSnap(StringHash eventType, VariantMap& eventData)
 void ToolBarRotateSnap(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     rotateSnap = edit.checked;
     rotateSnap = edit.checked;
     toolBarDirty = true;
     toolBarDirty = true;
 }
 }
 
 
 void ToolBarScaleSnap(StringHash eventType, VariantMap& eventData)
 void ToolBarScaleSnap(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     scaleSnap = edit.checked;
     scaleSnap = edit.checked;
     toolBarDirty = true;
     toolBarDirty = true;
 }
 }
 
 
 void ToolBarSnapScaleModeHalf(StringHash eventType, VariantMap& eventData)
 void ToolBarSnapScaleModeHalf(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
     {
     {
         snapScaleMode = SNAP_SCALE_HALF;
         snapScaleMode = SNAP_SCALE_HALF;
@@ -275,7 +275,7 @@ void ToolBarSnapScaleModeHalf(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarSnapScaleModeQuarter(StringHash eventType, VariantMap& eventData)
 void ToolBarSnapScaleModeQuarter(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
     {
     {
         snapScaleMode = SNAP_SCALE_QUARTER;
         snapScaleMode = SNAP_SCALE_QUARTER;
@@ -291,7 +291,7 @@ void ToolBarSnapScaleModeQuarter(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarPickModeGeometries(StringHash eventType, VariantMap& eventData)
 void ToolBarPickModeGeometries(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         pickMode = PICK_GEOMETRIES;
         pickMode = PICK_GEOMETRIES;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -299,7 +299,7 @@ void ToolBarPickModeGeometries(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarPickModeLights(StringHash eventType, VariantMap& eventData)
 void ToolBarPickModeLights(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         pickMode = PICK_LIGHTS;
         pickMode = PICK_LIGHTS;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -307,7 +307,7 @@ void ToolBarPickModeLights(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarPickModeZones(StringHash eventType, VariantMap& eventData)
 void ToolBarPickModeZones(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         pickMode = PICK_ZONES;
         pickMode = PICK_ZONES;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -315,7 +315,7 @@ void ToolBarPickModeZones(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarPickModeRigidBodies(StringHash eventType, VariantMap& eventData)
 void ToolBarPickModeRigidBodies(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         pickMode = PICK_RIGIDBODIES;
         pickMode = PICK_RIGIDBODIES;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -323,7 +323,7 @@ void ToolBarPickModeRigidBodies(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarPickModeUIElements(StringHash eventType, VariantMap& eventData)
 void ToolBarPickModeUIElements(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
         pickMode = PICK_UI_ELEMENTS;
         pickMode = PICK_UI_ELEMENTS;
     toolBarDirty = true;
     toolBarDirty = true;
@@ -331,7 +331,7 @@ void ToolBarPickModeUIElements(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarFillModePoint(StringHash eventType, VariantMap& eventData)
 void ToolBarFillModePoint(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
     {
     {
         fillMode = FILL_POINT;
         fillMode = FILL_POINT;
@@ -342,7 +342,7 @@ void ToolBarFillModePoint(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarFillModeWireFrame(StringHash eventType, VariantMap& eventData)
 void ToolBarFillModeWireFrame(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
     {
     {
         fillMode = FILL_WIREFRAME;
         fillMode = FILL_WIREFRAME;
@@ -353,7 +353,7 @@ void ToolBarFillModeWireFrame(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarFillModeSolid(StringHash eventType, VariantMap& eventData)
 void ToolBarFillModeSolid(StringHash eventType, VariantMap& eventData)
 {
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     if (edit.checked)
     {
     {
         fillMode = FILL_SOLID;
         fillMode = FILL_SOLID;
@@ -364,7 +364,7 @@ void ToolBarFillModeSolid(StringHash eventType, VariantMap& eventData)
 
 
 void ToolBarSetViewportMode(StringHash eventType, VariantMap& eventData)
 void ToolBarSetViewportMode(StringHash eventType, VariantMap& eventData)
 {
 {
-    DropDownList@ dropDown = eventData["Element"].GetUIElement();
+    DropDownList@ dropDown = eventData["Element"].GetPtr();
     UIElement@ selected = dropDown.selectedItem;
     UIElement@ selected = dropDown.selectedItem;
     dropDown.focus = false;     // Lose the focus so the RMB dragging, immediately followed after changing viewport setup, behaves as expected
     dropDown.focus = false;     // Lose the focus so the RMB dragging, immediately followed after changing viewport setup, behaves as expected
     uint mode = selected.vars[VIEW_MODE].GetUInt();
     uint mode = selected.vars[VIEW_MODE].GetUInt();

+ 3 - 3
Bin/Data/Scripts/Editor/EditorUI.as

@@ -150,7 +150,7 @@ MENU_CALLBACK@ messageBoxCallback;
 
 
 void HandleQuickSearchChange(StringHash eventType, VariantMap& eventData)
 void HandleQuickSearchChange(StringHash eventType, VariantMap& eventData)
 {
 {
-    LineEdit@ search = eventData["Element"].GetUIElement();
+    LineEdit@ search = eventData["Element"].GetPtr();
     if (search is null)
     if (search is null)
         return;
         return;
 
 
@@ -687,7 +687,7 @@ String GetActionName(const String&in name)
 
 
 void HandleMenuSelected(StringHash eventType, VariantMap& eventData)
 void HandleMenuSelected(StringHash eventType, VariantMap& eventData)
 {
 {
-    Menu@ menu = eventData["Element"].GetUIElement();
+    Menu@ menu = eventData["Element"].GetPtr();
     if (menu is null)
     if (menu is null)
         return;
         return;
 
 
@@ -972,7 +972,7 @@ void HandlePopup(Menu@ menu)
         if (menuParent is null)
         if (menuParent is null)
             break;
             break;
 
 
-        Menu@ nextMenu = menuParent.vars["Origin"].GetUIElement();
+        Menu@ nextMenu = menuParent.vars["Origin"].GetPtr();
         if (nextMenu is null)
         if (nextMenu is null)
             break;
             break;
         else
         else

+ 1 - 1
Bin/Data/Scripts/Editor/EditorView.as

@@ -412,7 +412,7 @@ void SetViewportMode(uint mode = VIEWPORT_SINGLE)
 
 
 void HandleViewportBorderDragMove(StringHash eventType, VariantMap& eventData)
 void HandleViewportBorderDragMove(StringHash eventType, VariantMap& eventData)
 {
 {
-    UIElement@ dragBorder = eventData["Element"].GetUIElement();
+    UIElement@ dragBorder = eventData["Element"].GetPtr();
     if (dragBorder is null)
     if (dragBorder is null)
         return;
         return;
 
 

+ 2 - 2
Bin/Data/Scripts/NinjaSnowWar/GameObject.as

@@ -81,8 +81,8 @@ class GameObject : ScriptObject
 
 
     void HandleNodeCollision(StringHash eventType, VariantMap& eventData)
     void HandleNodeCollision(StringHash eventType, VariantMap& eventData)
     {
     {
-        Node@ otherNode = eventData["OtherNode"].GetNode();
-        RigidBody@ otherBody = eventData["OtherBody"].GetRigidBody();
+        Node@ otherNode = eventData["OtherNode"].GetPtr();
+        RigidBody@ otherBody = eventData["OtherBody"].GetPtr();
 
 
         // If the other collision shape belongs to static geometry, perform world collision
         // If the other collision shape belongs to static geometry, perform world collision
         if (otherBody.collisionLayer == 2)
         if (otherBody.collisionLayer == 2)

+ 5 - 5
Docs/Reference.dox

@@ -610,7 +610,7 @@ function HandleUpdate(eventType, eventData)
 end
 end
 \endcode
 \endcode
 
 
-When subscribing a script object to receive an event, use the form self:SubscribeToEvent instead. The function to use as the handler is given as "ClassName:FunctionName". For example subscribing to the NodeCollision physics event, and getting the participating other scene node and the contact point VectorBuffer in the handler function:
+When subscribing a script object to receive an event, use the form self:SubscribeToEvent instead. The function to use as the handler is given as "ClassName:FunctionName". For example subscribing to the NodeCollision physics event, and getting the participating other scene node and the contact point VectorBuffer in the handler function. Note that in Lua retrieving an object pointer from a VariantMap requires the object type as the first parameter:
 
 
 \code
 \code
 CollisionDetector = ScriptObject()
 CollisionDetector = ScriptObject()
@@ -1436,8 +1436,8 @@ An example of reading collision event and contact point data in script, from Nin
 \code
 \code
 void HandleNodeCollision(StringHash eventType, VariantMap& eventData)
 void HandleNodeCollision(StringHash eventType, VariantMap& eventData)
 {
 {
-    Node@ otherNode = eventData["OtherNode"].GetNode();
-    RigidBody@ otherBody = eventData["OtherBody"].GetRigidBody();
+    Node@ otherNode = eventData["OtherNode"].GetPtr();
+    RigidBody@ otherBody = eventData["OtherBody"].GetPtr();
     VectorBuffer contacts = eventData["Contacts"].GetBuffer();
     VectorBuffer contacts = eventData["Contacts"].GetBuffer();
 
 
     while (!contacts.eof)
     while (!contacts.eof)
@@ -1571,7 +1571,7 @@ Due to the free transformability, sprites can not be reliably queried with \ref
 
 
 Classes that derive from Serializable can perform automatic serialization to binary or XML format by defining \ref AttributeInfo "attributes". Attributes are stored to the Context per class. %Scene load/save and network replication are both implemented by having the Node and Component classes derive from Serializable.
 Classes that derive from Serializable can perform automatic serialization to binary or XML format by defining \ref AttributeInfo "attributes". Attributes are stored to the Context per class. %Scene load/save and network replication are both implemented by having the Node and Component classes derive from Serializable.
 
 
-The supported attribute types are all those supported by Variant. Attributes can either define a direct memory offset into the object, or setter & getter functions. Zero-based enumerations are also supported, so that the enum values can be stored as text into XML files instead of just numbers. For editing, the attributes also have human-readable names.
+The supported attribute types are all those supported by Variant, excluding pointers. Attributes can either define a direct memory offset into the object, or setter & getter functions. Zero-based enumerations are also supported, so that the enum values can be stored as text into XML files instead of just numbers. For editing, the attributes also have human-readable names.
 
 
 To implement side effects to attributes, for example that a Node needs to dirty its world transform whenever the local transform changes, the default attribute access functions in Serializable can be overridden. See \ref Serializable::OnSetAttribute "OnSetAttribute()" and \ref Serializable::OnGetAttribute "OnGetAttribute()".
 To implement side effects to attributes, for example that a Node needs to dirty its world transform whenever the local transform changes, the default attribute access functions in Serializable can be overridden. See \ref Serializable::OnSetAttribute "OnSetAttribute()" and \ref Serializable::OnGetAttribute "OnGetAttribute()".
 
 
@@ -1690,7 +1690,7 @@ Connection* remoteSender = static_cast<Connection*>(eventData[P_CONNECTION].GetP
 
 
 %Script:
 %Script:
 \code
 \code
-Connection@ remoteSender = eventData["Connection"].GetConnection();
+Connection@ remoteSender = eventData["Connection"].GetPtr();
 \endcode
 \endcode
 
 
 \section Network_HttpRequests HTTP requests
 \section Network_HttpRequests HTTP requests

+ 2 - 2
Source/Engine/Core/Context.cpp

@@ -122,8 +122,8 @@ void Context::RemoveSubsystem(ShortStringHash objectType)
 
 
 void Context::RegisterAttribute(ShortStringHash objectType, const AttributeInfo& attr)
 void Context::RegisterAttribute(ShortStringHash objectType, const AttributeInfo& attr)
 {
 {
-    // None or Pointer types can not be supported
-    if (attr.type_ == VAR_NONE || attr.type_ == VAR_PTR)
+    // None or pointer types can not be supported
+    if (attr.type_ == VAR_NONE || attr.type_ == VAR_VOIDPTR || attr.type_ == VAR_PTR)
         return;
         return;
 
 
     attributes_[objectType].Push(attr);
     attributes_[objectType].Push(attr);

+ 36 - 9
Source/Engine/Core/Variant.cpp

@@ -48,13 +48,14 @@ static const char* typeNames[] =
     "Color",
     "Color",
     "String",
     "String",
     "Buffer",
     "Buffer",
-    "Pointer",
+    "VoidPtr",
     "ResourceRef",
     "ResourceRef",
     "ResourceRefList",
     "ResourceRefList",
     "VariantVector",
     "VariantVector",
     "VariantMap",
     "VariantMap",
     "IntRect",
     "IntRect",
     "IntVector2",
     "IntVector2",
+    "Ptr",
     0
     0
 };
 };
 
 
@@ -88,6 +89,10 @@ Variant& Variant::operator = (const Variant& rhs)
         *(reinterpret_cast<VariantMap*>(&value_)) = *(reinterpret_cast<const VariantMap*>(&rhs.value_));
         *(reinterpret_cast<VariantMap*>(&value_)) = *(reinterpret_cast<const VariantMap*>(&rhs.value_));
         break;
         break;
 
 
+    case VAR_PTR:
+        *(reinterpret_cast<WeakPtr<RefCounted>*>(&value_)) = *(reinterpret_cast<const WeakPtr<RefCounted>*>(&rhs.value_));
+        break;
+        
     default:
     default:
         value_ = rhs.value_;
         value_ = rhs.value_;
         break;
         break;
@@ -98,9 +103,11 @@ Variant& Variant::operator = (const Variant& rhs)
 
 
 bool Variant::operator == (const Variant& rhs) const
 bool Variant::operator == (const Variant& rhs) const
 {
 {
-    if (type_ != rhs.type_)
+    if (type_ == VAR_VOIDPTR || type_ == VAR_PTR)
+        return GetVoidPtr() == rhs.GetVoidPtr();
+    else if (type_ != rhs.type_)
         return false;
         return false;
-
+    
     switch (type_)
     switch (type_)
     {
     {
     case VAR_INT:
     case VAR_INT:
@@ -130,9 +137,6 @@ bool Variant::operator == (const Variant& rhs) const
     case VAR_BUFFER:
     case VAR_BUFFER:
         return *(reinterpret_cast<const PODVector<unsigned char>*>(&value_)) == *(reinterpret_cast<const PODVector<unsigned char>*>(&rhs.value_));
         return *(reinterpret_cast<const PODVector<unsigned char>*>(&value_)) == *(reinterpret_cast<const PODVector<unsigned char>*>(&rhs.value_));
 
 
-    case VAR_PTR:
-        return value_.ptr_ == rhs.value_.ptr_;
-
     case VAR_RESOURCEREF:
     case VAR_RESOURCEREF:
         return *(reinterpret_cast<const ResourceRef*>(&value_)) == *(reinterpret_cast<const ResourceRef*>(&rhs.value_));
         return *(reinterpret_cast<const ResourceRef*>(&value_)) == *(reinterpret_cast<const ResourceRef*>(&rhs.value_));
 
 
@@ -219,7 +223,8 @@ void Variant::FromString(VariantType type, const char* value)
         }
         }
         break;
         break;
 
 
-    case VAR_PTR:
+    case VAR_VOIDPTR:
+        // From string to void pointer not supported, set to null
         *this = (void*)0;
         *this = (void*)0;
         break;
         break;
 
 
@@ -259,6 +264,11 @@ void Variant::FromString(VariantType type, const char* value)
         *this = ToIntVector2(value);
         *this = ToIntVector2(value);
         break;
         break;
 
 
+    case VAR_PTR:
+        // From string to RefCounted pointer not supported, set to null
+        *this = (RefCounted*)0;
+        break;
+        
     default:
     default:
         SetType(VAR_NONE);
         SetType(VAR_NONE);
     }
     }
@@ -320,6 +330,7 @@ String Variant::ToString() const
             return ret;
             return ret;
         }
         }
 
 
+    case VAR_VOIDPTR:
     case VAR_PTR:
     case VAR_PTR:
         // Pointer serialization not supported (convert to null)
         // Pointer serialization not supported (convert to null)
         return String(0);
         return String(0);
@@ -373,7 +384,7 @@ bool Variant::IsZero() const
     case VAR_BUFFER:
     case VAR_BUFFER:
         return reinterpret_cast<const PODVector<unsigned char>*>(&value_)->Empty();
         return reinterpret_cast<const PODVector<unsigned char>*>(&value_)->Empty();
 
 
-    case VAR_PTR:
+    case VAR_VOIDPTR:
         return value_.ptr_ == 0;
         return value_.ptr_ == 0;
 
 
     case VAR_RESOURCEREF:
     case VAR_RESOURCEREF:
@@ -402,6 +413,9 @@ bool Variant::IsZero() const
     case VAR_INTVECTOR2:
     case VAR_INTVECTOR2:
         return *reinterpret_cast<const IntVector2*>(&value_) == IntVector2::ZERO;
         return *reinterpret_cast<const IntVector2*>(&value_) == IntVector2::ZERO;
 
 
+    case VAR_PTR:
+        return *reinterpret_cast<const WeakPtr<RefCounted>*>(&value_) == (RefCounted*)0;
+        
     default:
     default:
         return true;
         return true;
     }
     }
@@ -438,6 +452,10 @@ void Variant::SetType(VariantType newType)
         (reinterpret_cast<VariantMap*>(&value_))->~VariantMap();
         (reinterpret_cast<VariantMap*>(&value_))->~VariantMap();
         break;
         break;
 
 
+    case VAR_PTR:
+        (reinterpret_cast<WeakPtr<RefCounted>*>(&value_))->~WeakPtr<RefCounted>();
+        break;
+        
     default:
     default:
         break;
         break;
     }
     }
@@ -470,6 +488,10 @@ void Variant::SetType(VariantType newType)
         new(reinterpret_cast<VariantMap*>(&value_)) VariantMap();
         new(reinterpret_cast<VariantMap*>(&value_)) VariantMap();
         break;
         break;
 
 
+    case VAR_PTR:
+        new(reinterpret_cast<WeakPtr<RefCounted>*>(&value_)) WeakPtr<RefCounted>();
+        break;
+        
     default:
     default:
         break;
         break;
     }
     }
@@ -552,7 +574,7 @@ template<> const PODVector<unsigned char>& Variant::Get<const PODVector<unsigned
 
 
 template<> void* Variant::Get<void*>() const
 template<> void* Variant::Get<void*>() const
 {
 {
-    return GetPtr();
+    return GetVoidPtr();
 }
 }
 
 
 template<> ResourceRef Variant::Get<ResourceRef>() const
 template<> ResourceRef Variant::Get<ResourceRef>() const
@@ -620,6 +642,11 @@ template<> PODVector<unsigned char> Variant::Get<PODVector<unsigned char> >() co
     return GetBuffer();
     return GetBuffer();
 }
 }
 
 
+template<> RefCounted* Variant::Get<RefCounted*>() const
+{
+    return GetPtr();
+}
+
 String Variant::GetTypeName(VariantType type)
 String Variant::GetTypeName(VariantType type)
 {
 {
     return typeNames[type];
     return typeNames[type];

+ 72 - 20
Source/Engine/Core/Variant.h

@@ -25,6 +25,7 @@
 #include "Color.h"
 #include "Color.h"
 #include "HashMap.h"
 #include "HashMap.h"
 #include "Quaternion.h"
 #include "Quaternion.h"
+#include "Ptr.h"
 #include "Rect.h"
 #include "Rect.h"
 #include "StringHash.h"
 #include "StringHash.h"
 #include "Vector4.h"
 #include "Vector4.h"
@@ -46,13 +47,14 @@ enum VariantType
     VAR_COLOR,
     VAR_COLOR,
     VAR_STRING,
     VAR_STRING,
     VAR_BUFFER,
     VAR_BUFFER,
-    VAR_PTR,
+    VAR_VOIDPTR,
     VAR_RESOURCEREF,
     VAR_RESOURCEREF,
     VAR_RESOURCEREFLIST,
     VAR_RESOURCEREFLIST,
     VAR_VARIANTVECTOR,
     VAR_VARIANTVECTOR,
     VAR_VARIANTMAP,
     VAR_VARIANTMAP,
     VAR_INTRECT,
     VAR_INTRECT,
     VAR_INTVECTOR2,
     VAR_INTVECTOR2,
+    VAR_PTR,
     MAX_VAR_TYPES
     MAX_VAR_TYPES
 };
 };
 
 
@@ -323,6 +325,13 @@ public:
     {
     {
         *this = value;
         *this = value;
     }
     }
+    
+    /// Construct from a RefCounted pointer. The object will be stored internally in a WeakPtr so that its expiration can be detected safely.
+    Variant(RefCounted* value) :
+        type_(VAR_NONE)
+    {
+        *this = value;
+    }
 
 
     /// Construct from type and value.
     /// Construct from type and value.
     Variant(const String& type, const String& value) :
     Variant(const String& type, const String& value) :
@@ -486,10 +495,10 @@ public:
         return *this;
         return *this;
     }
     }
 
 
-    /// Assign from a pointer.
+    /// Assign from a void pointer.
     Variant& operator = (void* rhs)
     Variant& operator = (void* rhs)
     {
     {
-        SetType(VAR_PTR);
+        SetType(VAR_VOIDPTR);
         value_.ptr_ = rhs;
         value_.ptr_ = rhs;
         return *this;
         return *this;
     }
     }
@@ -541,7 +550,15 @@ public:
         *(reinterpret_cast<IntVector2*>(&value_)) = rhs;
         *(reinterpret_cast<IntVector2*>(&value_)) = rhs;
         return *this;
         return *this;
     }
     }
-
+    
+    /// Assign from a RefCounted pointer. The object will be stored internally in a WeakPtr so that its expiration can be detected safely.
+    Variant& operator = (RefCounted* rhs)
+    {
+        SetType(VAR_PTR);
+        *(reinterpret_cast<WeakPtr<RefCounted>*>(&value_)) = rhs;
+        return *this;
+    }
+    
     /// Test for equality with another variant.
     /// Test for equality with another variant.
     bool operator == (const Variant& rhs) const;
     bool operator == (const Variant& rhs) const;
     /// Test for equality with an integer. To return true, both the type and value must match.
     /// Test for equality with an integer. To return true, both the type and value must match.
@@ -566,8 +583,18 @@ public:
     bool operator == (const String& rhs) const { return type_ == VAR_STRING ? *(reinterpret_cast<const String*>(&value_)) == rhs : false; }
     bool operator == (const String& rhs) const { return type_ == VAR_STRING ? *(reinterpret_cast<const String*>(&value_)) == rhs : false; }
     /// Test for equality with a buffer. To return true, both the type and value must match.
     /// Test for equality with a buffer. To return true, both the type and value must match.
     bool operator == (const PODVector<unsigned char>& rhs) const { return type_ == VAR_BUFFER ? *(reinterpret_cast<const PODVector<unsigned char>*>(&value_)) == rhs : false; }
     bool operator == (const PODVector<unsigned char>& rhs) const { return type_ == VAR_BUFFER ? *(reinterpret_cast<const PODVector<unsigned char>*>(&value_)) == rhs : false; }
-    /// Test for equality with a pointer. To return true, both the type and value must match.
-    bool operator == (void* rhs) const { return type_ == VAR_PTR ? value_.ptr_ == rhs : false; }
+    
+    /// Test for equality with a void pointer. To return true, both the type and value must match, with the exception that a RefCounted pointer is also allowed.
+    bool operator == (void* rhs) const
+    {
+        if (type_ == VAR_VOIDPTR)
+            return value_.ptr_ == rhs;
+        else if (type_ == VAR_PTR)
+            return *(reinterpret_cast<const WeakPtr<RefCounted>*>(&value_)) == rhs;
+        else
+            return false;
+    }
+    
     /// Test for equality with a resource reference. To return true, both the type and value must match.
     /// Test for equality with a resource reference. To return true, both the type and value must match.
     bool operator == (const ResourceRef& rhs) const { return type_ == VAR_RESOURCEREF ? *(reinterpret_cast<const ResourceRef*>(&value_)) == rhs : false; }
     bool operator == (const ResourceRef& rhs) const { return type_ == VAR_RESOURCEREF ? *(reinterpret_cast<const ResourceRef*>(&value_)) == rhs : false; }
     /// Test for equality with a resource reference list. To return true, both the type and value must match.
     /// Test for equality with a resource reference list. To return true, both the type and value must match.
@@ -584,6 +611,18 @@ public:
     bool operator == (const StringHash& rhs) const { return type_ == VAR_INT ? (unsigned)value_.int_ == rhs.Value() : false; }
     bool operator == (const StringHash& rhs) const { return type_ == VAR_INT ? (unsigned)value_.int_ == rhs.Value() : false; }
     /// Test for equality with a ShortStringHash. To return true, both the type and value must match.
     /// Test for equality with a ShortStringHash. To return true, both the type and value must match.
     bool operator == (const ShortStringHash& rhs) const { return type_ == VAR_INT ? value_.int_ == rhs.Value() : false; }
     bool operator == (const ShortStringHash& rhs) const { return type_ == VAR_INT ? value_.int_ == rhs.Value() : false; }
+    
+    /// Test for equality with a RefCounted pointer. To return true, both the type and value must match, with the exception that void pointer is also allowed.
+    bool operator == (RefCounted* rhs) const
+    {
+        if (type_ == VAR_PTR)
+            return *(reinterpret_cast<const WeakPtr<RefCounted>*>(&value_)) == rhs;
+        else if (type_ == VAR_VOIDPTR)
+            return value_.ptr_ == rhs;
+        else
+            return false;
+    }
+    
     /// Test for inequality with another variant.
     /// Test for inequality with another variant.
     bool operator != (const Variant& rhs) const { return !(*this == rhs); }
     bool operator != (const Variant& rhs) const { return !(*this == rhs); }
     /// Test for inequality with an integer.
     /// Test for inequality with an integer.
@@ -624,7 +663,9 @@ public:
     bool operator != (const StringHash& rhs) const { return !(*this == rhs); }
     bool operator != (const StringHash& rhs) const { return !(*this == rhs); }
     /// Test for inequality with a ShortStringHash.
     /// Test for inequality with a ShortStringHash.
     bool operator != (const ShortStringHash& rhs) const { return !(*this == rhs); }
     bool operator != (const ShortStringHash& rhs) const { return !(*this == rhs); }
-
+    /// Test for inequality with a RefCounted pointer.
+    bool operator != (RefCounted* rhs) const { return !(*this == rhs); }
+    
     /// Set from typename and value strings. Pointers will be set to null, and VariantBuffer or VariantMap types are not supported.
     /// Set from typename and value strings. Pointers will be set to null, and VariantBuffer or VariantMap types are not supported.
     void FromString(const String& type, const String& value);
     void FromString(const String& type, const String& value);
     /// Set from typename and value strings. Pointers will be set to null, and VariantBuffer or VariantMap types are not supported.
     /// Set from typename and value strings. Pointers will be set to null, and VariantBuffer or VariantMap types are not supported.
@@ -662,8 +703,18 @@ public:
     const String& GetString() const { return type_ == VAR_STRING ? *reinterpret_cast<const String*>(&value_) : String::EMPTY; }
     const String& GetString() const { return type_ == VAR_STRING ? *reinterpret_cast<const String*>(&value_) : String::EMPTY; }
     /// Return buffer or empty on type mismatch.
     /// Return buffer or empty on type mismatch.
     const PODVector<unsigned char>& GetBuffer() const { return type_ == VAR_BUFFER ? *reinterpret_cast<const PODVector<unsigned char>*>(&value_) : emptyBuffer; }
     const PODVector<unsigned char>& GetBuffer() const { return type_ == VAR_BUFFER ? *reinterpret_cast<const PODVector<unsigned char>*>(&value_) : emptyBuffer; }
-    /// Return pointer or null on type mismatch.
-    void* GetPtr() const { return type_ == VAR_PTR ? value_.ptr_ : 0; }
+    
+    /// Return void pointer or null on type mismatch. RefCounted pointer will be converted.
+    void* GetVoidPtr() const
+    {
+        if (type_ == VAR_VOIDPTR)
+            return value_.ptr_;
+        else if (type_ == VAR_PTR)
+            return *reinterpret_cast<const WeakPtr<RefCounted>*>(&value_);
+        else
+            return 0;
+    }
+    
     /// Return a resource reference or empty on type mismatch.
     /// Return a resource reference or empty on type mismatch.
     const ResourceRef& GetResourceRef() const { return type_ == VAR_RESOURCEREF ? *reinterpret_cast<const ResourceRef*>(&value_) : emptyResourceRef; }
     const ResourceRef& GetResourceRef() const { return type_ == VAR_RESOURCEREF ? *reinterpret_cast<const ResourceRef*>(&value_) : emptyResourceRef; }
     /// Return a resource reference list or empty on type mismatch.
     /// Return a resource reference list or empty on type mismatch.
@@ -676,16 +727,8 @@ public:
     const IntRect& GetIntRect() const { return type_ == VAR_INTRECT ? *reinterpret_cast<const IntRect*>(&value_) : IntRect::ZERO; }
     const IntRect& GetIntRect() const { return type_ == VAR_INTRECT ? *reinterpret_cast<const IntRect*>(&value_) : IntRect::ZERO; }
     /// Return an IntVector2 or empty on type mismatch.
     /// Return an IntVector2 or empty on type mismatch.
     const IntVector2& GetIntVector2() const { return type_ == VAR_INTVECTOR2 ? *reinterpret_cast<const IntVector2*>(&value_) : IntVector2::ZERO; }
     const IntVector2& GetIntVector2() const { return type_ == VAR_INTVECTOR2 ? *reinterpret_cast<const IntVector2*>(&value_) : IntVector2::ZERO; }
-
-    /// Return a pointer to a modifiable buffer or null on type mismatch.
-    PODVector<unsigned char>* GetBufferPtr() { return type_ == VAR_BUFFER ? reinterpret_cast<PODVector<unsigned char>*>(&value_) : 0; }
-    /// Return a pointer to a modifiable variant vector or null on type mismatch.
-    VariantVector* GetVariantVectorPtr() { return type_ == VAR_VARIANTVECTOR ? reinterpret_cast<VariantVector*>(&value_) : 0; }
-    /// Return a pointer to a modifiable variant map or null on type mismatch.
-    VariantMap* GetVariantMapPtr() { return type_ == VAR_VARIANTMAP ? reinterpret_cast<VariantMap*>(&value_) : 0; }
-
-    /// Return the value, template version.
-    template <class T> T Get() const;
+    /// Return a RefCounted pointer or null on type mismatch. Will return null if holding a void pointer, as it can not be safely verified that the object is a RefCounted.
+    RefCounted* GetPtr() const { return type_ == VAR_PTR ? *reinterpret_cast<const WeakPtr<RefCounted>*>(&value_) : (RefCounted*)0; }
     /// Return value's type.
     /// Return value's type.
     VariantType GetType() const { return type_; }
     VariantType GetType() const { return type_; }
     /// Return value's type name.
     /// Return value's type name.
@@ -695,7 +738,16 @@ public:
     /// Return true when the variant value is considered zero according to its actual type.
     /// Return true when the variant value is considered zero according to its actual type.
     bool IsZero() const;
     bool IsZero() const;
     /// Return true when the variant is empty (i.e. not initialized yet).
     /// Return true when the variant is empty (i.e. not initialized yet).
-    bool IsEmpty() const { return GetType() == VAR_NONE; }
+    bool IsEmpty() const { return type_ == VAR_NONE; }
+    /// Return the value, template version.
+    template <class T> T Get() const;
+    
+    /// Return a pointer to a modifiable buffer or null on type mismatch.
+    PODVector<unsigned char>* GetBufferPtr() { return type_ == VAR_BUFFER ? reinterpret_cast<PODVector<unsigned char>*>(&value_) : 0; }
+    /// Return a pointer to a modifiable variant vector or null on type mismatch.
+    VariantVector* GetVariantVectorPtr() { return type_ == VAR_VARIANTVECTOR ? reinterpret_cast<VariantVector*>(&value_) : 0; }
+    /// Return a pointer to a modifiable variant map or null on type mismatch.
+    VariantMap* GetVariantMapPtr() { return type_ == VAR_VARIANTMAP ? reinterpret_cast<VariantMap*>(&value_) : 0; }
 
 
     /// Return name for variant type.
     /// Return name for variant type.
     static String GetTypeName(VariantType type);
     static String GetTypeName(VariantType type);

+ 1 - 1
Source/Engine/Engine/Engine.cpp

@@ -260,7 +260,7 @@ bool Engine::Initialize(const VariantMap& parameters)
         Renderer* renderer = GetSubsystem<Renderer>();
         Renderer* renderer = GetSubsystem<Renderer>();
 
 
         if (HasParameter(parameters, "ExternalWindow"))
         if (HasParameter(parameters, "ExternalWindow"))
-            graphics->SetExternalWindow(GetParameter(parameters, "ExternalWindow").GetPtr());
+            graphics->SetExternalWindow(GetParameter(parameters, "ExternalWindow").GetVoidPtr());
         graphics->SetForceSM2(GetParameter(parameters, "ForceSM2", false).GetBool());
         graphics->SetForceSM2(GetParameter(parameters, "ForceSM2", false).GetBool());
         graphics->SetWindowTitle(GetParameter(parameters, "WindowTitle", "Urho3D").GetString());
         graphics->SetWindowTitle(GetParameter(parameters, "WindowTitle", "Urho3D").GetString());
         graphics->SetWindowIcon(cache->GetResource<Image>(GetParameter(parameters, "WindowIcon", String::EMPTY).GetString()));
         graphics->SetWindowIcon(cache->GetResource<Image>(GetParameter(parameters, "WindowIcon", String::EMPTY).GetString()));

+ 1 - 1
Source/Engine/Graphics/AnimatedModel.cpp

@@ -709,7 +709,7 @@ void AnimatedModel::SetSkeleton(const Skeleton& skeleton, bool createBones)
         using namespace BoneHierarchyCreated;
         using namespace BoneHierarchyCreated;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_NODE] = (void*)node_;
+        eventData[P_NODE] = node_;
         node_->SendEvent(E_BONEHIERARCHYCREATED, eventData);
         node_->SendEvent(E_BONEHIERARCHYCREATED, eventData);
     }
     }
     else
     else

+ 1 - 1
Source/Engine/Graphics/AnimationState.cpp

@@ -288,7 +288,7 @@ void AnimationState::AddTime(float delta)
                 Node* senderNode = model_ ? model_->GetNode() : node_;
                 Node* senderNode = model_ ? model_->GetNode() : node_;
                 
                 
                 VariantMap& eventData = senderNode->GetEventDataMap();
                 VariantMap& eventData = senderNode->GetEventDataMap();
-                eventData[P_NODE] = (void*)senderNode;
+                eventData[P_NODE] = senderNode;
                 eventData[P_NAME] = animation_->GetAnimationName();
                 eventData[P_NAME] = animation_->GetAnimationName();
                 eventData[P_TIME] = i->time_;
                 eventData[P_TIME] = i->time_;
                 eventData[P_DATA] = i->data_;
                 eventData[P_DATA] = i->data_;

+ 1 - 1
Source/Engine/Graphics/Octree.cpp

@@ -437,7 +437,7 @@ void Octree::Update(const FrameInfo& frame)
         using namespace SceneDrawableUpdateFinished;
         using namespace SceneDrawableUpdateFinished;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SCENE] = (void*)scene;
+        eventData[P_SCENE] = scene;
         eventData[P_TIMESTEP] = frame.timeStep_;
         eventData[P_TIMESTEP] = frame.timeStep_;
         scene->SendEvent(E_SCENEDRAWABLEUPDATEFINISHED, eventData);
         scene->SendEvent(E_SCENEDRAWABLEUPDATEFINISHED, eventData);
     }
     }

+ 8 - 8
Source/Engine/Graphics/Renderer.cpp

@@ -662,10 +662,10 @@ void Renderer::Update(float timeStep)
         using namespace BeginViewUpdate;
         using namespace BeginViewUpdate;
         
         
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SURFACE] = (void*)renderTarget.Get();
-        eventData[P_TEXTURE] = (void*)(renderTarget ? renderTarget->GetParentTexture() : 0);
-        eventData[P_SCENE] = (void*)scene;
-        eventData[P_CAMERA] = (void*)viewport->GetCamera();
+        eventData[P_SURFACE] = renderTarget.Get();
+        eventData[P_TEXTURE] = (renderTarget ? renderTarget->GetParentTexture() : 0);
+        eventData[P_SCENE] = scene;
+        eventData[P_CAMERA] = viewport->GetCamera();
         SendEvent(E_BEGINVIEWUPDATE, eventData);
         SendEvent(E_BEGINVIEWUPDATE, eventData);
         
         
         ResetShadowMapAllocations(); // Each view can reuse the same shadow maps
         ResetShadowMapAllocations(); // Each view can reuse the same shadow maps
@@ -724,10 +724,10 @@ void Renderer::Render()
             RenderSurface* renderTarget = views_[i]->GetRenderTarget();
             RenderSurface* renderTarget = views_[i]->GetRenderTarget();
             
             
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_SURFACE] = (void*)renderTarget;
-            eventData[P_TEXTURE] = (void*)(renderTarget ? renderTarget->GetParentTexture() : 0);
-            eventData[P_SCENE] = (void*)views_[i]->GetScene();
-            eventData[P_CAMERA] = (void*)views_[i]->GetCamera();
+            eventData[P_SURFACE] = renderTarget;
+            eventData[P_TEXTURE] = (renderTarget ? renderTarget->GetParentTexture() : 0);
+            eventData[P_SCENE] = views_[i]->GetScene();
+            eventData[P_CAMERA] = views_[i]->GetCamera();
             SendEvent(E_BEGINVIEWRENDER, eventData);
             SendEvent(E_BEGINVIEWRENDER, eventData);
             
             
             // Screen buffers can be reused between views, as each is rendered completely
             // Screen buffers can be reused between views, as each is rendered completely

+ 1 - 1
Source/Engine/Graphics/Terrain.cpp

@@ -717,7 +717,7 @@ void Terrain::CreateGeometry()
         using namespace TerrainCreated;
         using namespace TerrainCreated;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_NODE] = (void*)node_;
+        eventData[P_NODE] = node_;
         node_->SendEvent(E_TERRAINCREATED, eventData);
         node_->SendEvent(E_TERRAINCREATED, eventData);
     }
     }
 }
 }

+ 2 - 0
Source/Engine/IO/Deserializer.cpp

@@ -305,6 +305,8 @@ Variant Deserializer::ReadVariant(VariantType type)
     case VAR_BUFFER:
     case VAR_BUFFER:
         return Variant(ReadBuffer());
         return Variant(ReadBuffer());
         
         
+        // Deserializing pointers is not supported. Return null
+    case VAR_VOIDPTR:
     case VAR_PTR:
     case VAR_PTR:
         ReadUInt();
         ReadUInt();
         return Variant((void*)0);
         return Variant((void*)0);

+ 2 - 0
Source/Engine/IO/Serializer.cpp

@@ -255,6 +255,8 @@ bool Serializer::WriteVariantData(const Variant& value)
     case VAR_BUFFER:
     case VAR_BUFFER:
         return WriteBuffer(value.GetBuffer());
         return WriteBuffer(value.GetBuffer());
         
         
+        // Serializing pointers is not supported. Write null
+    case VAR_VOIDPTR:
     case VAR_PTR:
     case VAR_PTR:
         return WriteUInt(0);
         return WriteUInt(0);
         
         

+ 4 - 3
Source/Engine/LuaScript/pkgs/Core/Variant.pkg

@@ -13,13 +13,14 @@ enum VariantType
     VAR_COLOR,
     VAR_COLOR,
     VAR_STRING,
     VAR_STRING,
     VAR_BUFFER,
     VAR_BUFFER,
-    VAR_PTR,
+    VAR_VOIDPTR,
     VAR_RESOURCEREF,
     VAR_RESOURCEREF,
     VAR_RESOURCEREFLIST,
     VAR_RESOURCEREFLIST,
     VAR_VARIANTVECTOR,
     VAR_VARIANTVECTOR,
     VAR_VARIANTMAP,
     VAR_VARIANTMAP,
     VAR_INTRECT,
     VAR_INTRECT,
     VAR_INTVECTOR2,
     VAR_INTVECTOR2,
+    VAR_PTR,
     MAX_VAR_TYPES
     MAX_VAR_TYPES
 };
 };
 
 
@@ -165,7 +166,7 @@ class VariantMap
     tolua_outside void VariantMapSetIntRect @ SetIntRect(const String key, const IntRect value);
     tolua_outside void VariantMapSetIntRect @ SetIntRect(const String key, const IntRect value);
     tolua_outside void VariantMapSetIntVector2 @ SetIntVector2(const String key, const IntVector2 value);
     tolua_outside void VariantMapSetIntVector2 @ SetIntVector2(const String key, const IntVector2 value);
     tolua_outside void VariantMapSetPtr @ SetPtr(const String key, void* value);
     tolua_outside void VariantMapSetPtr @ SetPtr(const String key, void* value);
-    
+
     tolua_outside int VariantMapGetInt @ GetInt(const String key);
     tolua_outside int VariantMapGetInt @ GetInt(const String key);
     tolua_outside int VariantMapGetUInt @ GetUInt(const String key);
     tolua_outside int VariantMapGetUInt @ GetUInt(const String key);
     tolua_outside StringHash VariantMapGetStringHash @ GetStringHash(const String key);
     tolua_outside StringHash VariantMapGetStringHash @ GetStringHash(const String key);
@@ -513,7 +514,7 @@ static int tolua_CoreLuaAPI_VariantMap_GetPtr00(lua_State* tolua_S)
   if (!self) tolua_error(tolua_S,"invalid 'self' in function 'VariantMapGetPtr'", NULL);
   if (!self) tolua_error(tolua_S,"invalid 'self' in function 'VariantMapGetPtr'", NULL);
 #endif
 #endif
   {
   {
-   void* tolua_ret = (void*)FindVariant(self, key).GetPtr();
+   void* tolua_ret = (void*)FindVariant(self, key).GetVoidPtr();
    tolua_pushusertype(tolua_S,tolua_ret, type.CString());
    tolua_pushusertype(tolua_S,tolua_ret, type.CString());
   }
   }
  }
  }

+ 5 - 5
Source/Engine/Network/Connection.cpp

@@ -876,7 +876,7 @@ void Connection::ProcessIdentity(int msgID, MemoryBuffer& msg)
     using namespace ClientIdentity;
     using namespace ClientIdentity;
     
     
     VariantMap eventData = identity_;
     VariantMap eventData = identity_;
-    eventData[P_CONNECTION] = (void*)this;
+    eventData[P_CONNECTION] = this;
     eventData[P_ALLOW] = true;
     eventData[P_ALLOW] = true;
     SendEvent(E_CLIENTIDENTITY, eventData);
     SendEvent(E_CLIENTIDENTITY, eventData);
     
     
@@ -933,7 +933,7 @@ void Connection::ProcessSceneLoaded(int msgID, MemoryBuffer& msg)
         using namespace ClientSceneLoaded;
         using namespace ClientSceneLoaded;
         
         
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_CONNECTION] = (void*)this;
+        eventData[P_CONNECTION] = this;
         SendEvent(E_CLIENTSCENELOADED, eventData);
         SendEvent(E_CLIENTSCENELOADED, eventData);
     }
     }
 }
 }
@@ -952,7 +952,7 @@ void Connection::ProcessRemoteEvent(int msgID, MemoryBuffer& msg)
         }
         }
         
         
         VariantMap eventData = msg.ReadVariantMap();
         VariantMap eventData = msg.ReadVariantMap();
-        eventData[P_CONNECTION] = (void*)this;
+        eventData[P_CONNECTION] = this;
         SendEvent(eventType, eventData);
         SendEvent(eventType, eventData);
     }
     }
     else
     else
@@ -978,7 +978,7 @@ void Connection::ProcessRemoteEvent(int msgID, MemoryBuffer& msg)
             LOGWARNING("Missing sender for remote node event, discarding");
             LOGWARNING("Missing sender for remote node event, discarding");
             return;
             return;
         }
         }
-        eventData[P_CONNECTION] = (void*)this;
+        eventData[P_CONNECTION] = this;
         sender->SendEvent(eventType, eventData);
         sender->SendEvent(eventType, eventData);
     }
     }
 }
 }
@@ -1360,7 +1360,7 @@ void Connection::OnSceneLoadFailed()
     using namespace NetworkSceneLoadFailed;
     using namespace NetworkSceneLoadFailed;
     
     
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_CONNECTION] = (void*)this;
+    eventData[P_CONNECTION] = this;
     SendEvent(E_NETWORKSCENELOADFAILED, eventData);
     SendEvent(E_NETWORKSCENELOADFAILED, eventData);
 }
 }
 
 

+ 3 - 3
Source/Engine/Network/Network.cpp

@@ -84,7 +84,7 @@ void Network::HandleMessage(kNet::MessageConnection *source, kNet::packet_id_t p
         using namespace NetworkMessage;
         using namespace NetworkMessage;
         
         
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_CONNECTION] = (void*)connection;
+        eventData[P_CONNECTION] = connection;
         eventData[P_MESSAGEID] = (int)msgId;
         eventData[P_MESSAGEID] = (int)msgId;
         eventData[P_DATA].SetBuffer(msg.GetData(), msg.GetSize());
         eventData[P_DATA].SetBuffer(msg.GetData(), msg.GetSize());
         connection->SendEvent(E_NETWORKMESSAGE, eventData);
         connection->SendEvent(E_NETWORKMESSAGE, eventData);
@@ -127,7 +127,7 @@ void Network::NewConnectionEstablished(kNet::MessageConnection* connection)
     using namespace ClientConnected;
     using namespace ClientConnected;
     
     
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_CONNECTION] = (void*)newConnection;
+    eventData[P_CONNECTION] = newConnection;
     newConnection->SendEvent(E_CLIENTCONNECTED, eventData);
     newConnection->SendEvent(E_CLIENTCONNECTED, eventData);
 }
 }
 
 
@@ -145,7 +145,7 @@ void Network::ClientDisconnected(kNet::MessageConnection* connection)
         using namespace ClientDisconnected;
         using namespace ClientDisconnected;
         
         
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_CONNECTION] = (void*)connection;
+        eventData[P_CONNECTION] = connection;
         connection->SendEvent(E_CLIENTDISCONNECTED, eventData);
         connection->SendEvent(E_CLIENTDISCONNECTED, eventData);
         
         
         clientConnections_.Erase(i);
         clientConnections_.Erase(i);

+ 24 - 24
Source/Engine/Physics/PhysicsWorld.cpp

@@ -570,7 +570,7 @@ void PhysicsWorld::PreStep(float timeStep)
     using namespace PhysicsPreStep;
     using namespace PhysicsPreStep;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_WORLD] = (void*)this;
+    eventData[P_WORLD] = this;
     eventData[P_TIMESTEP] = timeStep;
     eventData[P_TIMESTEP] = timeStep;
     SendEvent(E_PHYSICSPRESTEP, eventData);
     SendEvent(E_PHYSICSPRESTEP, eventData);
 
 
@@ -596,7 +596,7 @@ void PhysicsWorld::PostStep(float timeStep)
     using namespace PhysicsPreStep;
     using namespace PhysicsPreStep;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_WORLD] = (void*)this;
+    eventData[P_WORLD] = this;
     eventData[P_TIMESTEP] = timeStep;
     eventData[P_TIMESTEP] = timeStep;
     SendEvent(E_PHYSICSPOSTSTEP, eventData);
     SendEvent(E_PHYSICSPOSTSTEP, eventData);
 }
 }
@@ -613,7 +613,7 @@ void PhysicsWorld::SendCollisionEvents()
 
 
     if (numManifolds)
     if (numManifolds)
     {
     {
-        physicsCollisionData_[PhysicsCollision::P_WORLD] = (void*)this;
+        physicsCollisionData_[PhysicsCollision::P_WORLD] = this;
 
 
         for (int i = 0; i < numManifolds; ++i)
         for (int i = 0; i < numManifolds; ++i)
         {
         {
@@ -674,10 +674,10 @@ void PhysicsWorld::SendCollisionEvents()
             bool phantom = bodyA->IsPhantom() || bodyB->IsPhantom();
             bool phantom = bodyA->IsPhantom() || bodyB->IsPhantom();
             bool newCollision = !previousCollisions_.Contains(i->first_);
             bool newCollision = !previousCollisions_.Contains(i->first_);
 
 
-            physicsCollisionData_[PhysicsCollision::P_NODEA] = (void*)nodeA;
-            physicsCollisionData_[PhysicsCollision::P_NODEB] = (void*)nodeB;
-            physicsCollisionData_[PhysicsCollision::P_BODYA] = (void*)bodyA;
-            physicsCollisionData_[PhysicsCollision::P_BODYB] = (void*)bodyB;
+            physicsCollisionData_[PhysicsCollision::P_NODEA] = nodeA;
+            physicsCollisionData_[PhysicsCollision::P_NODEB] = nodeB;
+            physicsCollisionData_[PhysicsCollision::P_BODYA] = bodyA;
+            physicsCollisionData_[PhysicsCollision::P_BODYB] = bodyB;
             physicsCollisionData_[PhysicsCollision::P_PHANTOM] = phantom;
             physicsCollisionData_[PhysicsCollision::P_PHANTOM] = phantom;
 
 
             contacts_.Clear();
             contacts_.Clear();
@@ -707,9 +707,9 @@ void PhysicsWorld::SendCollisionEvents()
             if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
             if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                 continue;
                 continue;
 
 
-            nodeCollisionData_[NodeCollision::P_BODY] = (void*)bodyA;
-            nodeCollisionData_[NodeCollision::P_OTHERNODE] = (void*)nodeB;
-            nodeCollisionData_[NodeCollision::P_OTHERBODY] = (void*)bodyB;
+            nodeCollisionData_[NodeCollision::P_BODY] = bodyA;
+            nodeCollisionData_[NodeCollision::P_OTHERNODE] = nodeB;
+            nodeCollisionData_[NodeCollision::P_OTHERBODY] = bodyB;
             nodeCollisionData_[NodeCollision::P_PHANTOM] = phantom;
             nodeCollisionData_[NodeCollision::P_PHANTOM] = phantom;
             nodeCollisionData_[NodeCollision::P_CONTACTS] = contacts_.GetBuffer();
             nodeCollisionData_[NodeCollision::P_CONTACTS] = contacts_.GetBuffer();
 
 
@@ -734,9 +734,9 @@ void PhysicsWorld::SendCollisionEvents()
                 contacts_.WriteFloat(point.m_appliedImpulse);
                 contacts_.WriteFloat(point.m_appliedImpulse);
             }
             }
 
 
-            nodeCollisionData_[NodeCollision::P_BODY] = (void*)bodyB;
-            nodeCollisionData_[NodeCollision::P_OTHERNODE] = (void*)nodeA;
-            nodeCollisionData_[NodeCollision::P_OTHERBODY] = (void*)bodyA;
+            nodeCollisionData_[NodeCollision::P_BODY] = bodyB;
+            nodeCollisionData_[NodeCollision::P_OTHERNODE] = nodeA;
+            nodeCollisionData_[NodeCollision::P_OTHERBODY] = bodyA;
             nodeCollisionData_[NodeCollision::P_CONTACTS] = contacts_.GetBuffer();
             nodeCollisionData_[NodeCollision::P_CONTACTS] = contacts_.GetBuffer();
 
 
             if (newCollision)
             if (newCollision)
@@ -752,7 +752,7 @@ void PhysicsWorld::SendCollisionEvents()
 
 
     // Send collision end events as applicable
     // Send collision end events as applicable
     {
     {
-        physicsCollisionData_[PhysicsCollisionEnd::P_WORLD] = (void*)this;
+        physicsCollisionData_[PhysicsCollisionEnd::P_WORLD] = this;
 
 
         for (HashMap<Pair<WeakPtr<RigidBody>, WeakPtr<RigidBody> >, btPersistentManifold*>::Iterator i = previousCollisions_.Begin(); i != previousCollisions_.End(); ++i)
         for (HashMap<Pair<WeakPtr<RigidBody>, WeakPtr<RigidBody> >, btPersistentManifold*>::Iterator i = previousCollisions_.Begin(); i != previousCollisions_.End(); ++i)
         {
         {
@@ -779,10 +779,10 @@ void PhysicsWorld::SendCollisionEvents()
                 WeakPtr<Node> nodeWeakA(nodeA);
                 WeakPtr<Node> nodeWeakA(nodeA);
                 WeakPtr<Node> nodeWeakB(nodeB);
                 WeakPtr<Node> nodeWeakB(nodeB);
 
 
-                physicsCollisionData_[PhysicsCollisionEnd::P_BODYA] = (void*)bodyA;
-                physicsCollisionData_[PhysicsCollisionEnd::P_BODYB] = (void*)bodyB;
-                physicsCollisionData_[PhysicsCollisionEnd::P_NODEA] = (void*)nodeA;
-                physicsCollisionData_[PhysicsCollisionEnd::P_NODEB] = (void*)nodeB;
+                physicsCollisionData_[PhysicsCollisionEnd::P_BODYA] = bodyA;
+                physicsCollisionData_[PhysicsCollisionEnd::P_BODYB] = bodyB;
+                physicsCollisionData_[PhysicsCollisionEnd::P_NODEA] = nodeA;
+                physicsCollisionData_[PhysicsCollisionEnd::P_NODEB] = nodeB;
                 physicsCollisionData_[PhysicsCollisionEnd::P_PHANTOM] = phantom;
                 physicsCollisionData_[PhysicsCollisionEnd::P_PHANTOM] = phantom;
 
 
                 SendEvent(E_PHYSICSCOLLISIONEND, physicsCollisionData_);
                 SendEvent(E_PHYSICSCOLLISIONEND, physicsCollisionData_);
@@ -790,18 +790,18 @@ void PhysicsWorld::SendCollisionEvents()
                 if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                 if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                     continue;
                     continue;
 
 
-                nodeCollisionData_[NodeCollisionEnd::P_BODY] = (void*)bodyA;
-                nodeCollisionData_[NodeCollisionEnd::P_OTHERNODE] = (void*)nodeB;
-                nodeCollisionData_[NodeCollisionEnd::P_OTHERBODY] = (void*)bodyB;
+                nodeCollisionData_[NodeCollisionEnd::P_BODY] = bodyA;
+                nodeCollisionData_[NodeCollisionEnd::P_OTHERNODE] = nodeB;
+                nodeCollisionData_[NodeCollisionEnd::P_OTHERBODY] = bodyB;
                 nodeCollisionData_[NodeCollisionEnd::P_PHANTOM] = phantom;
                 nodeCollisionData_[NodeCollisionEnd::P_PHANTOM] = phantom;
 
 
                 nodeA->SendEvent(E_NODECOLLISIONEND, nodeCollisionData_);
                 nodeA->SendEvent(E_NODECOLLISIONEND, nodeCollisionData_);
                 if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                 if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                     continue;
                     continue;
 
 
-                nodeCollisionData_[NodeCollisionEnd::P_BODY] = (void*)bodyB;
-                nodeCollisionData_[NodeCollisionEnd::P_OTHERNODE] = (void*)nodeA;
-                nodeCollisionData_[NodeCollisionEnd::P_OTHERBODY] = (void*)bodyA;
+                nodeCollisionData_[NodeCollisionEnd::P_BODY] = bodyB;
+                nodeCollisionData_[NodeCollisionEnd::P_OTHERNODE] = nodeA;
+                nodeCollisionData_[NodeCollisionEnd::P_OTHERBODY] = bodyA;
 
 
                 nodeB->SendEvent(E_NODECOLLISIONEND, nodeCollisionData_);
                 nodeB->SendEvent(E_NODECOLLISIONEND, nodeCollisionData_);
             }
             }

+ 9 - 9
Source/Engine/Resource/ResourceCache.cpp

@@ -383,7 +383,7 @@ void ResourceCache::SetAutoReloadResources(bool enable)
     }
     }
 }
 }
 
 
-SharedPtr<File> ResourceCache::GetFile(const String& nameIn, bool SendEventOnFailure)
+SharedPtr<File> ResourceCache::GetFile(const String& nameIn, bool sendEventOnFailure)
 {
 {
     String name = SanitateResourceName(nameIn);
     String name = SanitateResourceName(nameIn);
     File* file = 0;
     File* file = 0;
@@ -404,26 +404,26 @@ SharedPtr<File> ResourceCache::GetFile(const String& nameIn, bool SendEventOnFai
     if (file)
     if (file)
         return SharedPtr<File>(file);
         return SharedPtr<File>(file);
 
 
-    if (SendEventOnFailure)
+    if (sendEventOnFailure)
     {
     {
         LOGERROR("Could not find resource " + name);
         LOGERROR("Could not find resource " + name);
 
 
         using namespace ResourceNotFound;
         using namespace ResourceNotFound;
 
 
-	    VariantMap& eventData = GetEventDataMap();
-	    eventData[P_RESOURCENAME] = name;
-	    SendEvent(E_RESOURCENOTFOUND, eventData);
+        VariantMap& eventData = GetEventDataMap();
+        eventData[P_RESOURCENAME] = name;
+        SendEvent(E_RESOURCENOTFOUND, eventData);
     }
     }
 
 
     return SharedPtr<File>();
     return SharedPtr<File>();
 }
 }
 
 
-Resource* ResourceCache::GetResource(ShortStringHash type, const String& name, bool SendEventOnFailure)
+Resource* ResourceCache::GetResource(ShortStringHash type, const String& name, bool sendEventOnFailure)
 {
 {
-    return GetResource(type, name.CString(), SendEventOnFailure);
+    return GetResource(type, name.CString(), sendEventOnFailure);
 }
 }
 
 
-Resource* ResourceCache::GetResource(ShortStringHash type, const char* nameIn, bool SendEventOnFailure)
+Resource* ResourceCache::GetResource(ShortStringHash type, const char* nameIn, bool sendEventOnFailure)
 {
 {
     String name = SanitateResourceName(nameIn);
     String name = SanitateResourceName(nameIn);
     
     
@@ -453,7 +453,7 @@ Resource* ResourceCache::GetResource(ShortStringHash type, const char* nameIn, b
     }
     }
     
     
     // Attempt to load the resource
     // Attempt to load the resource
-    SharedPtr<File> file = GetFile(name, SendEventOnFailure);
+    SharedPtr<File> file = GetFile(name, sendEventOnFailure);
     if (!file)
     if (!file)
         return 0;   // Error is already logged
         return 0;   // Error is already logged
 
 

+ 9 - 9
Source/Engine/Resource/ResourceCache.h

@@ -96,11 +96,11 @@ public:
     void SetSearchPackagesFirst(bool value) { searchPackagesFirst_ = value; }
     void SetSearchPackagesFirst(bool value) { searchPackagesFirst_ = value; }
 
 
     /// Open and return a file from the resource load paths or from inside a package file. If not found, use a fallback search with absolute path. Return null if fails.
     /// Open and return a file from the resource load paths or from inside a package file. If not found, use a fallback search with absolute path. Return null if fails.
-    SharedPtr<File> GetFile(const String& name, bool SendEventOnFailure = true);
+    SharedPtr<File> GetFile(const String& name, bool sendEventOnFailure = true);
     /// Return a resource by type and name. Load if not loaded yet. Return null if fails.
     /// Return a resource by type and name. Load if not loaded yet. Return null if fails.
-    Resource* GetResource(ShortStringHash type, const String& name, bool SendEventOnFailure = true);
+    Resource* GetResource(ShortStringHash type, const String& name, bool sendEventOnFailure = true);
     /// Return a resource by type and name. Load if not loaded yet. Return null if fails.
     /// Return a resource by type and name. Load if not loaded yet. Return null if fails.
-    Resource* GetResource(ShortStringHash type, const char* name, bool SendEventOnFailure = true);
+    Resource* GetResource(ShortStringHash type, const char* name, bool sendEventOnFailure = true);
     /// Return all loaded resources of a specific type.
     /// Return all loaded resources of a specific type.
     void GetResources(PODVector<Resource*>& result, ShortStringHash type) const;
     void GetResources(PODVector<Resource*>& result, ShortStringHash type) const;
     /// Return all loaded resources.
     /// Return all loaded resources.
@@ -110,9 +110,9 @@ public:
     /// Return added package files.
     /// Return added package files.
     const Vector<SharedPtr<PackageFile> >& GetPackageFiles() const { return packages_; }
     const Vector<SharedPtr<PackageFile> >& GetPackageFiles() const { return packages_; }
     /// Template version of returning a resource by name.
     /// Template version of returning a resource by name.
-    template <class T> T* GetResource(const String& name, bool SendEventOnFailure = true);
+    template <class T> T* GetResource(const String& name, bool sendEventOnFailure = true);
     /// Template version of returning a resource by name.
     /// Template version of returning a resource by name.
-    template <class T> T* GetResource(const char* name, bool SendEventOnFailure = true);
+    template <class T> T* GetResource(const char* name, bool sendEventOnFailure = true);
     /// Template version of returning loaded resources of a specific type.
     /// Template version of returning loaded resources of a specific type.
     template <class T> void GetResources(PODVector<T*>& result) const;
     template <class T> void GetResources(PODVector<T*>& result) const;
     /// Return whether a file exists by name.
     /// Return whether a file exists by name.
@@ -173,16 +173,16 @@ private:
     bool searchPackagesFirst_;
     bool searchPackagesFirst_;
 };
 };
 
 
-template <class T> T* ResourceCache::GetResource(const String& name, bool SendEventOnFailure)
+template <class T> T* ResourceCache::GetResource(const String& name, bool sendEventOnFailure)
 {
 {
     ShortStringHash type = T::GetTypeStatic();
     ShortStringHash type = T::GetTypeStatic();
-    return static_cast<T*>(GetResource(type, name, SendEventOnFailure));
+    return static_cast<T*>(GetResource(type, name, sendEventOnFailure));
 }
 }
 
 
-template <class T> T* ResourceCache::GetResource(const char* name, bool SendEventOnFailure)
+template <class T> T* ResourceCache::GetResource(const char* name, bool sendEventOnFailure)
 {
 {
     ShortStringHash type = T::GetTypeStatic();
     ShortStringHash type = T::GetTypeStatic();
-    return static_cast<T*>(GetResource(type, name, SendEventOnFailure));
+    return static_cast<T*>(GetResource(type, name, sendEventOnFailure));
 }
 }
 
 
 template <class T> void ResourceCache::GetResources(PODVector<T*>& result) const
 template <class T> void ResourceCache::GetResources(PODVector<T*>& result) const

+ 3 - 3
Source/Engine/Scene/Component.cpp

@@ -90,9 +90,9 @@ void Component::SetEnabled(bool enable)
             using namespace ComponentEnabledChanged;
             using namespace ComponentEnabledChanged;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_SCENE] = (void*)scene;
-            eventData[P_NODE] = (void*)node_;
-            eventData[P_COMPONENT] = (void*)this;
+            eventData[P_SCENE] = scene;
+            eventData[P_NODE] = node_;
+            eventData[P_COMPONENT] = this;
 
 
             scene->SendEvent(E_COMPONENTENABLEDCHANGED, eventData);
             scene->SendEvent(E_COMPONENTENABLEDCHANGED, eventData);
         }
         }

+ 16 - 16
Source/Engine/Scene/Node.cpp

@@ -244,8 +244,8 @@ void Node::SetName(const String& name)
             using namespace NodeNameChanged;
             using namespace NodeNameChanged;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_SCENE] = (void*)scene_;
-            eventData[P_NODE] = (void*)this;
+            eventData[P_SCENE] = scene_;
+            eventData[P_NODE] = this;
 
 
             scene_->SendEvent(E_NODENAMECHANGED, eventData);
             scene_->SendEvent(E_NODENAMECHANGED, eventData);
         }
         }
@@ -458,8 +458,8 @@ void Node::SetEnabled(bool enable, bool recursive)
             using namespace NodeEnabledChanged;
             using namespace NodeEnabledChanged;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_SCENE] = (void*)scene_;
-            eventData[P_NODE] = (void*)this;
+            eventData[P_SCENE] = scene_;
+            eventData[P_NODE] = this;
 
 
             scene_->SendEvent(E_NODEENABLEDCHANGED, eventData);
             scene_->SendEvent(E_NODEENABLEDCHANGED, eventData);
         }
         }
@@ -474,9 +474,9 @@ void Node::SetEnabled(bool enable, bool recursive)
                 using namespace ComponentEnabledChanged;
                 using namespace ComponentEnabledChanged;
 
 
                 VariantMap& eventData = GetEventDataMap();
                 VariantMap& eventData = GetEventDataMap();
-                eventData[P_SCENE] = (void*)scene_;
-                eventData[P_NODE] = (void*)this;
-                eventData[P_COMPONENT] = (void*)(*i);
+                eventData[P_SCENE] = scene_;
+                eventData[P_NODE] = this;
+                eventData[P_COMPONENT] = (*i);
 
 
                 scene_->SendEvent(E_COMPONENTENABLEDCHANGED, eventData);
                 scene_->SendEvent(E_COMPONENTENABLEDCHANGED, eventData);
             }
             }
@@ -558,9 +558,9 @@ void Node::AddChild(Node* node)
         using namespace NodeAdded;
         using namespace NodeAdded;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SCENE] = (void*)scene_;
-        eventData[P_PARENT] = (void*)this;
-        eventData[P_NODE] = (void*)node;
+        eventData[P_SCENE] = scene_;
+        eventData[P_PARENT] = this;
+        eventData[P_NODE] = node;
 
 
         scene_->SendEvent(E_NODEADDED, eventData);
         scene_->SendEvent(E_NODEADDED, eventData);
     }
     }
@@ -1398,9 +1398,9 @@ void Node::RemoveChild(Vector<SharedPtr<Node> >::Iterator i)
         using namespace NodeRemoved;
         using namespace NodeRemoved;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SCENE] = (void*)scene_;
-        eventData[P_PARENT] = (void*)this;
-        eventData[P_NODE] = (void*)(*i).Get();
+        eventData[P_SCENE] = scene_;
+        eventData[P_PARENT] = this;
+        eventData[P_NODE] = (*i).Get();
 
 
         scene_->SendEvent(E_NODEREMOVED, eventData);
         scene_->SendEvent(E_NODEREMOVED, eventData);
     }
     }
@@ -1503,9 +1503,9 @@ void Node::RemoveComponent(Vector<SharedPtr<Component> >::Iterator i)
         using namespace ComponentRemoved;
         using namespace ComponentRemoved;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SCENE] = (void*)scene_;
-        eventData[P_NODE] = (void*)this;
-        eventData[P_COMPONENT] = (void*)(*i).Get();
+        eventData[P_SCENE] = scene_;
+        eventData[P_NODE] = this;
+        eventData[P_COMPONENT] = (*i).Get();
 
 
         scene_->SendEvent(E_COMPONENTREMOVED, eventData);
         scene_->SendEvent(E_COMPONENTREMOVED, eventData);
     }
     }

+ 3 - 3
Source/Engine/Scene/Scene.cpp

@@ -529,7 +529,7 @@ void Scene::Update(float timeStep)
     using namespace SceneUpdate;
     using namespace SceneUpdate;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_SCENE] = (void*)this;
+    eventData[P_SCENE] = this;
     eventData[P_TIMESTEP] = timeStep;
     eventData[P_TIMESTEP] = timeStep;
 
 
     // Update variable timestep logic
     // Update variable timestep logic
@@ -917,7 +917,7 @@ void Scene::UpdateAsyncLoading()
     using namespace AsyncLoadProgress;
     using namespace AsyncLoadProgress;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_SCENE] = (void*)this;
+    eventData[P_SCENE] = this;
     eventData[P_PROGRESS] = (float)asyncProgress_.loadedNodes_ / (float)asyncProgress_.totalNodes_;
     eventData[P_PROGRESS] = (float)asyncProgress_.loadedNodes_ / (float)asyncProgress_.totalNodes_;
     eventData[P_LOADEDNODES]  = asyncProgress_.loadedNodes_;
     eventData[P_LOADEDNODES]  = asyncProgress_.loadedNodes_;
     eventData[P_TOTALNODES]  = asyncProgress_.totalNodes_;
     eventData[P_TOTALNODES]  = asyncProgress_.totalNodes_;
@@ -934,7 +934,7 @@ void Scene::FinishAsyncLoading()
     using namespace AsyncLoadFinished;
     using namespace AsyncLoadFinished;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_SCENE] = (void*)this;
+    eventData[P_SCENE] = this;
     SendEvent(E_ASYNCLOADFINISHED, eventData);
     SendEvent(E_ASYNCLOADFINISHED, eventData);
 }
 }
 
 

+ 1 - 1
Source/Engine/Scene/Serializable.cpp

@@ -510,7 +510,7 @@ void Serializable::SetTemporary(bool enable)
         using namespace TemporaryChanged;
         using namespace TemporaryChanged;
         
         
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SERIALIZABLE] = (void*)this;
+        eventData[P_SERIALIZABLE] = this;
         
         
         SendEvent(E_TEMPORARYCHANGED, eventData);
         SendEvent(E_TEMPORARYCHANGED, eventData);
     }
     }

+ 12 - 7
Source/Engine/Script/APITemplates.h

@@ -56,13 +56,18 @@ template <class T, class U> U* RefCast(T* t)
 /// Template function for returning a Variant pointer type cast to specific class.
 /// Template function for returning a Variant pointer type cast to specific class.
 template <class T> T* GetVariantPtr(Variant* ptr)
 template <class T> T* GetVariantPtr(Variant* ptr)
 {
 {
-    // An attempt at type safety. Probably can not guarantee that this could not be made to invoke UDB
-    T* ptrA = static_cast<T*>(ptr->GetPtr());
-    RefCounted* ptrB = static_cast<RefCounted*>(ptrA);
-    if (dynamic_cast<T*>(ptrB) == ptrA)
-        return ptrA;
-    else
-        return 0;
+    if (ptr->GetType() == VAR_PTR)
+        return dynamic_cast<T*>(ptr->GetPtr());
+    else if (ptr->GetType() == VAR_VOIDPTR)
+    {
+        // An attempt at type safety. Probably can not guarantee that this could not be made to invoke UDB
+        T* ptrA = static_cast<T*>(ptr->GetVoidPtr());
+        RefCounted* ptrB = static_cast<RefCounted*>(ptrA);
+        if (dynamic_cast<T*>(ptrB) == ptrA)
+            return ptrA;
+    }
+    
+    return 0;
 }
 }
 
 
 /// Template function for Vector to array conversion.
 /// Template function for Vector to array conversion.

+ 14 - 2
Source/Engine/Script/CoreAPI.cpp

@@ -299,6 +299,12 @@ static void ConstructVariantIntVector2(const IntVector2& value, Variant* ptr)
     new(ptr) Variant(value);
     new(ptr) Variant(value);
 }
 }
 
 
+static void ConstructVariantPtr(RefCounted* value, Variant* ptr)
+{
+    new(ptr) Variant(value);
+}
+
+
 static void ConstructVariantTypeNameValue(const String& type, const String& value, Variant* ptr)
 static void ConstructVariantTypeNameValue(const String& type, const String& value, Variant* ptr)
 {
 {
     new(ptr) Variant(type, value);
     new(ptr) Variant(type, value);
@@ -398,13 +404,14 @@ static void RegisterVariant(asIScriptEngine* engine)
     engine->RegisterEnumValue("VariantType", "VAR_COLOR", VAR_COLOR);
     engine->RegisterEnumValue("VariantType", "VAR_COLOR", VAR_COLOR);
     engine->RegisterEnumValue("VariantType", "VAR_STRING", VAR_STRING);
     engine->RegisterEnumValue("VariantType", "VAR_STRING", VAR_STRING);
     engine->RegisterEnumValue("VariantType", "VAR_BUFFER", VAR_BUFFER);
     engine->RegisterEnumValue("VariantType", "VAR_BUFFER", VAR_BUFFER);
-    engine->RegisterEnumValue("VariantType", "VAR_PTR", VAR_PTR);
+    engine->RegisterEnumValue("VariantType", "VAR_VOIDPTR", VAR_VOIDPTR);
     engine->RegisterEnumValue("VariantType", "VAR_RESOURCEREF", VAR_RESOURCEREF);
     engine->RegisterEnumValue("VariantType", "VAR_RESOURCEREF", VAR_RESOURCEREF);
     engine->RegisterEnumValue("VariantType", "VAR_RESOURCEREFLIST", VAR_RESOURCEREFLIST);
     engine->RegisterEnumValue("VariantType", "VAR_RESOURCEREFLIST", VAR_RESOURCEREFLIST);
     engine->RegisterEnumValue("VariantType", "VAR_VARIANTVECTOR", VAR_VARIANTVECTOR);
     engine->RegisterEnumValue("VariantType", "VAR_VARIANTVECTOR", VAR_VARIANTVECTOR);
     engine->RegisterEnumValue("VariantType", "VAR_VARIANTMAP", VAR_VARIANTMAP);
     engine->RegisterEnumValue("VariantType", "VAR_VARIANTMAP", VAR_VARIANTMAP);
     engine->RegisterEnumValue("VariantType", "VAR_INTRECT", VAR_INTRECT);
     engine->RegisterEnumValue("VariantType", "VAR_INTRECT", VAR_INTRECT);
     engine->RegisterEnumValue("VariantType", "VAR_INTVECTOR2", VAR_INTVECTOR2);
     engine->RegisterEnumValue("VariantType", "VAR_INTVECTOR2", VAR_INTVECTOR2);
+    engine->RegisterEnumValue("VariantType", "VAR_PTR", VAR_PTR);
 
 
     engine->RegisterObjectType("ResourceRef", sizeof(ResourceRef), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CK);
     engine->RegisterObjectType("ResourceRef", sizeof(ResourceRef), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CK);
     engine->RegisterObjectBehaviour("ResourceRef", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructResourceRef), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("ResourceRef", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructResourceRef), asCALL_CDECL_OBJLAST);
@@ -428,6 +435,8 @@ static void RegisterVariant(asIScriptEngine* engine)
     engine->RegisterObjectMethod("ResourceRefList", "const String& get_names(uint) const", asFUNCTION(ResourceRefListGetName), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ResourceRefList", "const String& get_names(uint) const", asFUNCTION(ResourceRefListGetName), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectProperty("ResourceRefList", "ShortStringHash type", offsetof(ResourceRef, type_));
     engine->RegisterObjectProperty("ResourceRefList", "ShortStringHash type", offsetof(ResourceRef, type_));
 
 
+    RegisterRefCounted<RefCounted>(engine, "RefCounted");
+    
     engine->RegisterObjectType("Variant", sizeof(Variant), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
     engine->RegisterObjectType("Variant", sizeof(Variant), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
     engine->RegisterObjectType("VariantMap", sizeof(VariantMap), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
     engine->RegisterObjectType("VariantMap", sizeof(VariantMap), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructVariant), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructVariant), asCALL_CDECL_OBJLAST);
@@ -450,6 +459,7 @@ static void RegisterVariant(asIScriptEngine* engine)
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const VariantMap&in)", asFUNCTION(ConstructVariantVariantMap), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const VariantMap&in)", asFUNCTION(ConstructVariantVariantMap), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const IntRect&in)", asFUNCTION(ConstructVariantIntRect), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const IntRect&in)", asFUNCTION(ConstructVariantIntRect), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const IntVector2&in)", asFUNCTION(ConstructVariantIntVector2), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const IntVector2&in)", asFUNCTION(ConstructVariantIntVector2), asCALL_CDECL_OBJLAST);
+    engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(RefCounted@+)", asFUNCTION(ConstructVariantPtr), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const String&in, const String&in)", asFUNCTION(ConstructVariantTypeNameValue), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const String&in, const String&in)", asFUNCTION(ConstructVariantTypeNameValue), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(VariantType, const String&in)", asFUNCTION(ConstructVariantTypeValue), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(VariantType, const String&in)", asFUNCTION(ConstructVariantTypeValue), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(DestructVariant), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectBehaviour("Variant", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(DestructVariant), asCALL_CDECL_OBJLAST);
@@ -473,6 +483,7 @@ static void RegisterVariant(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Variant", "Variant& opAssign(const VariantMap&in)", asMETHODPR(Variant, operator =, (const VariantMap&), Variant&), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "Variant& opAssign(const VariantMap&in)", asMETHODPR(Variant, operator =, (const VariantMap&), Variant&), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "Variant& opAssign(const IntRect&in)", asMETHODPR(Variant, operator =, (const IntRect&), Variant&), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "Variant& opAssign(const IntRect&in)", asMETHODPR(Variant, operator =, (const IntRect&), Variant&), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "Variant& opAssign(const IntVector2&in)", asMETHODPR(Variant, operator =, (const IntVector2&), Variant&), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "Variant& opAssign(const IntVector2&in)", asMETHODPR(Variant, operator =, (const IntVector2&), Variant&), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Variant", "Variant& opAssign(RefCounted@+)", asMETHODPR(Variant, operator =, (RefCounted*), Variant&), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(const Variant&in) const", asMETHODPR(Variant, operator ==, (const Variant&) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(const Variant&in) const", asMETHODPR(Variant, operator ==, (const Variant&) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(int) const", asMETHODPR(Variant, operator ==, (int) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(int) const", asMETHODPR(Variant, operator ==, (int) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(uint) const", asMETHODPR(Variant, operator ==, (unsigned) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(uint) const", asMETHODPR(Variant, operator ==, (unsigned) const, bool), asCALL_THISCALL);
@@ -492,6 +503,7 @@ static void RegisterVariant(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Variant", "bool opEquals(const VariantMap&in) const", asMETHODPR(Variant, operator ==, (const VariantMap&) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(const VariantMap&in) const", asMETHODPR(Variant, operator ==, (const VariantMap&) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(const IntRect&in) const", asMETHODPR(Variant, operator ==, (const IntRect&) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(const IntRect&in) const", asMETHODPR(Variant, operator ==, (const IntRect&) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(const IntVector2&in) const", asMETHODPR(Variant, operator ==, (const IntVector2&) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "bool opEquals(const IntVector2&in) const", asMETHODPR(Variant, operator ==, (const IntVector2&) const, bool), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Variant", "bool opEquals(RefCounted@+) const", asMETHODPR(Variant, operator ==, (RefCounted*) const, bool), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "int GetInt() const", asMETHOD(Variant, GetInt), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "int GetInt() const", asMETHOD(Variant, GetInt), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "uint GetUInt() const", asMETHOD(Variant, GetUInt), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "uint GetUInt() const", asMETHOD(Variant, GetUInt), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "StringHash GetStringHash() const", asMETHOD(Variant, GetStringHash), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "StringHash GetStringHash() const", asMETHOD(Variant, GetStringHash), asCALL_THISCALL);
@@ -510,6 +522,7 @@ static void RegisterVariant(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Variant", "const VariantMap& GetVariantMap() const", asMETHOD(Variant, GetVariantMap), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "const VariantMap& GetVariantMap() const", asMETHOD(Variant, GetVariantMap), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "const IntRect& GetIntRect() const", asMETHOD(Variant, GetIntRect), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "const IntRect& GetIntRect() const", asMETHOD(Variant, GetIntRect), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "const IntVector2& GetIntVector2() const", asMETHOD(Variant, GetIntVector2), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "const IntVector2& GetIntVector2() const", asMETHOD(Variant, GetIntVector2), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Variant", "RefCounted@+ GetPtr() const", asMETHOD(Variant, GetPtr), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "void FromString(const String&in, const String&in)", asMETHODPR(Variant, FromString, (const String&, const String&), void), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "void FromString(const String&in, const String&in)", asMETHODPR(Variant, FromString, (const String&, const String&), void), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "void FromString(VariantType, const String&in)", asMETHODPR(Variant, FromString, (VariantType, const String&), void), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "void FromString(VariantType, const String&in)", asMETHODPR(Variant, FromString, (VariantType, const String&), void), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "String ToString() const", asMETHOD(Variant, ToString), asCALL_THISCALL);
     engine->RegisterObjectMethod("Variant", "String ToString() const", asMETHOD(Variant, ToString), asCALL_THISCALL);
@@ -759,7 +772,6 @@ void RegisterObject(asIScriptEngine* engine)
     engine->RegisterObjectProperty("AttributeInfo", "Variant defaultValue", offsetof(AttributeInfo, defaultValue_));
     engine->RegisterObjectProperty("AttributeInfo", "Variant defaultValue", offsetof(AttributeInfo, defaultValue_));
     engine->RegisterObjectProperty("AttributeInfo", "uint mode", offsetof(AttributeInfo, mode_));
     engine->RegisterObjectProperty("AttributeInfo", "uint mode", offsetof(AttributeInfo, mode_));
 
 
-    RegisterRefCounted<RefCounted>(engine, "RefCounted");
     RegisterObject<Object>(engine, "Object");
     RegisterObject<Object>(engine, "Object");
 
 
     engine->RegisterGlobalFunction("void SendEvent(const String&in, VariantMap& eventData = VariantMap())", asFUNCTION(SendEvent), asCALL_CDECL);
     engine->RegisterGlobalFunction("void SendEvent(const String&in, VariantMap& eventData = VariantMap())", asFUNCTION(SendEvent), asCALL_CDECL);

+ 3 - 3
Source/Engine/Script/GraphicsAPI.cpp

@@ -119,7 +119,7 @@ static void RegisterCamera(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Camera", "float get_halfViewSize() const", asMETHOD(Camera, GetHalfViewSize), asCALL_THISCALL);
     engine->RegisterObjectMethod("Camera", "float get_halfViewSize() const", asMETHOD(Camera, GetHalfViewSize), asCALL_THISCALL);
     engine->RegisterObjectMethod("Camera", "Matrix3x4 get_effectiveWorldTransform() const", asMETHOD(Camera, GetEffectiveWorldTransform), asCALL_THISCALL);
     engine->RegisterObjectMethod("Camera", "Matrix3x4 get_effectiveWorldTransform() const", asMETHOD(Camera, GetEffectiveWorldTransform), asCALL_THISCALL);
 
 
-    // Register Variant GetPtr() for Camera
+    // Register Variant GetPtr() for Camera. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "Camera@+ GetCamera() const", asFUNCTION(GetVariantPtr<Camera>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Camera@+ GetCamera() const", asFUNCTION(GetVariantPtr<Camera>), asCALL_CDECL_OBJLAST);
 }
 }
 
 
@@ -445,7 +445,7 @@ static void RegisterTextures(asIScriptEngine* engine)
     engine->RegisterObjectMethod("RenderSurface", "void set_linkedDepthStencil(RenderSurface@+)", asMETHOD(RenderSurface, SetLinkedDepthStencil), asCALL_THISCALL);
     engine->RegisterObjectMethod("RenderSurface", "void set_linkedDepthStencil(RenderSurface@+)", asMETHOD(RenderSurface, SetLinkedDepthStencil), asCALL_THISCALL);
     engine->RegisterObjectMethod("RenderSurface", "RenderSurface@+ get_linkedDepthStencil() const", asMETHOD(RenderSurface, GetLinkedDepthStencil), asCALL_THISCALL);
     engine->RegisterObjectMethod("RenderSurface", "RenderSurface@+ get_linkedDepthStencil() const", asMETHOD(RenderSurface, GetLinkedDepthStencil), asCALL_THISCALL);
     
     
-    // Register Variant GetPtr() for RenderSurface
+    // Register Variant GetPtr() for RenderSurface. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "RenderSurface@+ GetRenderSurface() const", asFUNCTION(GetVariantPtr<RenderSurface>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "RenderSurface@+ GetRenderSurface() const", asFUNCTION(GetVariantPtr<RenderSurface>), asCALL_CDECL_OBJLAST);
     
     
     RegisterTexture<Texture2D>(engine, "Texture2D");
     RegisterTexture<Texture2D>(engine, "Texture2D");
@@ -463,7 +463,7 @@ static void RegisterTextures(asIScriptEngine* engine)
     engine->RegisterObjectMethod("TextureCube", "bool Load(CubeMapFace, Image@+, bool useAlpha = false)", asFUNCTION(TextureCubeLoad), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("TextureCube", "bool Load(CubeMapFace, Image@+, bool useAlpha = false)", asFUNCTION(TextureCubeLoad), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("TextureCube", "RenderSurface@+ get_renderSurfaces(CubeMapFace) const", asMETHOD(TextureCube, GetRenderSurface), asCALL_THISCALL);
     engine->RegisterObjectMethod("TextureCube", "RenderSurface@+ get_renderSurfaces(CubeMapFace) const", asMETHOD(TextureCube, GetRenderSurface), asCALL_THISCALL);
     
     
-    // Register Variant GetPtr() for Texture
+    // Register Variant GetPtr() for Texture. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "Texture@+ GetTexture() const", asFUNCTION(GetVariantPtr<Texture>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Texture@+ GetTexture() const", asFUNCTION(GetVariantPtr<Texture>), asCALL_CDECL_OBJLAST);
     
     
     engine->RegisterGlobalFunction("uint GetAlphaFormat()", asFUNCTION(Graphics::GetAlphaFormat), asCALL_CDECL);
     engine->RegisterGlobalFunction("uint GetAlphaFormat()", asFUNCTION(Graphics::GetAlphaFormat), asCALL_CDECL);

+ 1 - 1
Source/Engine/Script/NetworkAPI.cpp

@@ -111,7 +111,7 @@ static void RegisterConnection(asIScriptEngine* engine)
     engine->RegisterObjectProperty("Connection", "Controls controls", offsetof(Connection, controls_));
     engine->RegisterObjectProperty("Connection", "Controls controls", offsetof(Connection, controls_));
     engine->RegisterObjectProperty("Connection", "VariantMap identity", offsetof(Connection, identity_));
     engine->RegisterObjectProperty("Connection", "VariantMap identity", offsetof(Connection, identity_));
     
     
-    // Register Variant GetPtr() for Connection
+    // Register Variant GetPtr() for Connection. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "Connection@+ GetConnection() const", asFUNCTION(GetVariantPtr<Connection>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Connection@+ GetConnection() const", asFUNCTION(GetVariantPtr<Connection>), asCALL_CDECL_OBJLAST);
     
     
     // Register SetOwner/GetOwner now
     // Register SetOwner/GetOwner now

+ 3 - 3
Source/Engine/Script/PhysicsAPI.cpp

@@ -101,7 +101,7 @@ static void RegisterCollisionShape(asIScriptEngine* engine)
     engine->RegisterObjectMethod("CollisionShape", "uint get_lodLevel() const", asMETHOD(CollisionShape, GetLodLevel), asCALL_THISCALL);
     engine->RegisterObjectMethod("CollisionShape", "uint get_lodLevel() const", asMETHOD(CollisionShape, GetLodLevel), asCALL_THISCALL);
     engine->RegisterObjectMethod("CollisionShape", "BoundingBox get_worldBoundingBox() const", asMETHOD(CollisionShape, GetWorldBoundingBox), asCALL_THISCALL);
     engine->RegisterObjectMethod("CollisionShape", "BoundingBox get_worldBoundingBox() const", asMETHOD(CollisionShape, GetWorldBoundingBox), asCALL_THISCALL);
     
     
-    // Register Variant GetPtr() for CollisionShape
+    // Register Variant GetPtr() for CollisionShape. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "CollisionShape@+ GetCollisionShape() const", asFUNCTION(GetVariantPtr<CollisionShape>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "CollisionShape@+ GetCollisionShape() const", asFUNCTION(GetVariantPtr<CollisionShape>), asCALL_CDECL_OBJLAST);
 }
 }
 
 
@@ -186,7 +186,7 @@ static void RegisterRigidBody(asIScriptEngine* engine)
     engine->RegisterObjectMethod("RigidBody", "CollisionEventMode get_collisionEventMode() const", asMETHOD(RigidBody, GetCollisionEventMode), asCALL_THISCALL);
     engine->RegisterObjectMethod("RigidBody", "CollisionEventMode get_collisionEventMode() const", asMETHOD(RigidBody, GetCollisionEventMode), asCALL_THISCALL);
     engine->RegisterObjectMethod("RigidBody", "Array<RigidBody@>@ get_collidingBodies() const", asFUNCTION(RigidBodyGetCollidingBodies), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("RigidBody", "Array<RigidBody@>@ get_collidingBodies() const", asFUNCTION(RigidBodyGetCollidingBodies), asCALL_CDECL_OBJLAST);
 
 
-    // Register Variant GetPtr() for RigidBody
+    // Register Variant GetPtr() for RigidBody. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "RigidBody@+ GetRigidBody() const", asFUNCTION(GetVariantPtr<RigidBody>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "RigidBody@+ GetRigidBody() const", asFUNCTION(GetVariantPtr<RigidBody>), asCALL_CDECL_OBJLAST);
 }
 }
 
 
@@ -307,7 +307,7 @@ static void RegisterPhysicsWorld(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Scene", "PhysicsWorld@+ get_physicsWorld() const", asFUNCTION(SceneGetPhysicsWorld), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Scene", "PhysicsWorld@+ get_physicsWorld() const", asFUNCTION(SceneGetPhysicsWorld), asCALL_CDECL_OBJLAST);
     engine->RegisterGlobalFunction("PhysicsWorld@+ get_physicsWorld()", asFUNCTION(GetPhysicsWorld), asCALL_CDECL);
     engine->RegisterGlobalFunction("PhysicsWorld@+ get_physicsWorld()", asFUNCTION(GetPhysicsWorld), asCALL_CDECL);
     
     
-    // Register Variant GetPtr() for PhysicsWorld
+    // Register Variant GetPtr() for PhysicsWorld. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "PhysicsWorld@+ GetPhysicsWorld() const", asFUNCTION(GetVariantPtr<PhysicsWorld>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "PhysicsWorld@+ GetPhysicsWorld() const", asFUNCTION(GetVariantPtr<PhysicsWorld>), asCALL_CDECL_OBJLAST);
 }
 }
 
 

+ 4 - 4
Source/Engine/Script/ResourceAPI.cpp

@@ -36,9 +36,9 @@ void RegisterResource(asIScriptEngine* engine)
     RegisterResource<Resource>(engine, "Resource");
     RegisterResource<Resource>(engine, "Resource");
 }
 }
 
 
-static Resource* ResourceCacheGetResource(const String& type, const String& name, bool SendEventOnFailure, ResourceCache* ptr)
+static Resource* ResourceCacheGetResource(const String& type, const String& name, bool sendEventOnFailure, ResourceCache* ptr)
 {
 {
-    return ptr->GetResource(ShortStringHash(type), name, SendEventOnFailure);
+    return ptr->GetResource(ShortStringHash(type), name, sendEventOnFailure);
 }
 }
 
 
 static File* ResourceCacheGetFile(const String& name, ResourceCache* ptr)
 static File* ResourceCacheGetFile(const String& name, ResourceCache* ptr)
@@ -112,8 +112,8 @@ static void RegisterResourceCache(asIScriptEngine* engine)
     engine->RegisterObjectMethod("ResourceCache", "String SanitateResourceName(const String&in) const", asMETHOD(ResourceCache, SanitateResourceName), asCALL_THISCALL);
     engine->RegisterObjectMethod("ResourceCache", "String SanitateResourceName(const String&in) const", asMETHOD(ResourceCache, SanitateResourceName), asCALL_THISCALL);
     engine->RegisterObjectMethod("ResourceCache", "String SanitateResourceDirName(const String&in) const", asMETHOD(ResourceCache, SanitateResourceDirName), asCALL_THISCALL);
     engine->RegisterObjectMethod("ResourceCache", "String SanitateResourceDirName(const String&in) const", asMETHOD(ResourceCache, SanitateResourceDirName), asCALL_THISCALL);
     engine->RegisterObjectMethod("ResourceCache", "String GetResourceFileName(const String&in) const", asMETHOD(ResourceCache, GetResourceFileName), asCALL_THISCALL);
     engine->RegisterObjectMethod("ResourceCache", "String GetResourceFileName(const String&in) const", asMETHOD(ResourceCache, GetResourceFileName), asCALL_THISCALL);
-    engine->RegisterObjectMethod("ResourceCache", "Resource@+ GetResource(const String&in, const String&in, bool SendEventOnFailure = true)", asFUNCTION(ResourceCacheGetResource), asCALL_CDECL_OBJLAST);
-    engine->RegisterObjectMethod("ResourceCache", "Resource@+ GetResource(ShortStringHash, const String&in, bool SendEventOnFailure = true)", asMETHODPR(ResourceCache, GetResource, (ShortStringHash, const String&, bool), Resource*), asCALL_THISCALL);
+    engine->RegisterObjectMethod("ResourceCache", "Resource@+ GetResource(const String&in, const String&in, bool sendEventOnFailure = true)", asFUNCTION(ResourceCacheGetResource), asCALL_CDECL_OBJLAST);
+    engine->RegisterObjectMethod("ResourceCache", "Resource@+ GetResource(ShortStringHash, const String&in, bool sendEventOnFailure = true)", asMETHODPR(ResourceCache, GetResource, (ShortStringHash, const String&, bool), Resource*), asCALL_THISCALL);
     engine->RegisterObjectMethod("ResourceCache", "void set_memoryBudget(const String&in, uint)", asFUNCTION(ResourceCacheSetMemoryBudget), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ResourceCache", "void set_memoryBudget(const String&in, uint)", asFUNCTION(ResourceCacheSetMemoryBudget), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ResourceCache", "uint get_memoryBudget(const String&in) const", asFUNCTION(ResourceCacheGetMemoryBudget), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ResourceCache", "uint get_memoryBudget(const String&in) const", asFUNCTION(ResourceCacheGetMemoryBudget), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ResourceCache", "uint get_memoryUse(const String&in) const", asFUNCTION(ResourceCacheGetMemoryUse), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("ResourceCache", "uint get_memoryUse(const String&in) const", asFUNCTION(ResourceCacheGetMemoryUse), asCALL_CDECL_OBJLAST);

+ 2 - 2
Source/Engine/Script/SceneAPI.cpp

@@ -74,7 +74,7 @@ static void RegisterNode(asIScriptEngine* engine)
     // Now GetNode can be registered
     // Now GetNode can be registered
     engine->RegisterObjectMethod("Component", "Node@+ get_node() const", asMETHOD(Component, GetNode), asCALL_THISCALL);
     engine->RegisterObjectMethod("Component", "Node@+ get_node() const", asMETHOD(Component, GetNode), asCALL_THISCALL);
 
 
-    // Register Variant GetPtr() for Serializable, Node & Component
+    // Register Variant GetPtr() for Serializable, Node & Component. These are deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "Serializable@+ GetSerializable() const", asFUNCTION(GetVariantPtr<Serializable>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Serializable@+ GetSerializable() const", asFUNCTION(GetVariantPtr<Serializable>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Node@+ GetNode() const", asFUNCTION(GetVariantPtr<Node>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Node@+ GetNode() const", asFUNCTION(GetVariantPtr<Node>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Component@+ GetComponent() const", asFUNCTION(GetVariantPtr<Component>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Component@+ GetComponent() const", asFUNCTION(GetVariantPtr<Component>), asCALL_CDECL_OBJLAST);
@@ -218,7 +218,7 @@ static void RegisterScene(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Node", "Scene@+ get_scene() const", asMETHOD(Node, GetScene), asCALL_THISCALL);
     engine->RegisterObjectMethod("Node", "Scene@+ get_scene() const", asMETHOD(Node, GetScene), asCALL_THISCALL);
     engine->RegisterGlobalFunction("Scene@+ get_scene()", asFUNCTION(GetScriptContextScene), asCALL_CDECL);
     engine->RegisterGlobalFunction("Scene@+ get_scene()", asFUNCTION(GetScriptContextScene), asCALL_CDECL);
 
 
-    // Register Variant GetPtr() for Scene
+    // Register Variant GetPtr() for Scene. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "Scene@+ GetScene() const", asFUNCTION(GetVariantPtr<Scene>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "Scene@+ GetScene() const", asFUNCTION(GetVariantPtr<Scene>), asCALL_CDECL_OBJLAST);
 
 
     engine->RegisterGlobalFunction("Array<String>@ GetObjectCategories()", asFUNCTION(GetObjectCategories), asCALL_CDECL);
     engine->RegisterGlobalFunction("Array<String>@ GetObjectCategories()", asFUNCTION(GetObjectCategories), asCALL_CDECL);

+ 10 - 6
Source/Engine/Script/ScriptFile.cpp

@@ -678,27 +678,31 @@ void ScriptFile::SetParameters(asIScriptContext* context, asIScriptFunction* fun
                 switch (parameters[i].GetType())
                 switch (parameters[i].GetType())
                 {
                 {
                 case VAR_VECTOR2:
                 case VAR_VECTOR2:
-                    context->SetArgObject(i, (void *)&parameters[i].GetVector2());
+                    context->SetArgObject(i, (void*)&parameters[i].GetVector2());
                     break;
                     break;
                     
                     
                 case VAR_VECTOR3:
                 case VAR_VECTOR3:
-                    context->SetArgObject(i, (void *)&parameters[i].GetVector3());
+                    context->SetArgObject(i, (void*)&parameters[i].GetVector3());
                     break;
                     break;
                     
                     
                 case VAR_VECTOR4:
                 case VAR_VECTOR4:
-                    context->SetArgObject(i, (void *)&parameters[i].GetVector4());
+                    context->SetArgObject(i, (void*)&parameters[i].GetVector4());
                     break;
                     break;
                     
                     
                 case VAR_QUATERNION:
                 case VAR_QUATERNION:
-                    context->SetArgObject(i, (void *)&parameters[i].GetQuaternion());
+                    context->SetArgObject(i, (void*)&parameters[i].GetQuaternion());
                     break;
                     break;
                     
                     
                 case VAR_STRING:
                 case VAR_STRING:
-                    context->SetArgObject(i, (void *)&parameters[i].GetString());
+                    context->SetArgObject(i, (void*)&parameters[i].GetString());
+                    break;
+                    
+                case VAR_VOIDPTR:
+                    context->SetArgObject(i, parameters[i].GetVoidPtr());
                     break;
                     break;
                     
                     
                 case VAR_PTR:
                 case VAR_PTR:
-                    context->SetArgObject(i, (void *)parameters[i].GetPtr());
+                    context->SetArgObject(i, (void*)parameters[i].GetPtr());
                     break;
                     break;
                     
                     
                 default:
                 default:

+ 1 - 1
Source/Engine/Script/UIAPI.cpp

@@ -105,7 +105,7 @@ static void RegisterUIElement(asIScriptEngine* engine)
 
 
     RegisterUIElement<UIElement>(engine, "UIElement");
     RegisterUIElement<UIElement>(engine, "UIElement");
 
 
-    // Register Variant GetPtr() for UIElement
+    // Register Variant GetPtr() for UIElement. This is deprecated, GetPtr() should be used instead.
     engine->RegisterObjectMethod("Variant", "UIElement@+ GetUIElement() const", asFUNCTION(GetVariantPtr<UIElement>), asCALL_CDECL_OBJLAST);
     engine->RegisterObjectMethod("Variant", "UIElement@+ GetUIElement() const", asFUNCTION(GetVariantPtr<UIElement>), asCALL_CDECL_OBJLAST);
 }
 }
 
 

+ 3 - 3
Source/Engine/UI/Button.cpp

@@ -80,7 +80,7 @@ void Button::Update(float timeStep)
             using namespace Pressed;
             using namespace Pressed;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             SendEvent(E_PRESSED, eventData);
             SendEvent(E_PRESSED, eventData);
         }
         }
     }
     }
@@ -108,7 +108,7 @@ void Button::OnClickBegin(const IntVector2& position, const IntVector2& screenPo
         using namespace Pressed;
         using namespace Pressed;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         SendEvent(E_PRESSED, eventData);
         SendEvent(E_PRESSED, eventData);
     }
     }
 }
 }
@@ -122,7 +122,7 @@ void Button::OnClickEnd(const IntVector2& position, const IntVector2& screenPosi
         using namespace Released;
         using namespace Released;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         SendEvent(E_RELEASED, eventData);
         SendEvent(E_RELEASED, eventData);
     }
     }
 }
 }

+ 1 - 1
Source/Engine/UI/CheckBox.cpp

@@ -92,7 +92,7 @@ void CheckBox::SetChecked(bool enable)
         using namespace Toggled;
         using namespace Toggled;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_STATE] = checked_;
         eventData[P_STATE] = checked_;
         SendEvent(E_TOGGLED, eventData);
         SendEvent(E_TOGGLED, eventData);
     }
     }

+ 1 - 1
Source/Engine/UI/DropDownList.cpp

@@ -141,7 +141,7 @@ void DropDownList::OnHidePopup()
     using namespace ItemSelected;
     using namespace ItemSelected;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_SELECTION] = GetSelection();
     eventData[P_SELECTION] = GetSelection();
     SendEvent(E_ITEMSELECTED, eventData);
     SendEvent(E_ITEMSELECTED, eventData);
 }
 }

+ 3 - 3
Source/Engine/UI/LineEdit.cpp

@@ -343,7 +343,7 @@ void LineEdit::OnKey(int key, int buttons, int qualifiers)
             using namespace UnhandledKey;
             using namespace UnhandledKey;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_KEY] = key;
             eventData[P_KEY] = key;
             eventData[P_BUTTONS] = buttons;
             eventData[P_BUTTONS] = buttons;
             eventData[P_QUALIFIERS] = qualifiers;
             eventData[P_QUALIFIERS] = qualifiers;
@@ -393,7 +393,7 @@ void LineEdit::OnKey(int key, int buttons, int qualifiers)
             using namespace TextFinished;
             using namespace TextFinished;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_TEXT] = line_;
             eventData[P_TEXT] = line_;
             SendEvent(E_TEXTFINISHED, eventData);
             SendEvent(E_TEXTFINISHED, eventData);
             return;
             return;
@@ -563,7 +563,7 @@ void LineEdit::UpdateText()
     using namespace TextChanged;
     using namespace TextChanged;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_TEXT] = line_;
     eventData[P_TEXT] = line_;
     SendEvent(E_TEXTCHANGED, eventData);
     SendEvent(E_TEXTCHANGED, eventData);
 }
 }

+ 9 - 9
Source/Engine/UI/ListView.cpp

@@ -290,7 +290,7 @@ void ListView::OnKey(int key, int buttons, int qualifiers)
     using namespace UnhandledKey;
     using namespace UnhandledKey;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_KEY] = key;
     eventData[P_KEY] = key;
     eventData[P_BUTTONS] = buttons;
     eventData[P_BUTTONS] = buttons;
     eventData[P_QUALIFIERS] = qualifiers;
     eventData[P_QUALIFIERS] = qualifiers;
@@ -491,7 +491,7 @@ void ListView::SetSelections(const PODVector<unsigned>& indices)
             using namespace ItemSelected;
             using namespace ItemSelected;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_SELECTION] = index;
             eventData[P_SELECTION] = index;
             SendEvent(E_ITEMDESELECTED, eventData);
             SendEvent(E_ITEMDESELECTED, eventData);
 
 
@@ -523,7 +523,7 @@ void ListView::SetSelections(const PODVector<unsigned>& indices)
                 using namespace ItemSelected;
                 using namespace ItemSelected;
 
 
                 VariantMap& eventData = GetEventDataMap();
                 VariantMap& eventData = GetEventDataMap();
-                eventData[P_ELEMENT] = (void*)this;
+                eventData[P_ELEMENT] = this;
                 eventData[P_SELECTION] = *i;
                 eventData[P_SELECTION] = *i;
                 SendEvent(E_ITEMSELECTED, eventData);
                 SendEvent(E_ITEMSELECTED, eventData);
 
 
@@ -563,7 +563,7 @@ void ListView::AddSelection(unsigned index)
             using namespace ItemSelected;
             using namespace ItemSelected;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_SELECTION] = index;
             eventData[P_SELECTION] = index;
             SendEvent(E_ITEMSELECTED, eventData);
             SendEvent(E_ITEMSELECTED, eventData);
 
 
@@ -589,7 +589,7 @@ void ListView::RemoveSelection(unsigned index)
         using namespace ItemSelected;
         using namespace ItemSelected;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_SELECTION] = index;
         eventData[P_SELECTION] = index;
         SendEvent(E_ITEMDESELECTED, eventData);
         SendEvent(E_ITEMDESELECTED, eventData);
     }
     }
@@ -1026,8 +1026,8 @@ void ListView::HandleUIMouseClick(StringHash eventType, VariantMap& eventData)
     
     
     // Propagate the click as an event. Also include right-clicks
     // Propagate the click as an event. Also include right-clicks
     VariantMap& clickEventData = GetEventDataMap();
     VariantMap& clickEventData = GetEventDataMap();
-    clickEventData[ItemClicked::P_ELEMENT] = (void*)this;
-    clickEventData[ItemClicked::P_ITEM] = (void*)element;
+    clickEventData[ItemClicked::P_ELEMENT] = this;
+    clickEventData[ItemClicked::P_ITEM] = element;
     clickEventData[ItemClicked::P_SELECTION] = i;
     clickEventData[ItemClicked::P_SELECTION] = i;
     clickEventData[ItemClicked::P_BUTTON] = button;
     clickEventData[ItemClicked::P_BUTTON] = button;
     clickEventData[ItemClicked::P_BUTTONS] = buttons;
     clickEventData[ItemClicked::P_BUTTONS] = buttons;
@@ -1048,8 +1048,8 @@ void ListView::HandleUIMouseDoubleClick(StringHash eventType, VariantMap& eventD
         return;
         return;
 
 
     VariantMap& clickEventData = GetEventDataMap();
     VariantMap& clickEventData = GetEventDataMap();
-    clickEventData[ItemDoubleClicked::P_ELEMENT] = (void*)this;
-    clickEventData[ItemDoubleClicked::P_ITEM] = (void*)element;
+    clickEventData[ItemDoubleClicked::P_ELEMENT] = this;
+    clickEventData[ItemDoubleClicked::P_ITEM] = element;
     clickEventData[ItemDoubleClicked::P_SELECTION] = i;
     clickEventData[ItemDoubleClicked::P_SELECTION] = i;
     clickEventData[ItemDoubleClicked::P_BUTTON] = button;
     clickEventData[ItemDoubleClicked::P_BUTTON] = button;
     clickEventData[ItemDoubleClicked::P_BUTTONS] = buttons;
     clickEventData[ItemDoubleClicked::P_BUTTONS] = buttons;

+ 2 - 2
Source/Engine/UI/Menu.cpp

@@ -295,7 +295,7 @@ void Menu::ShowPopup(bool enable)
     {
     {
         OnShowPopup();
         OnShowPopup();
 
 
-        popup_->SetVar(VAR_ORIGIN, (void*)this);
+        popup_->SetVar(VAR_ORIGIN, this);
         static_cast<Window*>(popup_.Get())->SetModal(true);
         static_cast<Window*>(popup_.Get())->SetModal(true);
 
 
         popup_->SetPosition(GetScreenPosition() + popupOffset_);
         popup_->SetPosition(GetScreenPosition() + popupOffset_);
@@ -376,7 +376,7 @@ void Menu::HandlePressedReleased(StringHash eventType, VariantMap& eventData)
         using namespace MenuSelected;
         using namespace MenuSelected;
 
 
         VariantMap& newEventData = GetEventDataMap();
         VariantMap& newEventData = GetEventDataMap();
-        newEventData[P_ELEMENT] = (void*)this;
+        newEventData[P_ELEMENT] = this;
         SendEvent(E_MENUSELECTED, newEventData);
         SendEvent(E_MENUSELECTED, newEventData);
     }
     }
 }
 }

+ 1 - 1
Source/Engine/UI/ScrollBar.cpp

@@ -287,7 +287,7 @@ void ScrollBar::HandleSliderChanged(StringHash eventType, VariantMap& eventData)
 {
 {
     // Send the event forward
     // Send the event forward
     VariantMap& newEventData = GetEventDataMap();
     VariantMap& newEventData = GetEventDataMap();
-    newEventData[ScrollBarChanged::P_ELEMENT] = (void*)this;
+    newEventData[ScrollBarChanged::P_ELEMENT] = this;
     newEventData[ScrollBarChanged::P_VALUE] = slider_->GetValue();
     newEventData[ScrollBarChanged::P_VALUE] = slider_->GetValue();
     SendEvent(E_SCROLLBARCHANGED, newEventData);
     SendEvent(E_SCROLLBARCHANGED, newEventData);
 }
 }

+ 1 - 1
Source/Engine/UI/ScrollView.cpp

@@ -408,7 +408,7 @@ void ScrollView::UpdateView(const IntVector2& position)
         using namespace ViewChanged;
         using namespace ViewChanged;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_X] = viewPosition_.x_;
         eventData[P_X] = viewPosition_.x_;
         eventData[P_Y] = viewPosition_.y_;
         eventData[P_Y] = viewPosition_.y_;
         SendEvent(E_VIEWCHANGED, eventData);
         SendEvent(E_VIEWCHANGED, eventData);

+ 2 - 2
Source/Engine/UI/Slider.cpp

@@ -183,7 +183,7 @@ void Slider::SetValue(float value)
         using namespace SliderChanged;
         using namespace SliderChanged;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_VALUE] = value_;
         eventData[P_VALUE] = value_;
         SendEvent(E_SLIDERCHANGED, eventData);
         SendEvent(E_SLIDERCHANGED, eventData);
     }
     }
@@ -257,7 +257,7 @@ void Slider::Page(const IntVector2& position, bool pressed)
     using namespace SliderPaged;
     using namespace SliderPaged;
     
     
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_OFFSET] = offset;
     eventData[P_OFFSET] = offset;
 
 
     // Start transmitting repeated pages after the initial press
     // Start transmitting repeated pages after the initial press

+ 13 - 11
Source/Engine/UI/UI.cpp

@@ -204,8 +204,8 @@ void UI::SetFocusElement(UIElement* element, bool byKey)
     }
     }
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_CLICKEDELEMENT] = (void*)originalElement;
-    eventData[P_ELEMENT] = (void*)element;
+    eventData[P_CLICKEDELEMENT] = originalElement;
+    eventData[P_ELEMENT] = element;
     SendEvent(E_FOCUSCHANGED, eventData);
     SendEvent(E_FOCUSCHANGED, eventData);
 }
 }
 
 
@@ -257,7 +257,8 @@ bool UI::SetModalElement(UIElement* modalElement, bool enable)
             return false;
             return false;
 
 
         // Revert back to original parent
         // Revert back to original parent
-        modalElement->SetParent(static_cast<UIElement*>(modalElement->GetVar(VAR_ORIGINAL_PARENT).GetPtr()), modalElement->GetVar(VAR_ORIGINAL_CHILD_INDEX).GetUInt());
+        modalElement->SetParent(static_cast<UIElement*>(modalElement->GetVar(VAR_ORIGINAL_PARENT).GetPtr()),
+            modalElement->GetVar(VAR_ORIGINAL_CHILD_INDEX).GetUInt());
         VariantMap& vars = const_cast<VariantMap&>(modalElement->GetVars());
         VariantMap& vars = const_cast<VariantMap&>(modalElement->GetVars());
         vars.Erase(VAR_ORIGINAL_PARENT);
         vars.Erase(VAR_ORIGINAL_PARENT);
         vars.Erase(VAR_ORIGINAL_CHILD_INDEX);
         vars.Erase(VAR_ORIGINAL_CHILD_INDEX);
@@ -270,7 +271,8 @@ bool UI::SetModalElement(UIElement* modalElement, bool enable)
             if (element)
             if (element)
             {
             {
                 const_cast<VariantMap&>(originElement->GetVars()).Erase(VAR_PARENT_CHANGED);
                 const_cast<VariantMap&>(originElement->GetVars()).Erase(VAR_PARENT_CHANGED);
-                element->SetParent(static_cast<UIElement*>(element->GetVar(VAR_ORIGINAL_PARENT).GetPtr()), element->GetVar(VAR_ORIGINAL_CHILD_INDEX).GetUInt());
+                element->SetParent(static_cast<UIElement*>(element->GetVar(VAR_ORIGINAL_PARENT).GetPtr()),
+                    element->GetVar(VAR_ORIGINAL_CHILD_INDEX).GetUInt());
                 vars = const_cast<VariantMap&>(element->GetVars());
                 vars = const_cast<VariantMap&>(element->GetVars());
                 vars.Erase(VAR_ORIGINAL_PARENT);
                 vars.Erase(VAR_ORIGINAL_PARENT);
                 vars.Erase(VAR_ORIGINAL_CHILD_INDEX);
                 vars.Erase(VAR_ORIGINAL_CHILD_INDEX);
@@ -922,8 +924,8 @@ void UI::ProcessHover(const IntVector2& cursorPos, int buttons, int qualifiers,
             using namespace DragDropTest;
             using namespace DragDropTest;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_SOURCE] = (void*)dragElement_.Get();
-            eventData[P_TARGET] = (void*)element.Get();
+            eventData[P_SOURCE] = dragElement_.Get();
+            eventData[P_TARGET] = element.Get();
             eventData[P_ACCEPT] = accept;
             eventData[P_ACCEPT] = accept;
             SendEvent(E_DRAGDROPTEST, eventData);
             SendEvent(E_DRAGDROPTEST, eventData);
             accept = eventData[P_ACCEPT].GetBool();
             accept = eventData[P_ACCEPT].GetBool();
@@ -1028,8 +1030,8 @@ void UI::ProcessClickEnd(const IntVector2& cursorPos, int button, int buttons, i
                             using namespace DragDropFinish;
                             using namespace DragDropFinish;
 
 
                             VariantMap& eventData = GetEventDataMap();
                             VariantMap& eventData = GetEventDataMap();
-                            eventData[P_SOURCE] = (void*)dragElement_.Get();
-                            eventData[P_TARGET] = (void*)element.Get();
+                            eventData[P_SOURCE] = dragElement_.Get();
+                            eventData[P_TARGET] = element.Get();
                             eventData[P_ACCEPT] = accept;
                             eventData[P_ACCEPT] = accept;
                             SendEvent(E_DRAGDROPFINISH, eventData);
                             SendEvent(E_DRAGDROPFINISH, eventData);
                         }
                         }
@@ -1088,7 +1090,7 @@ void UI::SendDragEvent(StringHash eventType, UIElement* element, const IntVector
     using namespace DragBegin;
     using namespace DragBegin;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)element;
+    eventData[P_ELEMENT] = element;
     eventData[P_X] = screenPos.x_;
     eventData[P_X] = screenPos.x_;
     eventData[P_Y] = screenPos.y_;
     eventData[P_Y] = screenPos.y_;
     eventData[P_ELEMENTX] = relativePos.x_;
     eventData[P_ELEMENTX] = relativePos.x_;
@@ -1100,7 +1102,7 @@ void UI::SendDragEvent(StringHash eventType, UIElement* element, const IntVector
 void UI::SendClickEvent(StringHash eventType, UIElement* element, const IntVector2& pos, int button, int buttons, int qualifiers)
 void UI::SendClickEvent(StringHash eventType, UIElement* element, const IntVector2& pos, int button, int buttons, int qualifiers)
 {
 {
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[UIMouseClick::P_ELEMENT] = (void*)element;
+    eventData[UIMouseClick::P_ELEMENT] = element;
     eventData[UIMouseClick::P_X] = pos.x_;
     eventData[UIMouseClick::P_X] = pos.x_;
     eventData[UIMouseClick::P_Y] = pos.y_;
     eventData[UIMouseClick::P_Y] = pos.y_;
     eventData[UIMouseClick::P_BUTTON] = button;
     eventData[UIMouseClick::P_BUTTON] = button;
@@ -1389,7 +1391,7 @@ void UI::HandleDropFile(StringHash eventType, VariantMap& eventData)
         uiEventData[P_FILENAME] = eventData[P_FILENAME];
         uiEventData[P_FILENAME] = eventData[P_FILENAME];
         uiEventData[P_X] = screenPos.x_;
         uiEventData[P_X] = screenPos.x_;
         uiEventData[P_Y] = screenPos.y_;
         uiEventData[P_Y] = screenPos.y_;
-        uiEventData[P_ELEMENT] = (void*)element;
+        uiEventData[P_ELEMENT] = element;
         
         
         if (element)
         if (element)
         {
         {

+ 17 - 17
Source/Engine/UI/UIElement.cpp

@@ -531,7 +531,7 @@ void UIElement::SetName(const String& name)
     using namespace NameChanged;
     using namespace NameChanged;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
 
 
     SendEvent(E_NAMECHANGED, eventData);
     SendEvent(E_NAMECHANGED, eventData);
 }
 }
@@ -547,7 +547,7 @@ void UIElement::SetPosition(const IntVector2& position)
         using namespace Positioned;
         using namespace Positioned;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_X] = position_.x_;
         eventData[P_X] = position_.x_;
         eventData[P_Y] = position_.y_;
         eventData[P_Y] = position_.y_;
         SendEvent(E_POSITIONED, eventData);
         SendEvent(E_POSITIONED, eventData);
@@ -584,7 +584,7 @@ void UIElement::SetSize(const IntVector2& size)
             using namespace Resized;
             using namespace Resized;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_WIDTH] = size_.x_;
             eventData[P_WIDTH] = size_.x_;
             eventData[P_HEIGHT] = size_.y_;
             eventData[P_HEIGHT] = size_.y_;
             SendEvent(E_RESIZED, eventData);
             SendEvent(E_RESIZED, eventData);
@@ -834,7 +834,7 @@ void UIElement::SetVisible(bool enable)
         using namespace VisibleChanged;
         using namespace VisibleChanged;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_VISIBLE] = visible_;
         eventData[P_VISIBLE] = visible_;
         SendEvent(E_VISIBLECHANGED, eventData);
         SendEvent(E_VISIBLECHANGED, eventData);
     }
     }
@@ -1035,7 +1035,7 @@ void UIElement::UpdateLayout()
     using namespace LayoutUpdated;
     using namespace LayoutUpdated;
 
 
     VariantMap& eventData = GetEventDataMap();
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     SendEvent(E_LAYOUTUPDATED, eventData);
     SendEvent(E_LAYOUTUPDATED, eventData);
 
 
     EnableLayoutUpdate();
     EnableLayoutUpdate();
@@ -1172,9 +1172,9 @@ void UIElement::InsertChild(unsigned index, UIElement* element)
         using namespace ElementAdded;
         using namespace ElementAdded;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ROOT] = (void*)root;
-        eventData[P_PARENT] = (void*)this;
-        eventData[P_ELEMENT] = (void*)element;
+        eventData[P_ROOT] = root;
+        eventData[P_PARENT] = this;
+        eventData[P_ELEMENT] = element;
 
 
         sender->SendEvent(E_ELEMENTADDED, eventData);
         sender->SendEvent(E_ELEMENTADDED, eventData);
     }
     }
@@ -1193,9 +1193,9 @@ void UIElement::RemoveChild(UIElement* element, unsigned index)
                 using namespace ElementRemoved;
                 using namespace ElementRemoved;
 
 
                 VariantMap& eventData = GetEventDataMap();
                 VariantMap& eventData = GetEventDataMap();
-                eventData[P_ROOT] = (void*)GetRoot();
-                eventData[P_PARENT] = (void*)this;
-                eventData[P_ELEMENT] = (void*)element;
+                eventData[P_ROOT] = GetRoot();
+                eventData[P_PARENT] = this;
+                eventData[P_ELEMENT] = element;
 
 
                 sender->SendEvent(E_ELEMENTREMOVED, eventData);
                 sender->SendEvent(E_ELEMENTREMOVED, eventData);
             }
             }
@@ -1220,9 +1220,9 @@ void UIElement::RemoveChildAtIndex(unsigned index)
         using namespace ElementRemoved;
         using namespace ElementRemoved;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ROOT] = (void*)GetRoot();
-        eventData[P_PARENT] = (void*)this;
-        eventData[P_ELEMENT] = (void*)children_[index];
+        eventData[P_ROOT] = GetRoot();
+        eventData[P_PARENT] = this;
+        eventData[P_ELEMENT] = children_[index];
 
 
         sender->SendEvent(E_ELEMENTREMOVED, eventData);
         sender->SendEvent(E_ELEMENTREMOVED, eventData);
     }
     }
@@ -1245,9 +1245,9 @@ void UIElement::RemoveAllChildren()
             using namespace ElementRemoved;
             using namespace ElementRemoved;
 
 
             VariantMap& eventData = GetEventDataMap();
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ROOT] = (void*)root;
-            eventData[P_PARENT] = (void*)this;
-            eventData[P_ELEMENT] = (void*)(*i).Get();
+            eventData[P_ROOT] = root;
+            eventData[P_PARENT] = this;
+            eventData[P_ELEMENT] = (*i).Get();
 
 
             sender->SendEvent(E_ELEMENTREMOVED, eventData);
             sender->SendEvent(E_ELEMENTREMOVED, eventData);
         }
         }

+ 1 - 1
Source/Engine/UI/Window.cpp

@@ -257,7 +257,7 @@ void Window::SetModal(bool modal)
         using namespace ModalChanged;
         using namespace ModalChanged;
 
 
         VariantMap& eventData = GetEventDataMap();
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_MODAL] = modal;
         eventData[P_MODAL] = modal;
         SendEvent(E_MODALCHANGED, eventData);
         SendEvent(E_MODALCHANGED, eventData);
     }
     }

+ 1 - 1
Source/Samples/13_Ragdolls/CreateRagdoll.cpp

@@ -47,7 +47,7 @@ void CreateRagdoll::HandleNodeCollision(StringHash eventType, VariantMap& eventD
     using namespace NodeCollision;
     using namespace NodeCollision;
 
 
     // Get the other colliding body, make sure it is moving (has nonzero mass)
     // Get the other colliding body, make sure it is moving (has nonzero mass)
-    RigidBody* otherBody = (RigidBody*)eventData[P_OTHERBODY].GetPtr();
+    RigidBody* otherBody = static_cast<RigidBody*>(eventData[P_OTHERBODY].GetPtr());
 
 
     if (otherBody->GetMass() > 0.0f)
     if (otherBody->GetMass() > 0.0f)
     {
     {

+ 1 - 1
Source/Samples/16_Chat/Chat.cpp

@@ -263,7 +263,7 @@ void Chat::HandleNetworkMessage(StringHash eventType, VariantMap& eventData)
         // If we are a client, just display the message
         // If we are a client, just display the message
         if (network->IsServerRunning())
         if (network->IsServerRunning())
         {
         {
-            Connection* sender = (Connection*)eventData[P_CONNECTION].GetPtr();
+            Connection* sender = static_cast<Connection*>(eventData[P_CONNECTION].GetPtr());
             
             
             text = sender->ToString() + " " + text;
             text = sender->ToString() + " " + text;
             
             

+ 2 - 2
Source/Samples/17_SceneReplication/SceneReplication.cpp

@@ -463,7 +463,7 @@ void SceneReplication::HandleClientConnected(StringHash eventType, VariantMap& e
     using namespace ClientConnected;
     using namespace ClientConnected;
     
     
     // When a client connects, assign to scene to begin scene replication
     // When a client connects, assign to scene to begin scene replication
-    Connection* newConnection = (Connection*)eventData[P_CONNECTION].GetPtr();
+    Connection* newConnection = static_cast<Connection*>(eventData[P_CONNECTION].GetPtr());
     newConnection->SetScene(scene_);
     newConnection->SetScene(scene_);
     
     
     // Then create a controllable object for that client
     // Then create a controllable object for that client
@@ -481,7 +481,7 @@ void SceneReplication::HandleClientDisconnected(StringHash eventType, VariantMap
     using namespace ClientConnected;
     using namespace ClientConnected;
     
     
     // When a client disconnects, remove the controlled object
     // When a client disconnects, remove the controlled object
-    Connection* connection = (Connection*)eventData[P_CONNECTION].GetPtr();
+    Connection* connection = static_cast<Connection*>(eventData[P_CONNECTION].GetPtr());
     Node* object = serverObjects_[connection];
     Node* object = serverObjects_[connection];
     if (object)
     if (object)
         object->Remove();
         object->Remove();