diff --git a/server/gameserver/gridservice.cc b/server/gameserver/gridservice.cc index 994c1ab..b935319 100644 --- a/server/gameserver/gridservice.cc +++ b/server/gameserver/gridservice.cc @@ -175,4 +175,65 @@ void GridService::ComputeDiff(int old_grid_id, int new_grid_id, std::set& dec_grid_list) { int diff_grid = new_grid_id - old_grid_id; + if (diff_grid == 1) { + Get369(new_grid_id, inc_grid_list); + Get147(old_grid_id, dec_grid_list); + } else if (diff_grid == -1) { + Get147(new_grid_id, inc_grid_list); + Get369(old_grid_id, dec_grid_list); + } else if (diff_grid == cell_count_per_row_) { + Get789(new_grid_id, inc_grid_list); + Get123(old_grid_id, dec_grid_list); + } else if (diff_grid + cell_count_per_row_ == 0) { + Get123(new_grid_id, inc_grid_list); + Get789(old_grid_id, dec_grid_list); + } else if (diff_grid + cell_count_per_row_ == 1) { + Get123(new_grid_id, inc_grid_list); + GetGridList(new_grid_id, 6, inc_grid_list); + GetGridList(new_grid_id, 9, inc_grid_list); + + GetGridList(old_grid_id, 1, dec_grid_list); + GetGridList(old_grid_id, 4, dec_grid_list); + Get789(old_grid_id, dec_grid_list); + } else if (diff_grid + cell_count_per_row_ == -1) { + Get123(new_grid_id, inc_grid_list); + GetGridList(new_grid_id, 4, inc_grid_list); + GetGridList(new_grid_id, 7, inc_grid_list); + + GetGridList(old_grid_id, 6, dec_grid_list); + GetGridList(old_grid_id, 9, dec_grid_list); + Get789(old_grid_id, dec_grid_list); + } else if (diff_grid == cell_count_per_row_ + 1) { + Get789(new_grid_id, inc_grid_list); + GetGridList(new_grid_id, 3, inc_grid_list); + GetGridList(new_grid_id, 6, inc_grid_list); + + GetGridList(old_grid_id, 4, dec_grid_list); + GetGridList(old_grid_id, 7, dec_grid_list); + Get123(old_grid_id, dec_grid_list); + } else if (diff_grid == cell_count_per_row_ - 1) { + Get789(new_grid_id, inc_grid_list); + GetGridList(new_grid_id, 1, inc_grid_list); + GetGridList(new_grid_id, 4, inc_grid_list); + + GetGridList(old_grid_id, 6, dec_grid_list); + GetGridList(old_grid_id, 9, dec_grid_list); + Get123(old_grid_id, dec_grid_list); + } else { + std::set new_grid_list; + Get123456789(new_grid_id, new_grid_list); + for (auto& cell : new_grid_list) { + if (grid_list.find(cell) == grid_list.end()) { + inc_grid_list.insert(cell); + } + } + for (auto& cell : grid_list) { + if (new_grid_list.find(cell) == new_grid_list.end()) { + dec_grid_list.insert(cell); + } + } + } + + grid_list.clear(); + Get123456789(new_grid_id, grid_list); }