diff --git a/server/gameserver/grid.cc b/server/gameserver/grid.cc index ba45982..5e89ce4 100644 --- a/server/gameserver/grid.cc +++ b/server/gameserver/grid.cc @@ -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_[7] = cell_count_per_row_; 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() @@ -44,57 +49,75 @@ void Grid::UnInit() } } -void Grid::Get123456789(int grid_id, std::vector& grid_list) +void Grid::Get123456789(int grid_id, std::set& 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) +void Grid::Get123(int grid_id, std::set& 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) +void Grid::Get456(int grid_id, std::set& 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) +void Grid::Get789(int grid_id, std::set& 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) +void Grid::Get147(int grid_id, std::set& 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) +void Grid::Get258(int grid_id, std::set& 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) +void Grid::Get369(int grid_id, std::set& grid_list) { GetGridList(grid_id, 3, grid_list); GetGridList(grid_id, 6, grid_list); GetGridList(grid_id, 9, grid_list); } +void Grid::AddHuman(Human* hum, std::set& inc_grid_list) +{ + +} + +void Grid::MoveHuman(Human* hum, float x, float y, + std::set& inc_grid_list, + std::set& dec_grid_list + ) +{ + +} + +void Grid::AddEntity(Entity* entity) +{ + +} + void Grid::GetGridList(int grid_id, int offset, - std::vector& grid_list) + std::set& grid_list) { if (offset <1 || offset > 9) { abort(); @@ -104,6 +127,6 @@ void Grid::GetGridList(int grid_id, int offset, } int tmp_grid_id = grid_id + grid_offset_arr_[offset - 1]; if (tmp_grid_id > 0) { - grid_list.push_back(&cells_[tmp_grid_id]); + grid_list.insert(&cells_[tmp_grid_id]); } } diff --git a/server/gameserver/grid.h b/server/gameserver/grid.h index 159909d..a64e75c 100644 --- a/server/gameserver/grid.h +++ b/server/gameserver/grid.h @@ -12,6 +12,8 @@ struct GridCell 4 5 6 7 8 9 */ +class Human; +class Entity; class Room; class Grid { @@ -21,17 +23,25 @@ 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::set& grid_list); + void Get123(int grid_id, std::set& grid_list); + void Get456(int grid_id, std::set& grid_list); + void Get789(int grid_id, std::set& grid_list); + void Get147(int grid_id, std::set& grid_list); + void Get258(int grid_id, std::set& grid_list); + void Get369(int grid_id, std::set& grid_list); + + void AddHuman(Human* hum, std::set& inc_grid_list); + void MoveHuman(Human* hum, float x, float y, + std::set& inc_grid_list, + std::set& dec_grid_list + ); + + void AddEntity(Entity* entity); private: inline void GetGridList(int grid_id, int offset, - std::vector& grid_list); + std::set& grid_list); private: Room* room_ = nullptr; @@ -42,7 +52,10 @@ class Grid int cell_width_ = 0; int cell_count_per_row_ = 0; int cell_count_per_col_ = 0; - Vector2D min_; - Vector2D max_; + int min_x_ = 0; + int min_y_ = 0; + int max_x_ = 0; + int max_y_ = 0; int grid_offset_arr_[9] = {0}; + };