1
This commit is contained in:
commit
cc17cbdeca
@ -148,79 +148,45 @@ void Human::FindPath()
|
||||
{
|
||||
Vector2D old_pos = pos;
|
||||
{
|
||||
float dot = Vector2D::UP.Dot(move_dir);
|
||||
if (std::abs(dot) <= 0.001f) { //相互垂直
|
||||
float up_dot = Vector2D::UP.Dot(move_dir);
|
||||
bool at_left_side = Vector2D::LEFT.Dot(move_dir) > 0.0001f;
|
||||
if (std::abs(up_dot) <= 0.001f) { //相互垂直
|
||||
//向上
|
||||
pos = pos + Vector2D::UP;
|
||||
if (IsCollision()) {
|
||||
pos = old_pos + Vector2D::UP;
|
||||
if (!IsCollision()) {
|
||||
return;
|
||||
} else {
|
||||
//向下
|
||||
pos = old_pos;
|
||||
pos = pos + Vector2D::DOWN;
|
||||
if (IsCollision()) {
|
||||
pos = old_pos + Vector2D::DOWN;
|
||||
if (!IsCollision()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (dot > 0.001f) { //基本相同
|
||||
//向右
|
||||
pos = pos + Vector2D::RIGHT;
|
||||
if (IsCollision()) {
|
||||
} else if (up_dot > 0.001f) { //基本相同
|
||||
pos = old_pos + (at_left_side ? Vector2D::LEFT : Vector2D::RIGHT);
|
||||
if (!IsCollision()) {
|
||||
return;
|
||||
} else {
|
||||
//向上
|
||||
pos = old_pos;
|
||||
pos = pos + Vector2D::UP;
|
||||
if (IsCollision()) {
|
||||
pos = old_pos + Vector2D::UP;
|
||||
if (!IsCollision()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (dot < 0.001f) { //基本相反
|
||||
//向右
|
||||
pos = pos + Vector2D::RIGHT;
|
||||
if (IsCollision()) {
|
||||
} else if (up_dot < 0.001f) { //基本相反
|
||||
pos = old_pos + (at_left_side ? Vector2D::LEFT : Vector2D::RIGHT);
|
||||
if (!IsCollision()) {
|
||||
return;
|
||||
} else {
|
||||
//向下
|
||||
pos = old_pos;
|
||||
pos = pos + Vector2D::DOWN;
|
||||
if (IsCollision()) {
|
||||
pos = old_pos + Vector2D::DOWN;
|
||||
if (!IsCollision()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
float dot = Vector2D::DOWN.Dot(move_dir);
|
||||
if (std::abs(dot) <= 0.001f) { //相互垂直
|
||||
//向下
|
||||
pos = pos + Vector2D::DOWN;
|
||||
if (IsCollision()) {
|
||||
//向上
|
||||
pos = old_pos;
|
||||
pos = pos + Vector2D::UP;
|
||||
if (IsCollision()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (dot > 0.001f) { //基本相同
|
||||
//向左
|
||||
pos = pos + Vector2D::LEFT;
|
||||
if (IsCollision()) {
|
||||
//向下
|
||||
pos = old_pos;
|
||||
pos = pos + Vector2D::DOWN;
|
||||
if (IsCollision()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (dot < 0.001f) { //基本相反
|
||||
//向左
|
||||
pos = pos + Vector2D::LEFT;
|
||||
if (IsCollision()) {
|
||||
//向上
|
||||
pos = old_pos;
|
||||
pos = pos + Vector2D::UP;
|
||||
if (IsCollision()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float Human::GetRadius()
|
||||
|
@ -1,5 +1,7 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "playermgr.h"
|
||||
#include "player.h"
|
||||
#include "cs_proto.pb.h"
|
||||
@ -147,11 +149,21 @@ void Player::Shot()
|
||||
|
||||
void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg)
|
||||
{
|
||||
bool has_move_dir = msg.has_move_dir();
|
||||
moving = false;
|
||||
if (msg.has_move_dir()) {
|
||||
if (std::abs(msg.move_dir().x()) > FLT_EPSILON ||
|
||||
std::abs(msg.move_dir().y()) > FLT_EPSILON
|
||||
) {
|
||||
move_dir.FromPB(&msg.move_dir());
|
||||
move_dir.Normalize();
|
||||
moving = true;
|
||||
}
|
||||
}
|
||||
assert(!isnan(move_dir.x) && !isnan(move_dir.y));
|
||||
#if 0
|
||||
moving = msg.has_move_dir();
|
||||
#endif
|
||||
if (msg.has_attack_dir()) {
|
||||
attack_dir.FromPB(&msg.attack_dir());
|
||||
attack_dir.Normalize();
|
||||
@ -201,7 +213,7 @@ void Player::_CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg)
|
||||
send_func);
|
||||
}
|
||||
|
||||
void Player::FillMFPlayerData(cs::MFPlayerData* player_data)
|
||||
void Player::FillMFPlayerData(cs::MFActivePlayerData* player_data)
|
||||
{
|
||||
player_data->set_has_action(false);
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ namespace cs
|
||||
class CMEmote;
|
||||
class CMSpectate;
|
||||
class CMVoice;
|
||||
class MFPlayerData;
|
||||
class MFActivePlayerData;
|
||||
}
|
||||
|
||||
class Room;
|
||||
@ -55,7 +55,7 @@ class Player : public Human
|
||||
void _CMSpectate(f8::MsgHdr& hdr, const cs::CMSpectate& msg);
|
||||
void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg);
|
||||
|
||||
void FillMFPlayerData(cs::MFPlayerData* player_data);
|
||||
void FillMFPlayerData(cs::MFActivePlayerData* player_data);
|
||||
|
||||
private:
|
||||
cs::SMUpdate* update_msg = nullptr;
|
||||
|
@ -25,7 +25,7 @@ Player* PlayerMgr::GetPlayerBySocket(int socket)
|
||||
return itr != socket_hash_.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
Player* PlayerMgr::CreatePlayerByCMJoin(unsigned short obj_uniid, const cs::CMJoin& msg)
|
||||
Player* PlayerMgr::CreatePlayerByCMJoin(int socket, unsigned short obj_uniid, const cs::CMJoin& msg)
|
||||
{
|
||||
Player* hum = new Player();
|
||||
hum->entity_uniid = obj_uniid;
|
||||
@ -39,6 +39,7 @@ Player* PlayerMgr::CreatePlayerByCMJoin(unsigned short obj_uniid, const cs::CMJo
|
||||
hum->use_touch = msg.use_touch();
|
||||
hum->avatar_url = msg.avatar_url();
|
||||
hum->energy_shield = msg.energy_shield();
|
||||
socket_hash_[socket] = hum;
|
||||
// hum->baseskin = msg.baseskin();
|
||||
// hum->basemelee = msg.basemelee();
|
||||
// hum->elo_score = msg.elo_score();
|
||||
|
@ -21,7 +21,7 @@ class PlayerMgr : public a8::Singleton<PlayerMgr>
|
||||
void Update();
|
||||
|
||||
Player* GetPlayerBySocket(int socket);
|
||||
Player* CreatePlayerByCMJoin(unsigned short obj_uniid, const cs::CMJoin& msg);
|
||||
Player* CreatePlayerByCMJoin(int socket, unsigned short obj_uniid, const cs::CMJoin& msg);
|
||||
|
||||
private:
|
||||
std::map<int, Player*> socket_hash_;
|
||||
|
@ -139,6 +139,7 @@ void Room::ShuaAndroid()
|
||||
|
||||
void Room::ShuaObstacle(Human* hum)
|
||||
{
|
||||
#if 0
|
||||
MetaData::MapThing* thing = MetaMgr::Instance()->GetMapThing(61001);
|
||||
if (thing) {
|
||||
Obstacle* entity = new Obstacle();
|
||||
@ -157,6 +158,16 @@ void Room::ShuaObstacle(Human* hum)
|
||||
pair.second->new_objects.insert(entity);
|
||||
pair.second->part_objects.insert(entity);
|
||||
}
|
||||
#endif
|
||||
MetaData::MapThing* a_thing = MetaMgr::Instance()->GetMapThing(61001);
|
||||
MetaData::MapThing* b_thing = MetaMgr::Instance()->GetMapThing(61007);
|
||||
if (!a_thing || !b_thing) {
|
||||
return;
|
||||
}
|
||||
{
|
||||
Obstacle* obj = new Obstacle();
|
||||
obj->entity_uniid = AllocUniid();
|
||||
obj->room = this;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
|
||||
room_hash_[room->room_uuid] = room;
|
||||
}
|
||||
unsigned short new_uniid = room->AllocUniid();
|
||||
Player* hum = PlayerMgr::Instance()->CreatePlayerByCMJoin(new_uniid, msg);
|
||||
Player* hum = PlayerMgr::Instance()->CreatePlayerByCMJoin(hdr.socket_handle, new_uniid, msg);
|
||||
hum->meta = hum_meta;
|
||||
hum->socket_handle = hdr.socket_handle;
|
||||
hum->Initialize();
|
||||
|
@ -228,7 +228,7 @@ message MFLootFull
|
||||
optional int32 obj_uniid = 1; //唯一id
|
||||
optional MFVector2D pos = 2; //位置
|
||||
|
||||
optional string name = 6;
|
||||
optional int32 item_id = 6;
|
||||
optional int32 count = 7;
|
||||
optional int32 age_ms = 8;
|
||||
}
|
||||
@ -331,8 +331,8 @@ message MFObjectFull
|
||||
optional MFSmokeFull union_obj_9 = 10;
|
||||
}
|
||||
|
||||
//玩家数据
|
||||
message MFPlayerData
|
||||
//活跃玩家数据(当前)
|
||||
message MFActivePlayerData
|
||||
{
|
||||
optional float boost = 1;
|
||||
|
||||
@ -352,6 +352,7 @@ message MFPlayerData
|
||||
optional int32 spectator_count = 20;
|
||||
}
|
||||
|
||||
//毒气数据
|
||||
message MFGasData
|
||||
{
|
||||
optional int32 mode = 1; //0:inactive 1:waiting 2:moveing
|
||||
@ -373,12 +374,14 @@ message MFTeamData
|
||||
optional bool downed = 7;
|
||||
}
|
||||
|
||||
message MFTeamInfo
|
||||
//同队队友数据
|
||||
message MFTeammateInfo
|
||||
{
|
||||
optional int32 team_id = 1;
|
||||
repeated int32 player_ids = 2;
|
||||
}
|
||||
|
||||
//子弹
|
||||
message MFBullet
|
||||
{
|
||||
optional int32 player_id = 1; //玩家id
|
||||
@ -571,12 +574,12 @@ message SMUpdate
|
||||
repeated MFObjectFull full_objects = 3; //对象-全量(出现在视野)
|
||||
repeated MFObjectPart part_objects = 4; //对象-部分(用于插值更新)
|
||||
optional int32 active_player_id = 5; //当前活跃玩家id(如果玩家死亡后是观战对象的id)
|
||||
optional MFPlayerData active_player_data = 6; //活跃玩家数据(如果玩家死亡后是观战对象的数据)
|
||||
optional MFActivePlayerData active_player_data = 6; //活跃玩家数据(如果玩家死亡后是观战对象的数据)
|
||||
optional int32 alive_count = 15; //存活数量
|
||||
optional int32 gasT = 16;
|
||||
optional MFGasData gas_data = 17;
|
||||
optional int32 gasT = 16; //毒气
|
||||
optional MFGasData gas_data = 17; //毒气数据
|
||||
repeated MFTeamData team_data = 18;
|
||||
repeated MFTeamInfo teams = 19;
|
||||
repeated MFTeammateInfo teams = 19; //同队队友数据
|
||||
repeated MFBullet bullets = 20; //子弹
|
||||
repeated MFShot shots = 21; //射击
|
||||
repeated MFExplosion explosions = 22; //爆炸
|
||||
|
Loading…
x
Reference in New Issue
Block a user