From efc81d40e134580a7769dcfb40ae3f202b7ab5a5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 25 Apr 2019 10:28:11 +0800 Subject: [PATCH] grid ok --- server/gameserver/android.cc | 1 + server/gameserver/framemaker.cc | 6 ++++++ server/gameserver/gridservice.cc | 17 +++++++++++++++++ server/gameserver/player.cc | 1 + server/gameserver/room.cc | 9 +-------- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 7bbaa42..7d4b239 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -30,6 +30,7 @@ void Android::Update(int delta_time) { if (a8::HasBitFlag(status, HS_Fly)) { pos = room->plane.curr_pos; + room->grid_service.MoveHuman(this); } ai->Update(delta_time); } diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index eb366d5..e501bcf 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -80,6 +80,10 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum) } for (auto& itr : hum->del_objects) { msg->add_del_objids(itr); + Entity* entity = hum->room->GetEntityByUniId(itr); + if (entity) { + hum->part_objects.erase(entity); + } } if (hum->send_msg_times == 0 || hum->need_sync_active_player) { msg->set_active_player_id(hum->entity_uniid); @@ -96,6 +100,8 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum) } msg->set_alive_count(room->AliveCount()); } + hum->new_objects.clear(); + hum->del_objects.clear(); ++hum->send_msg_times; return msg; } diff --git a/server/gameserver/gridservice.cc b/server/gameserver/gridservice.cc index 0c6dd67..11fbce6 100644 --- a/server/gameserver/gridservice.cc +++ b/server/gameserver/gridservice.cc @@ -194,6 +194,22 @@ 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 1 + { + 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); + } + } + } + #else if (diff_grid == 1) { Get369(new_grid_id, inc_grid_list); Get147(old_grid_id, dec_grid_list); @@ -252,6 +268,7 @@ void GridService::ComputeDiff(int old_grid_id, int new_grid_id, } } } + #endif grid_list.clear(); Get123456789(new_grid_id, grid_list); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index aa3321e..4af37da 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -37,6 +37,7 @@ void Player::Update(int delta_time) } if (a8::HasBitFlag(status, HS_Fly)) { pos = room->plane.curr_pos; + room->grid_service.MoveHuman(this); } if (moving) { UpdateMove(); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 5721ad5..2585f33 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -915,19 +915,12 @@ void Room::ShuaPlane() plane.dir.Normalize(); plane.curr_pos = plane.start_point; - std::vector humans; for (auto& pair : human_hash_) { a8::SetBitFlag(pair.second->status, HS_Fly); pair.second->pos = plane.curr_pos; pair.second->attack_dir = plane.dir; pair.second->move_dir = plane.dir; - humans.push_back(pair.second); - } - for (auto& hum : humans) { - for (auto& pair : human_hash_) { - hum->AddToNewObjects(pair.second); - hum->AddToPartObjects(pair.second); - } + grid_service.MoveHuman(pair.second); } }