BGE: LoD Hysteresis clean up
authorJorge Bernal <jbernalmartinez@gmail.com>
Mon, 23 Mar 2015 17:57:19 +0000 (18:57 +0100)
committerJorge Bernal <jbernalmartinez@gmail.com>
Mon, 23 Mar 2015 18:03:56 +0000 (19:03 +0100)
Move scene hysteresis value to KX_Scene where it should be (instead of
KX_GameObject)

source/gameengine/Converter/BL_BlenderDataConversion.cpp
source/gameengine/Ketsji/KX_GameObject.cpp
source/gameengine/Ketsji/KX_GameObject.h
source/gameengine/Ketsji/KX_Scene.cpp
source/gameengine/Ketsji/KX_Scene.h

index 7b5cc457ee66f439b8a66316365a29454bd682ac..6e3a321bfdf1ba263038e3b8c63f782298a25d82 100644 (file)
@@ -1556,7 +1556,7 @@ static KX_GameObject *gameobject_from_blenderobject(
                        }
                        if (blenderscene->gm.lodflag & SCE_LOD_USE_HYST) {
                                kxscene->SetLodHysteresis(true);
-                               gameobj->SetLodHysteresisValue(blenderscene->gm.scehysteresis);
+                               kxscene->SetLodHysteresisValue(blenderscene->gm.scehysteresis);
                        }
                }
        
index 16dfe5bd9de0bc9115f28224f58718deb4326a4a..d0c6792cce0f848111695325e8ac9849959bbba5 100644 (file)
@@ -93,7 +93,6 @@ KX_GameObject::KX_GameObject(
       m_layer(0),
       m_currentLodLevel(0),
       m_previousLodLevel(0),
-      m_lodHysteresis(0),
       m_pBlenderObject(NULL),
       m_pBlenderGroupObject(NULL),
       m_bSuspendDynamics(false),
@@ -786,11 +785,6 @@ void KX_GameObject::AddLodMesh(RAS_MeshObject* mesh)
        m_lodmeshes.push_back(mesh);
 }
 
-void KX_GameObject::SetLodHysteresisValue(int hysteresis)
-{
-       m_lodHysteresis = hysteresis;
-}
-
 void KX_GameObject::UpdateLod(MT_Vector3 &cam_pos)
 {
        // Handle dupligroups
@@ -811,20 +805,20 @@ void KX_GameObject::UpdateLod(MT_Vector3 &cam_pos)
        int level = 0;
        Object *bob = this->GetBlenderObject();
        LodLevel *lod = (LodLevel*) bob->lodlevels.first;
-       KX_Scene *sce = this->GetScene();
+       KX_Scene *kxscene = this->GetScene();
 
        for (; lod; lod = lod->next, level++) {
                if (!lod->source || lod->source->type != OB_MESH) level--;
                if (!lod->next) break;
                if (level == (this->m_previousLodLevel) || (level == (this->m_previousLodLevel + 1))) {
                        short hysteresis = 0;
-                       if (sce->IsActivedLodHysteresis()) {
+                       if (kxscene->IsActivedLodHysteresis()) {
                                // if exists, LoD level hysteresis will override scene hysteresis
                                if (lod->next->flags & OB_LOD_USE_HYST) {
                                        hysteresis = lod->next->obhysteresis;
                                }
-                               else if (this->m_lodHysteresis != 0) {
-                                       hysteresis = m_lodHysteresis;
+                               else {
+                                       hysteresis = kxscene->GetLodHysteresisValue();
                                }
                        }
                        float hystvariance = MT_abs(lod->next->distance - lod->distance) * hysteresis / 100;
@@ -833,13 +827,13 @@ void KX_GameObject::UpdateLod(MT_Vector3 &cam_pos)
                }
                else if (level == (this->m_previousLodLevel - 1)) {
                        short hysteresis = 0;
-                       if (sce->IsActivedLodHysteresis()) {
+                       if (kxscene->IsActivedLodHysteresis()) {
                                // if exists, LoD level hysteresis will override scene hysteresis
                                if (lod->next->flags & OB_LOD_USE_HYST) {
                                        hysteresis = lod->next->obhysteresis;
                                }
-                               else if (this->m_lodHysteresis != 0) {
-                                       hysteresis = m_lodHysteresis;
+                               else {
+                                       hysteresis = kxscene->GetLodHysteresisValue();
                                }
                        }
                        float hystvariance = MT_abs(lod->next->distance - lod->distance) * hysteresis / 100;
index d9810b89c90908bb2af01f3c025a6fef530343e7..acc635857493cbc9bb6b3c637969347048c03361 100644 (file)
@@ -91,7 +91,6 @@ protected:
        std::vector<RAS_MeshObject*>            m_lodmeshes;
        int                                 m_currentLodLevel;
        short                                                           m_previousLodLevel;
-       int                                                                     m_lodHysteresis;
        SG_QList                                                        m_meshSlots;    // head of mesh slots of this 
        struct Object*                                          m_pBlenderObject;
        struct Object*                                          m_pBlenderGroupObject;
@@ -806,14 +805,6 @@ public:
                RAS_MeshObject* mesh
        );
 
-       /**
-        * Set lod hysteresis value
-        */
-               void
-       SetLodHysteresisValue(
-               int hysteresis
-       );
-
        /**
         * Updates the current lod level based on distance from camera.
         */
index d9d07e78c1712b4e366c24ca02d835960092c250..e26fdaa489839be177634e9954a1b71cc3e059f1 100644 (file)
@@ -157,7 +157,8 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
        m_active_camera(NULL),
        m_ueberExecutionPriority(0),
        m_blenderScene(scene),
-       m_isActivedHysteresis(false)
+       m_isActivedHysteresis(false),
+       m_lodHysteresisValue(0)
 {
        m_suspendedtime = 0.0;
        m_suspendeddelta = 0.0;
@@ -1774,6 +1775,16 @@ bool KX_Scene::IsActivedLodHysteresis(void)
        return m_isActivedHysteresis;
 }
 
+void KX_Scene::SetLodHysteresisValue(int hysteresisvalue)
+{
+       m_lodHysteresisValue = hysteresisvalue;
+}
+
+int KX_Scene::GetLodHysteresisValue(void)
+{
+       return m_lodHysteresisValue;
+}
+
 void KX_Scene::UpdateObjectActivity(void) 
 {
        if (m_activity_culling) {
index 19873daabb3631fdc295522acf54f49bbd63afb3..a031be78e9231d7e6f7626050a21eecfe9a46904 100644 (file)
@@ -296,9 +296,10 @@ protected:
        KX_ObstacleSimulation* m_obstacleSimulation;
 
        /**
-        * Does this scene active the LoD Hysteresis?
+        * LOD Hysteresis settings
         */
        bool m_isActivedHysteresis;
+       int m_lodHysteresisValue;
 
 public:
        KX_Scene(class SCA_IInputDevice* keyboarddevice,
@@ -552,9 +553,11 @@ public:
        // Update the mesh for objects based on level of detail settings
        void UpdateObjectLods(void);
 
-       // Enable/disable LoD Hysteresis
+       // LoD Hysteresis functions
        void SetLodHysteresis(bool active);
        bool IsActivedLodHysteresis();
+       void SetLodHysteresisValue(int hysteresisvalue);
+       int GetLodHysteresisValue();
        
        // Update the activity box settings for objects in this scene, if needed.
        void UpdateObjectActivity(void);