This commit is contained in:
aozhiwei 2022-09-28 14:45:52 +08:00
parent 0b3da99ac4
commit c29956f6dc
11 changed files with 57 additions and 1 deletions

View File

@ -945,7 +945,7 @@ void Buff::ProcMachineGun()
} }
} }
caster_.Get()->need_sync_active_player = true; caster_.Get()->need_sync_active_player = true;
caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__); caster_.Get()->UpdateCharImage(__FILE__, __LINE__, __func__);
} }
} }

View File

@ -112,6 +112,7 @@ class Creature : public MoveableEntity
virtual void AddToNewObjects(Entity* entity) {}; virtual void AddToNewObjects(Entity* entity) {};
virtual void AddToPartObjects(Entity* entity) {}; virtual void AddToPartObjects(Entity* entity) {};
virtual void RemovePartObjects(Entity* entity) {}; virtual void RemovePartObjects(Entity* entity) {};
virtual void AddToImageObjects(Creature* c) {};
virtual bool InNewObjects(Entity* target) { return false; }; virtual bool InNewObjects(Entity* target) { return false; };
virtual bool InPartObjects(Entity* target) { return false; }; virtual bool InPartObjects(Entity* target) { return false; };
virtual int GetPartObjectsCount() { return 0; }; virtual int GetPartObjectsCount() { return 0; };
@ -123,6 +124,7 @@ class Creature : public MoveableEntity
virtual bool IsCreature(Room* room) override { return true;}; virtual bool IsCreature(Room* room) override { return true;};
virtual void OnBattleStart(Room* room) override; virtual void OnBattleStart(Room* room) override;
virtual MetaData::Player* GetHeroMeta() { return nullptr; }; virtual MetaData::Player* GetHeroMeta() { return nullptr; };
virtual void FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data) {};
bool HasBuffEffect(int buff_effect_id); bool HasBuffEffect(int buff_effect_id);
Buff* GetBuffByEffectId(int effect_id); Buff* GetBuffByEffectId(int effect_id);
Buff* GetBuffById(int buff_id); Buff* GetBuffById(int buff_id);

View File

@ -9,6 +9,9 @@ void FrameData::ClearFrameData(Human* hum)
if (!new_objects.empty()) { if (!new_objects.empty()) {
new_objects.clear(); new_objects.clear();
} }
if (!image_objects.empty()) {
image_objects.clear();
}
if (!block_objects.empty()) { if (!block_objects.empty()) {
if (hum->IsAndroid() && !hum->HasObserver()) { if (hum->IsAndroid() && !hum->HasObserver()) {
block_objects.clear(); block_objects.clear();

View File

@ -19,6 +19,7 @@ class FrameData
private: private:
std::map<int, EntityWeakPtr> new_objects; std::map<int, EntityWeakPtr> new_objects;
std::map<int, CreatureWeakPtr> image_objects;
std::map<int, EntityWeakPtr> block_objects; std::map<int, EntityWeakPtr> block_objects;
std::map<int, EntityWeakPtr> loot_objects; std::map<int, EntityWeakPtr> loot_objects;
std::map<int, PartObject> part_objects; std::map<int, PartObject> part_objects;

View File

@ -98,6 +98,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)
SerializeLootObjects(msg, room, hum, framedata); SerializeLootObjects(msg, room, hum, framedata);
SerializeMapBlockObjects(msg, room, hum, framedata); SerializeMapBlockObjects(msg, room, hum, framedata);
SerializeNewObjects(msg, room, hum, framedata); SerializeNewObjects(msg, room, hum, framedata);
SerializeImageObjects(msg, room, hum, framedata);
SerializePartObjects(msg, room, hum, framedata); SerializePartObjects(msg, room, hum, framedata);
SerializeDelObjects(msg, room, hum, framedata); SerializeDelObjects(msg, room, hum, framedata);
SerializeOutObjects(msg, room, hum, framedata); SerializeOutObjects(msg, room, hum, framedata);
@ -225,6 +226,16 @@ void FrameMaker::SerializeNewObjects(cs::SMUpdate* msg, Room* room, Human* hum,
} }
} }
void FrameMaker::SerializeImageObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata)
{
for (auto& pair : framedata->image_objects) {
Creature* c = pair.second.Get();
if (c) {
c->FillMFObjectImage(room, (Human*)hum, msg->add_image_objects());
}
}
}
void FrameMaker::SerializePartObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata) void FrameMaker::SerializePartObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata)
{ {
if (!framedata->part_objects.empty()) { if (!framedata->part_objects.empty()) {

View File

@ -20,6 +20,7 @@ private:
void SerializeLootObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeLootObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);
void SerializeMapBlockObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeMapBlockObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);
void SerializeNewObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeNewObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);
void SerializeImageObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);
void SerializePartObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializePartObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);
void SerializeDelObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeDelObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);
void SerializeOutObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata); void SerializeOutObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);

View File

@ -577,6 +577,13 @@ void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data
} }
} }
void Human::FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data)
{
image_data->set_obj_uniid(GetUniId());
image_data->set_cur_weapon_idx(GetCurrWeapon()->weapon_idx);
GetCurrWeapon()->ToPB(this, image_data->mutable_weapon());
}
void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb) void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb)
{ {
stats_pb->set_player_id(GetUniId()); stats_pb->set_player_id(GetUniId());
@ -1246,6 +1253,11 @@ void Human::AddToNewObjects(Entity* entity)
} }
} }
void Human::AddToImageObjects(Creature* c)
{
framedata_.image_objects[c->GetUniId()] = c->GetWeakPtrRef();
}
void Human::AddToPartObjects(Entity* entity) void Human::AddToPartObjects(Entity* entity)
{ {
#ifdef DEBUG1 #ifdef DEBUG1

View File

@ -239,6 +239,7 @@ class Human : public Creature
virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
void FillMFObjectLess(Room* room, Human* hum, cs::MFPlayerFull* full_data); void FillMFObjectLess(Room* room, Human* hum, cs::MFPlayerFull* full_data);
virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override;
virtual void FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data) override;
virtual void FillMFPlayerStats(cs::MFPlayerStats* stats); virtual void FillMFPlayerStats(cs::MFPlayerStats* stats);
virtual float GetRadius() override; virtual float GetRadius() override;
virtual float GetHitRadius() override; virtual float GetHitRadius() override;
@ -258,6 +259,7 @@ class Human : public Creature
virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override; virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override;
virtual void AddToNewObjects(Entity* entity) override; virtual void AddToNewObjects(Entity* entity) override;
virtual void AddToPartObjects(Entity* entity) override; virtual void AddToPartObjects(Entity* entity) override;
virtual void AddToImageObjects(Creature* c) override;
virtual void RemovePartObjects(Entity* entity) override; virtual void RemovePartObjects(Entity* entity) override;
virtual bool InNewObjects(Entity* target) override; virtual bool InNewObjects(Entity* target) override;
virtual bool InPartObjects(Entity* target) override; virtual bool InPartObjects(Entity* target) override;

View File

@ -64,6 +64,19 @@ void MoveableEntity::SyncAroundPlayers(const char* file, int line, const char* f
}); });
} }
void MoveableEntity::UpdateCharImage(const char* file, int line, const char* func)
{
if (IsCreature(room)) {
Creature* c = (Creature*)this;
TraverseAllLayerHumanList
(
[c, file, line, func] (Human* hum, bool& stop)
{
hum->AddToImageObjects(c);
});
}
}
void MoveableEntity::TraverseCreatures(std::function<void (Creature*, bool&)> func) void MoveableEntity::TraverseCreatures(std::function<void (Creature*, bool&)> func)
{ {
room->grid_service->TraverseCreatures(room->GetRoomIdx(), room->grid_service->TraverseCreatures(room->GetRoomIdx(),

View File

@ -23,6 +23,7 @@ class MoveableEntity : public RoomEntity
std::set<GridCell*>& dec_grids std::set<GridCell*>& dec_grids
); );
virtual void SyncAroundPlayers(const char* file, int line, const char* func); virtual void SyncAroundPlayers(const char* file, int line, const char* func);
virtual void UpdateCharImage(const char* file, int line, const char* func);
virtual const a8::Vec2& GetMoveDir() { return move_dir_; }; virtual const a8::Vec2& GetMoveDir() { return move_dir_; };
virtual void SetMoveDir(const a8::Vec2& move_dir); virtual void SetMoveDir(const a8::Vec2& move_dir);
virtual const a8::Vec2& GetAttackDir() { return attack_dir_; }; virtual const a8::Vec2& GetAttackDir() { return attack_dir_; };

View File

@ -219,6 +219,14 @@ message MFAttrAddition
optional float rate_val = 3; // optional float rate_val = 3; //
} }
//-full信息则忽略
message MFCharacterImage
{
optional int32 obj_uniid = 1; //id
optional int32 cur_weapon_idx = 2; // 0-4
optional MFWeapon weapon = 3; //
}
//- //-
message MFPlayerFull message MFPlayerFull
{ {
@ -1129,6 +1137,8 @@ message SMUpdate
optional int32 game_left_time = 45; //(, ) optional int32 game_left_time = 45; //(, )
optional int32 frameno = 46; optional int32 frameno = 46;
repeated int32 del_bullets = 47; // repeated int32 del_bullets = 47; //
repeated MFCharacterImage image_objects = 50; //-full信息则忽略
} }
// //