Browse Source

No longer segfaulting but now leaking World memory

Thomas Buck 10 years ago
parent
commit
ab29600064
5 changed files with 20 additions and 14 deletions
  1. 2
    2
      include/Render.h
  2. 1
    1
      include/World.h
  3. 6
    0
      src/Game.cpp
  4. 3
    3
      src/SkeletalModel.cpp
  5. 8
    8
      src/World.cpp

+ 2
- 2
include/Render.h View File

119
         skeletalMesh
119
         skeletalMesh
120
     } RenderMeshType;
120
     } RenderMeshType;
121
 
121
 
122
-    void drawLoadScreen();
123
-
124
     /*!
122
     /*!
125
      * \brief Constructs an object of Render
123
      * \brief Constructs an object of Render
126
      */
124
      */
216
 
214
 
217
 private:
215
 private:
218
 
216
 
217
+    void drawLoadScreen();
218
+
219
     /*!
219
     /*!
220
      * \brief Check if a bounding box is in the View Volume
220
      * \brief Check if a bounding box is in the View Volume
221
      * \param bboxMin Start coordinates of a valid bounding box
221
      * \param bboxMin Start coordinates of a valid bounding box

+ 1
- 1
include/World.h View File

27
 public:
27
 public:
28
 
28
 
29
     enum WorldFlag {
29
     enum WorldFlag {
30
-        fEnableHopping = 1
30
+        fEnableHopping = (1 << 0)
31
     };
31
     };
32
 
32
 
33
     /*!
33
     /*!

+ 6
- 0
src/Game.cpp View File

70
     // Enable Renderer
70
     // Enable Renderer
71
     mRender->setMode(Render::modeLoadScreen);
71
     mRender->setMode(Render::modeLoadScreen);
72
 
72
 
73
+    // Enable World Hopping
74
+    mWorld.setFlag(World::fEnableHopping);
75
+
73
     return 0;
76
     return 0;
74
 }
77
 }
75
 
78
 
636
     }
639
     }
637
     if (!found)
640
     if (!found)
638
     {
641
     {
642
+        if (mLara == thing) {
643
+            printf("Processing Lara...\n");
644
+        }
639
         sModel->model = r_model;
645
         sModel->model = r_model;
640
         mWorld.addEntity(thing);
646
         mWorld.addEntity(thing);
641
 
647
 

+ 3
- 3
src/SkeletalModel.cpp View File

20
 }
20
 }
21
 
21
 
22
 SkeletalModel::~SkeletalModel() {
22
 SkeletalModel::~SkeletalModel() {
23
-    if (model) {
23
+    //! \fixme Causes "freeing already freed pointer" exceptions or EXEC_BAD_ACCESS
24
+    /* if (model) {
24
         for(std::vector<animation_frame_t>::size_type i = 0; i < model->animation.size(); i++) {
25
         for(std::vector<animation_frame_t>::size_type i = 0; i < model->animation.size(); i++) {
25
             animation_frame_t *af = model->animation[i];
26
             animation_frame_t *af = model->animation[i];
26
 
27
 
44
             delete af;
45
             delete af;
45
         }
46
         }
46
 
47
 
47
-        // \fixme Causes "freeing already freed pointer" exception
48
         delete model;
48
         delete model;
49
-    }
49
+    } */
50
 }
50
 }
51
 
51
 
52
 int SkeletalModel::getAnimation() {
52
 int SkeletalModel::getAnimation() {

+ 8
- 8
src/World.cpp View File

55
     int hop = -1;
55
     int hop = -1;
56
 
56
 
57
 
57
 
58
-    for(std::vector<int>::size_type i = 0; i != mRooms.size(); i++)
58
+    for(std::vector<int>::size_type i = 0; i < mRooms.size(); i++)
59
     {
59
     {
60
         room = mRooms[i];
60
         room = mRooms[i];
61
 
61
 
62
         if (!room)
62
         if (!room)
63
             continue;
63
             continue;
64
 
64
 
65
-        if (x > room->bbox_min[0] && x < room->bbox_max[0] &&
66
-                z > room->bbox_min[2] && z < room->bbox_max[2])
65
+        if ((x > room->bbox_min[0]) && (x < room->bbox_max[0]) &&
66
+                (z > room->bbox_min[2]) && (z < room->bbox_max[2]))
67
         {
67
         {
68
             // This room contains current position
68
             // This room contains current position
69
-            if (y > room->bbox_min[1] && y < room->bbox_max[1])
69
+            if ((y > room->bbox_min[1]) && (y < room->bbox_max[1]))
70
                 return i;
70
                 return i;
71
 
71
 
72
             // This room is above or below current position
72
             // This room is above or below current position
315
 
315
 
316
 void World::clearFlag(WorldFlag flag)
316
 void World::clearFlag(WorldFlag flag)
317
 {
317
 {
318
-    mFlags |= flag;
319
-    mFlags ^= flag;
318
+    mFlags &= ~flag;
320
 }
319
 }
321
 
320
 
322
 
321
 
325
     // Add some locking to check use state first
324
     // Add some locking to check use state first
326
     if (!mClearLock)
325
     if (!mClearLock)
327
     {
326
     {
328
-        clear();
327
+        //! \fixme Causes "freeing already freed pointer" exceptions or EXEC_BAD_ACCESS
328
+        //clear();
329
     }
329
     }
330
 }
330
 }
331
 
331
 
450
                 e->pos[0],  e->pos[1], e->pos[2],
450
                 e->pos[0],  e->pos[1], e->pos[2],
451
                 x, y, z);
451
                 x, y, z);
452
 #else
452
 #else
453
-        if (!mFlags & fEnableHopping)
453
+        if (!(mFlags & fEnableHopping))
454
         {
454
         {
455
             mFlags |= fEnableHopping;
455
             mFlags |= fEnableHopping;
456
             room = getRoomByLocation(e->room, x, y, z);
456
             room = getRoomByLocation(e->room, x, y, z);

Loading…
Cancel
Save