1
This commit is contained in:
parent
0b3da99ac4
commit
c29956f6dc
@ -945,7 +945,7 @@ void Buff::ProcMachineGun()
|
||||
}
|
||||
}
|
||||
caster_.Get()->need_sync_active_player = true;
|
||||
caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||
caster_.Get()->UpdateCharImage(__FILE__, __LINE__, __func__);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,6 +112,7 @@ class Creature : public MoveableEntity
|
||||
virtual void AddToNewObjects(Entity* entity) {};
|
||||
virtual void AddToPartObjects(Entity* entity) {};
|
||||
virtual void RemovePartObjects(Entity* entity) {};
|
||||
virtual void AddToImageObjects(Creature* c) {};
|
||||
virtual bool InNewObjects(Entity* target) { return false; };
|
||||
virtual bool InPartObjects(Entity* target) { return false; };
|
||||
virtual int GetPartObjectsCount() { return 0; };
|
||||
@ -123,6 +124,7 @@ class Creature : public MoveableEntity
|
||||
virtual bool IsCreature(Room* room) override { return true;};
|
||||
virtual void OnBattleStart(Room* room) override;
|
||||
virtual MetaData::Player* GetHeroMeta() { return nullptr; };
|
||||
virtual void FillMFObjectImage(Room* room, Human* hum, cs::MFCharacterImage* image_data) {};
|
||||
bool HasBuffEffect(int buff_effect_id);
|
||||
Buff* GetBuffByEffectId(int effect_id);
|
||||
Buff* GetBuffById(int buff_id);
|
||||
|
@ -9,6 +9,9 @@ void FrameData::ClearFrameData(Human* hum)
|
||||
if (!new_objects.empty()) {
|
||||
new_objects.clear();
|
||||
}
|
||||
if (!image_objects.empty()) {
|
||||
image_objects.clear();
|
||||
}
|
||||
if (!block_objects.empty()) {
|
||||
if (hum->IsAndroid() && !hum->HasObserver()) {
|
||||
block_objects.clear();
|
||||
|
@ -19,6 +19,7 @@ class FrameData
|
||||
|
||||
private:
|
||||
std::map<int, EntityWeakPtr> new_objects;
|
||||
std::map<int, CreatureWeakPtr> image_objects;
|
||||
std::map<int, EntityWeakPtr> block_objects;
|
||||
std::map<int, EntityWeakPtr> loot_objects;
|
||||
std::map<int, PartObject> part_objects;
|
||||
|
@ -98,6 +98,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)
|
||||
SerializeLootObjects(msg, room, hum, framedata);
|
||||
SerializeMapBlockObjects(msg, room, hum, framedata);
|
||||
SerializeNewObjects(msg, room, hum, framedata);
|
||||
SerializeImageObjects(msg, room, hum, framedata);
|
||||
SerializePartObjects(msg, room, hum, framedata);
|
||||
SerializeDelObjects(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)
|
||||
{
|
||||
if (!framedata->part_objects.empty()) {
|
||||
|
@ -20,6 +20,7 @@ private:
|
||||
void SerializeLootObjects(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 SerializeImageObjects(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 SerializeOutObjects(cs::SMUpdate* msg, Room* room, Human* hum, FrameData* framedata);
|
||||
|
@ -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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
#ifdef DEBUG1
|
||||
|
@ -239,6 +239,7 @@ class Human : public Creature
|
||||
virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override;
|
||||
void FillMFObjectLess(Room* room, Human* hum, cs::MFPlayerFull* full_data);
|
||||
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 float GetRadius() 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 AddToNewObjects(Entity* entity) override;
|
||||
virtual void AddToPartObjects(Entity* entity) override;
|
||||
virtual void AddToImageObjects(Creature* c) override;
|
||||
virtual void RemovePartObjects(Entity* entity) override;
|
||||
virtual bool InNewObjects(Entity* target) override;
|
||||
virtual bool InPartObjects(Entity* target) override;
|
||||
|
@ -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)
|
||||
{
|
||||
room->grid_service->TraverseCreatures(room->GetRoomIdx(),
|
||||
|
@ -23,6 +23,7 @@ class MoveableEntity : public RoomEntity
|
||||
std::set<GridCell*>& dec_grids
|
||||
);
|
||||
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 void SetMoveDir(const a8::Vec2& move_dir);
|
||||
virtual const a8::Vec2& GetAttackDir() { return attack_dir_; };
|
||||
|
@ -219,6 +219,14 @@ message MFAttrAddition
|
||||
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
|
||||
{
|
||||
@ -1129,6 +1137,8 @@ message SMUpdate
|
||||
optional int32 game_left_time = 45; //游戏剩余时间(毫秒, 战斗开始后字段才有意义)
|
||||
optional int32 frameno = 46;
|
||||
repeated int32 del_bullets = 47; //子弹删除
|
||||
|
||||
repeated MFCharacterImage image_objects = 50; //角色形象-本地如果没有full信息则忽略
|
||||
}
|
||||
|
||||
//滚动消息
|
||||
|
Loading…
x
Reference in New Issue
Block a user