void SendLayout(CSharpFramework.Layout.Layout layout)
        {
            if (layout == null || _isSDKScene)
            {
                return;
            }

            VisionGoogleAnalytics.RecordView("/vForge/" + layout.Name);
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public GoogleAnalyticsTracker()
        {
            // Send Google analytics
            VisionGoogleAnalytics.Initialize();
            VisionGoogleAnalytics.SendInitialization();

            EditorManager.SceneChanged += new SceneChangedEventHandler(EditorManager_SceneChanged);
            IProject.NewProjectLoaded  += new EventHandler(IProject_NewProjectLoaded);
            EditorManager.ApplicationLayout.ActiveLayoutChanged += new CSharpFramework.Layout.LayoutManager.ActiveLayoutChangedEventHandler(ApplicationLayout_ActiveLayoutChanged);

            _viewTrackingTimer          = new Timer();
            _viewTrackingTimer.Interval = 10 * 60 * 1000;
            _viewTrackingTimer.Tick    += new EventHandler(viewTrackingTimer_Tick);
            _viewTrackingTimer.Enabled  = true;
            _viewTrackingTimer.Start();
        }
        void CheckSceneStatistics()
        {
            if (EditorManager.Scene == null || _isSDKScene)
            {
                return;
            }

            bool physicsUsed  = false;
            bool aiUsed       = false;
            bool behaviorUsed = false;

            int scriptedObjectCount = 0;

            Stack <ShapeBase> TempStack = new Stack <ShapeBase>();

            foreach (Layer layer in EditorManager.Scene.Layers)
            {
                TempStack.Push(layer.Root);
            }

            while (TempStack.Count > 0)
            {
                ShapeBase current = TempStack.Pop();
                foreach (ShapeBase shape in current.ChildCollection)
                {
                    TempStack.Push(shape);
                }

                if (!physicsUsed && current.Components != null)
                {
                    if (current.Components.GetComponentByEngineName("vHavokRigidBody") != null)
                    {
                        physicsUsed = true;
                    }

                    if (current.Components.GetComponentByEngineName("vHavokCharacterController") != null)
                    {
                        physicsUsed = true;
                    }

                    if (current.Components.GetComponentByEngineName("vHavokTriggerVolume") != null)
                    {
                        physicsUsed = true;
                    }

                    if (current.Components.GetComponentByEngineName("vHavokRagdoll") != null)
                    {
                        physicsUsed = true;
                    }
                }

                if (!aiUsed)
                {
                    if (current.GetType().Name == "HavokNavMeshShape")
                    {
                        aiUsed = true;
                    }
                }

                if (!behaviorUsed && current.Components != null)
                {
                    if (current.Components.GetComponentByEngineName("vHavokBehaviorComponent") != null)
                    {
                        behaviorUsed = true;
                    }
                }

                if (current.Components != null && current.Components.GetComponentByEngineName("VScriptComponent") != null)
                {
                    scriptedObjectCount++;
                }
            }

            VisionGoogleAnalytics.RecordEvent("Usage", "Havok Products", "Physics", physicsUsed ? 1 : 0);
            VisionGoogleAnalytics.RecordEvent("Usage", "Havok Products", "Behavior", behaviorUsed ? 1 : 0);
            VisionGoogleAnalytics.RecordEvent("Usage", "Havok Products", "AI", aiUsed ? 1 : 0);

            VisionGoogleAnalytics.RecordEvent("Usage", "Builtin", "Scripted Objects", scriptedObjectCount);
        }