Browse Source

AtomicJS compile delta

Josh Engebretson 9 years ago
parent
commit
a5b6e7eeb4
54 changed files with 273 additions and 137 deletions
  1. 1 1
      Build/CMake/Modules/AtomicCommon.cmake
  2. 5 0
      Source/Atomic/Atomic2D/TileMapDefs2D.h
  3. 2 0
      Source/Atomic/Atomic2D/TmxFile2D.h
  4. 35 1
      Source/Atomic/Atomic3D/BillboardSet.h
  5. 2 0
      Source/Atomic/Audio/SoundStream.h
  6. 1 5
      Source/Atomic/Container/Allocator.h
  7. 1 5
      Source/Atomic/Container/HashBase.h
  8. 2 5
      Source/Atomic/Container/LinkedList.h
  9. 1 5
      Source/Atomic/Container/ListBase.h
  10. 6 5
      Source/Atomic/Container/RefCounted.h
  11. 1 5
      Source/Atomic/Container/VectorBase.h
  12. 2 0
      Source/Atomic/Core/Attribute.h
  13. 1 5
      Source/Atomic/Core/Condition.h
  14. 16 0
      Source/Atomic/Core/Context.h
  15. 1 5
      Source/Atomic/Core/Mutex.h
  16. 16 0
      Source/Atomic/Core/Object.h
  17. 1 5
      Source/Atomic/Core/Thread.h
  18. 2 0
      Source/Atomic/Core/WorkQueue.h
  19. 2 0
      Source/Atomic/Graphics/AnimationState.h
  20. 2 0
      Source/Atomic/Graphics/OpenGL/OGLShaderProgram.h
  21. 2 0
      Source/Atomic/Graphics/RenderPath.h
  22. 2 0
      Source/Atomic/Graphics/RenderSurface.h
  23. 2 0
      Source/Atomic/Graphics/ShaderVariation.h
  24. 1 5
      Source/Atomic/Graphics/Tangent.h
  25. 2 0
      Source/Atomic/Graphics/Technique.h
  26. 1 5
      Source/Atomic/IO/Compression.h
  27. 4 1
      Source/Atomic/IO/File.cpp
  28. 10 0
      Source/Atomic/IO/File.h
  29. 12 6
      Source/Atomic/Input/Input.cpp
  30. 10 6
      Source/Atomic/Input/Input.h
  31. 1 5
      Source/Atomic/Math/Random.h
  32. 2 0
      Source/Atomic/Network/HttpRequest.h
  33. 2 0
      Source/Atomic/Physics/CollisionShape.h
  34. 42 0
      Source/Atomic/Scene/Node.cpp
  35. 18 0
      Source/Atomic/Scene/Node.h
  36. 1 0
      Source/Atomic/Scene/ValueAnimationInfo.h
  37. 1 1
      Source/AtomicJS/Javascript/JSAtomic.cpp
  38. 11 11
      Source/AtomicJS/Javascript/JSComponent.cpp
  39. 1 2
      Source/AtomicJS/Javascript/JSComponent.h
  40. 3 3
      Source/AtomicJS/Javascript/JSComponentFile.cpp
  41. 1 1
      Source/AtomicJS/Javascript/JSComponentFile.h
  42. 2 2
      Source/AtomicJS/Javascript/JSEventHelper.cpp
  43. 2 2
      Source/AtomicJS/Javascript/JSEventHelper.h
  44. 12 12
      Source/AtomicJS/Javascript/JSEvents.h
  45. 3 3
      Source/AtomicJS/Javascript/JSMetrics.cpp
  46. 1 1
      Source/AtomicJS/Javascript/JSMetrics.h
  47. 6 6
      Source/AtomicJS/Javascript/JSPlugin.cpp
  48. 1 1
      Source/AtomicJS/Javascript/JSScene.cpp
  49. 1 1
      Source/AtomicJS/Javascript/JSScriptObject.h
  50. 7 7
      Source/AtomicJS/Javascript/JSUI.cpp
  51. 1 1
      Source/AtomicJS/Javascript/JSUI.h
  52. 4 4
      Source/AtomicJS/Javascript/JSVM.cpp
  53. 3 3
      Source/AtomicJS/Javascript/JSVM.h
  54. 1 1
      Source/AtomicJS/Javascript/Javascript.h

+ 1 - 1
Build/CMake/Modules/AtomicCommon.cmake

@@ -21,7 +21,7 @@
 #
 
 # Urho compatibility
-add_definitions(-DATOMIC_IS_BUILDING=1 -DATOMIC_CXX11=1)
+add_definitions(-DATOMIC_CXX11=1)
 
 set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DATOMIC_DEBUG")
 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DATOMIC_DEBUG")

+ 5 - 0
Source/Atomic/Atomic2D/TileMapDefs2D.h

@@ -102,6 +102,7 @@ enum TileMapObjectType2D
 /// Property set.
 class ATOMIC_API PropertySet2D : public RefCounted
 {
+    ATOMIC_REFCOUNTED(PropertySet2D)
 public:
     PropertySet2D();
     virtual ~PropertySet2D();
@@ -121,6 +122,8 @@ protected:
 /// Tile define.
 class ATOMIC_API Tile2D : public RefCounted
 {
+    ATOMIC_REFCOUNTED(Tile2D)
+
 public:
     /// Construct.
     Tile2D();
@@ -149,6 +152,8 @@ private:
 /// Tile map object.
 class ATOMIC_API TileMapObject2D : public RefCounted
 {
+    ATOMIC_REFCOUNTED(TileMapObject2D)
+
 public:
     TileMapObject2D();
 

+ 2 - 0
Source/Atomic/Atomic2D/TmxFile2D.h

@@ -37,6 +37,8 @@ class XMLFile;
 /// Tmx layer.
 class TmxLayer2D : public RefCounted
 {
+    ATOMIC_REFCOUNTED(TmxLayer2D)
+
 public:
     TmxLayer2D(TmxFile2D* tmxFile, TileMapLayerType2D type);
     virtual ~TmxLayer2D();

+ 35 - 1
Source/Atomic/Atomic3D/BillboardSet.h

@@ -35,8 +35,41 @@ class IndexBuffer;
 class VertexBuffer;
 
 /// One billboard in the billboard set.
-struct ATOMIC_API Billboard
+class ATOMIC_API Billboard : public RefCounted
 {
+    friend class BillboardSet;
+    friend class ParticleEmitter;
+    ATOMIC_REFCOUNTED(Billboard);
+
+public:
+    Billboard();
+    virtual ~Billboard();
+
+    Vector3 GetPosition() { return position_; }
+    void SetPosition(Vector3 &position) { position_ = position; }
+
+    Vector3 GetSize() { return size_; }
+    void SetSize(Vector2 &size) { size_ = size; }
+
+    Rect GetUV() { return uv_; }
+    void SetUV(Rect &uv) { uv_ = uv; }
+
+    Color GetColor() { return color_; }
+    void SetColor(Color &color) { color_ = color; }
+
+    float GetRotation() { return rotation_; }
+    void SetRotation(float rotation) { rotation_ = rotation; }
+
+    const Vector3& GetDirection() { return direction_; }
+    void SetRotation(const Vector3& direction) { direction_ = direction; }
+
+    bool IsEnabled() { return enabled_; }
+    void SetEnabled(bool enabled) { enabled_ = enabled; }
+
+    float GetSortDistance() { return sortDistance_; }
+    void SetSortDistance(float sortDistance) { sortDistance_ = sortDistance; }
+
+private:
     /// Position.
     Vector3 position_;
     /// Two-dimensional size. If BillboardSet has fixed screen size enabled, this is measured in pixels instead of world units.
@@ -57,6 +90,7 @@ struct ATOMIC_API Billboard
     float screenScaleFactor_;
 };
 
+
 static const unsigned MAX_BILLBOARDS = 65536 / 4;
 
 /// %Billboard component.

+ 2 - 0
Source/Atomic/Audio/SoundStream.h

@@ -30,6 +30,8 @@ namespace Atomic
 /// Base class for sound streams.
 class ATOMIC_API SoundStream : public RefCounted
 {
+    ATOMIC_REFCOUNTED(SoundStream)
+
 public:
     /// Construct.
     SoundStream();

+ 1 - 5
Source/Atomic/Container/Allocator.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 #include <stddef.h>
 

+ 1 - 5
Source/Atomic/Container/HashBase.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 #include "../Container/Allocator.h"
 #include "../Container/Hash.h"

+ 2 - 5
Source/Atomic/Container/LinkedList.h

@@ -22,11 +22,8 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
+
 #if ATOMIC_CXX11
 #include <initializer_list>
 #endif

+ 1 - 5
Source/Atomic/Container/ListBase.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 #include "../Container/Allocator.h"
 #include "../Container/Swap.h"

+ 6 - 5
Source/Atomic/Container/RefCounted.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 namespace Atomic
 {
@@ -93,6 +89,11 @@ public:
 
 // ATOMIC BEGIN
 
+    virtual bool IsObject() const { return false; }
+
+    virtual ClassID GetClassID() const  = 0;
+    static ClassID GetClassIDStatic() { static const int typeID = 0; return (ClassID) &typeID; }
+
     /// JavaScript VM, heap object which can be pushed directly on stack without any lookups
     inline void* JSGetHeapPtr() const { return jsHeapPtr_; }
     inline void  JSSetHeapPtr(void* heapptr) { jsHeapPtr_ = heapptr; }

+ 1 - 5
Source/Atomic/Container/VectorBase.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 #include "../Container/Swap.h"
 

+ 2 - 0
Source/Atomic/Core/Attribute.h

@@ -52,6 +52,8 @@ class Serializable;
 /// Abstract base class for invoking attribute accessors.
 class ATOMIC_API AttributeAccessor : public RefCounted
 {
+    ATOMIC_REFCOUNTED(AttributeAccessor)
+
 public:
     /// Get the attribute.
     virtual void Get(const Serializable* ptr, Variant& dest) const = 0;

+ 1 - 5
Source/Atomic/Core/Condition.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 namespace Atomic
 {

+ 16 - 0
Source/Atomic/Core/Context.h

@@ -29,6 +29,17 @@
 namespace Atomic
 {
 
+// ATOMIC BEGIN
+
+class GlobalEventListener
+{
+public:
+    virtual void BeginSendEvent(Context* context, Object* sender, StringHash eventType, VariantMap& eventData) = 0;
+    virtual void EndSendEvent(Context* context, Object* sender, StringHash eventType, VariantMap& eventData) = 0;
+};
+
+// ATOMIC END
+
 /// Urho3D execution context. Provides access to subsystems, object factories and attributes, and event receivers.
 class ATOMIC_API Context : public RefCounted
 {
@@ -162,6 +173,10 @@ public:
     /// Get whether an Editor Context
     void SetEditorContext(bool editor) { editorContext_ = editor; }
 
+    // hook for listening into events
+    void AddGlobalEventListener(GlobalEventListener* listener) { globalEventListeners_.Push(listener); }
+    void RemoveGlobalEventListener(GlobalEventListener* listener) { globalEventListeners_.Erase(globalEventListeners_.Find(listener)); }
+
     // ATOMIC END
 
 private:
@@ -209,6 +224,7 @@ private:
     VariantMap globalVars_;
 
     // ATOMIC BEGIN
+    PODVector<GlobalEventListener*> globalEventListeners_;
     bool editorContext_;
     // ATOMIC END
 

+ 1 - 5
Source/Atomic/Core/Mutex.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 namespace Atomic
 {

+ 16 - 0
Source/Atomic/Core/Object.h

@@ -76,6 +76,11 @@ private:
         static Atomic::StringHash GetTypeStatic() { return GetTypeInfoStatic()->GetType(); } \
         static const Atomic::String& GetTypeNameStatic() { return GetTypeInfoStatic()->GetTypeName(); } \
         static const Atomic::TypeInfo* GetTypeInfoStatic() { static const Atomic::TypeInfo typeInfoStatic(#typeName, BaseClassName::GetTypeInfoStatic()); return &typeInfoStatic; } \
+        virtual Atomic::StringHash GetBaseType() const { return GetBaseTypeStatic(); } \
+        virtual Atomic::ClassID GetClassID() const { return GetClassIDStatic(); } \
+        static Atomic::ClassID GetClassIDStatic() { static const int typeID = 0; return (Atomic::ClassID) &typeID; } \
+        static Atomic::StringHash GetBaseTypeStatic() { static const Atomic::StringHash baseTypeStatic(#baseTypeName); return baseTypeStatic; }
+
 
 /// Base class for objects with type identification, subsystem access and event sending/receiving capability.
 class ATOMIC_API Object : public RefCounted
@@ -173,6 +178,15 @@ public:
     /// Return object category. Categories are (optionally) registered along with the object factory. Return an empty string if the object category is not registered.
     const String& GetCategory() const;
 
+    // ATOMIC BEGIN
+
+    virtual bool IsObject() const { return true; }
+
+    static ClassID GetClassIDStatic() { static const int typeID = 0; return (ClassID) &typeID; }
+    static const Atomic::String& GetTypeNameStatic() { static const Atomic::String typeNameStatic("Object"); return typeNameStatic; }
+
+    // ATOMIC END
+
 protected:
     /// Execution context.
     Context* context_;
@@ -196,6 +210,8 @@ template <class T> T* Object::GetSubsystem() const { return static_cast<T*>(GetS
 /// Base class for object factories.
 class ATOMIC_API ObjectFactory : public RefCounted
 {
+    ATOMIC_REFCOUNTED(ObjectFactory)
+
 public:
     /// Construct.
     ObjectFactory(Context* context) :

+ 1 - 5
Source/Atomic/Core/Thread.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 #ifndef _WIN32
 #include <pthread.h>

+ 2 - 0
Source/Atomic/Core/WorkQueue.h

@@ -42,6 +42,8 @@ struct WorkItem : public RefCounted
 {
     friend class WorkQueue;
 
+    ATOMIC_REFCOUNTED(WorkItem)
+
 public:
     // Construct
     WorkItem() :

+ 2 - 0
Source/Atomic/Graphics/AnimationState.h

@@ -68,6 +68,8 @@ struct AnimationStateTrack
 /// %Animation instance.
 class ATOMIC_API AnimationState : public RefCounted
 {
+    ATOMIC_REFCOUNTED(AnimationState)
+
 public:
     /// Construct with animated model and animation pointers.
     AnimationState(AnimatedModel* model, Animation* animation);

+ 2 - 0
Source/Atomic/Graphics/OpenGL/OGLShaderProgram.h

@@ -37,6 +37,8 @@ class Graphics;
 /// Linked shader program on the GPU.
 class ATOMIC_API ShaderProgram : public RefCounted, public GPUObject
 {
+    ATOMIC_REFCOUNTED(ShaderProgram)
+
 public:
     /// Construct.
     ShaderProgram(Graphics* graphics, ShaderVariation* vertexShader, ShaderVariation* pixelShader);

+ 2 - 0
Source/Atomic/Graphics/RenderPath.h

@@ -207,6 +207,8 @@ struct ATOMIC_API RenderPathCommand
 /// Rendering path definition. A sequence of commands (e.g. clear screen, draw objects with specific pass) that yields the scene rendering result.
 class ATOMIC_API RenderPath : public RefCounted
 {
+    ATOMIC_REFCOUNTED(RenderPath)
+
 public:
     /// Construct.
     RenderPath();

+ 2 - 0
Source/Atomic/Graphics/RenderSurface.h

@@ -37,6 +37,8 @@ class ATOMIC_API RenderSurface : public RefCounted
     friend class Texture2DArray;
     friend class TextureCube;
 
+    ATOMIC_REFCOUNTED(RenderSurface)
+
 public:
     /// Construct with parent texture.
     RenderSurface(Texture* parentTexture);

+ 2 - 0
Source/Atomic/Graphics/ShaderVariation.h

@@ -77,6 +77,8 @@ struct ShaderParameter
 /// Vertex or pixel shader on the GPU.
 class ATOMIC_API ShaderVariation : public RefCounted, public GPUObject
 {
+    ATOMIC_REFCOUNTED(ShaderVariation)
+
 public:
     /// Construct.
     ShaderVariation(Shader* owner, ShaderType type);

+ 1 - 5
Source/Atomic/Graphics/Tangent.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 namespace Atomic
 {

+ 2 - 0
Source/Atomic/Graphics/Technique.h

@@ -41,6 +41,8 @@ enum PassLightingMode
 /// %Material rendering pass, which defines shaders and render state.
 class ATOMIC_API Pass : public RefCounted
 {
+    ATOMIC_REFCOUNTED(Pass)
+
 public:
     /// Construct.
     Pass(const String& passName);

+ 1 - 5
Source/Atomic/IO/Compression.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 namespace Atomic
 {

+ 4 - 1
Source/Atomic/IO/File.cpp

@@ -95,7 +95,10 @@ File::File(Context* context, const String& fileName, FileMode mode) :
     checksum_(0),
     compressed_(false),
     readSyncNeeded_(false),
-    writeSyncNeeded_(false)
+    writeSyncNeeded_(false),
+    // ATOMIC BEGIN
+    fullPath_(fileName)
+    // ATOMIC END
 {
     Open(fileName, mode);
 }

+ 10 - 0
Source/Atomic/IO/File.h

@@ -113,6 +113,9 @@ public:
     /// Reads a text file, ensuring data from file is 0 terminated
     virtual void ReadText(String& text);
 
+    /// Return the fullpath to the file
+    const String& GetFullPath() const { return fullPath_; }
+
     // ATOMIC END
 
 private:
@@ -151,6 +154,13 @@ private:
     bool readSyncNeeded_;
     /// Synchronization needed before write -flag.
     bool writeSyncNeeded_;
+
+    // ATOMIC BEGIN
+
+    /// Full path to file
+    String fullPath_;
+
+    // ATOMIC END
 };
 
 }

+ 12 - 6
Source/Atomic/Input/Input.cpp

@@ -38,8 +38,8 @@
 
 // ATOMIC BEGIN
 // #include "../UI/Text.h"
-// #include "../UI/UI.h"
-
+#include "../UI/UI.h"
+#include "../UI/UIWidget.h"
 #include <SDL/include/SDL.h>
 
 // ATOMIC END
@@ -78,9 +78,9 @@ int ConvertSDLKeyCode(int keySym, int scanCode)
         return SDL_tolower(keySym);
 }
 
-UIElement* TouchState::GetTouchedElement()
+UIWidget* TouchState::GetTouchedElement()
 {
-    return touchedElement_.Get();
+    return touchedWidget_.Get();
 }
 
 #ifdef __EMSCRIPTEN__
@@ -1132,13 +1132,16 @@ bool Input::RemoveScreenJoystick(SDL_JoystickID id)
     }
 
     JoystickState& state = joysticks_[id];
+// ATOMIC BEGIN
+/*
     if (!state.screenJoystick_)
     {
         ATOMIC_LOGERRORF("Failed to remove joystick with ID #%d which is not a screen joystick", id);
         return false;
     }
-// ATOMIC BEGIN
-    // state.screenJoystick_->Remove();
+
+     state.screenJoystick_->Remove();
+*/
 // ATOMIC END
     joysticks_.Erase(id);
 
@@ -2063,6 +2066,9 @@ void Input::HandleSDLEvent(void* sdlEvent)
                 (int)(evt.tfinger.y * graphics_->GetHeight()));
             state.delta_ = state.position_ - state.lastPosition_;
             state.pressure_ = evt.tfinger.pressure;
+            // ATOMIC BEGIN
+            state.touchedWidget_ = GetSubsystem<UI>()->GetWidgetAt(state.position_.x_, state.position_.y_, true);
+            // ATOMIC END
 
             using namespace TouchMove;
 

+ 10 - 6
Source/Atomic/Input/Input.h

@@ -48,7 +48,7 @@ enum MouseMode
 class Deserializer;
 class Graphics;
 class Serializer;
-class UIElement;
+class UIWidget;
 class XMLFile;
 
 const IntVector2 MOUSE_POSITION_OFFSCREEN = IntVector2(M_MIN_INT, M_MIN_INT);
@@ -57,7 +57,7 @@ const IntVector2 MOUSE_POSITION_OFFSCREEN = IntVector2(M_MIN_INT, M_MIN_INT);
 struct TouchState
 {
     /// Return last touched UI element, used by scripting integration.
-    UIElement* GetTouchedElement();
+    UIWidget* GetTouchedElement();
 
     /// Touch (finger) ID.
     int touchID_;
@@ -69,8 +69,10 @@ struct TouchState
     IntVector2 delta_;
     /// Finger pressure.
     float pressure_;
-    /// Last touched UI element from screen joystick.
-    WeakPtr<UIElement> touchedElement_;
+// ATOMIC BEGIN
+    /// Last touched UI widget
+    WeakPtr<UIWidget> touchedWidget_;
+// ATOMIC END
 };
 
 /// %Input state for a joystick.
@@ -78,7 +80,7 @@ struct JoystickState
 {
     /// Construct with defaults.
     JoystickState() :
-        joystick_(0), controller_(0), screenJoystick_(0)
+        joystick_(0), controller_(0)
     {
     }
 
@@ -117,8 +119,10 @@ struct JoystickState
     SDL_JoystickID joystickID_;
     /// SDL game controller.
     SDL_GameController* controller_;
+    // ATOMIC BEGIN
     /// UI element containing the screen joystick.
-    UIElement* screenJoystick_;
+    // UIElement* screenJoystick_;
+    // ATOMIC END
     /// Joystick name.
     String name_;
     /// Button up/down state.

+ 1 - 5
Source/Atomic/Math/Random.h

@@ -22,11 +22,7 @@
 
 #pragma once
 
-#ifdef ATOMIC_IS_BUILDING
-#include "Atomic.h"
-#else
-#include <Atomic/Atomic.h>
-#endif
+#include "Atomic/Atomic.h"
 
 namespace Atomic
 {

+ 2 - 0
Source/Atomic/Network/HttpRequest.h

@@ -43,6 +43,8 @@ enum HttpRequestState
 /// An HTTP connection with response data stream.
 class ATOMIC_API HttpRequest : public RefCounted, public Deserializer, public Thread
 {
+    ATOMIC_REFCOUNTED(HttpRequest)
+
 public:
     /// Construct with parameters.
     HttpRequest(const String& url, const String& verb, const Vector<String>& headers, const String& postData);

+ 2 - 0
Source/Atomic/Physics/CollisionShape.h

@@ -62,6 +62,8 @@ enum ShapeType
 /// Base class for collision shape geometry data.
 struct CollisionGeometryData : public RefCounted
 {
+    ATOMIC_REFCOUNTED(CollisionGeometryData)
+
 };
 
 /// Triangle mesh geometry data.

+ 42 - 0
Source/Atomic/Scene/Node.cpp

@@ -2197,4 +2197,46 @@ void Node::HandleAttributeAnimationUpdate(StringHash eventType, VariantMap& even
     UpdateAttributeAnimations(eventData[P_TIMESTEP].GetFloat());
 }
 
+// ATOMIC BEGIN
+
+void Node::GetChildrenWithName(PODVector<Node*>& dest, const String& name, bool recursive) const
+{
+    GetChildrenWithName(dest, StringHash(name), recursive);
+}
+
+void Node::GetChildrenWithName(PODVector<Node*>& dest, const char* name, bool recursive) const
+{
+    GetChildrenWithName(dest, StringHash(name), recursive);
+}
+
+void Node::GetChildrenWithName(PODVector<Node*>& dest, StringHash nameHash, bool recursive) const
+{
+    dest.Clear();
+
+    if (!recursive)
+    {
+        for (Vector<SharedPtr<Node> >::ConstIterator i = children_.Begin(); i != children_.End(); ++i)
+        {
+            if ((*i)->GetNameHash() == nameHash)
+                dest.Push(*i);
+        }
+    }
+    else
+        GetChildrenWithNameRecursive(dest, nameHash);
+}
+
+void Node::GetChildrenWithNameRecursive(PODVector<Node*>& dest, StringHash nameHash) const
+{
+    for (Vector<SharedPtr<Node> >::ConstIterator i = children_.Begin(); i != children_.End(); ++i)
+    {
+        Node* node = *i;
+        if (node->GetNameHash() == nameHash)
+            dest.Push(node);
+        if (!node->children_.Empty())
+            node->GetChildrenWithNameRecursive(dest, nameHash);
+    }
+}
+
+// ATOMIC END
+
 }

+ 18 - 0
Source/Atomic/Scene/Node.h

@@ -593,6 +593,17 @@ public:
     /// Set local transform silently without marking the node & child nodes dirty. Used by animation code.
     void SetTransformSilent(const Vector3& position, const Quaternion& rotation, const Vector3& scale);
 
+    // ATOMIC BEGIN
+
+    /// Return child scene nodes by name, optionally recursive
+    void GetChildrenWithName(PODVector<Node*>& dest, const String& name, bool recursive = false) const;
+    /// Return child scene nodes by name, optionally recursive
+    void GetChildrenWithName(PODVector<Node*>& dest, const char* name, bool recursive = false) const;
+    /// Return child scene nodes by name hash, optionally recursive
+    void GetChildrenWithName(PODVector<Node*>& dest, StringHash nameHash, bool recursive = false) const;
+
+    // ATOMIC END
+
 protected:
     /// Handle attribute animation added.
     virtual void OnAttributeAnimationAdded();
@@ -670,6 +681,13 @@ private:
     StringHash nameHash_;
     /// Attribute buffer for network updates.
     mutable VectorBuffer attrBuffer_;
+
+    // ATOMIC BEGIN
+
+    /// Return child nodes by name, recursively
+    void GetChildrenWithNameRecursive(PODVector<Node*>& dest, StringHash nameHash) const;
+
+    // ATOMIC END
 };
 
 template <class T> T* Node::CreateComponent(CreateMode mode, unsigned id)

+ 1 - 0
Source/Atomic/Scene/ValueAnimationInfo.h

@@ -35,6 +35,7 @@ struct VAnimEventFrame;
 /// Base class for a value animation instance, which includes animation runtime information and updates the target object's value automatically.
 class ATOMIC_API ValueAnimationInfo : public RefCounted
 {
+    ATOMIC_REFCOUNTED(ValueAnimationInfo)
 public:
     /// Construct without target object.
     ValueAnimationInfo(ValueAnimation* animation, WrapMode wrapMode, float speed);

+ 1 - 1
Source/AtomicJS/Javascript/JSAtomic.cpp

@@ -110,7 +110,7 @@ static int js_print(duk_context* ctx)
     JSVM* vm = JSVM::GetJSVM(ctx);
     vm->SendEvent(E_JSPRINT, eventData);
 
-    LOGINFOF("%s", duk_to_string(ctx, -1));
+    ATOMIC_LOGINFOF("%s", duk_to_string(ctx, -1));
     return 0;
 }
 

+ 11 - 11
Source/AtomicJS/Javascript/JSComponent.cpp

@@ -44,14 +44,14 @@ extern const char* LOGIC_CATEGORY;
 
 class JSComponentFactory : public ObjectFactory
 {
+    ATOMIC_REFCOUNTED(JSComponentFactory)
+
 public:
     /// Construct.
     JSComponentFactory(Context* context) :
         ObjectFactory(context)
     {
-        type_ = JSComponent::GetTypeStatic();
-        baseType_ = JSComponent::GetBaseTypeStatic();
-        typeName_ = JSComponent::GetTypeNameStatic();
+        typeInfo_ = JSComponent::GetTypeInfoStatic();
     }
 
     /// Create an object of the specific type.
@@ -100,7 +100,7 @@ public:
                     ptr = componentFile->CreateJSComponent();
                 else
                 {
-                    LOGERRORF("Unable to load component file %s", split[1].CString());
+                    ATOMIC_LOGERRORF("Unable to load component file %s", split[1].CString());
                 }
             }
 
@@ -138,9 +138,9 @@ JSComponent::~JSComponent()
 
 void JSComponent::RegisterObject(Context* context)
 {
-    context->RegisterFactory(new JSComponentFactory(context), LOGIC_CATEGORY);
-    MIXED_ACCESSOR_ATTRIBUTE("ComponentFile", GetComponentFileAttr, SetComponentFileAttr, ResourceRef, ResourceRef(JSComponentFile::GetTypeStatic()), AM_DEFAULT);
-    COPY_BASE_ATTRIBUTES(ScriptComponent);
+    context->RegisterFactory<JSComponent>(LOGIC_CATEGORY);
+    ATOMIC_MIXED_ACCESSOR_ATTRIBUTE("ComponentFile", GetComponentFileAttr, SetComponentFileAttr, ResourceRef, ResourceRef(JSComponentFile::GetTypeStatic()), AM_DEFAULT);
+    ATOMIC_COPY_BASE_ATTRIBUTES(ScriptComponent);
 }
 
 void JSComponent::OnSetEnabled()
@@ -444,7 +444,7 @@ void JSComponent::UpdateEventSubscription()
     bool needUpdate = enabled && ((updateEventMask_ & USE_UPDATE) || !delayedStartCalled_);
     if (needUpdate && !(currentEventMask_ & USE_UPDATE))
     {
-        SubscribeToEvent(scene, E_SCENEUPDATE, HANDLER(JSComponent, HandleSceneUpdate));
+        SubscribeToEvent(scene, E_SCENEUPDATE, ATOMIC_HANDLER(JSComponent, HandleSceneUpdate));
         currentEventMask_ |= USE_UPDATE;
     }
     else if (!needUpdate && (currentEventMask_ & USE_UPDATE))
@@ -456,7 +456,7 @@ void JSComponent::UpdateEventSubscription()
     bool needPostUpdate = enabled && (updateEventMask_ & USE_POSTUPDATE);
     if (needPostUpdate && !(currentEventMask_ & USE_POSTUPDATE))
     {
-        SubscribeToEvent(scene, E_SCENEPOSTUPDATE, HANDLER(JSComponent, HandleScenePostUpdate));
+        SubscribeToEvent(scene, E_SCENEPOSTUPDATE, ATOMIC_HANDLER(JSComponent, HandleScenePostUpdate));
         currentEventMask_ |= USE_POSTUPDATE;
     }
     else if (!needUpdate && (currentEventMask_ & USE_POSTUPDATE))
@@ -473,7 +473,7 @@ void JSComponent::UpdateEventSubscription()
     bool needFixedUpdate = enabled && (updateEventMask_ & USE_FIXEDUPDATE);
     if (needFixedUpdate && !(currentEventMask_ & USE_FIXEDUPDATE))
     {
-        SubscribeToEvent(world, E_PHYSICSPRESTEP, HANDLER(JSComponent, HandlePhysicsPreStep));
+        SubscribeToEvent(world, E_PHYSICSPRESTEP, ATOMIC_HANDLER(JSComponent, HandlePhysicsPreStep));
         currentEventMask_ |= USE_FIXEDUPDATE;
     }
     else if (!needFixedUpdate && (currentEventMask_ & USE_FIXEDUPDATE))
@@ -485,7 +485,7 @@ void JSComponent::UpdateEventSubscription()
     bool needFixedPostUpdate = enabled && (updateEventMask_ & USE_FIXEDPOSTUPDATE);
     if (needFixedPostUpdate && !(currentEventMask_ & USE_FIXEDPOSTUPDATE))
     {
-        SubscribeToEvent(world, E_PHYSICSPOSTSTEP, HANDLER(JSComponent, HandlePhysicsPostStep));
+        SubscribeToEvent(world, E_PHYSICSPOSTSTEP, ATOMIC_HANDLER(JSComponent, HandlePhysicsPostStep));
         currentEventMask_ |= USE_FIXEDPOSTUPDATE;
     }
     else if (!needFixedPostUpdate && (currentEventMask_ & USE_FIXEDPOSTUPDATE))

+ 1 - 2
Source/AtomicJS/Javascript/JSComponent.h

@@ -38,8 +38,7 @@ class ATOMIC_API JSComponent : public ScriptComponent
     friend class JSComponentFactory;
     friend class JSComponentFile;
 
-    OBJECT(JSComponent);
-    BASEOBJECT(ScriptComponent);
+    ATOMIC_OBJECT(JSComponent, ScriptComponent);
 
     enum EventFlags
     {

+ 3 - 3
Source/AtomicJS/Javascript/JSComponentFile.cpp

@@ -122,7 +122,7 @@ JSComponent* JSComponentFile::CreateJSComponent()
 
     if (!component)
     {
-        LOGERRORF("Failed to create script class from component file %s", GetName().CString());
+        ATOMIC_LOGERRORF("Failed to create script class from component file %s", GetName().CString());
         component =  new JSComponent(context_);
     }
 
@@ -162,7 +162,7 @@ bool JSComponentFile::InitModule()
 
             if (!duk_is_function(ctx, -1))
             {
-                LOGERRORF("Component file export object does not export a key \"component\" function: %s", GetName().CString());
+                ATOMIC_LOGERRORF("Component file export object does not export a key \"component\" function: %s", GetName().CString());
                 duk_set_top(ctx, top);
                 return false;
             }
@@ -192,7 +192,7 @@ bool JSComponentFile::BeginLoad(Deserializer& source)
     unsigned dataSize = source.GetSize();
     if (!dataSize && !source.GetName().Empty())
     {
-        LOGERROR("Zero sized component file in " + source.GetName());
+        ATOMIC_LOGERROR("Zero sized component file in " + source.GetName());
         return false;
     }
 

+ 1 - 1
Source/AtomicJS/Javascript/JSComponentFile.h

@@ -36,7 +36,7 @@ class JSComponent;
 /// Script document resource.
 class ATOMIC_API JSComponentFile : public ScriptComponentFile
 {
-    OBJECT(JSComponentFile);
+    ATOMIC_OBJECT(JSComponentFile, ScriptComponentFile);
 
 public:
 

+ 2 - 2
Source/AtomicJS/Javascript/JSEventHelper.cpp

@@ -121,7 +121,7 @@ void JSEventHelper::AddEventHandler(StringHash eventType)
     GetSubsystem<JSEventDispatcher>()->RegisterJSEvent(eventType);
 
     // subscribe using object, so unsubscribing from object and not the event helper works
-    object_->SubscribeToEvent(eventType, HANDLER(JSEventHelper, HandleEvent));
+    object_->SubscribeToEvent(eventType, ATOMIC_HANDLER(JSEventHelper, HandleEvent));
 }
 
 void JSEventHelper::AddEventHandler(Object* sender, StringHash eventType)
@@ -129,7 +129,7 @@ void JSEventHelper::AddEventHandler(Object* sender, StringHash eventType)
     GetSubsystem<JSEventDispatcher>()->RegisterJSEvent(eventType);
 
     // subscribe using object, so unsubscribing from object and not the event helper works
-    object_->SubscribeToEvent(sender, eventType, HANDLER(JSEventHelper, HandleEvent));
+    object_->SubscribeToEvent(sender, eventType, ATOMIC_HANDLER(JSEventHelper, HandleEvent));
 }
 
 void JSEventHelper::HandleEvent(StringHash eventType, VariantMap& eventData)

+ 2 - 2
Source/AtomicJS/Javascript/JSEventHelper.h

@@ -30,7 +30,7 @@ namespace Atomic
 
 class ATOMIC_API JSEventDispatcher : public Object, public GlobalEventListener
 {
-    OBJECT(JSEventDispatcher);
+    ATOMIC_OBJECT(JSEventDispatcher, Object)
 
 public:
     /// Construct.
@@ -51,7 +51,7 @@ private:
 
 class ATOMIC_API JSEventHelper : public Object
 {
-    OBJECT(JSEventHelper);
+    ATOMIC_OBJECT(JSEventHelper, Object);
 
 public:
     /// Construct.

+ 12 - 12
Source/AtomicJS/Javascript/JSEvents.h

@@ -35,28 +35,28 @@ lineNumber	Rhino	Linenumber related to error source, inherited accessor
 stack	V8	Traceback as a multi-line human redable string, inherited accessor
 */
 
-EVENT(E_JSOBJECTADDED, ObjectAdded)
+ATOMIC_EVENT(E_JSOBJECTADDED, ObjectAdded)
 {
-    PARAM(P_OBJECT, Object); // object
+    ATOMIC_PARAM(P_OBJECT, Object); // object
 }
 
-EVENT(E_JSOBJECTREMOVED, ObjectRemoved)
+ATOMIC_EVENT(E_JSOBJECTREMOVED, ObjectRemoved)
 {
-    PARAM(P_OBJECT, Object); // object
+    ATOMIC_PARAM(P_OBJECT, Object); // object
 }
 
-EVENT(E_JSERROR, JSError)
+ATOMIC_EVENT(E_JSERROR, JSError)
 {
-    PARAM(P_ERRORNAME, ErrorName); // string
-    PARAM(P_ERRORMESSAGE, ErrorMessage); // string
-    PARAM(P_ERRORFILENAME, ErrorFileName); // string
-    PARAM(P_ERRORLINENUMBER, ErrorLineNumber); // int
-    PARAM(P_ERRORSTACK, ErrorStack); // string
+    ATOMIC_PARAM(P_ERRORNAME, ErrorName); // string
+    ATOMIC_PARAM(P_ERRORMESSAGE, ErrorMessage); // string
+    ATOMIC_PARAM(P_ERRORFILENAME, ErrorFileName); // string
+    ATOMIC_PARAM(P_ERRORLINENUMBER, ErrorLineNumber); // int
+    ATOMIC_PARAM(P_ERRORSTACK, ErrorStack); // string
 }
 
-EVENT(E_JSPRINT, JSPrint)
+ATOMIC_EVENT(E_JSPRINT, JSPrint)
 {
-    PARAM(P_TEXT, Text); // string
+    ATOMIC_PARAM(P_TEXT, Text); // string
 }
 
 }

+ 3 - 3
Source/AtomicJS/Javascript/JSMetrics.cpp

@@ -69,7 +69,7 @@ void JSMetrics::Dump()
     while (vitr != sorted.End())
     {
         const String& classname = (*vitr).classname;
-        LOGINFOF("%s %i", classname.CString(), objectMetrics_[classname].count);
+        ATOMIC_LOGINFOF("%s %i", classname.CString(), objectMetrics_[classname].count);
         vitr++;
     }
 
@@ -93,7 +93,7 @@ void JSMetrics::DumpNodes()
     while (vitr != sorted.End())
     {
         const String& nodename = (*vitr).name;
-        LOGINFOF("%s %i", nodename.CString(), nodeMetrics_[nodename].count);
+        ATOMIC_LOGINFOF("%s %i", nodename.CString(), nodeMetrics_[nodename].count);
         vitr++;
     }
 
@@ -142,7 +142,7 @@ void JSMetrics::DumpJSComponents()
     for (unsigned i = 0; i < jsnames.Size(); i++)
     {
         const String& classname = jsnames[i];
-        LOGINFOF("%s %i", classname.CString(), jscomponents[classname]);
+        ATOMIC_LOGINFOF("%s %i", classname.CString(), jscomponents[classname]);
     }
 
 }

+ 1 - 1
Source/AtomicJS/Javascript/JSMetrics.h

@@ -33,7 +33,7 @@ class JSVM;
 
 class JSMetrics : public Object
 {
-    OBJECT(JSMetrics);
+    ATOMIC_OBJECT(JSMetrics, Object);
 
     struct ObjectMetric
     {

+ 6 - 6
Source/AtomicJS/Javascript/JSPlugin.cpp

@@ -65,7 +65,7 @@ namespace Atomic
 
         if (!*finit)
         {
-            LOGERRORF("Native Plugin: Unable to get atomic_plugin_init entry point in %s", pluginLibrary.CString());
+            ATOMIC_LOGERRORF("Native Plugin: Unable to get atomic_plugin_init entry point in %s", pluginLibrary.CString());
             return false;
         }
 
@@ -81,18 +81,18 @@ namespace Atomic
 
          duk_context* ctx = vm->GetJSContext();
 
-         LOGINFOF("Loading Native Plugin: %s", pluginLibrary.CString());
+         ATOMIC_LOGINFOF("Loading Native Plugin: %s", pluginLibrary.CString());
 
          if (!jsplugin_get_entry_points(pluginLibrary, &validatefunc, &initfunc, errorMsg))
          {
-             LOGERRORF("%s", errorMsg.CString());
+             ATOMIC_LOGERRORF("%s", errorMsg.CString());
              return false;
          }
 
          int version = ATOMIC_JSPLUGIN_VERSION;
          if (!validatefunc(version, &gJSVMExports, sizeof(JSVMImports)))
          {
-             LOGERRORF("Native Plugin: atomic_plugin_validate failed: %s", pluginLibrary.CString());
+             ATOMIC_LOGERRORF("Native Plugin: atomic_plugin_validate failed: %s", pluginLibrary.CString());
              return false;
          }
 
@@ -109,7 +109,7 @@ namespace Atomic
         if (duk_pcall(ctx, 1) != DUK_EXEC_SUCCESS)
         {
             success = false;
-            LOGERRORF("Native Plugin: error calling atomic_plugin_init %s with error %s",
+            ATOMIC_LOGERRORF("Native Plugin: error calling atomic_plugin_init %s with error %s",
                 pluginLibrary.CString(),
                 duk_safe_to_string(ctx, -1));
         }
@@ -118,7 +118,7 @@ namespace Atomic
             if (!duk_is_boolean(ctx, -1) || !duk_to_boolean(ctx, -1))
             {
                 success = false;
-                LOGERRORF("Native Plugin: error calling atomic_plugin_init, didn't return true %s", pluginLibrary.CString());
+                ATOMIC_LOGERRORF("Native Plugin: error calling atomic_plugin_init, didn't return true %s", pluginLibrary.CString());
             }
         }
 

+ 1 - 1
Source/AtomicJS/Javascript/JSScene.cpp

@@ -61,7 +61,7 @@ static int Node_CreateJSComponent(duk_context* ctx)
 
     if (!file)
     {
-        LOGERRORF("Unable to load component file %s", path.CString());
+        ATOMIC_LOGERRORF("Unable to load component file %s", path.CString());
         duk_push_undefined(ctx);
         return 1;
     }

+ 1 - 1
Source/AtomicJS/Javascript/JSScriptObject.h

@@ -32,7 +32,7 @@ namespace Atomic
 class ScriptObject : public Object
 {
 
-    OBJECT(ScriptObject);
+    ATOMIC_OBJECT(ScriptObject, Object);
 
 public:
     /// Construct.

+ 7 - 7
Source/AtomicJS/Javascript/JSUI.cpp

@@ -40,17 +40,17 @@ JSUI::JSUI(Context* context) : Object(context),
 {
     ctx_ = JSVM::GetJSVM(nullptr)->GetJSContext();
 
-    SubscribeToEvent(E_UPDATE, HANDLER(JSUI, HandleUpdate));
+    SubscribeToEvent(E_UPDATE, ATOMIC_HANDLER(JSUI, HandleUpdate));
 
-    SubscribeToEvent(E_JSOBJECTADDED, HANDLER(JSUI, HandleObjectAdded));
+    SubscribeToEvent(E_JSOBJECTADDED, ATOMIC_HANDLER(JSUI, HandleObjectAdded));
 
     // for debugging only, commented out otherwise
     //SubscribeToEvent(E_JSOBJECTREMOVED, HANDLER(JSUI, HandleObjectRemoved));
 
-    SubscribeToEvent(E_WIDGETDELETED, HANDLER(JSUI, HandleWidgetDeleted));
-    SubscribeToEvent(E_WIDGETEVENT, HANDLER(JSUI, HandleWidgetEvent));
-    SubscribeToEvent(E_WIDGETLOADED, HANDLER(JSUI, HandleWidgetLoaded));
-    SubscribeToEvent(E_POPUPMENUSELECT, HANDLER(JSUI, HandlePopupMenuSelect));
+    SubscribeToEvent(E_WIDGETDELETED, ATOMIC_HANDLER(JSUI, HandleWidgetDeleted));
+    SubscribeToEvent(E_WIDGETEVENT, ATOMIC_HANDLER(JSUI, HandleWidgetEvent));
+    SubscribeToEvent(E_WIDGETLOADED, ATOMIC_HANDLER(JSUI, HandleWidgetLoaded));
+    SubscribeToEvent(E_POPUPMENUSELECT, ATOMIC_HANDLER(JSUI, HandlePopupMenuSelect));
 
     duk_push_global_stash(ctx_);
     duk_push_object(ctx_);
@@ -137,7 +137,7 @@ void JSUI::HandleObjectRemoved(StringHash eventType, VariantMap& eventData)
 {
     Object* o = static_cast<Object*>(eventData[ObjectAdded::P_OBJECT].GetPtr());
 
-    LOGINFOF("Removing %s", o->GetTypeName().CString());
+    ATOMIC_LOGINFOF("Removing %s", o->GetTypeName().CString());
 
 }
 

+ 1 - 1
Source/AtomicJS/Javascript/JSUI.h

@@ -35,7 +35,7 @@ namespace Atomic
 
 class JSUI : public Object
 {
-    OBJECT(JSUI)
+    ATOMIC_OBJECT(JSUI, Object)
 
 public:
 

+ 4 - 4
Source/AtomicJS/Javascript/JSVM.cpp

@@ -136,13 +136,13 @@ void JSVM::RegisterPackage(JSVMPackageRegistrationSettingsFunction regFunction,
 
 void JSVM::SubscribeToEvents()
 {
-    SubscribeToEvent(E_UPDATE, HANDLER(JSVM, HandleUpdate));
+    SubscribeToEvent(E_UPDATE, ATOMIC_HANDLER(JSVM, HandleUpdate));
 }
 
 void JSVM::HandleUpdate(StringHash eventType, VariantMap& eventData)
 {
 
-    PROFILE(JSVM_HandleUpdate);
+    ATOMIC_PROFILE(JSVM_HandleUpdate);
 
     using namespace Update;
 
@@ -152,7 +152,7 @@ void JSVM::HandleUpdate(StringHash eventType, VariantMap& eventData)
     gcTime_ += timeStep;
     if (gcTime_ > 5.0f)
     {
-        PROFILE(JSVM_GC);
+        ATOMIC_PROFILE(JSVM_GC);
 
         // run twice to call finalizers
         // see duktape docs
@@ -293,7 +293,7 @@ void JSVM::SendJSErrorEvent(const String& filename)
 
     duk_pop_n(ctx, 5);
 
-    LOGERRORF("JSErrorEvent: %s : Line %i\n Name: %s\n Message: %s\n Stack:%s",
+    ATOMIC_LOGERRORF("JSErrorEvent: %s : Line %i\n Name: %s\n Message: %s\n Stack:%s",
               filename.CString(), lineNumber, name.CString(), message.CString(), stack.CString());
 
     SendEvent(E_JSERROR, eventData);

+ 3 - 3
Source/AtomicJS/Javascript/JSVM.h

@@ -54,7 +54,7 @@ class ATOMIC_API JSVM : public Object
 
     friend class JSMetrics;
 
-    OBJECT(JSVM)
+    ATOMIC_OBJECT(JSVM, Object)
 
 public:
     /// Construct.
@@ -300,11 +300,11 @@ inline bool js_push_class_object_instance(duk_context* ctx, const RefCounted *in
     {
         if (instance->IsObject())
         {
-            LOGERRORF("Unable to push class object instance due to missing ClassID: %s", ((Object*)instance)->GetTypeName().CString());
+            ATOMIC_LOGERRORF("Unable to push class object instance due to missing ClassID: %s", ((Object*)instance)->GetTypeName().CString());
         }
         else
         {
-            LOGERROR("Unable to push RefCounted instance due to missing ClassID");
+            ATOMIC_LOGERROR("Unable to push RefCounted instance due to missing ClassID");
         }
 
         duk_set_top(ctx, top);

+ 1 - 1
Source/AtomicJS/Javascript/Javascript.h

@@ -34,7 +34,7 @@ class JSVM;
 /// Javascript subsystem.
 class ATOMIC_API Javascript : public Object
 {
-    OBJECT(Javascript);
+    ATOMIC_OBJECT(Javascript, Object);
 
 public:
     /// Construct.