remove beadded
This commit is contained in:
parent
3ac23bdc69
commit
8368c6eeb5
@ -51,7 +51,7 @@ void Bullet::Update(int delta_time)
|
|||||||
if (!objects.empty()) {
|
if (!objects.empty()) {
|
||||||
OnHit(objects);
|
OnHit(objects);
|
||||||
}
|
}
|
||||||
room->AddDeletedObject(entity_uniid, true);
|
room->RemoveObjectLater(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,5 +123,5 @@ void Bullet::ProcBomb()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
room->AddDeletedObject(entity_uniid, true);
|
room->RemoveObjectLater(this);
|
||||||
}
|
}
|
||||||
|
@ -109,3 +109,4 @@ const int SMOKE_SLOT = 4;
|
|||||||
|
|
||||||
const int MAP_HEIGHT = 8192;
|
const int MAP_HEIGHT = 8192;
|
||||||
const int MAP_WIDTH = 8192;
|
const int MAP_WIDTH = 8192;
|
||||||
|
const int MAP_CELL_WIDTH = 64 * 5;
|
||||||
|
@ -93,3 +93,8 @@ void Entity::BroadcastFullState()
|
|||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Entity::BroadcastDeleteState()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -66,5 +66,6 @@ class Entity
|
|||||||
void ClearColliders();
|
void ClearColliders();
|
||||||
void FindLocationWithTarget(Entity* target);
|
void FindLocationWithTarget(Entity* target);
|
||||||
void BroadcastFullState();
|
void BroadcastFullState();
|
||||||
|
void BroadcastDeleteState();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -49,6 +49,11 @@ void GridService::UnInit()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GridService::BroderOverFlow(int x, int y)
|
||||||
|
{
|
||||||
|
return x <= min_x_ || x >= max_x_ || y <= min_y_ || y >= max_y_;
|
||||||
|
}
|
||||||
|
|
||||||
void GridService::Get123456789(int grid_id, std::set<GridCell*>& grid_list)
|
void GridService::Get123456789(int grid_id, std::set<GridCell*>& grid_list)
|
||||||
{
|
{
|
||||||
for (size_t i = 1; i <= 9; ++i) {
|
for (size_t i = 1; i <= 9; ++i) {
|
||||||
|
@ -25,6 +25,7 @@ class GridService
|
|||||||
|
|
||||||
void Init(int width, int height, int cell_width);
|
void Init(int width, int height, int cell_width);
|
||||||
void UnInit();
|
void UnInit();
|
||||||
|
bool BroderOverFlow(int x, int y);
|
||||||
void Get123456789(int grid_id, std::set<GridCell*>& grid_list);
|
void Get123456789(int grid_id, std::set<GridCell*>& grid_list);
|
||||||
void Get123(int grid_id, std::set<GridCell*>& grid_list);
|
void Get123(int grid_id, std::set<GridCell*>& grid_list);
|
||||||
void Get456(int grid_id, std::set<GridCell*>& grid_list);
|
void Get456(int grid_id, std::set<GridCell*>& grid_list);
|
||||||
|
@ -694,7 +694,7 @@ void Player::LootInteraction(Loot* entity)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
entity->pickuped = true;
|
entity->pickuped = true;
|
||||||
room->AddDeletedObject(entity->entity_uniid, false);
|
room->RemoveObjectLater(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::HumanInteraction(Human* hum)
|
void Player::HumanInteraction(Human* hum)
|
||||||
|
@ -43,6 +43,7 @@ void Room::Init()
|
|||||||
{
|
{
|
||||||
xtimer.Init(RoomXGetTickCount, this, 100, 100);
|
xtimer.Init(RoomXGetTickCount, this, 100, 100);
|
||||||
xtimer_attacher.xtimer = &xtimer;
|
xtimer_attacher.xtimer = &xtimer;
|
||||||
|
grid_service.Init(MAP_WIDTH, MAP_HEIGHT, MAP_CELL_WIDTH);
|
||||||
|
|
||||||
ShuaAndroid();
|
ShuaAndroid();
|
||||||
CreateThings();
|
CreateThings();
|
||||||
@ -108,7 +109,6 @@ void Room::Update(int delta_time)
|
|||||||
pair.second->SendUpdateMsg();
|
pair.second->SendUpdateMsg();
|
||||||
}
|
}
|
||||||
ClearDeletedObjects();
|
ClearDeletedObjects();
|
||||||
ProcAddedObjects();
|
|
||||||
#if 0
|
#if 0
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@ -274,7 +274,6 @@ void Room::AddPlayer(Player* hum)
|
|||||||
unsigned short Room::AllocUniid()
|
unsigned short Room::AllocUniid()
|
||||||
{
|
{
|
||||||
while (GetEntityByUniId(++current_uniid) ||
|
while (GetEntityByUniId(++current_uniid) ||
|
||||||
be_added_hash_.find(current_uniid) != be_added_hash_.end() ||
|
|
||||||
current_uniid == 0) {}
|
current_uniid == 0) {}
|
||||||
return current_uniid;
|
return current_uniid;
|
||||||
}
|
}
|
||||||
@ -395,29 +394,6 @@ void Room::BuildingBoxBoundCollisionDetection(Entity* sender, std::vector<Entity
|
|||||||
DestoryCollider(a_collider);
|
DestoryCollider(a_collider);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::AddDeletedObject(unsigned short obj_uniid, bool soft_delete)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
std::set<unsigned short>* deleted_objects = nullptr;
|
|
||||||
if (soft_delete) {
|
|
||||||
auto itr = frame_data.softdeleted_objects_hash.find(frame_no);
|
|
||||||
if (itr == frame_data.softdeleted_objects_hash.end()) {
|
|
||||||
frame_data.softdeleted_objects_hash[frame_no] = std::set<unsigned short>();
|
|
||||||
itr = frame_data.softdeleted_objects_hash.find(frame_no);
|
|
||||||
}
|
|
||||||
deleted_objects = &itr->second;
|
|
||||||
} else {
|
|
||||||
auto itr = frame_data.deleted_objects_hash.find(frame_no);
|
|
||||||
if (itr == frame_data.deleted_objects_hash.end()) {
|
|
||||||
frame_data.deleted_objects_hash[frame_no] = std::set<unsigned short>();
|
|
||||||
itr = frame_data.deleted_objects_hash.find(frame_no);
|
|
||||||
}
|
|
||||||
deleted_objects = &itr->second;
|
|
||||||
}
|
|
||||||
deleted_objects->insert(obj_uniid);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void Room::FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg)
|
void Room::FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg)
|
||||||
{
|
{
|
||||||
msg.set_team_mode(msg.team_mode());
|
msg.set_team_mode(msg.team_mode());
|
||||||
@ -650,7 +626,41 @@ void Room::CreateBullet(Human* hum, MetaData::Equip* gun_meta,
|
|||||||
bullet->fly_distance = fly_distance;
|
bullet->fly_distance = fly_distance;
|
||||||
bullet->entity_uniid = AllocUniid();
|
bullet->entity_uniid = AllocUniid();
|
||||||
bullet->Initialize();
|
bullet->Initialize();
|
||||||
|
#if 0
|
||||||
be_added_hash_[bullet->entity_uniid] = bullet;
|
be_added_hash_[bullet->entity_uniid] = bullet;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Room::RemoveObjectLater(Entity* entity)
|
||||||
|
{
|
||||||
|
auto remove_func = [] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Entity* entity = (Entity*)param.sender.GetUserData();
|
||||||
|
entity->room->uniid_hash_.erase(entity->entity_uniid);
|
||||||
|
switch (entity->entity_type) {
|
||||||
|
case ET_Bullet:
|
||||||
|
{
|
||||||
|
entity->room->moveable_hash_.erase(entity->entity_uniid);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ET_Loot:
|
||||||
|
{
|
||||||
|
entity->BroadcastDeleteState();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
delete entity;
|
||||||
|
};
|
||||||
|
xtimer.AddDeadLineTimerAndAttach(0,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(entity),
|
||||||
|
remove_func,
|
||||||
|
&entity->xtimer_attacher.timer_list_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::FetchBuilding(Human* hum)
|
void Room::FetchBuilding(Human* hum)
|
||||||
@ -756,39 +766,6 @@ void Room::TouchEntityList(a8::XParams param,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::ProcAddedObjects()
|
|
||||||
{
|
|
||||||
if (!be_added_hash_.empty()) {
|
|
||||||
for (auto& pair : be_added_hash_) {
|
|
||||||
uniid_hash_[pair.second->entity_uniid] = pair.second;
|
|
||||||
switch (pair.second->entity_type) {
|
|
||||||
case ET_Player:
|
|
||||||
case ET_Bullet:
|
|
||||||
{
|
|
||||||
moveable_hash_[pair.second->entity_uniid] = pair.second;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ET_Smoke:
|
|
||||||
{
|
|
||||||
for (auto& pair : human_hash_) {
|
|
||||||
pair.second->RemoveNewObjects(pair.second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
be_added_hash_.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Room::BeAddedObject(Entity* entity)
|
|
||||||
{
|
|
||||||
be_added_hash_[entity->entity_uniid] = entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Room::UpdateGas()
|
void Room::UpdateGas()
|
||||||
{
|
{
|
||||||
switch (gas_data.gas_mode) {
|
switch (gas_data.gas_mode) {
|
||||||
@ -975,7 +952,7 @@ void Room::OutputDebugLog()
|
|||||||
a8::UdpLog::Instance()->Debug("roomid:%d max_rundelay:%d frame_no:%d game_over:%d game_over_frameno:%d "
|
a8::UdpLog::Instance()->Debug("roomid:%d max_rundelay:%d frame_no:%d game_over:%d game_over_frameno:%d "
|
||||||
"elapsed_time:%d alive_count:%d current_uniid:%d "
|
"elapsed_time:%d alive_count:%d current_uniid:%d "
|
||||||
"state:%d accountid_hash.size:%d moveable_hash_.size:%d "
|
"state:%d accountid_hash.size:%d moveable_hash_.size:%d "
|
||||||
"uniid_hash.size:%d human_hash.size:%d be_added_hash:%d",
|
"uniid_hash.size:%d human_hash.size:%d ",
|
||||||
{
|
{
|
||||||
room_uuid,
|
room_uuid,
|
||||||
profile.max_rundelay,
|
profile.max_rundelay,
|
||||||
@ -990,7 +967,6 @@ void Room::OutputDebugLog()
|
|||||||
moveable_hash_.size(),
|
moveable_hash_.size(),
|
||||||
uniid_hash_.size(),
|
uniid_hash_.size(),
|
||||||
human_hash_.size(),
|
human_hash_.size(),
|
||||||
be_added_hash_.size()
|
|
||||||
});
|
});
|
||||||
{
|
{
|
||||||
int entity_num_arr[ET_MAX] = {0};
|
int entity_num_arr[ET_MAX] = {0};
|
||||||
|
@ -58,8 +58,7 @@ public:
|
|||||||
|
|
||||||
void CollisionDetection(Entity* sender, int detection_flags, std::vector<Entity*>& objects);
|
void CollisionDetection(Entity* sender, int detection_flags, std::vector<Entity*>& objects);
|
||||||
void BuildingBoxBoundCollisionDetection(Entity* sender, std::vector<Entity*>& objects);
|
void BuildingBoxBoundCollisionDetection(Entity* sender, std::vector<Entity*>& objects);
|
||||||
void AddDeletedObject(unsigned short obj_uniid, bool soft_delete);
|
void RemoveObjectLater(Entity* entity);
|
||||||
void BeAddedObject(Entity* entity);
|
|
||||||
|
|
||||||
void FetchBuilding(Human* hum);
|
void FetchBuilding(Human* hum);
|
||||||
void FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg);
|
void FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg);
|
||||||
@ -117,5 +116,4 @@ private:
|
|||||||
std::map<unsigned short, Entity*> moveable_hash_;
|
std::map<unsigned short, Entity*> moveable_hash_;
|
||||||
std::map<unsigned short, Entity*> uniid_hash_;
|
std::map<unsigned short, Entity*> uniid_hash_;
|
||||||
std::map<unsigned short, Human*> human_hash_;
|
std::map<unsigned short, Human*> human_hash_;
|
||||||
std::map<unsigned short, Entity*> be_added_hash_;
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user