浏览代码

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 年之前
父节点
当前提交
47836474e2
共有 60 个文件被更改,包括 439 次插入332 次删除
  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)
     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")
     draggedElement:SetPosition(dragCurrentPosition - dragBeginPosition)
 end
@@ -163,8 +166,6 @@ function HandleControlClicked(eventType, eventData)
     local windowTitle = tolua.cast(element, 'Text')
 
     -- 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 name = "...?"
     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)
 {
     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;
 }
 
@@ -163,9 +164,7 @@ void HandleControlClicked(StringHash eventType, VariantMap& eventData)
     Text@ windowTitle = window.GetChild("WindowTitle", true);
 
     // 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 = "...?";
     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 (network.serverRunning)
         {
-            Connection@ sender = eventData["Connection"].GetConnection();
+            Connection@ sender = eventData["Connection"].GetPtr();
             
             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)
 {
     // When a client connects, assign to scene to begin scene replication
-    Connection@ newConnection = eventData["Connection"].GetConnection();
+    Connection@ newConnection = eventData["Connection"].GetPtr();
     newConnection.scene = scene_;
     
     // Then create a controllable object for that client
@@ -409,7 +409,7 @@ void HandleClientConnected(StringHash eventType, VariantMap& eventData)
 void HandleClientDisconnected(StringHash eventType, VariantMap& eventData)
 {
     // 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)
     {
         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)
         return;
 
-    UIElement@ attrEdit = eventData["Element"].GetUIElement();
+    UIElement@ attrEdit = eventData["Element"].GetPtr();
     UIElement@ parent = attrEdit.parent;
     Array<Serializable@>@ serializables = GetAttributeEditorTargets(attrEdit);
     if (serializables.empty)
@@ -901,7 +901,7 @@ ResourcePicker@ GetResourcePicker(ShortStringHash resourceType)
 
 void PickResource(StringHash eventType, VariantMap& eventData)
 {
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     LineEdit@ attrEdit = button.parent.children[0];
 
     Array<Serializable@>@ targets = GetAttributeEditorTargets(attrEdit);
@@ -1043,7 +1043,7 @@ String GetResourceNameFromFullName(const String&in resourceName)
 
 void OpenResource(StringHash eventType, VariantMap& eventData)
 {
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     LineEdit@ attrEdit = button.parent.children[0];
 
     String fileName = attrEdit.text.Trimmed();
@@ -1064,7 +1064,7 @@ void OpenResource(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];
 
     String fileName = attrEdit.text.Trimmed();
@@ -1084,7 +1084,7 @@ void EditResource(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];
 
     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)
 {
-    Button@ button = eventData["Element"].GetUIElement();
+    Button@ button = eventData["Element"].GetPtr();
     bool enable = button.name == "ExpandButton";
     CheckBox@ checkBox = hierarchyWindow.GetChild("AllCheckBox", true);
     bool all = checkBox.checked;
@@ -721,16 +721,16 @@ void HandleHierarchyListSelectionChange()
 
 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;
     eventData["Accept"] = TestDragDrop(source, target, itemType);
 }
 
 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;
     bool accept = TestDragDrop(source, target, itemType);
     eventData["Accept"] = accept;
@@ -977,7 +977,7 @@ void HandleNodeAdded(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
         return;
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     if (showTemporaryObject || !node.temporary)
         UpdateHierarchyItem(node);
 }
@@ -987,7 +987,7 @@ void HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
         return;
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     uint index = GetListIndex(node);
     UpdateHierarchyItem(index, null, null);
 }
@@ -998,8 +998,8 @@ void HandleComponentAdded(StringHash eventType, VariantMap& eventData)
         return;
 
     // 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)
     {
         uint nodeIndex = GetListIndex(node);
@@ -1016,7 +1016,7 @@ void HandleComponentRemoved(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
         return;
 
-    Component@ component = eventData["Component"].GetComponent();
+    Component@ component = eventData["Component"].GetPtr();
     uint index = GetComponentListIndex(component);
     if (index != NO_ITEM)
         hierarchyList.RemoveItem(index);
@@ -1027,7 +1027,7 @@ void HandleNodeNameChanged(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
         return;
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(node), node.enabled, GetNodeTitle(node));
 }
 
@@ -1036,7 +1036,7 @@ void HandleNodeEnabledChanged(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
         return;
 
-    Node@ node = eventData["Node"].GetNode();
+    Node@ node = eventData["Node"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(node), node.enabled);
     attributesDirty = true;
 }
@@ -1046,7 +1046,7 @@ void HandleComponentEnabledChanged(StringHash eventType, VariantMap& eventData)
     if (suppressSceneChanges)
         return;
 
-    Component@ component = eventData["Component"].GetComponent();
+    Component@ component = eventData["Component"].GetPtr();
     UpdateHierarchyItemText(GetComponentListIndex(component), component.enabledEffective);
     attributesDirty = true;
 }
@@ -1056,7 +1056,7 @@ void HandleUIElementAdded(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
         return;
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     if ((showInternalUIElement || !element.internal) && (showTemporaryObject || !element.temporary))
         UpdateHierarchyItem(element);
 }
@@ -1066,7 +1066,7 @@ void HandleUIElementRemoved(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
         return;
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     UpdateHierarchyItem(GetListIndex(element), null, null);
 }
 
@@ -1075,7 +1075,7 @@ void HandleElementNameChanged(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
         return;
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(element), element.visible, GetUIElementTitle(element));
 }
 
@@ -1084,7 +1084,7 @@ void HandleElementVisibilityChanged(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges)
         return;
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     UpdateHierarchyItemText(GetListIndex(element), element.visible);
 }
 
@@ -1094,7 +1094,7 @@ void HandleElementAttributeChanged(StringHash eventType, VariantMap& eventData)
     if (suppressUIElementChanges || inEditAttribute)
         return;
 
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     for (uint i = 0; i < editUIElements.length; ++i)
     {
         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;
 
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     Array<Serializable@>@ serializables = GetAttributeEditorTargets(button);
     if (serializables.empty)
         return;
@@ -668,14 +668,14 @@ void DeleteUIElementVariable(StringHash eventType, VariantMap& eventData)
 
 String ExtractVariableName(VariantMap& eventData)
 {
-    UIElement@ element = eventData["Element"].GetUIElement();
+    UIElement@ element = eventData["Element"].GetPtr();
     LineEdit@ nameEdit = element.parent.GetChild("VarNameEdit");
     return nameEdit.text.Trimmed();
 }
 
 Variant ExtractVariantType(VariantMap& eventData)
 {
-    DropDownList@ dropDown = eventData["Element"].GetUIElement();
+    DropDownList@ dropDown = eventData["Element"].GetPtr();
     switch (dropDown.selection)
     {
     case 0:
@@ -741,7 +741,7 @@ void HandleStyleItemSelected(StringHash eventType, VariantMap& eventData)
 
     ui.cursor.shape = CS_BUSY;
 
-    DropDownList@ styleList = eventData["Element"].GetUIElement();
+    DropDownList@ styleList = eventData["Element"].GetPtr();
     Text@ text = cast<Text>(styleList.selectedItem);
     if (text is null)
         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)
 {
-    LineEdit@ nameEdit = eventData["Element"].GetUIElement();
+    LineEdit@ nameEdit = eventData["Element"].GetPtr();
     String newMaterialName = nameEdit.text.Trimmed();
     if (!newMaterialName.empty)
     {
@@ -467,7 +467,7 @@ void EditShaderParameter(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
         return;
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     uint coordinate = attrEdit.vars["Coordinate"].GetUInt();
 
     String name = attrEdit.vars["Name"].GetString();
@@ -501,7 +501,7 @@ void CreateShaderParameter(StringHash eventType, VariantMap& eventData)
     if (newName.empty)
         return;
 
-    DropDownList@ dropDown = eventData["Element"].GetUIElement();
+    DropDownList@ dropDown = eventData["Element"].GetPtr();
     Variant newValue;
 
     switch (dropDown.selection)
@@ -549,7 +549,7 @@ void PickMaterialTexture(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
         return;
 
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     resourcePickIndex = button.vars["Index"].GetUInt();
 
     @resourcePicker = GetResourcePicker(ShortStringHash("Texture2D"));
@@ -594,7 +594,7 @@ void EditMaterialTexture(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
         return;
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     String textureName = attrEdit.text.Trimmed();
     uint index = attrEdit.vars["Index"].GetUInt();
     
@@ -640,7 +640,7 @@ void PickMaterialTechnique(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
         return;
 
-    UIElement@ button = eventData["Element"].GetUIElement();
+    UIElement@ button = eventData["Element"].GetPtr();
     resourcePickIndex = button.vars["Index"].GetUInt();
 
     @resourcePicker = GetResourcePicker(ShortStringHash("Technique"));
@@ -686,7 +686,7 @@ void EditMaterialTechnique(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
         return;
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     String techniqueName = attrEdit.text.Trimmed();
     uint index = attrEdit.vars["Index"].GetUInt();
 
@@ -707,7 +707,7 @@ void EditTechniqueQuality(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
         return;
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     uint newQualityLevel = attrEdit.text.ToUInt();
     uint index = attrEdit.vars["Index"].GetUInt();
 
@@ -722,7 +722,7 @@ void EditTechniqueLodDistance(StringHash eventType, VariantMap& eventData)
     if (editMaterial is null)
         return;
 
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     float newLodDistance = attrEdit.text.ToFloat();
     uint index = attrEdit.vars["Index"].GetUInt();
 
@@ -751,7 +751,7 @@ void EditConstantBias(StringHash eventType, VariantMap& eventData)
         
     BeginMaterialEdit();
  
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     BiasParameters bias = editMaterial.depthBias;
     bias.constantBias = attrEdit.text.ToFloat();
     editMaterial.depthBias = bias;
@@ -766,7 +766,7 @@ void EditSlopeBias(StringHash eventType, VariantMap& eventData)
         
     BeginMaterialEdit();
  
-    LineEdit@ attrEdit = eventData["Element"].GetUIElement();
+    LineEdit@ attrEdit = eventData["Element"].GetPtr();
     BiasParameters bias = editMaterial.depthBias;
     bias.slopeScaledBias = attrEdit.text.ToFloat();
     editMaterial.depthBias = bias;
@@ -781,7 +781,7 @@ void EditCullMode(StringHash eventType, VariantMap& eventData)
         
     BeginMaterialEdit();
     
-    DropDownList@ attrEdit = eventData["Element"].GetUIElement();
+    DropDownList@ attrEdit = eventData["Element"].GetPtr();
     editMaterial.cullMode = CullMode(attrEdit.selection);
 
     EndMaterialEdit();
@@ -794,7 +794,7 @@ void EditShadowCullMode(StringHash eventType, VariantMap& eventData)
         
     BeginMaterialEdit();
     
-    DropDownList@ attrEdit = eventData["Element"].GetUIElement();
+    DropDownList@ attrEdit = eventData["Element"].GetPtr();
     editMaterial.shadowCullMode = CullMode(attrEdit.selection);
 
     EndMaterialEdit();

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

@@ -216,7 +216,7 @@ void HideEditorPreferencesDialog()
 
 void EditUIMinOpacity(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     uiMinOpacity = edit.text.ToFloat();
     edit.text = String(uiMinOpacity);
     FadeUI();
@@ -225,7 +225,7 @@ void EditUIMinOpacity(StringHash eventType, VariantMap& eventData)
 
 void EditUIMaxOpacity(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     uiMaxOpacity = edit.text.ToFloat();
     edit.text = String(uiMaxOpacity);
     FadeUI();
@@ -234,20 +234,20 @@ void EditUIMaxOpacity(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);
 }
 
 void ToggleShowTemporaryObject(StringHash eventType, VariantMap& eventData)
 {
-    showTemporaryObject = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    showTemporaryObject = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateHierarchyItem(editorScene, true);
     UpdateHierarchyItem(editorUIElement, true);
 }
 
 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());
     if (edit.name == "NodeItemTextColor.r")
         edit.text = String(normalTextColor.r);
@@ -260,7 +260,7 @@ void EditNodeTextColor(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());
     if (edit.name == "ComponentItemTextColor.r")
         edit.text = String(normalTextColor.r);
@@ -273,13 +273,13 @@ void EditComponentTextColor(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);
 }
 
 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());
     if (edit.name == "OriginalAttributeTextColor.r")
         edit.text = String(normalTextColor.r);
@@ -292,7 +292,7 @@ void EditOriginalAttributeTextColor(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());
     if (edit.name == "ModifiedAttributeTextColor.r")
         edit.text = String(modifiedTextColor.r);
@@ -305,7 +305,7 @@ void EditModifiedAttributeTextColor(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());
     if (edit.name == "NonEditableAttributeTextColor.r")
         edit.text = String(nonEditableTextColor.r);
@@ -318,7 +318,7 @@ void EditNonEditableAttributeTextColor(StringHash eventType, VariantMap& eventDa
 
 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());
     if (edit.name == "DefaultZoneAmbientColor.r")
         edit.text = String(renderer.defaultZone.ambientColor.r);
@@ -330,7 +330,7 @@ void EditDefaultZoneAmbientColor(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());
     if (edit.name == "DefaultZoneFogColor.r")
         edit.text = String(renderer.defaultZone.fogColor.r);
@@ -342,33 +342,33 @@ void EditDefaultZoneFogColor(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();
     edit.text = String(renderer.defaultZone.fogStart);
 }
 
 void EditDefaultZoneFogEnd(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     renderer.defaultZone.fogEnd = edit.text.ToFloat();
     edit.text = String(renderer.defaultZone.fogEnd);
 }
 
 void ToggleShowGrid(StringHash eventType, VariantMap& eventData)
 {
-    showGrid = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    showGrid = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateGrid(false);
 }
 
 void ToggleGrid2DMode(StringHash eventType, VariantMap& eventData)
 {
-    grid2DMode = cast<CheckBox>(eventData["Element"].GetUIElement()).checked;
+    grid2DMode = cast<CheckBox>(eventData["Element"].GetPtr()).checked;
     UpdateGrid();
 }
 
 void EditGridSize(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridSize = edit.text.ToInt();
     edit.text = String(gridSize);
     UpdateGrid();
@@ -376,7 +376,7 @@ void EditGridSize(StringHash eventType, VariantMap& eventData)
 
 void EditGridSubdivisions(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridSubdivisions = edit.text.ToInt();
     edit.text = String(gridSubdivisions);
     UpdateGrid();
@@ -384,7 +384,7 @@ void EditGridSubdivisions(StringHash eventType, VariantMap& eventData)
 
 void EditGridScale(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     gridScale = edit.text.ToFloat();
     edit.text = String(gridScale);
     UpdateGrid(false);
@@ -392,7 +392,7 @@ void EditGridScale(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());
     if (edit.name == "GridColor.r")
         edit.text = String(gridColor.r);
@@ -405,7 +405,7 @@ void EditGridColor(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());
     if (edit.name == "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)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     viewNearClip = edit.text.ToFloat();
     UpdateViewParameters();
     if (eventType == StringHash("TextFinished"))
@@ -156,7 +156,7 @@ void EditCameraNearClip(StringHash eventType, VariantMap& eventData)
 
 void EditCameraFarClip(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     viewFarClip = edit.text.ToFloat();
     UpdateViewParameters();
     if (eventType == StringHash("TextFinished"))
@@ -165,7 +165,7 @@ void EditCameraFarClip(StringHash eventType, VariantMap& eventData)
 
 void EditCameraFOV(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     viewFov = edit.text.ToFloat();
     UpdateViewParameters();
     if (eventType == StringHash("TextFinished"))
@@ -174,7 +174,7 @@ void EditCameraFOV(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);
     if (eventType == StringHash("TextFinished"))
         edit.text = String(cameraBaseSpeed);
@@ -182,13 +182,13 @@ void EditCameraSpeed(StringHash eventType, VariantMap& eventData)
 
 void EditLimitRotation(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     limitRotation = edit.checked;
 }
 
 void EditNewNodeDistance(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     newNodeDistance = Max(edit.text.ToFloat(), 0.0);
     if (eventType == StringHash("TextFinished"))
         edit.text = String(newNodeDistance);
@@ -196,7 +196,7 @@ void EditNewNodeDistance(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);
     if (eventType == StringHash("TextFinished"))
         edit.text = String(moveStep);
@@ -204,7 +204,7 @@ void EditMoveStep(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);
     if (eventType == StringHash("TextFinished"))
         edit.text = String(rotateStep);
@@ -212,7 +212,7 @@ void EditRotateStep(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);
     if (eventType == StringHash("TextFinished"))
         edit.text = String(scaleStep);
@@ -220,76 +220,76 @@ void EditScaleStep(StringHash eventType, VariantMap& eventData)
 
 void EditMoveSnap(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     moveSnap = edit.checked;
     toolBarDirty = true;
 }
 
 void EditRotateSnap(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     rotateSnap = edit.checked;
     toolBarDirty = true;
 }
 
 void EditScaleSnap(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     scaleSnap = edit.checked;
     toolBarDirty = true;
 }
 
 void EditRememberResourcePath(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     rememberResourcePath = edit.checked;
 }
 
 void EditApplyMaterialList(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     applyMaterialList = edit.checked;
 }
 
 void EditImportOptions(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     importOptions = edit.text.Trimmed();
 }
 
 void EditPickMode(StringHash eventType, VariantMap& eventData)
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     pickMode = edit.selection;
 }
 
 void EditTextureQuality(StringHash eventType, VariantMap& eventData)
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     renderer.textureQuality = edit.selection;
 }
 
 void EditMaterialQuality(StringHash eventType, VariantMap& eventData)
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     renderer.materialQuality = edit.selection;
 }
 
 void EditShadowResolution(StringHash eventType, VariantMap& eventData)
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     SetShadowResolution(edit.selection);
 }
 
 void EditShadowQuality(StringHash eventType, VariantMap& eventData)
 {
-    DropDownList@ edit = eventData["Element"].GetUIElement();
+    DropDownList@ edit = eventData["Element"].GetPtr();
     renderer.shadowQuality = edit.selection;
 }
 
 void EditMaxOccluderTriangles(StringHash eventType, VariantMap& eventData)
 {
-    LineEdit@ edit = eventData["Element"].GetUIElement();
+    LineEdit@ edit = eventData["Element"].GetPtr();
     renderer.maxOccluderTriangles = edit.text.ToInt();
     if (eventType == StringHash("TextFinished"))
         edit.text = String(renderer.maxOccluderTriangles);
@@ -297,18 +297,18 @@ void EditMaxOccluderTriangles(StringHash eventType, VariantMap& eventData)
 
 void EditSpecularLighting(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     renderer.specularLighting = edit.checked;
 }
 
 void EditDynamicInstancing(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     renderer.dynamicInstancing = edit.checked;
 }
 
 void EditFrameLimiter(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     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)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         StartSceneUpdate();
     toolBarDirty = true;
@@ -182,7 +182,7 @@ void ToolBarRunUpdatePlay(StringHash eventType, VariantMap& eventData)
 
 void ToolBarRunUpdatePause(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         StopSceneUpdate();
     toolBarDirty = true;
@@ -190,7 +190,7 @@ void ToolBarRunUpdatePause(StringHash eventType, VariantMap& eventData)
 
 void ToolBarEditModeMove(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         editMode = EDIT_MOVE;
     toolBarDirty = true;
@@ -198,7 +198,7 @@ void ToolBarEditModeMove(StringHash eventType, VariantMap& eventData)
 
 void ToolBarEditModeRotate(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         editMode = EDIT_ROTATE;
     toolBarDirty = true;
@@ -206,7 +206,7 @@ void ToolBarEditModeRotate(StringHash eventType, VariantMap& eventData)
 
 void ToolBarEditModeScale(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         editMode = EDIT_SCALE;
     toolBarDirty = true;
@@ -214,7 +214,7 @@ void ToolBarEditModeScale(StringHash eventType, VariantMap& eventData)
 
 void ToolBarEditModeSelect(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         editMode = EDIT_SELECT;
     toolBarDirty = true;
@@ -222,7 +222,7 @@ void ToolBarEditModeSelect(StringHash eventType, VariantMap& eventData)
 
 void ToolBarAxisModeWorld(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         axisMode = AXIS_WORLD;
     toolBarDirty = true;
@@ -230,7 +230,7 @@ void ToolBarAxisModeWorld(StringHash eventType, VariantMap& eventData)
 
 void ToolBarAxisModeLocal(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         axisMode = AXIS_LOCAL;
     toolBarDirty = true;
@@ -238,28 +238,28 @@ void ToolBarAxisModeLocal(StringHash eventType, VariantMap& eventData)
 
 void ToolBarMoveSnap(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     moveSnap = edit.checked;
     toolBarDirty = true;
 }
 
 void ToolBarRotateSnap(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     rotateSnap = edit.checked;
     toolBarDirty = true;
 }
 
 void ToolBarScaleSnap(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     scaleSnap = edit.checked;
     toolBarDirty = true;
 }
 
 void ToolBarSnapScaleModeHalf(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     {
         snapScaleMode = SNAP_SCALE_HALF;
@@ -275,7 +275,7 @@ void ToolBarSnapScaleModeHalf(StringHash eventType, VariantMap& eventData)
 
 void ToolBarSnapScaleModeQuarter(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     {
         snapScaleMode = SNAP_SCALE_QUARTER;
@@ -291,7 +291,7 @@ void ToolBarSnapScaleModeQuarter(StringHash eventType, VariantMap& eventData)
 
 void ToolBarPickModeGeometries(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         pickMode = PICK_GEOMETRIES;
     toolBarDirty = true;
@@ -299,7 +299,7 @@ void ToolBarPickModeGeometries(StringHash eventType, VariantMap& eventData)
 
 void ToolBarPickModeLights(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         pickMode = PICK_LIGHTS;
     toolBarDirty = true;
@@ -307,7 +307,7 @@ void ToolBarPickModeLights(StringHash eventType, VariantMap& eventData)
 
 void ToolBarPickModeZones(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         pickMode = PICK_ZONES;
     toolBarDirty = true;
@@ -315,7 +315,7 @@ void ToolBarPickModeZones(StringHash eventType, VariantMap& eventData)
 
 void ToolBarPickModeRigidBodies(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         pickMode = PICK_RIGIDBODIES;
     toolBarDirty = true;
@@ -323,7 +323,7 @@ void ToolBarPickModeRigidBodies(StringHash eventType, VariantMap& eventData)
 
 void ToolBarPickModeUIElements(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
         pickMode = PICK_UI_ELEMENTS;
     toolBarDirty = true;
@@ -331,7 +331,7 @@ void ToolBarPickModeUIElements(StringHash eventType, VariantMap& eventData)
 
 void ToolBarFillModePoint(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     {
         fillMode = FILL_POINT;
@@ -342,7 +342,7 @@ void ToolBarFillModePoint(StringHash eventType, VariantMap& eventData)
 
 void ToolBarFillModeWireFrame(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     {
         fillMode = FILL_WIREFRAME;
@@ -353,7 +353,7 @@ void ToolBarFillModeWireFrame(StringHash eventType, VariantMap& eventData)
 
 void ToolBarFillModeSolid(StringHash eventType, VariantMap& eventData)
 {
-    CheckBox@ edit = eventData["Element"].GetUIElement();
+    CheckBox@ edit = eventData["Element"].GetPtr();
     if (edit.checked)
     {
         fillMode = FILL_SOLID;
@@ -364,7 +364,7 @@ void ToolBarFillModeSolid(StringHash eventType, VariantMap& eventData)
 
 void ToolBarSetViewportMode(StringHash eventType, VariantMap& eventData)
 {
-    DropDownList@ dropDown = eventData["Element"].GetUIElement();
+    DropDownList@ dropDown = eventData["Element"].GetPtr();
     UIElement@ selected = dropDown.selectedItem;
     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();

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

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

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

@@ -81,8 +81,8 @@ class GameObject : ScriptObject
 
     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 (otherBody.collisionLayer == 2)

+ 5 - 5
Docs/Reference.dox

@@ -610,7 +610,7 @@ function HandleUpdate(eventType, eventData)
 end
 \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
 CollisionDetector = ScriptObject()
@@ -1436,8 +1436,8 @@ An example of reading collision event and contact point data in script, from Nin
 \code
 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();
 
     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.
 
-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()".
 
@@ -1690,7 +1690,7 @@ Connection* remoteSender = static_cast<Connection*>(eventData[P_CONNECTION].GetP
 
 %Script:
 \code
-Connection@ remoteSender = eventData["Connection"].GetConnection();
+Connection@ remoteSender = eventData["Connection"].GetPtr();
 \endcode
 
 \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)
 {
-    // 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;
 
     attributes_[objectType].Push(attr);

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

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

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

@@ -25,6 +25,7 @@
 #include "Color.h"
 #include "HashMap.h"
 #include "Quaternion.h"
+#include "Ptr.h"
 #include "Rect.h"
 #include "StringHash.h"
 #include "Vector4.h"
@@ -46,13 +47,14 @@ enum VariantType
     VAR_COLOR,
     VAR_STRING,
     VAR_BUFFER,
-    VAR_PTR,
+    VAR_VOIDPTR,
     VAR_RESOURCEREF,
     VAR_RESOURCEREFLIST,
     VAR_VARIANTVECTOR,
     VAR_VARIANTMAP,
     VAR_INTRECT,
     VAR_INTVECTOR2,
+    VAR_PTR,
     MAX_VAR_TYPES
 };
 
@@ -323,6 +325,13 @@ public:
     {
         *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.
     Variant(const String& type, const String& value) :
@@ -486,10 +495,10 @@ public:
         return *this;
     }
 
-    /// Assign from a pointer.
+    /// Assign from a void pointer.
     Variant& operator = (void* rhs)
     {
-        SetType(VAR_PTR);
+        SetType(VAR_VOIDPTR);
         value_.ptr_ = rhs;
         return *this;
     }
@@ -541,7 +550,15 @@ public:
         *(reinterpret_cast<IntVector2*>(&value_)) = rhs;
         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.
     bool operator == (const Variant& rhs) const;
     /// 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; }
     /// 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; }
-    /// 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.
     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.
@@ -584,6 +611,18 @@ public:
     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.
     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.
     bool operator != (const Variant& rhs) const { return !(*this == rhs); }
     /// Test for inequality with an integer.
@@ -624,7 +663,9 @@ public:
     bool operator != (const StringHash& rhs) const { return !(*this == rhs); }
     /// Test for inequality with a ShortStringHash.
     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.
     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.
@@ -662,8 +703,18 @@ public:
     const String& GetString() const { return type_ == VAR_STRING ? *reinterpret_cast<const String*>(&value_) : String::EMPTY; }
     /// 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; }
-    /// 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.
     const ResourceRef& GetResourceRef() const { return type_ == VAR_RESOURCEREF ? *reinterpret_cast<const ResourceRef*>(&value_) : emptyResourceRef; }
     /// 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; }
     /// Return an IntVector2 or empty on type mismatch.
     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.
     VariantType GetType() const { return type_; }
     /// Return value's type name.
@@ -695,7 +738,16 @@ public:
     /// Return true when the variant value is considered zero according to its actual type.
     bool IsZero() const;
     /// 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.
     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>();
 
         if (HasParameter(parameters, "ExternalWindow"))
-            graphics->SetExternalWindow(GetParameter(parameters, "ExternalWindow").GetPtr());
+            graphics->SetExternalWindow(GetParameter(parameters, "ExternalWindow").GetVoidPtr());
         graphics->SetForceSM2(GetParameter(parameters, "ForceSM2", false).GetBool());
         graphics->SetWindowTitle(GetParameter(parameters, "WindowTitle", "Urho3D").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;
 
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_NODE] = (void*)node_;
+        eventData[P_NODE] = node_;
         node_->SendEvent(E_BONEHIERARCHYCREATED, eventData);
     }
     else

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

@@ -288,7 +288,7 @@ void AnimationState::AddTime(float delta)
                 Node* senderNode = model_ ? model_->GetNode() : node_;
                 
                 VariantMap& eventData = senderNode->GetEventDataMap();
-                eventData[P_NODE] = (void*)senderNode;
+                eventData[P_NODE] = senderNode;
                 eventData[P_NAME] = animation_->GetAnimationName();
                 eventData[P_TIME] = i->time_;
                 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;
 
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SCENE] = (void*)scene;
+        eventData[P_SCENE] = scene;
         eventData[P_TIMESTEP] = frame.timeStep_;
         scene->SendEvent(E_SCENEDRAWABLEUPDATEFINISHED, eventData);
     }

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

@@ -662,10 +662,10 @@ void Renderer::Update(float timeStep)
         using namespace BeginViewUpdate;
         
         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);
         
         ResetShadowMapAllocations(); // Each view can reuse the same shadow maps
@@ -724,10 +724,10 @@ void Renderer::Render()
             RenderSurface* renderTarget = views_[i]->GetRenderTarget();
             
             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);
             
             // 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;
 
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_NODE] = (void*)node_;
+        eventData[P_NODE] = node_;
         node_->SendEvent(E_TERRAINCREATED, eventData);
     }
 }

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

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

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

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

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

@@ -13,13 +13,14 @@ enum VariantType
     VAR_COLOR,
     VAR_STRING,
     VAR_BUFFER,
-    VAR_PTR,
+    VAR_VOIDPTR,
     VAR_RESOURCEREF,
     VAR_RESOURCEREFLIST,
     VAR_VARIANTVECTOR,
     VAR_VARIANTMAP,
     VAR_INTRECT,
     VAR_INTVECTOR2,
+    VAR_PTR,
     MAX_VAR_TYPES
 };
 
@@ -165,7 +166,7 @@ class VariantMap
     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 VariantMapSetPtr @ SetPtr(const String key, void* value);
-    
+
     tolua_outside int VariantMapGetInt @ GetInt(const String key);
     tolua_outside int VariantMapGetUInt @ GetUInt(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);
 #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());
   }
  }

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

@@ -876,7 +876,7 @@ void Connection::ProcessIdentity(int msgID, MemoryBuffer& msg)
     using namespace ClientIdentity;
     
     VariantMap eventData = identity_;
-    eventData[P_CONNECTION] = (void*)this;
+    eventData[P_CONNECTION] = this;
     eventData[P_ALLOW] = true;
     SendEvent(E_CLIENTIDENTITY, eventData);
     
@@ -933,7 +933,7 @@ void Connection::ProcessSceneLoaded(int msgID, MemoryBuffer& msg)
         using namespace ClientSceneLoaded;
         
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_CONNECTION] = (void*)this;
+        eventData[P_CONNECTION] = this;
         SendEvent(E_CLIENTSCENELOADED, eventData);
     }
 }
@@ -952,7 +952,7 @@ void Connection::ProcessRemoteEvent(int msgID, MemoryBuffer& msg)
         }
         
         VariantMap eventData = msg.ReadVariantMap();
-        eventData[P_CONNECTION] = (void*)this;
+        eventData[P_CONNECTION] = this;
         SendEvent(eventType, eventData);
     }
     else
@@ -978,7 +978,7 @@ void Connection::ProcessRemoteEvent(int msgID, MemoryBuffer& msg)
             LOGWARNING("Missing sender for remote node event, discarding");
             return;
         }
-        eventData[P_CONNECTION] = (void*)this;
+        eventData[P_CONNECTION] = this;
         sender->SendEvent(eventType, eventData);
     }
 }
@@ -1360,7 +1360,7 @@ void Connection::OnSceneLoadFailed()
     using namespace NetworkSceneLoadFailed;
     
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_CONNECTION] = (void*)this;
+    eventData[P_CONNECTION] = this;
     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;
         
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_CONNECTION] = (void*)connection;
+        eventData[P_CONNECTION] = connection;
         eventData[P_MESSAGEID] = (int)msgId;
         eventData[P_DATA].SetBuffer(msg.GetData(), msg.GetSize());
         connection->SendEvent(E_NETWORKMESSAGE, eventData);
@@ -127,7 +127,7 @@ void Network::NewConnectionEstablished(kNet::MessageConnection* connection)
     using namespace ClientConnected;
     
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_CONNECTION] = (void*)newConnection;
+    eventData[P_CONNECTION] = newConnection;
     newConnection->SendEvent(E_CLIENTCONNECTED, eventData);
 }
 
@@ -145,7 +145,7 @@ void Network::ClientDisconnected(kNet::MessageConnection* connection)
         using namespace ClientDisconnected;
         
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_CONNECTION] = (void*)connection;
+        eventData[P_CONNECTION] = connection;
         connection->SendEvent(E_CLIENTDISCONNECTED, eventData);
         
         clientConnections_.Erase(i);

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

@@ -570,7 +570,7 @@ void PhysicsWorld::PreStep(float timeStep)
     using namespace PhysicsPreStep;
 
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_WORLD] = (void*)this;
+    eventData[P_WORLD] = this;
     eventData[P_TIMESTEP] = timeStep;
     SendEvent(E_PHYSICSPRESTEP, eventData);
 
@@ -596,7 +596,7 @@ void PhysicsWorld::PostStep(float timeStep)
     using namespace PhysicsPreStep;
 
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_WORLD] = (void*)this;
+    eventData[P_WORLD] = this;
     eventData[P_TIMESTEP] = timeStep;
     SendEvent(E_PHYSICSPOSTSTEP, eventData);
 }
@@ -613,7 +613,7 @@ void PhysicsWorld::SendCollisionEvents()
 
     if (numManifolds)
     {
-        physicsCollisionData_[PhysicsCollision::P_WORLD] = (void*)this;
+        physicsCollisionData_[PhysicsCollision::P_WORLD] = this;
 
         for (int i = 0; i < numManifolds; ++i)
         {
@@ -674,10 +674,10 @@ void PhysicsWorld::SendCollisionEvents()
             bool phantom = bodyA->IsPhantom() || bodyB->IsPhantom();
             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;
 
             contacts_.Clear();
@@ -707,9 +707,9 @@ void PhysicsWorld::SendCollisionEvents()
             if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                 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_CONTACTS] = contacts_.GetBuffer();
 
@@ -734,9 +734,9 @@ void PhysicsWorld::SendCollisionEvents()
                 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();
 
             if (newCollision)
@@ -752,7 +752,7 @@ void PhysicsWorld::SendCollisionEvents()
 
     // 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)
         {
@@ -779,10 +779,10 @@ void PhysicsWorld::SendCollisionEvents()
                 WeakPtr<Node> nodeWeakA(nodeA);
                 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;
 
                 SendEvent(E_PHYSICSCOLLISIONEND, physicsCollisionData_);
@@ -790,18 +790,18 @@ void PhysicsWorld::SendCollisionEvents()
                 if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                     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;
 
                 nodeA->SendEvent(E_NODECOLLISIONEND, nodeCollisionData_);
                 if (!nodeWeakA || !nodeWeakB || !i->first_.first_ || !i->first_.second_)
                     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_);
             }

+ 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);
     File* file = 0;
@@ -404,26 +404,26 @@ SharedPtr<File> ResourceCache::GetFile(const String& nameIn, bool SendEventOnFai
     if (file)
         return SharedPtr<File>(file);
 
-    if (SendEventOnFailure)
+    if (sendEventOnFailure)
     {
         LOGERROR("Could not find resource " + name);
 
         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>();
 }
 
-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);
     
@@ -453,7 +453,7 @@ Resource* ResourceCache::GetResource(ShortStringHash type, const char* nameIn, b
     }
     
     // Attempt to load the resource
-    SharedPtr<File> file = GetFile(name, SendEventOnFailure);
+    SharedPtr<File> file = GetFile(name, sendEventOnFailure);
     if (!file)
         return 0;   // Error is already logged
 

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

@@ -96,11 +96,11 @@ public:
     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.
-    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.
-    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.
-    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.
     void GetResources(PODVector<Resource*>& result, ShortStringHash type) const;
     /// Return all loaded resources.
@@ -110,9 +110,9 @@ public:
     /// Return added package files.
     const Vector<SharedPtr<PackageFile> >& GetPackageFiles() const { return packages_; }
     /// 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 <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 <class T> void GetResources(PODVector<T*>& result) const;
     /// Return whether a file exists by name.
@@ -173,16 +173,16 @@ private:
     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();
-    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();
-    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

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

@@ -90,9 +90,9 @@ void Component::SetEnabled(bool enable)
             using namespace ComponentEnabledChanged;
 
             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);
         }

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

@@ -244,8 +244,8 @@ void Node::SetName(const String& name)
             using namespace NodeNameChanged;
 
             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);
         }
@@ -458,8 +458,8 @@ void Node::SetEnabled(bool enable, bool recursive)
             using namespace NodeEnabledChanged;
 
             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);
         }
@@ -474,9 +474,9 @@ void Node::SetEnabled(bool enable, bool recursive)
                 using namespace ComponentEnabledChanged;
 
                 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);
             }
@@ -558,9 +558,9 @@ void Node::AddChild(Node* node)
         using namespace NodeAdded;
 
         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);
     }
@@ -1398,9 +1398,9 @@ void Node::RemoveChild(Vector<SharedPtr<Node> >::Iterator i)
         using namespace NodeRemoved;
 
         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);
     }
@@ -1503,9 +1503,9 @@ void Node::RemoveComponent(Vector<SharedPtr<Component> >::Iterator i)
         using namespace ComponentRemoved;
 
         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);
     }

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

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

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

@@ -510,7 +510,7 @@ void Serializable::SetTemporary(bool enable)
         using namespace TemporaryChanged;
         
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_SERIALIZABLE] = (void*)this;
+        eventData[P_SERIALIZABLE] = this;
         
         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 <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.

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

@@ -299,6 +299,12 @@ static void ConstructVariantIntVector2(const IntVector2& value, Variant* ptr)
     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)
 {
     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_STRING", VAR_STRING);
     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_RESOURCEREFLIST", VAR_RESOURCEREFLIST);
     engine->RegisterEnumValue("VariantType", "VAR_VARIANTVECTOR", VAR_VARIANTVECTOR);
     engine->RegisterEnumValue("VariantType", "VAR_VARIANTMAP", VAR_VARIANTMAP);
     engine->RegisterEnumValue("VariantType", "VAR_INTRECT", VAR_INTRECT);
     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->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->RegisterObjectProperty("ResourceRefList", "ShortStringHash type", offsetof(ResourceRef, type_));
 
+    RegisterRefCounted<RefCounted>(engine, "RefCounted");
+    
     engine->RegisterObjectType("Variant", sizeof(Variant), 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);
@@ -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 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(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(VariantType, const String&in)", asFUNCTION(ConstructVariantTypeValue), 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 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(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(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);
@@ -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 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(RefCounted@+) const", asMETHODPR(Variant, operator ==, (RefCounted*) const, bool), 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", "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 IntRect& GetIntRect() const", asMETHOD(Variant, GetIntRect), 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(VariantType, const String&in)", asMETHODPR(Variant, FromString, (VariantType, const String&), void), 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", "uint mode", offsetof(AttributeInfo, mode_));
 
-    RegisterRefCounted<RefCounted>(engine, "RefCounted");
     RegisterObject<Object>(engine, "Object");
 
     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", "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);
 }
 
@@ -445,7 +445,7 @@ static void RegisterTextures(asIScriptEngine* engine)
     engine->RegisterObjectMethod("RenderSurface", "void set_linkedDepthStencil(RenderSurface@+)", asMETHOD(RenderSurface, SetLinkedDepthStencil), 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);
     
     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", "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->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", "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);
     
     // 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", "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);
 }
 
@@ -186,7 +186,7 @@ static void RegisterRigidBody(asIScriptEngine* engine)
     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);
 
-    // 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);
 }
 
@@ -307,7 +307,7 @@ static void RegisterPhysicsWorld(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Scene", "PhysicsWorld@+ get_physicsWorld() const", asFUNCTION(SceneGetPhysicsWorld), asCALL_CDECL_OBJLAST);
     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);
 }
 

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

@@ -36,9 +36,9 @@ void RegisterResource(asIScriptEngine* engine)
     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)
@@ -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 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", "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", "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);

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

@@ -74,7 +74,7 @@ static void RegisterNode(asIScriptEngine* engine)
     // Now GetNode can be registered
     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", "Node@+ GetNode() const", asFUNCTION(GetVariantPtr<Node>), 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->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->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())
                 {
                 case VAR_VECTOR2:
-                    context->SetArgObject(i, (void *)&parameters[i].GetVector2());
+                    context->SetArgObject(i, (void*)&parameters[i].GetVector2());
                     break;
                     
                 case VAR_VECTOR3:
-                    context->SetArgObject(i, (void *)&parameters[i].GetVector3());
+                    context->SetArgObject(i, (void*)&parameters[i].GetVector3());
                     break;
                     
                 case VAR_VECTOR4:
-                    context->SetArgObject(i, (void *)&parameters[i].GetVector4());
+                    context->SetArgObject(i, (void*)&parameters[i].GetVector4());
                     break;
                     
                 case VAR_QUATERNION:
-                    context->SetArgObject(i, (void *)&parameters[i].GetQuaternion());
+                    context->SetArgObject(i, (void*)&parameters[i].GetQuaternion());
                     break;
                     
                 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;
                     
                 case VAR_PTR:
-                    context->SetArgObject(i, (void *)parameters[i].GetPtr());
+                    context->SetArgObject(i, (void*)parameters[i].GetPtr());
                     break;
                     
                 default:

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

@@ -105,7 +105,7 @@ static void RegisterUIElement(asIScriptEngine* engine)
 
     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);
 }
 

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

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

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

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

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

@@ -141,7 +141,7 @@ void DropDownList::OnHidePopup()
     using namespace ItemSelected;
 
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_SELECTION] = GetSelection();
     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;
 
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_KEY] = key;
             eventData[P_BUTTONS] = buttons;
             eventData[P_QUALIFIERS] = qualifiers;
@@ -393,7 +393,7 @@ void LineEdit::OnKey(int key, int buttons, int qualifiers)
             using namespace TextFinished;
 
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_TEXT] = line_;
             SendEvent(E_TEXTFINISHED, eventData);
             return;
@@ -563,7 +563,7 @@ void LineEdit::UpdateText()
     using namespace TextChanged;
 
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_TEXT] = line_;
     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;
 
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_KEY] = key;
     eventData[P_BUTTONS] = buttons;
     eventData[P_QUALIFIERS] = qualifiers;
@@ -491,7 +491,7 @@ void ListView::SetSelections(const PODVector<unsigned>& indices)
             using namespace ItemSelected;
 
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_SELECTION] = index;
             SendEvent(E_ITEMDESELECTED, eventData);
 
@@ -523,7 +523,7 @@ void ListView::SetSelections(const PODVector<unsigned>& indices)
                 using namespace ItemSelected;
 
                 VariantMap& eventData = GetEventDataMap();
-                eventData[P_ELEMENT] = (void*)this;
+                eventData[P_ELEMENT] = this;
                 eventData[P_SELECTION] = *i;
                 SendEvent(E_ITEMSELECTED, eventData);
 
@@ -563,7 +563,7 @@ void ListView::AddSelection(unsigned index)
             using namespace ItemSelected;
 
             VariantMap& eventData = GetEventDataMap();
-            eventData[P_ELEMENT] = (void*)this;
+            eventData[P_ELEMENT] = this;
             eventData[P_SELECTION] = index;
             SendEvent(E_ITEMSELECTED, eventData);
 
@@ -589,7 +589,7 @@ void ListView::RemoveSelection(unsigned index)
         using namespace ItemSelected;
 
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_SELECTION] = index;
         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
     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_BUTTON] = button;
     clickEventData[ItemClicked::P_BUTTONS] = buttons;
@@ -1048,8 +1048,8 @@ void ListView::HandleUIMouseDoubleClick(StringHash eventType, VariantMap& eventD
         return;
 
     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_BUTTON] = button;
     clickEventData[ItemDoubleClicked::P_BUTTONS] = buttons;

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

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

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

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

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

@@ -183,7 +183,7 @@ void Slider::SetValue(float value)
         using namespace SliderChanged;
 
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_VALUE] = value_;
         SendEvent(E_SLIDERCHANGED, eventData);
     }
@@ -257,7 +257,7 @@ void Slider::Page(const IntVector2& position, bool pressed)
     using namespace SliderPaged;
     
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)this;
+    eventData[P_ELEMENT] = this;
     eventData[P_OFFSET] = offset;
 
     // 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();
-    eventData[P_CLICKEDELEMENT] = (void*)originalElement;
-    eventData[P_ELEMENT] = (void*)element;
+    eventData[P_CLICKEDELEMENT] = originalElement;
+    eventData[P_ELEMENT] = element;
     SendEvent(E_FOCUSCHANGED, eventData);
 }
 
@@ -257,7 +257,8 @@ bool UI::SetModalElement(UIElement* modalElement, bool enable)
             return false;
 
         // 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());
         vars.Erase(VAR_ORIGINAL_PARENT);
         vars.Erase(VAR_ORIGINAL_CHILD_INDEX);
@@ -270,7 +271,8 @@ bool UI::SetModalElement(UIElement* modalElement, bool enable)
             if (element)
             {
                 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.Erase(VAR_ORIGINAL_PARENT);
                 vars.Erase(VAR_ORIGINAL_CHILD_INDEX);
@@ -922,8 +924,8 @@ void UI::ProcessHover(const IntVector2& cursorPos, int buttons, int qualifiers,
             using namespace DragDropTest;
 
             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;
             SendEvent(E_DRAGDROPTEST, eventData);
             accept = eventData[P_ACCEPT].GetBool();
@@ -1028,8 +1030,8 @@ void UI::ProcessClickEnd(const IntVector2& cursorPos, int button, int buttons, i
                             using namespace DragDropFinish;
 
                             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;
                             SendEvent(E_DRAGDROPFINISH, eventData);
                         }
@@ -1088,7 +1090,7 @@ void UI::SendDragEvent(StringHash eventType, UIElement* element, const IntVector
     using namespace DragBegin;
 
     VariantMap& eventData = GetEventDataMap();
-    eventData[P_ELEMENT] = (void*)element;
+    eventData[P_ELEMENT] = element;
     eventData[P_X] = screenPos.x_;
     eventData[P_Y] = screenPos.y_;
     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)
 {
     VariantMap& eventData = GetEventDataMap();
-    eventData[UIMouseClick::P_ELEMENT] = (void*)element;
+    eventData[UIMouseClick::P_ELEMENT] = element;
     eventData[UIMouseClick::P_X] = pos.x_;
     eventData[UIMouseClick::P_Y] = pos.y_;
     eventData[UIMouseClick::P_BUTTON] = button;
@@ -1389,7 +1391,7 @@ void UI::HandleDropFile(StringHash eventType, VariantMap& eventData)
         uiEventData[P_FILENAME] = eventData[P_FILENAME];
         uiEventData[P_X] = screenPos.x_;
         uiEventData[P_Y] = screenPos.y_;
-        uiEventData[P_ELEMENT] = (void*)element;
+        uiEventData[P_ELEMENT] = element;
         
         if (element)
         {

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

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

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

@@ -257,7 +257,7 @@ void Window::SetModal(bool modal)
         using namespace ModalChanged;
 
         VariantMap& eventData = GetEventDataMap();
-        eventData[P_ELEMENT] = (void*)this;
+        eventData[P_ELEMENT] = this;
         eventData[P_MODAL] = modal;
         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;
 
     // 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)
     {

+ 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 (network->IsServerRunning())
         {
-            Connection* sender = (Connection*)eventData[P_CONNECTION].GetPtr();
+            Connection* sender = static_cast<Connection*>(eventData[P_CONNECTION].GetPtr());
             
             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;
     
     // 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_);
     
     // Then create a controllable object for that client
@@ -481,7 +481,7 @@ void SceneReplication::HandleClientDisconnected(StringHash eventType, VariantMap
     using namespace ClientConnected;
     
     // 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];
     if (object)
         object->Remove();