1
This commit is contained in:
parent
e0784dad49
commit
17443b9bcf
@ -12,6 +12,7 @@ class Global : public a8::Singleton<Global>
|
|||||||
|
|
||||||
static int g_nowtime;
|
static int g_nowtime;
|
||||||
static ColliderComponent* last_collider;
|
static ColliderComponent* last_collider;
|
||||||
|
int traversing_cell_creature_count = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool IsValidSlotId(int slot_id);
|
bool IsValidSlotId(int slot_id);
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "hero.h"
|
#include "hero.h"
|
||||||
#include "creature.h"
|
#include "creature.h"
|
||||||
#include "bullet.h"
|
#include "bullet.h"
|
||||||
|
#include "global.h"
|
||||||
|
|
||||||
GridCell::GridCell()
|
GridCell::GridCell()
|
||||||
{
|
{
|
||||||
@ -32,6 +33,7 @@ void GridCell::TraverseHumanList(std::function<void (Human*, bool&)> func,
|
|||||||
int room_idx,
|
int room_idx,
|
||||||
bool& stop)
|
bool& stop)
|
||||||
{
|
{
|
||||||
|
++Global::Instance()->traversing_cell_creature_count;
|
||||||
for (Creature* c : creatures_[room_idx]) {
|
for (Creature* c : creatures_[room_idx]) {
|
||||||
if (!c->IsHuman()) {
|
if (!c->IsHuman()) {
|
||||||
continue;
|
continue;
|
||||||
@ -39,21 +41,26 @@ void GridCell::TraverseHumanList(std::function<void (Human*, bool&)> func,
|
|||||||
Human* hum = (Human*)c;
|
Human* hum = (Human*)c;
|
||||||
func(hum, stop);
|
func(hum, stop);
|
||||||
if (stop) {
|
if (stop) {
|
||||||
|
--Global::Instance()->traversing_cell_creature_count;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
--Global::Instance()->traversing_cell_creature_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridCell::TraverseCreatures(std::function<void (Creature*, bool&)>& func,
|
void GridCell::TraverseCreatures(std::function<void (Creature*, bool&)>& func,
|
||||||
int room_idx,
|
int room_idx,
|
||||||
bool& stop)
|
bool& stop)
|
||||||
{
|
{
|
||||||
|
++Global::Instance()->traversing_cell_creature_count;
|
||||||
for (Creature* c : creatures_[room_idx]) {
|
for (Creature* c : creatures_[room_idx]) {
|
||||||
func(c, stop);
|
func(c, stop);
|
||||||
if (stop) {
|
if (stop) {
|
||||||
|
--Global::Instance()->traversing_cell_creature_count;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
--Global::Instance()->traversing_cell_creature_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridCell::AddPermanentEntity(Entity* entity)
|
void GridCell::AddPermanentEntity(Entity* entity)
|
||||||
@ -115,11 +122,21 @@ void GridCell::TraverseAllLayerEntityList(std::function<void (Entity*, bool&)>&
|
|||||||
|
|
||||||
void GridCell::AddCreature(Creature* c)
|
void GridCell::AddCreature(Creature* c)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (Global::Instance()->traversing_cell_creature_count > 0) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
creatures_[c->room->GetRoomIdx()].insert(c);
|
creatures_[c->room->GetRoomIdx()].insert(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GridCell::RemoveCreature(Creature* c)
|
void GridCell::RemoveCreature(Creature* c)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (Global::Instance()->traversing_cell_creature_count > 0) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
creatures_[c->room->GetRoomIdx()].erase(c);
|
creatures_[c->room->GetRoomIdx()].erase(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user