1
This commit is contained in:
parent
e1ba955bb4
commit
2ea7fabcdf
@ -1573,11 +1573,22 @@ void Creature::SlaveOnRemove(Entity* slave)
|
|||||||
switch (slave->GetEntityType()) {
|
switch (slave->GetEntityType()) {
|
||||||
case ET_Hero:
|
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;
|
break;
|
||||||
case ET_Obstacle:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -18,6 +18,7 @@ Hero::Hero():Creature()
|
|||||||
|
|
||||||
Hero::~Hero()
|
Hero::~Hero()
|
||||||
{
|
{
|
||||||
|
DetachFromMaster();
|
||||||
if (ai) {
|
if (ai) {
|
||||||
A8_SAFE_DELETE(ai);
|
A8_SAFE_DELETE(ai);
|
||||||
}
|
}
|
||||||
@ -231,3 +232,13 @@ void Hero::SetAiLevel(int ai_level)
|
|||||||
ai->SetAiLevel(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 GetAabbBox(AabbCollider& aabb_box) override;
|
||||||
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
|
virtual void GetHitAabbBox(AabbCollider& aabb_box) override;
|
||||||
void SetAiLevel(int ai_level);
|
void SetAiLevel(int ai_level);
|
||||||
|
void DetachFromMaster();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void _UpdateMove(int speed) override;
|
virtual void _UpdateMove(int speed) override;
|
||||||
@ -46,6 +47,7 @@ private:
|
|||||||
bool later_removed_ = false;
|
bool later_removed_ = false;
|
||||||
CircleCollider* self_collider_ = nullptr;
|
CircleCollider* self_collider_ = nullptr;
|
||||||
Entity* last_collision_door_ = nullptr;
|
Entity* last_collision_door_ = nullptr;
|
||||||
|
bool detached_ = false;
|
||||||
|
|
||||||
friend class HeroAI;
|
friend class HeroAI;
|
||||||
};
|
};
|
||||||
|
@ -659,6 +659,14 @@ void Room::RemoveObjectLater(RoomEntity* entity)
|
|||||||
entity->room->RemoveFromMoveableHash((Car*)entity);
|
entity->room->RemoveFromMoveableHash((Car*)entity);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user