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()->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 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);
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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()) {
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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(),
|
||||||
|
@ -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_; };
|
||||||
|
@ -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信息则忽略
|
||||||
}
|
}
|
||||||
|
|
||||||
//滚动消息
|
//滚动消息
|
||||||
|
Loading…
x
Reference in New Issue
Block a user