完善updatemsg
This commit is contained in:
parent
645ae32cf9
commit
02e39e1cc0
@ -3,6 +3,7 @@
|
||||
#include "android.ai.h"
|
||||
#include "android.h"
|
||||
#include "movement.h"
|
||||
#include "room.h"
|
||||
|
||||
void AndroidAI::Update(int delta_time)
|
||||
{
|
||||
@ -82,17 +83,42 @@ void AndroidAI::DoMove()
|
||||
{
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AndroidAI::DoAttack()
|
||||
{
|
||||
if (owner->updated_times % 2 == 0) {
|
||||
Human* enemy = owner->room->SearchEnemy((Human*)owner);
|
||||
if (enemy) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,4 +49,5 @@ class Entity
|
||||
virtual void Update(int delta_time) {};
|
||||
virtual void FillMFObjectPart(cs::MFObjectPart* part_data) {};
|
||||
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) {};
|
||||
virtual float GetSpeed() { return 1.0f;};
|
||||
};
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "human.h"
|
||||
#include "cs_proto.pb.h"
|
||||
#include "movement.h"
|
||||
#include "metamgr.h"
|
||||
|
||||
Human::Human()
|
||||
{
|
||||
@ -15,6 +16,11 @@ Human::~Human()
|
||||
movement = nullptr;
|
||||
}
|
||||
|
||||
float Human::GetSpeed()
|
||||
{
|
||||
return meta->i->move_speed();
|
||||
}
|
||||
|
||||
void Human::FillMFObjectPart(cs::MFObjectPart* part_data)
|
||||
{
|
||||
part_data->set_object_type(ET_Player);
|
||||
|
@ -1,12 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include "entity.h"
|
||||
#include "cs_proto.pb.h"
|
||||
|
||||
namespace MetaData
|
||||
{
|
||||
struct Player;
|
||||
}
|
||||
|
||||
struct HumanFrameData
|
||||
{
|
||||
::google::protobuf::RepeatedPtrField<::cs::MFBullet> bullets;
|
||||
::google::protobuf::RepeatedPtrField<::cs::MFShot> shots;
|
||||
};
|
||||
|
||||
class Human : public Entity
|
||||
{
|
||||
public:
|
||||
@ -29,6 +36,8 @@ class Human : public Entity
|
||||
int vip = 0;
|
||||
int sdmg = 0;
|
||||
|
||||
HumanFrameData frame_data;
|
||||
|
||||
bool moving = false;
|
||||
Vector2D move_dir;
|
||||
|
||||
@ -39,6 +48,7 @@ class Human : public Entity
|
||||
|
||||
Human();
|
||||
virtual ~Human() override;
|
||||
virtual float GetSpeed() override;
|
||||
virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override;
|
||||
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override;
|
||||
|
||||
|
@ -26,6 +26,13 @@ const int F_ack = 24;
|
||||
Player::Player()
|
||||
{
|
||||
entity_subtype = EST_Player;
|
||||
update_msg = new cs::SMUpdate();
|
||||
}
|
||||
|
||||
Player::~Player()
|
||||
{
|
||||
delete update_msg;
|
||||
update_msg = nullptr;
|
||||
}
|
||||
|
||||
void Player::Initialize()
|
||||
@ -37,39 +44,8 @@ void Player::Update(int delta_time)
|
||||
{
|
||||
movement->Update(delta_time);
|
||||
if (updated_times % 2 == 0) {
|
||||
cs::SMUpdate 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);
|
||||
MakeUpdateMsg();
|
||||
SendNotifyMsg(*update_msg);
|
||||
{
|
||||
if (!new_players.empty()) {
|
||||
new_players.clear();
|
||||
@ -107,3 +83,57 @@ void Player::FillMFPlayerData(cs::MFPlayerData* player_data)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ class Player : public Human
|
||||
}
|
||||
|
||||
Player();
|
||||
virtual ~Player() override;
|
||||
virtual void Initialize() 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 FillMFPlayerData(cs::MFPlayerData* player_data);
|
||||
|
||||
private:
|
||||
cs::SMUpdate* update_msg = nullptr;
|
||||
|
||||
void MakeUpdateMsg();
|
||||
};
|
||||
|
@ -86,3 +86,13 @@ void Room::ShuaAndroid()
|
||||
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;
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "cs_proto.pb.h"
|
||||
|
||||
enum RoomState_e
|
||||
{
|
||||
RS_Inactive = 0,
|
||||
@ -12,7 +14,14 @@ namespace MetaData
|
||||
struct Map;
|
||||
}
|
||||
|
||||
struct RoomFrameData
|
||||
{
|
||||
::google::protobuf::RepeatedPtrField<::cs::MFExplosion> explosions;
|
||||
::google::protobuf::RepeatedPtrField<::cs::MFEmote> emotes;
|
||||
};
|
||||
|
||||
class Entity;
|
||||
class Human;
|
||||
class Player;
|
||||
class Room
|
||||
{
|
||||
@ -29,6 +38,8 @@ public:
|
||||
void AddPlayer(Player* hum);
|
||||
unsigned short AllocUniid();
|
||||
void ShuaAndroid();
|
||||
bool RandomPos(Human* hum, float distance, Vector2D& out_pos);
|
||||
Human* SearchEnemy(Human* hum);
|
||||
|
||||
private:
|
||||
unsigned short current_uniid = 0;
|
||||
|
@ -612,8 +612,8 @@ message SMUpdate
|
||||
repeated MFTeamData teams = 19;
|
||||
repeated MFBullet bullets = 20; //子弹
|
||||
repeated MFShot shots = 21; //射击
|
||||
repeated MFExplosion explosions = 22;
|
||||
repeated MFEmote emotes = 23;
|
||||
repeated MFExplosion explosions = 22; //爆炸
|
||||
repeated MFEmote emotes = 23; //表情
|
||||
optional int32 ack = 24;
|
||||
|
||||
optional uint32 data_flags32 = 256;
|
||||
|
Loading…
x
Reference in New Issue
Block a user