完善updatemsg

This commit is contained in:
aozhiwei 2019-03-18 14:41:55 +08:00
parent 645ae32cf9
commit 02e39e1cc0
9 changed files with 136 additions and 36 deletions

View File

@ -3,6 +3,7 @@
#include "android.ai.h" #include "android.ai.h"
#include "android.h" #include "android.h"
#include "movement.h" #include "movement.h"
#include "room.h"
void AndroidAI::Update(int delta_time) void AndroidAI::Update(int delta_time)
{ {
@ -82,17 +83,42 @@ void AndroidAI::DoMove()
{ {
if (owner->movement) { if (owner->movement) {
if (owner->movement->Arrived()) { if (owner->movement->Arrived()) {
float distance = 8.0f + rand() % 10;
Vector2D out_pos;
if (owner->room->RandomPos((Human*)owner, distance, out_pos)) {
owner->movement->ClearPath();
owner->movement->AddPathPoint(out_pos, distance, owner->GetSpeed());
}
} }
} }
} }
void AndroidAI::DoAttack() void AndroidAI::DoAttack()
{ {
if (owner->updated_times % 2 == 0) {
Human* enemy = owner->room->SearchEnemy((Human*)owner);
if (enemy) {
}
}
} }
void AndroidAI::DoMoveAndAttack() void AndroidAI::DoMoveAndAttack()
{ {
if (owner->movement) {
if (owner->movement->Arrived()) {
float distance = 8.0f + rand() % 10;
Vector2D out_pos;
if (owner->room->RandomPos((Human*)owner, distance, out_pos)) {
owner->movement->ClearPath();
owner->movement->AddPathPoint(out_pos, distance, owner->GetSpeed());
}
}
if (owner->updated_times % 2 == 0) {
Human* enemy = owner->room->SearchEnemy((Human*)owner);
if (enemy) {
}
}
}
} }

View File

@ -49,4 +49,5 @@ class Entity
virtual void Update(int delta_time) {}; virtual void Update(int delta_time) {};
virtual void FillMFObjectPart(cs::MFObjectPart* part_data) {}; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) {};
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) {}; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) {};
virtual float GetSpeed() { return 1.0f;};
}; };

View File

@ -3,6 +3,7 @@
#include "human.h" #include "human.h"
#include "cs_proto.pb.h" #include "cs_proto.pb.h"
#include "movement.h" #include "movement.h"
#include "metamgr.h"
Human::Human() Human::Human()
{ {
@ -15,6 +16,11 @@ Human::~Human()
movement = nullptr; movement = nullptr;
} }
float Human::GetSpeed()
{
return meta->i->move_speed();
}
void Human::FillMFObjectPart(cs::MFObjectPart* part_data) void Human::FillMFObjectPart(cs::MFObjectPart* part_data)
{ {
part_data->set_object_type(ET_Player); part_data->set_object_type(ET_Player);

View File

@ -1,12 +1,19 @@
#pragma once #pragma once
#include "entity.h" #include "entity.h"
#include "cs_proto.pb.h"
namespace MetaData namespace MetaData
{ {
struct Player; struct Player;
} }
struct HumanFrameData
{
::google::protobuf::RepeatedPtrField<::cs::MFBullet> bullets;
::google::protobuf::RepeatedPtrField<::cs::MFShot> shots;
};
class Human : public Entity class Human : public Entity
{ {
public: public:
@ -29,6 +36,8 @@ class Human : public Entity
int vip = 0; int vip = 0;
int sdmg = 0; int sdmg = 0;
HumanFrameData frame_data;
bool moving = false; bool moving = false;
Vector2D move_dir; Vector2D move_dir;
@ -39,6 +48,7 @@ class Human : public Entity
Human(); Human();
virtual ~Human() override; virtual ~Human() override;
virtual float GetSpeed() override;
virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override;
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override;

View File

@ -26,6 +26,13 @@ const int F_ack = 24;
Player::Player() Player::Player()
{ {
entity_subtype = EST_Player; entity_subtype = EST_Player;
update_msg = new cs::SMUpdate();
}
Player::~Player()
{
delete update_msg;
update_msg = nullptr;
} }
void Player::Initialize() void Player::Initialize()
@ -37,39 +44,8 @@ void Player::Update(int delta_time)
{ {
movement->Update(delta_time); movement->Update(delta_time);
if (updated_times % 2 == 0) { if (updated_times % 2 == 0) {
cs::SMUpdate msg; MakeUpdateMsg();
{ SendNotifyMsg(*update_msg);
for (auto& itr : new_players) {
itr->FillMFObjectFull(msg.add_full_objects());
}
for (auto& itr : part_players) {
itr->FillMFObjectPart(msg.add_part_objects());
}
if (updated_times == 0) {
msg.set_active_player_id(entity_uniid);
FillMFPlayerData(msg.mutable_active_player_data());
}
msg.set_alive_count(room->AliveCount());
{
int data_flags32 = 0;
if (!new_players.empty()) {
a8::SetBitFlag(data_flags32, F_full_objects);
}
if (!part_players.empty()) {
a8::SetBitFlag(data_flags32, F_part_objects);
}
if (updated_times == 0) {
a8::SetBitFlag(data_flags32, F_active_player_id);
a8::SetBitFlag(data_flags32, F_active_player_data);
}
a8::SetBitFlag(data_flags32, F_alive_count);
msg.set_data_flags32(data_flags32);
}
}
SendNotifyMsg(msg);
{ {
if (!new_players.empty()) { if (!new_players.empty()) {
new_players.clear(); new_players.clear();
@ -107,3 +83,57 @@ void Player::FillMFPlayerData(cs::MFPlayerData* player_data)
{ {
player_data->set_has_action(false); player_data->set_has_action(false);
} }
void Player::MakeUpdateMsg()
{
update_msg->Clear();
{
for (auto& itr : new_players) {
itr->FillMFObjectFull(update_msg->add_full_objects());
if (itr->frame_data.bullets.size() > 0) {
update_msg->mutable_bullets()->MergeFrom(itr->frame_data.bullets);
}
if (itr->frame_data.shots.size() > 0) {
update_msg->mutable_shots()->MergeFrom(itr->frame_data.shots);
}
}
for (auto& itr : part_players) {
itr->FillMFObjectPart(update_msg->add_part_objects());
if (itr->frame_data.bullets.size() > 0) {
update_msg->mutable_bullets()->MergeFrom(itr->frame_data.bullets);
}
if (itr->frame_data.shots.size() > 0) {
update_msg->mutable_shots()->MergeFrom(itr->frame_data.shots);
}
}
if (updated_times == 0) {
update_msg->set_active_player_id(entity_uniid);
FillMFPlayerData(update_msg->mutable_active_player_data());
}
update_msg->set_alive_count(room->AliveCount());
{
int data_flags32 = 0;
if (!new_players.empty()) {
a8::SetBitFlag(data_flags32, F_full_objects);
}
if (!part_players.empty()) {
a8::SetBitFlag(data_flags32, F_part_objects);
}
if (update_msg->bullets_size() > 0) {
a8::SetBitFlag(data_flags32, F_bullets);
}
if (update_msg->shots_size() > 0) {
a8::SetBitFlag(data_flags32, F_shots);
}
if (updated_times == 0) {
a8::SetBitFlag(data_flags32, F_active_player_id);
a8::SetBitFlag(data_flags32, F_active_player_data);
}
a8::SetBitFlag(data_flags32, F_alive_count);
update_msg->set_data_flags32(data_flags32);
}
}
}

View File

@ -35,6 +35,7 @@ class Player : public Human
} }
Player(); Player();
virtual ~Player() override;
virtual void Initialize() override; virtual void Initialize() override;
virtual void Update(int delta_time) override; virtual void Update(int delta_time) override;
@ -45,4 +46,9 @@ class Player : public Human
void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg); void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg);
void FillMFPlayerData(cs::MFPlayerData* player_data); void FillMFPlayerData(cs::MFPlayerData* player_data);
private:
cs::SMUpdate* update_msg = nullptr;
void MakeUpdateMsg();
}; };

View File

@ -86,3 +86,13 @@ void Room::ShuaAndroid()
moveable_hash_[hum->entity_uniid] = hum; moveable_hash_[hum->entity_uniid] = hum;
} }
} }
bool Room::RandomPos(Human* hum, float distance, Vector2D& out_pos)
{
return false;
}
Human* Room::SearchEnemy(Human* hum)
{
return nullptr;
}

View File

@ -1,5 +1,7 @@
#pragma once #pragma once
#include "cs_proto.pb.h"
enum RoomState_e enum RoomState_e
{ {
RS_Inactive = 0, RS_Inactive = 0,
@ -12,7 +14,14 @@ namespace MetaData
struct Map; struct Map;
} }
struct RoomFrameData
{
::google::protobuf::RepeatedPtrField<::cs::MFExplosion> explosions;
::google::protobuf::RepeatedPtrField<::cs::MFEmote> emotes;
};
class Entity; class Entity;
class Human;
class Player; class Player;
class Room class Room
{ {
@ -29,6 +38,8 @@ public:
void AddPlayer(Player* hum); void AddPlayer(Player* hum);
unsigned short AllocUniid(); unsigned short AllocUniid();
void ShuaAndroid(); void ShuaAndroid();
bool RandomPos(Human* hum, float distance, Vector2D& out_pos);
Human* SearchEnemy(Human* hum);
private: private:
unsigned short current_uniid = 0; unsigned short current_uniid = 0;

View File

@ -612,8 +612,8 @@ message SMUpdate
repeated MFTeamData teams = 19; repeated MFTeamData teams = 19;
repeated MFBullet bullets = 20; // repeated MFBullet bullets = 20; //
repeated MFShot shots = 21; // repeated MFShot shots = 21; //
repeated MFExplosion explosions = 22; repeated MFExplosion explosions = 22; //
repeated MFEmote emotes = 23; repeated MFEmote emotes = 23; //
optional int32 ack = 24; optional int32 ack = 24;
optional uint32 data_flags32 = 256; optional uint32 data_flags32 = 256;