AddToNewObjects
This commit is contained in:
parent
4822180ce9
commit
854e168ae7
@ -95,13 +95,7 @@ void Bullet::OnHit(std::vector<Entity*>& objects)
|
||||
obstacle->ClearColliders();
|
||||
room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop());
|
||||
}
|
||||
room->TouchPlayerList(a8::XParams()
|
||||
.SetSender(obstacle),
|
||||
[] (Player* hum, a8::XParams& param)
|
||||
{
|
||||
Obstacle* obstacle = (Obstacle*)param.sender.GetUserData();
|
||||
hum->AddToNewObjects(obstacle);
|
||||
});
|
||||
obstacle->BroadcastFullState();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -80,3 +80,16 @@ void Entity::FindLocationWithTarget(Entity* target)
|
||||
DestoryCollider(target_collider);
|
||||
DestoryCollider(a_collider);
|
||||
}
|
||||
|
||||
void Entity::BroadcastFullState()
|
||||
{
|
||||
#if 0
|
||||
room->TouchPlayerList(a8::XParams()
|
||||
.SetSender(obstacle),
|
||||
[] (Player* hum, a8::XParams& param)
|
||||
{
|
||||
Obstacle* obstacle = (Obstacle*)param.sender.GetUserData();
|
||||
hum->AddToNewObjects(obstacle);
|
||||
});
|
||||
#endif
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "gridservice.h"
|
||||
|
||||
namespace cs
|
||||
{
|
||||
class MFObjectPart;
|
||||
@ -48,6 +50,8 @@ class Entity
|
||||
bool deleted = false;
|
||||
a8::XTimerAttacher xtimer_attacher;
|
||||
|
||||
int grid_id = 0;
|
||||
std::set<GridCell*> grid_list;
|
||||
Obstacle* last_collision_door = nullptr;
|
||||
|
||||
Entity();
|
||||
@ -61,5 +65,6 @@ class Entity
|
||||
bool TestCollision(Entity* b);
|
||||
void ClearColliders();
|
||||
void FindLocationWithTarget(Entity* target);
|
||||
void BroadcastFullState();
|
||||
|
||||
};
|
||||
|
@ -111,7 +111,7 @@ void GridService::MoveHuman(Human* hum, float x, float y,
|
||||
|
||||
}
|
||||
|
||||
void GridService::AddEntity(Entity* entity)
|
||||
void GridService::AddEntity(Entity* entity, std::set<GridCell*>& inc_grid_list)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
class Entity;
|
||||
class Human;
|
||||
|
||||
struct GridCell
|
||||
{
|
||||
std::set<Human*> human_list;
|
||||
std::set<Entity*> entity_list;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -37,7 +39,7 @@ class GridService
|
||||
std::set<GridCell*>& dec_grid_list
|
||||
);
|
||||
|
||||
void AddEntity(Entity* entity);
|
||||
void AddEntity(Entity* entity, std::set<GridCell*>& inc_grid_list);
|
||||
|
||||
private:
|
||||
inline void GetGridList(int grid_id, int offset,
|
||||
|
@ -663,3 +663,29 @@ void Human::FindLocation()
|
||||
FindLocationWithTarget(target);
|
||||
}
|
||||
}
|
||||
|
||||
void Human::RefreshView()
|
||||
{
|
||||
for (auto& cell : grid_list) {
|
||||
for (Human* hum : cell->human_list) {
|
||||
hum->AddToNewObjects(this);
|
||||
hum->AddToPartObjects(this);
|
||||
AddToNewObjects(hum);
|
||||
AddToPartObjects(hum);
|
||||
}
|
||||
for (Entity* entity : cell->entity_list) {
|
||||
switch (entity->entity_type) {
|
||||
case ET_Building:
|
||||
case ET_Obstacle:
|
||||
{
|
||||
AddToNewObjects(entity);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,6 @@ class Human : public Entity
|
||||
MetaData::Player* meta = nullptr;
|
||||
MetaData::Equip* helmet_meta = nullptr;
|
||||
MetaData::Equip* chest_meta = nullptr;
|
||||
int grid_id = 0;
|
||||
|
||||
Vector2D move_dir;
|
||||
Vector2D attack_dir;
|
||||
@ -122,6 +121,7 @@ class Human : public Entity
|
||||
void Land();
|
||||
void DoJump();
|
||||
void FindLocation();
|
||||
void RefreshView();
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -550,7 +550,6 @@ void Player::ObstacleInteraction(Obstacle* entity)
|
||||
}
|
||||
return true;
|
||||
});
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
||||
@ -989,4 +988,3 @@ void Player::FillMFGasData(cs::MFGasData* gas_data)
|
||||
gas_data->set_rad_old(room->gas_data.rad_old);
|
||||
gas_data->set_rad_new(room->gas_data.rad_new);
|
||||
}
|
||||
|
||||
|
@ -263,39 +263,12 @@ void Room::AddPlayer(Player* hum)
|
||||
accountid_hash_[hum->account_id] = hum;
|
||||
human_hash_[hum->entity_uniid] = hum;
|
||||
++alive_count_;
|
||||
hum->AddToNewObjects(hum);
|
||||
hum->AddToPartObjects(hum);
|
||||
for (auto& pair : human_hash_) {
|
||||
if (pair.second != hum) {
|
||||
pair.second->AddToNewObjects(hum);
|
||||
pair.second->AddToPartObjects(hum);
|
||||
hum->AddToNewObjects(pair.second);
|
||||
hum->AddToPartObjects(pair.second);
|
||||
if (!hum->team_uuid.empty() && pair.second->team_uuid == hum->team_uuid) {
|
||||
if (!pair.second->team_members) {
|
||||
pair.second->team_id = NewTeam();
|
||||
pair.second->team_members = &team_hash_[pair.second->team_id];
|
||||
pair.second->team_members->insert(pair.second);
|
||||
}
|
||||
pair.second->team_members->insert(hum);
|
||||
hum->team_id = pair.second->team_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (auto& pair : uniid_hash_) {
|
||||
switch (pair.second->entity_type) {
|
||||
case ET_Building:
|
||||
case ET_Obstacle:
|
||||
{
|
||||
hum->AddToNewObjects(pair.second);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
{
|
||||
std::set<GridCell*> inc_grid_list;
|
||||
grid_service.AddHuman(hum, inc_grid_list);
|
||||
hum->RefreshView();
|
||||
}
|
||||
MatchTeam(hum);
|
||||
}
|
||||
|
||||
unsigned short Room::AllocUniid()
|
||||
@ -332,14 +305,10 @@ void Room::ShuaAndroid()
|
||||
moveable_hash_[hum->entity_uniid] = hum;
|
||||
human_hash_[hum->entity_uniid] = hum;
|
||||
++alive_count_;
|
||||
|
||||
for (auto& pair : human_hash_) {
|
||||
if (pair.second != hum) {
|
||||
pair.second->AddToNewObjects(hum);
|
||||
pair.second->AddToPartObjects(hum);
|
||||
hum->AddToNewObjects(pair.second);
|
||||
hum->AddToPartObjects(pair.second);
|
||||
}
|
||||
{
|
||||
std::set<GridCell*> inc_grid_list;
|
||||
grid_service.AddHuman(hum, inc_grid_list);
|
||||
hum->RefreshView();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -568,8 +537,9 @@ void Room::DropItem(Vector2D pos, int item_id, int item_count)
|
||||
entity->count = item_count;
|
||||
entity->Initialize();
|
||||
uniid_hash_[entity->entity_uniid] = entity;
|
||||
for (auto& pair : human_hash_) {
|
||||
pair.second->AddToNewObjects(entity);
|
||||
{
|
||||
std::set<GridCell*> inc_grid_list;
|
||||
grid_service.AddEntity(entity, inc_grid_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -595,8 +565,9 @@ void Room::CreateDoor(Building* building, int door_idx)
|
||||
building->pos.y + entity->door_state0->y() - building->meta->i->tileheight() / 2.0);
|
||||
entity->Initialize();
|
||||
uniid_hash_[entity->entity_uniid] = entity;
|
||||
for (auto& pair : human_hash_) {
|
||||
pair.second->AddToNewObjects(entity);
|
||||
{
|
||||
std::set<GridCell*> inc_grid_list;
|
||||
grid_service.AddEntity(entity, inc_grid_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -615,8 +586,9 @@ void Room::CreateHouseObstacle(Building* building, int id, float x, float y)
|
||||
building->pos.y + y - building->meta->i->tileheight() / 2.0);
|
||||
entity->Initialize();
|
||||
uniid_hash_[entity->entity_uniid] = entity;
|
||||
for (auto& pair : human_hash_) {
|
||||
pair.second->AddToNewObjects(entity);
|
||||
{
|
||||
std::set<GridCell*> inc_grid_list;
|
||||
grid_service.AddEntity(entity, inc_grid_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -636,8 +608,9 @@ void Room::CreateObstacle(int id, float x, float y)
|
||||
entity->pos = Vector2D(x, y);
|
||||
entity->Initialize();
|
||||
uniid_hash_[entity->entity_uniid] = entity;
|
||||
for (auto& pair : human_hash_) {
|
||||
pair.second->AddToNewObjects(entity);
|
||||
{
|
||||
std::set<GridCell*> inc_grid_list;
|
||||
grid_service.AddEntity(entity, inc_grid_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -655,8 +628,9 @@ void Room::CreateLoot(int equip_id, Vector2D pos, int count)
|
||||
entity->count = count;
|
||||
entity->Initialize();
|
||||
uniid_hash_[entity->entity_uniid] = entity;
|
||||
for (auto& pair : human_hash_) {
|
||||
pair.second->AddToNewObjects(entity);
|
||||
{
|
||||
std::set<GridCell*> inc_grid_list;
|
||||
grid_service.AddEntity(entity, inc_grid_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1063,6 +1037,23 @@ void Room::AutoMatchTeam()
|
||||
#endif
|
||||
}
|
||||
|
||||
void Room::MatchTeam(Human* hum)
|
||||
{
|
||||
for (auto& pair : human_hash_) {
|
||||
if (pair.second != hum) {
|
||||
if (!hum->team_uuid.empty() && pair.second->team_uuid == hum->team_uuid) {
|
||||
if (!pair.second->team_members) {
|
||||
pair.second->team_id = NewTeam();
|
||||
pair.second->team_members = &team_hash_[pair.second->team_id];
|
||||
pair.second->team_members->insert(pair.second);
|
||||
}
|
||||
pair.second->team_members->insert(hum);
|
||||
hum->team_id = pair.second->team_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Room::InitAirDrop()
|
||||
{
|
||||
std::list<MetaData::AirDrop>& air_drops = MetaMgr::Instance()->GetAirDrops();
|
||||
@ -1152,5 +1143,4 @@ void Room::ShuaPlane()
|
||||
hum->AddToPartObjects(pair.second);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#include "frameevent.h"
|
||||
#include "framemaker.h"
|
||||
#include "gridservice.h"
|
||||
|
||||
namespace MetaData
|
||||
{
|
||||
@ -39,6 +40,7 @@ public:
|
||||
RoomProfile profile;
|
||||
a8::XTimer xtimer;
|
||||
Plane plane;
|
||||
GridService grid_service;
|
||||
|
||||
~Room();
|
||||
void Init();
|
||||
@ -95,6 +97,7 @@ private:
|
||||
Vector2D& out_pos);
|
||||
void OutputDebugLog();
|
||||
void AutoMatchTeam();
|
||||
void MatchTeam(Human* hum);
|
||||
void InitAirDrop();
|
||||
void AirDrop(int appear_time, int box_id);
|
||||
void ShuaPlane();
|
||||
|
Loading…
x
Reference in New Issue
Block a user