This commit is contained in:
aozhiwei 2020-07-06 19:46:58 +08:00
parent aa54d22ca9
commit b149874f65
13 changed files with 35 additions and 25 deletions

View File

@ -46,7 +46,7 @@ void Building::RecalcSelfCollider()
AutoAdjust(collider_list); AutoAdjust(collider_list);
} }
void Building::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) void Building::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data)
{ {
part_data->set_object_type(ET_Building); part_data->set_object_type(ET_Building);
cs::MFBuildingPart* p = part_data->mutable_union_obj_3(); cs::MFBuildingPart* p = part_data->mutable_union_obj_3();
@ -54,7 +54,7 @@ void Building::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data)
TypeConvert::ToPb(GetPos(), p->mutable_pos()); TypeConvert::ToPb(GetPos(), p->mutable_pos());
} }
void Building::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) void Building::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data)
{ {
full_data->set_object_type(ET_Building); full_data->set_object_type(ET_Building);
cs::MFBuildingFull* p = full_data->mutable_union_obj_3(); cs::MFBuildingFull* p = full_data->mutable_union_obj_3();

View File

@ -23,8 +23,8 @@ class Building : public Entity
virtual ~Building() override; virtual ~Building() override;
virtual void Initialize() override; virtual void Initialize() override;
void RecalcSelfCollider(); void RecalcSelfCollider();
virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
virtual void GetAabbBox(AabbCollider& aabb_box) override; virtual void GetAabbBox(AabbCollider& aabb_box) override;
protected: protected:

View File

@ -306,7 +306,7 @@ const int DEFAULT_BORN_POINT_Y = 3000;
const int ADPLAY_BUFFID = 1006; const int ADPLAY_BUFFID = 1006;
const int FIXED_OBJECT_MAXID = 2018; const int FIXED_OBJECT_MAXID = 1024;
const int MAX_ROOM_IDX = 2018; const int MAX_ROOM_IDX = 2018;

View File

@ -10,6 +10,7 @@ class Room;
class ColliderComponent; class ColliderComponent;
class AabbCollider; class AabbCollider;
class CircleCollider; class CircleCollider;
class Human;
class Entity class Entity
{ {
public: public:
@ -17,8 +18,8 @@ class Entity
Entity(); Entity();
virtual ~Entity(); virtual ~Entity();
virtual void Initialize(); virtual void Initialize();
virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) {}; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) {};
virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) {}; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) {};
virtual float GetSpeed() { return 1.0f;}; virtual float GetSpeed() { return 1.0f;};
virtual void GetAabbBox(AabbCollider& aabb_box); virtual void GetAabbBox(AabbCollider& aabb_box);
virtual void GetCircleBox(CircleCollider& circle_box); virtual void GetCircleBox(CircleCollider& circle_box);

View File

@ -17,7 +17,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum)
} }
#endif #endif
if (hum->IsPlayer()) { if (hum->IsPlayer()) {
itr->FillMFObjectFull(room, msg->add_full_objects()); itr->FillMFObjectFull(room, (Human*)hum, msg->add_full_objects());
} }
} }
for (auto& itr : hum->part_objects) { for (auto& itr : hum->part_objects) {
@ -27,7 +27,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum)
continue; continue;
} else { } else {
} }
entity->FillMFObjectPart(room, msg->add_part_objects()); entity->FillMFObjectPart(room, (Human*)hum, msg->add_part_objects());
} }
for (auto& itr : hum->del_objects) { for (auto& itr : hum->del_objects) {
msg->add_del_objids(itr); msg->add_del_objids(itr);

View File

@ -105,7 +105,7 @@ float Human::GetSpeed4()
return meta->i->move_speed4(); return meta->i->move_speed4();
} }
void Human::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) void Human::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data)
{ {
part_data->set_object_type(ET_Player); part_data->set_object_type(ET_Player);
cs::MFPlayerPart* p = part_data->mutable_union_obj_1(); cs::MFPlayerPart* p = part_data->mutable_union_obj_1();
@ -114,7 +114,7 @@ void Human::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data)
TypeConvert::ToPb(attack_dir, p->mutable_dir()); TypeConvert::ToPb(attack_dir, p->mutable_dir());
} }
void Human::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data)
{ {
full_data->set_object_type(ET_Player); full_data->set_object_type(ET_Player);
cs::MFPlayerFull* p = full_data->mutable_union_obj_1(); cs::MFPlayerFull* p = full_data->mutable_union_obj_1();
@ -3190,7 +3190,7 @@ void Human::NotifyObservers(cs::SMUpdate* msg, cs::MFActivePlayerData* active_pl
GetViewObjects(view_objects); GetViewObjects(view_objects);
for (Entity* entity : view_objects) { for (Entity* entity : view_objects) {
if (new_objects.find(entity) == new_objects.end()) { if (new_objects.find(entity) == new_objects.end()) {
entity->FillMFObjectFull(room, msg->add_full_objects()); entity->FillMFObjectFull(room, this, msg->add_full_objects());
} }
} }
refreshed_view = true; refreshed_view = true;

View File

@ -152,8 +152,8 @@ class Human : public MoveableEntity
virtual void Initialize() override; virtual void Initialize() override;
virtual float GetSpeed() override; virtual float GetSpeed() override;
virtual float GetSpeed4(); virtual float GetSpeed4();
virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
virtual void FillMFPlayerStats(cs::MFPlayerStats* stats); virtual void FillMFPlayerStats(cs::MFPlayerStats* stats);
virtual void GetAabbBox(AabbCollider& aabb_box); virtual void GetAabbBox(AabbCollider& aabb_box);
virtual bool IsDead(Room* room) override; virtual bool IsDead(Room* room) override;
@ -357,7 +357,7 @@ private:
std::array<float, kHAT_End> buff_attr_abs_ = {}; std::array<float, kHAT_End> buff_attr_abs_ = {};
std::array<float, kHAT_End> buff_attr_rate_ = {}; std::array<float, kHAT_End> buff_attr_rate_ = {};
std::array<unsigned char,FIXED_OBJECT_MAXID> fixed_object_sync_flags_ = {}; std::array<ObjectSyncFlags, FIXED_OBJECT_MAXID> fixed_object_sync_flags_ = {};
bool already_report_battle_ = false; bool already_report_battle_ = false;
bool sent_battlereport_ = false; bool sent_battlereport_ = false;

View File

@ -29,7 +29,7 @@ void Loot::RecalcSelfCollider()
{ {
} }
void Loot::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) void Loot::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data)
{ {
part_data->set_object_type(ET_Loot); part_data->set_object_type(ET_Loot);
cs::MFLootPart* p = part_data->mutable_union_obj_5(); cs::MFLootPart* p = part_data->mutable_union_obj_5();
@ -37,7 +37,7 @@ void Loot::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data)
TypeConvert::ToPb(GetPos(), p->mutable_pos()); TypeConvert::ToPb(GetPos(), p->mutable_pos());
} }
void Loot::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) void Loot::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data)
{ {
full_data->set_object_type(ET_Loot); full_data->set_object_type(ET_Loot);
cs::MFLootFull* p = full_data->mutable_union_obj_5(); cs::MFLootFull* p = full_data->mutable_union_obj_5();

View File

@ -25,8 +25,8 @@ class Loot : public RoomEntity
virtual ~Loot() override; virtual ~Loot() override;
virtual void Initialize() override; virtual void Initialize() override;
void RecalcSelfCollider(); void RecalcSelfCollider();
virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
protected: protected:
Loot(); Loot();

View File

@ -99,7 +99,7 @@ void Obstacle::RecalcSelfCollider()
} }
} }
void Obstacle::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) void Obstacle::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data)
{ {
part_data->set_object_type(ET_Obstacle); part_data->set_object_type(ET_Obstacle);
cs::MFObstaclePart* p = part_data->mutable_union_obj_2(); cs::MFObstaclePart* p = part_data->mutable_union_obj_2();
@ -108,9 +108,10 @@ void Obstacle::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data)
p->set_scale(1.0f); p->set_scale(1.0f);
} }
void Obstacle::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) void Obstacle::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data)
{ {
full_data->set_object_type(ET_Obstacle); full_data->set_object_type(ET_Obstacle);
cs::MFObstacleFull* p = full_data->mutable_union_obj_2(); cs::MFObstacleFull* p = full_data->mutable_union_obj_2();
p->set_obj_uniid(GetEntityUniId()); p->set_obj_uniid(GetEntityUniId());
TypeConvert::ToPb(GetPos(), p->mutable_pos()); TypeConvert::ToPb(GetPos(), p->mutable_pos());

View File

@ -29,8 +29,8 @@ class Obstacle : public Entity
virtual ~Obstacle() override; virtual ~Obstacle() override;
virtual void Initialize() override; virtual void Initialize() override;
virtual void RecalcSelfCollider(); virtual void RecalcSelfCollider();
virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
virtual void GetAabbBox(AabbCollider& aabb_box) override; virtual void GetAabbBox(AabbCollider& aabb_box) override;
virtual void GetCircleBox(CircleCollider& circle_box) override; virtual void GetCircleBox(CircleCollider& circle_box) override;
virtual bool IsDead(Room* room) override; virtual bool IsDead(Room* room) override;

View File

@ -137,6 +137,14 @@ struct ObstacleData
DoorState_e door_state = DoorStateClose; DoorState_e door_state = DoorStateClose;
}; };
#pragma pack(1)
struct ObjectSyncFlags
{
unsigned char flags = 0;
unsigned char last_sync_frameno = 0;
};
#pragma pack()
class GridService; class GridService;
class MapService; class MapService;
class Building; class Building;

View File

@ -418,8 +418,8 @@ message MFObjectFull
optional MFSmokeFull union_obj_9 = 10; optional MFSmokeFull union_obj_9 = 10;
optional MFHeroFull union_obj_10 = 11; optional MFHeroFull union_obj_10 = 11;
optional int32 obj_uniid = 100; //id optional int32 obj_uniid = 14; //id
optional int32 object_flags = 101; // 1<<0: 1<<1 optional int32 object_flags = 15; // 1<<0: 1<<1
} }
//() //()