This commit is contained in:
aozhiwei 2021-05-10 13:31:25 +08:00
parent e1ba955bb4
commit 2ea7fabcdf
4 changed files with 33 additions and 1 deletions

View File

@ -1573,11 +1573,22 @@ void Creature::SlaveOnRemove(Entity* slave)
switch (slave->GetEntityType()) {
case ET_Hero:
{
for (auto itr = slave_heros_.begin(); itr != slave_heros_.end(); ++itr) {
if ((Entity*)std::get<1>(*itr) == slave) {
slave_heros_.erase(itr);
break;
}
}
}
break;
case ET_Obstacle:
{
for (auto itr = slave_things_.begin(); itr != slave_things_.end(); ++itr) {
if ((Entity*)std::get<1>(*itr) == slave) {
slave_things_.erase(itr);
break;
}
}
}
break;
default:

View File

@ -18,6 +18,7 @@ Hero::Hero():Creature()
Hero::~Hero()
{
DetachFromMaster();
if (ai) {
A8_SAFE_DELETE(ai);
}
@ -231,3 +232,13 @@ void Hero::SetAiLevel(int ai_level)
ai->SetAiLevel(ai_level);
}
}
void Hero::DetachFromMaster()
{
if (!detached_) {
if (master.Get()) {
master.Get()->SlaveOnRemove(this);
}
detached_ = true;
}
}

View File

@ -35,6 +35,7 @@ public:
virtual void GetAabbBox(AabbCollider& aabb_box) override;
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
void SetAiLevel(int ai_level);
void DetachFromMaster();
protected:
virtual void _UpdateMove(int speed) override;
@ -46,6 +47,7 @@ private:
bool later_removed_ = false;
CircleCollider* self_collider_ = nullptr;
Entity* last_collision_door_ = nullptr;
bool detached_ = false;
friend class HeroAI;
};

View File

@ -659,6 +659,14 @@ void Room::RemoveObjectLater(RoomEntity* entity)
entity->room->RemoveFromMoveableHash((Car*)entity);
}
break;
case ET_Hero:
{
entity->RemoveFromAroundPlayers(entity->room);
entity->BroadcastDeleteState(entity->room);
entity->room->grid_service->RemoveCreature((Hero*)entity);
entity->room->RemoveFromMoveableHash((Hero*)entity);
}
break;
default:
{
abort();