瀏覽代碼

No longer segfaulting but now leaking World memory

Thomas Buck 10 年之前
父節點
當前提交
ab29600064
共有 5 個文件被更改,包括 20 次插入14 次删除
  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 查看文件

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

+ 1
- 1
include/World.h 查看文件

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

+ 6
- 0
src/Game.cpp 查看文件

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

+ 3
- 3
src/SkeletalModel.cpp 查看文件

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

+ 8
- 8
src/World.cpp 查看文件

@@ -55,18 +55,18 @@ int World::getRoomByLocation(float x, float y, float z)
55 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 60
         room = mRooms[i];
61 61
 
62 62
         if (!room)
63 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 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 70
                 return i;
71 71
 
72 72
             // This room is above or below current position
@@ -315,8 +315,7 @@ void World::setFlag(WorldFlag flag)
315 315
 
316 316
 void World::clearFlag(WorldFlag flag)
317 317
 {
318
-    mFlags |= flag;
319
-    mFlags ^= flag;
318
+    mFlags &= ~flag;
320 319
 }
321 320
 
322 321
 
@@ -325,7 +324,8 @@ void World::destroy()
325 324
     // Add some locking to check use state first
326 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,7 +450,7 @@ void World::moveEntity(entity_t *e, char movement)
450 450
                 e->pos[0],  e->pos[1], e->pos[2],
451 451
                 x, y, z);
452 452
 #else
453
-        if (!mFlags & fEnableHopping)
453
+        if (!(mFlags & fEnableHopping))
454 454
         {
455 455
             mFlags |= fEnableHopping;
456 456
             room = getRoomByLocation(e->room, x, y, z);

Loading…
取消
儲存