修复RoomObstacle析构函数问题

This commit is contained in:
aozhiwei 2020-05-25 11:44:57 +08:00
parent 445d360dfe
commit cfe26ae1a6
4 changed files with 15 additions and 19 deletions

View File

@ -85,7 +85,6 @@ void Entity::ClearColliders()
{ {
for (auto& itr : colliders) { for (auto& itr : colliders) {
ColliderComponent* collider = itr; ColliderComponent* collider = itr;
OnRemoveCollider(collider);
DestoryCollider(collider); DestoryCollider(collider);
} }
colliders.clear(); colliders.clear();

View File

@ -39,7 +39,6 @@ class Entity
virtual bool IsDead(Room* room) { return false;}; virtual bool IsDead(Room* room) { return false;};
virtual long long GetDeadFrameNo(Room* room) { return 0;}; virtual long long GetDeadFrameNo(Room* room) { return 0;};
virtual void OnPreCollision(Room* room) {}; virtual void OnPreCollision(Room* room) {};
virtual void OnRemoveCollider(ColliderComponent* collider) {};
bool TestCollision(Room* room, Entity* b); bool TestCollision(Room* room, Entity* b);
bool TestCollision(Room* room, ColliderComponent* b); bool TestCollision(Room* room, ColliderComponent* b);
bool TestCollisionEx(Room* room, const a8::Vec2& aabb_pos, AabbCollider& aabb_box); bool TestCollisionEx(Room* room, const a8::Vec2& aabb_pos, AabbCollider& aabb_box);
@ -78,9 +77,11 @@ class Entity
pos_.y = y; pos_.y = y;
} }
protected:
std::list<ColliderComponent*> colliders;
private: private:
a8::Vec2 pos_; a8::Vec2 pos_;
std::list<ColliderComponent*> colliders;
void ClearColliders(); void ClearColliders();
}; };

View File

@ -18,7 +18,18 @@ RoomObstacle::RoomObstacle():Obstacle()
RoomObstacle::~RoomObstacle() RoomObstacle::~RoomObstacle()
{ {
for (auto& itr : colliders) {
ColliderComponent* collider = itr;
#ifdef DEBUG
a8::UdpLog::Instance()->Debug("OnRemoveCollider %d %d %d",
{
room->room_idx,
entity_uniid,
(long long)collider
});
#endif
room->map_service->RemoveCollider(collider);
}
} }
void RoomObstacle::Initialize() void RoomObstacle::Initialize()
@ -68,16 +79,3 @@ void RoomObstacle::RecalcSelfCollider()
#endif #endif
} }
} }
void RoomObstacle::OnRemoveCollider(ColliderComponent* collider)
{
#ifdef DEBUG
a8::UdpLog::Instance()->Debug("OnRemoveCollider %d %d %d",
{
room->room_idx,
entity_uniid,
(long long)collider
});
#endif
room->map_service->RemoveCollider(collider);
}

View File

@ -13,6 +13,4 @@ class RoomObstacle : public Obstacle
virtual ~RoomObstacle() override; virtual ~RoomObstacle() override;
virtual void Initialize() override; virtual void Initialize() override;
virtual void RecalcSelfCollider() override; virtual void RecalcSelfCollider() override;
virtual void OnRemoveCollider(ColliderComponent* collider) override;
}; };