140 lines
3.4 KiB
C++
140 lines
3.4 KiB
C++
#include "precompile.h"
|
|
|
|
#include "playermgr.h"
|
|
#include "player.h"
|
|
#include "cs_proto.pb.h"
|
|
#include "room.h"
|
|
#include "metamgr.h"
|
|
#include "movement.h"
|
|
|
|
const int F_del_objids = 2;
|
|
const int F_full_objects = 3;
|
|
const int F_part_objects = 4;
|
|
const int F_active_player_id = 5;
|
|
const int F_active_player_data = 6;
|
|
const int F_alive_count = 15;
|
|
const int F_gasT = 16;
|
|
const int F_gas_data = 17;
|
|
const int F_team_data = 18;
|
|
const int F_teams = 19;
|
|
const int F_bullets = 20;
|
|
const int F_shots = 21;
|
|
const int F_explosions = 22;
|
|
const int F_emotes = 23;
|
|
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()
|
|
{
|
|
health = meta->i->health();
|
|
}
|
|
|
|
void Player::Update(int delta_time)
|
|
{
|
|
movement->Update(delta_time);
|
|
if (updated_times % 2 == 0) {
|
|
MakeUpdateMsg();
|
|
SendNotifyMsg(*update_msg);
|
|
{
|
|
if (!new_players.empty()) {
|
|
new_players.clear();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg)
|
|
{
|
|
|
|
}
|
|
|
|
void Player::_CMDropItem(f8::MsgHdr& hdr, const cs::CMDropItem& msg)
|
|
{
|
|
|
|
}
|
|
|
|
void Player::_CMEmote(f8::MsgHdr& hdr, const cs::CMEmote& msg)
|
|
{
|
|
|
|
}
|
|
|
|
void Player::_CMSpectate(f8::MsgHdr& hdr, const cs::CMSpectate& msg)
|
|
{
|
|
|
|
}
|
|
|
|
void Player::_CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg)
|
|
{
|
|
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|