From bc2fe8759a1969b2e1f17c54c9192ca73460dc7c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 22 Apr 2019 19:51:16 +0800 Subject: [PATCH] add GetGridList --- server/gameserver/grid.cc | 102 +++++++++++++++++++++++++------------- server/gameserver/grid.h | 19 ++++--- 2 files changed, 80 insertions(+), 41 deletions(-) diff --git a/server/gameserver/grid.cc b/server/gameserver/grid.cc index 5bad192..ba45982 100644 --- a/server/gameserver/grid.cc +++ b/server/gameserver/grid.cc @@ -22,6 +22,18 @@ void Grid::Init(int width, int height, int cell_width) cell_count_per_col_ = (map_width_ / cell_width + 1) + 2; max_grid_id_ = cell_count_per_row_ * cell_count_per_col_; cells_ = new GridCell[max_grid_id_ + 1]; + + grid_offset_arr_[0] = -(cell_count_per_row_ - 1); + grid_offset_arr_[1] = -cell_count_per_row_; + grid_offset_arr_[2] = -(cell_count_per_row_ + 1); + + grid_offset_arr_[3] = -1; + grid_offset_arr_[4] = 0; + grid_offset_arr_[5] = 1; + + grid_offset_arr_[6] = cell_count_per_row_ - 1; + grid_offset_arr_[7] = cell_count_per_row_; + grid_offset_arr_[8] = cell_count_per_row_ + 1; } void Grid::UnInit() @@ -32,44 +44,66 @@ void Grid::UnInit() } } -void Grid::Get123456789(int grid_id, std::vector& grid_list) +void Grid::Get123456789(int grid_id, std::vector& grid_list) { + for (size_t i = 1; i <= 9; ++i) { + GetGridList(grid_id, i, grid_list); + } +} + +void Grid::Get123(int grid_id, std::vector& grid_list) +{ + GetGridList(grid_id, 1, grid_list); + GetGridList(grid_id, 2, grid_list); + GetGridList(grid_id, 3, grid_list); +} + +void Grid::Get456(int grid_id, std::vector& grid_list) +{ + GetGridList(grid_id, 4, grid_list); + GetGridList(grid_id, 5, grid_list); + GetGridList(grid_id, 6, grid_list); +} + +void Grid::Get789(int grid_id, std::vector& grid_list) +{ + GetGridList(grid_id, 7, grid_list); + GetGridList(grid_id, 8, grid_list); + GetGridList(grid_id, 9, grid_list); +} + +void Grid::Get147(int grid_id, std::vector& grid_list) +{ + GetGridList(grid_id, 1, grid_list); + GetGridList(grid_id, 4, grid_list); + GetGridList(grid_id, 7, grid_list); +} + +void Grid::Get258(int grid_id, std::vector& grid_list) +{ + GetGridList(grid_id, 2, grid_list); + GetGridList(grid_id, 5, grid_list); + GetGridList(grid_id, 8, grid_list); +} + +void Grid::Get369(int grid_id, std::vector& grid_list) +{ + GetGridList(grid_id, 3, grid_list); + GetGridList(grid_id, 6, grid_list); + GetGridList(grid_id, 9, grid_list); +} + +void Grid::GetGridList(int grid_id, int offset, + std::vector& grid_list) +{ + if (offset <1 || offset > 9) { + abort(); + } if (grid_id <= 0 || grid_id >= max_grid_id_) { return; } - int tmp_grid_id = 0; - tmp_grid_id = grid_id - (cell_count_per_row_ + 1); + int tmp_grid_id = grid_id + grid_offset_arr_[offset - 1]; if (tmp_grid_id > 0) { - + grid_list.push_back(&cells_[tmp_grid_id]); } } - -void Grid::Get123(int grid_id, std::vector& grid_list) -{ - -} - -void Grid::Get456(int grid_id, std::vector& grid_list) -{ - -} - -void Grid::Get789(int grid_id, std::vector& grid_list) -{ - -} - -void Grid::Get147(int grid_id, std::vector& grid_list) -{ - -} - -void Grid::Get258(int grid_id, std::vector& grid_list) -{ - -} - -void Grid::Get369(int grid_id, std::vector& grid_list) -{ - -} diff --git a/server/gameserver/grid.h b/server/gameserver/grid.h index 85f31d8..159909d 100644 --- a/server/gameserver/grid.h +++ b/server/gameserver/grid.h @@ -21,13 +21,17 @@ class Grid void Init(int width, int height, int cell_width); void UnInit(); - void Get123456789(int grid_id, std::vector& grid_list); - void Get123(int grid_id, std::vector& grid_list); - void Get456(int grid_id, std::vector& grid_list); - void Get789(int grid_id, std::vector& grid_list); - void Get147(int grid_id, std::vector& grid_list); - void Get258(int grid_id, std::vector& grid_list); - void Get369(int grid_id, std::vector& grid_list); + void Get123456789(int grid_id, std::vector& grid_list); + void Get123(int grid_id, std::vector& grid_list); + void Get456(int grid_id, std::vector& grid_list); + void Get789(int grid_id, std::vector& grid_list); + void Get147(int grid_id, std::vector& grid_list); + void Get258(int grid_id, std::vector& grid_list); + void Get369(int grid_id, std::vector& grid_list); + + private: + inline void GetGridList(int grid_id, int offset, + std::vector& grid_list); private: Room* room_ = nullptr; @@ -40,4 +44,5 @@ class Grid int cell_count_per_col_ = 0; Vector2D min_; Vector2D max_; + int grid_offset_arr_[9] = {0}; };