game2005/server/gameserver/moveableentity.cc
aozhiwei 8794eb20e3 1
2021-09-07 06:41:28 +00:00

85 lines
2.4 KiB
C++

#include "precompile.h"
#include "moveableentity.h"
#include "room.h"
#include "human.h"
void MoveableEntity::TraverseAllLayerEntityList(std::function<void (Entity*, bool&)> func)
{
room->grid_service->TraverseAllLayerEntityList(room->GetRoomIdx(), grid_list_, func);
}
void MoveableEntity::TraverseAllLayerHumanList(std::function<void (Human*, bool&)> func)
{
room->grid_service->TraverseAllLayerHumanList(room->GetRoomIdx(), grid_list_, func);
}
void MoveableEntity::RefreshView()
{
TraverseAllLayerHumanList
(
[this] (Human* hum, bool& stop)
{
hum->AddToNewObjects(this);
hum->AddToPartObjects(this);
});
}
void MoveableEntity::OnGridListChange(std::set<GridCell*>& old_grids,
std::set<GridCell*>& inc_grids,
std::set<GridCell*>& dec_grids
)
{
room->grid_service->TraverseAllLayerHumanList
(
room->GetRoomIdx(),
inc_grids,
[this, &old_grids] (Human* hum, bool& stop)
{
if (!room->grid_service->CreatureInGridList(hum, old_grids)) {
hum->AddToNewObjects(this);
hum->AddToPartObjects(this);
hum->RemoveOutObjects(this);
}
});
room->grid_service->TraverseAllLayerHumanList
(
room->GetRoomIdx(),
dec_grids,
[this] (Human* hum, bool& stop)
{
if (!room->grid_service->CreatureInGridList(hum, GetGridList())) {
hum->AddOutObjects(this);
}
});
}
void MoveableEntity::SyncAroundPlayers(const char* file, int line, const char* func)
{
TraverseAllLayerHumanList
(
[this, file, line, func] (Human* hum, bool& stop)
{
hum->AddToNewObjects(this);
});
}
void MoveableEntity::TraverseCreatures(std::function<void (Creature*, bool&)> func)
{
room->grid_service->TraverseCreatures(room->GetRoomIdx(),
GetGridList(),
func);
}
void MoveableEntity::SetMoveDir(const a8::Vec2& move_dir)
{
move_dir_ = move_dir;
++chg_move_dir_times_;
}
void MoveableEntity::SetAttackDir(const a8::Vec2& attack_dir)
{
attack_dir_ = attack_dir;
++chg_attack_dir_times_;
}