This commit is contained in:
aozhiwei 2019-04-23 10:06:20 +08:00
parent bc2fe8759a
commit 94a49baddb
2 changed files with 55 additions and 19 deletions

View File

@ -34,6 +34,11 @@ void Grid::Init(int width, int height, int cell_width)
grid_offset_arr_[6] = cell_count_per_row_ - 1; grid_offset_arr_[6] = cell_count_per_row_ - 1;
grid_offset_arr_[7] = cell_count_per_row_; grid_offset_arr_[7] = cell_count_per_row_;
grid_offset_arr_[8] = cell_count_per_row_ + 1; grid_offset_arr_[8] = cell_count_per_row_ + 1;
min_x_ = cell_width_ * 1;
min_y_ = cell_width_ * 1;
max_x_ = cell_width_ * (cell_count_per_row_ - 1);
max_y_ = cell_width_ * (cell_count_per_col_ - 1);
} }
void Grid::UnInit() void Grid::UnInit()
@ -44,57 +49,75 @@ void Grid::UnInit()
} }
} }
void Grid::Get123456789(int grid_id, std::vector<GridCell*>& grid_list) void Grid::Get123456789(int grid_id, std::set<GridCell*>& grid_list)
{ {
for (size_t i = 1; i <= 9; ++i) { for (size_t i = 1; i <= 9; ++i) {
GetGridList(grid_id, i, grid_list); GetGridList(grid_id, i, grid_list);
} }
} }
void Grid::Get123(int grid_id, std::vector<GridCell*>& grid_list) void Grid::Get123(int grid_id, std::set<GridCell*>& grid_list)
{ {
GetGridList(grid_id, 1, grid_list); GetGridList(grid_id, 1, grid_list);
GetGridList(grid_id, 2, grid_list); GetGridList(grid_id, 2, grid_list);
GetGridList(grid_id, 3, grid_list); GetGridList(grid_id, 3, grid_list);
} }
void Grid::Get456(int grid_id, std::vector<GridCell*>& grid_list) void Grid::Get456(int grid_id, std::set<GridCell*>& grid_list)
{ {
GetGridList(grid_id, 4, grid_list); GetGridList(grid_id, 4, grid_list);
GetGridList(grid_id, 5, grid_list); GetGridList(grid_id, 5, grid_list);
GetGridList(grid_id, 6, grid_list); GetGridList(grid_id, 6, grid_list);
} }
void Grid::Get789(int grid_id, std::vector<GridCell*>& grid_list) void Grid::Get789(int grid_id, std::set<GridCell*>& grid_list)
{ {
GetGridList(grid_id, 7, grid_list); GetGridList(grid_id, 7, grid_list);
GetGridList(grid_id, 8, grid_list); GetGridList(grid_id, 8, grid_list);
GetGridList(grid_id, 9, grid_list); GetGridList(grid_id, 9, grid_list);
} }
void Grid::Get147(int grid_id, std::vector<GridCell*>& grid_list) void Grid::Get147(int grid_id, std::set<GridCell*>& grid_list)
{ {
GetGridList(grid_id, 1, grid_list); GetGridList(grid_id, 1, grid_list);
GetGridList(grid_id, 4, grid_list); GetGridList(grid_id, 4, grid_list);
GetGridList(grid_id, 7, grid_list); GetGridList(grid_id, 7, grid_list);
} }
void Grid::Get258(int grid_id, std::vector<GridCell*>& grid_list) void Grid::Get258(int grid_id, std::set<GridCell*>& grid_list)
{ {
GetGridList(grid_id, 2, grid_list); GetGridList(grid_id, 2, grid_list);
GetGridList(grid_id, 5, grid_list); GetGridList(grid_id, 5, grid_list);
GetGridList(grid_id, 8, grid_list); GetGridList(grid_id, 8, grid_list);
} }
void Grid::Get369(int grid_id, std::vector<GridCell*>& grid_list) void Grid::Get369(int grid_id, std::set<GridCell*>& grid_list)
{ {
GetGridList(grid_id, 3, grid_list); GetGridList(grid_id, 3, grid_list);
GetGridList(grid_id, 6, grid_list); GetGridList(grid_id, 6, grid_list);
GetGridList(grid_id, 9, grid_list); GetGridList(grid_id, 9, grid_list);
} }
void Grid::AddHuman(Human* hum, std::set<GridCell*>& inc_grid_list)
{
}
void Grid::MoveHuman(Human* hum, float x, float y,
std::set<GridCell*>& inc_grid_list,
std::set<GridCell*>& dec_grid_list
)
{
}
void Grid::AddEntity(Entity* entity)
{
}
void Grid::GetGridList(int grid_id, int offset, void Grid::GetGridList(int grid_id, int offset,
std::vector<GridCell*>& grid_list) std::set<GridCell*>& grid_list)
{ {
if (offset <1 || offset > 9) { if (offset <1 || offset > 9) {
abort(); abort();
@ -104,6 +127,6 @@ void Grid::GetGridList(int grid_id, int offset,
} }
int tmp_grid_id = grid_id + grid_offset_arr_[offset - 1]; int tmp_grid_id = grid_id + grid_offset_arr_[offset - 1];
if (tmp_grid_id > 0) { if (tmp_grid_id > 0) {
grid_list.push_back(&cells_[tmp_grid_id]); grid_list.insert(&cells_[tmp_grid_id]);
} }
} }

View File

@ -12,6 +12,8 @@ struct GridCell
4 5 6 4 5 6
7 8 9 7 8 9
*/ */
class Human;
class Entity;
class Room; class Room;
class Grid class Grid
{ {
@ -21,17 +23,25 @@ class Grid
void Init(int width, int height, int cell_width); void Init(int width, int height, int cell_width);
void UnInit(); void UnInit();
void Get123456789(int grid_id, std::vector<GridCell*>& grid_list); void Get123456789(int grid_id, std::set<GridCell*>& grid_list);
void Get123(int grid_id, std::vector<GridCell*>& grid_list); void Get123(int grid_id, std::set<GridCell*>& grid_list);
void Get456(int grid_id, std::vector<GridCell*>& grid_list); void Get456(int grid_id, std::set<GridCell*>& grid_list);
void Get789(int grid_id, std::vector<GridCell*>& grid_list); void Get789(int grid_id, std::set<GridCell*>& grid_list);
void Get147(int grid_id, std::vector<GridCell*>& grid_list); void Get147(int grid_id, std::set<GridCell*>& grid_list);
void Get258(int grid_id, std::vector<GridCell*>& grid_list); void Get258(int grid_id, std::set<GridCell*>& grid_list);
void Get369(int grid_id, std::vector<GridCell*>& grid_list); void Get369(int grid_id, std::set<GridCell*>& grid_list);
void AddHuman(Human* hum, std::set<GridCell*>& inc_grid_list);
void MoveHuman(Human* hum, float x, float y,
std::set<GridCell*>& inc_grid_list,
std::set<GridCell*>& dec_grid_list
);
void AddEntity(Entity* entity);
private: private:
inline void GetGridList(int grid_id, int offset, inline void GetGridList(int grid_id, int offset,
std::vector<GridCell*>& grid_list); std::set<GridCell*>& grid_list);
private: private:
Room* room_ = nullptr; Room* room_ = nullptr;
@ -42,7 +52,10 @@ class Grid
int cell_width_ = 0; int cell_width_ = 0;
int cell_count_per_row_ = 0; int cell_count_per_row_ = 0;
int cell_count_per_col_ = 0; int cell_count_per_col_ = 0;
Vector2D min_; int min_x_ = 0;
Vector2D max_; int min_y_ = 0;
int max_x_ = 0;
int max_y_ = 0;
int grid_offset_arr_[9] = {0}; int grid_offset_arr_[9] = {0};
}; };