完善updatemsg
This commit is contained in:
parent
645ae32cf9
commit
02e39e1cc0
@ -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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;};
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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();
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user