From 6d77ee37d8cae15e869db0e9e1275cbd4d9911e9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 25 Apr 2019 16:52:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dgridservice=E8=B6=8A=E7=95=8C?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/entity.cc | 7 +++++++ server/gameserver/frameevent.cc | 6 +++--- server/gameserver/gridservice.cc | 13 +++++++++++++ server/gameserver/gridservice.h | 2 ++ server/gameserver/human.cc | 1 + server/gameserver/player.cc | 1 - server/gameserver/room.cc | 5 ++++- 7 files changed, 30 insertions(+), 5 deletions(-) diff --git a/server/gameserver/entity.cc b/server/gameserver/entity.cc index 32ac995..e06c07a 100644 --- a/server/gameserver/entity.cc +++ b/server/gameserver/entity.cc @@ -97,4 +97,11 @@ void Entity::BroadcastFullState() void Entity::BroadcastDeleteState() { + std::set grid_list; + room->grid_service.Get123456789(grid_id, grid_list); + for (auto& grid : grid_list) { + for (Human* hum : grid->human_list) { + hum->RemoveObjects(this); + } + } } diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index 07109ee..725e3de 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -104,7 +104,7 @@ void FrameEvent::AddExplosion(Bullet* bullet, int item_id, Vector2D bomb_pos) void FrameEvent::AddSmoke(Bullet* bullet, int item_id, Vector2D pos) { { - auto& tuple = a8::FastAppend(explosions_); + auto& tuple = a8::FastAppend(smokes_); std::get<0>(tuple) = bullet->player; auto& p = std::get<1>(tuple); @@ -113,10 +113,10 @@ void FrameEvent::AddSmoke(Bullet* bullet, int item_id, Vector2D pos) p.set_player_id(bullet->player->entity_uniid); } { - int explosion_idx = smokes_.size() - 1; + int idx = smokes_.size() - 1; for (auto& cell : bullet->player->grid_list) { for (auto& hum : cell->human_list) { - hum->explosions_.push_back(explosion_idx); + hum->smokes_.push_back(idx); } } } diff --git a/server/gameserver/gridservice.cc b/server/gameserver/gridservice.cc index fc9b192..1acbe68 100644 --- a/server/gameserver/gridservice.cc +++ b/server/gameserver/gridservice.cc @@ -174,8 +174,15 @@ void GridService::MoveBullet(Bullet* bullet) } } +void GridService::DelBullet(Bullet* bullet) +{ + GridCell& cell = cells_[bullet->grid_id]; + cell.bullet_list.erase(bullet); +} + void GridService::AddEntity(Entity* entity) { + assert(entity->entity_type != ET_Player); int x = (int)entity->pos.x + cell_width_; int y = (int)entity->pos.y + cell_width_; if (BroderOverFlow(x, y)) { @@ -188,6 +195,12 @@ void GridService::AddEntity(Entity* entity) cells_[entity->grid_id].entity_list.insert(entity); } +void GridService::DelEntity(Entity* entity) +{ + GridCell& cell = cells_[entity->grid_id]; + cell.entity_list.erase(entity); +} + bool GridService::HumanInGridList(Human* hum, std::set& grid_list) { for (auto& cell : grid_list) { diff --git a/server/gameserver/gridservice.h b/server/gameserver/gridservice.h index 14fd45c..67d5d1b 100644 --- a/server/gameserver/gridservice.h +++ b/server/gameserver/gridservice.h @@ -41,8 +41,10 @@ class GridService void AddBullet(Bullet* bullet); void MoveBullet(Bullet* bullet); + void DelBullet(Bullet* bullet); void AddEntity(Entity* entity); + void DelEntity(Entity* entity); bool HumanInGridList(Human* hum, std::set& grid_list); bool EntityInGridList(Entity* entity, std::set& grid_list); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e293438..2ac96fb 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -41,6 +41,7 @@ Human::~Human() void Human::Initialize() { Entity::Initialize(); + RecalcSelfCollider(); } float Human::GetSpeed() diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index d16b786..d5fbcbb 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -27,7 +27,6 @@ void Player::Initialize() Human::Initialize(); health = meta->i->health(); max_energy_shield = energy_shield; - RecalcSelfCollider(); } void Player::Update(int delta_time) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 2a02d20..3f7ba30 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -419,6 +419,7 @@ void Room::CreateLoot(int equip_id, Vector2D pos, int count) entity->Initialize(); uniid_hash_[entity->entity_uniid] = entity; grid_service.AddEntity(entity); + entity->BroadcastFullState(); } } @@ -450,16 +451,18 @@ void Room::RemoveObjectLater(Entity* entity) case ET_Bullet: { entity->room->moveable_hash_.erase(entity->entity_uniid); + entity->room->grid_service.DelBullet((Bullet*)entity); } break; case ET_Loot: { entity->BroadcastDeleteState(); + entity->room->grid_service.DelEntity(entity); } break; default: { - + abort(); } break; }