1
This commit is contained in:
parent
e1ba955bb4
commit
2ea7fabcdf
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user