This commit is contained in:
aozhiwei 2019-03-20 16:01:28 +08:00
parent f3ba4ae130
commit 92864552a6
3 changed files with 35 additions and 2 deletions

View File

@ -89,6 +89,9 @@ void Player::MakeUpdateMsg()
{
update_msg->Clear();
{
for (auto& obj_uniid : room->frame_data.deleted_objects) {
update_msg->add_del_objids(obj_uniid);
}
for (auto& itr : new_players) {
itr->FillMFObjectFull(update_msg->add_full_objects());
if (itr->frame_data.bullets.size() > 0) {

View File

@ -16,10 +16,12 @@ void Room::Update(int delta_time)
{
elapsed_time_ += delta_time;
while (elapsed_time_ >= 50) {
ResetFrameData();
for (auto& pair : moveable_hash_) {
pair.second->Update(50);
pair.second->updated_times++;
}
ClearDeletedObjects();
elapsed_time_ -= 50;
}
}
@ -54,7 +56,7 @@ Entity* Room::GetEntityByUniId(unsigned short uniid)
int Room::AliveCount()
{
return accountid_hash_.size();
return alive_count_;
}
void Room::AddPlayer(Player* hum)
@ -65,6 +67,7 @@ void Room::AddPlayer(Player* hum)
uniid_hash_[hum->entity_uniid] = hum;
moveable_hash_[hum->entity_uniid] = hum;
accountid_hash_[hum->account_id] = hum;
++alive_count_;
}
unsigned short Room::AllocUniid()
@ -91,6 +94,7 @@ void Room::ShuaAndroid()
hum->Initialize();
uniid_hash_[hum->entity_uniid] = hum;
moveable_hash_[hum->entity_uniid] = hum;
++alive_count_;
}
}
@ -182,3 +186,24 @@ void Room::FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg)
}
}
}
void Room::ResetFrameData()
{
frame_data.deleted_objects.clear();
frame_data.explosions.Clear();
frame_data.emotes.Clear();
}
void Room::ClearDeletedObjects()
{
for (auto& obj_uniid : frame_data.deleted_objects) {
Entity* entity = GetEntityByUniId(obj_uniid);
if (entity) {
if (entity->entity_type != ET_Player) {
uniid_hash_.erase(entity->entity_uniid);
moveable_hash_.erase(entity->entity_uniid);
}
delete entity;
}
}
}

View File

@ -48,11 +48,16 @@ public:
void CollisionDetection(Entity* sender, int detection_flags, std::vector<Entity*> objects);
void AddDeletedObject(unsigned short obj_uniid);
void FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg);
void ResetFrameData();
private:
private:
void ClearDeletedObjects();
private:
unsigned short current_uniid = 0;
RoomState_e state_ = RS_Inactive;
int elapsed_time_ = 0;
int alive_count_ = 0;
std::map<std::string, Player*> accountid_hash_;
std::map<unsigned short, Entity*> uniid_hash_;