From e232db95473165c0d1a46484b4f15e0ef45b01b2 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 18 Mar 2019 15:47:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/android.ai.cc | 3 ++- server/gameserver/android.cc | 1 + server/gameserver/bullet.cc | 1 + server/gameserver/entity.h | 4 +++- server/gameserver/human.cc | 18 +++++++++++++++--- server/gameserver/human.h | 2 +- server/gameserver/player.cc | 1 + server/gameserver/room.cc | 7 +++++++ server/gameserver/room.h | 2 ++ 9 files changed, 33 insertions(+), 6 deletions(-) diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index d6c6e12..24954a8 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -118,7 +118,8 @@ void AndroidAI::DoMoveAndAttack() if (owner->updated_times % 2 == 0) { Human* enemy = owner->room->SearchEnemy((Human*)owner); if (enemy) { - + Human* sender = (Human*)owner; + sender->Shot(enemy->pos, 10.0); } } } diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 280c95b..df09f2f 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -7,6 +7,7 @@ Android::Android():Human() { + entity_type = ET_Player; entity_subtype = EST_Android; ai = new AndroidAI; ai->owner = this; diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 46d3d7d..81c2f04 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -6,6 +6,7 @@ Bullet::Bullet():Entity() { + entity_type = ET_Bullet; } Bullet::~Bullet() diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index ecdeb03..7c7dc80 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -17,7 +17,9 @@ enum EntityType_e ET_DeadBody = 6, ET_Decal = 7, ET_Projectile = 8, - ET_Smoke = 9 + ET_Smoke = 9, + + ET_Bullet = 20 }; enum EntitySubType_e diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e6921ab..4a521ef 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -4,6 +4,8 @@ #include "cs_proto.pb.h" #include "movement.h" #include "metamgr.h" +#include "room.h" +#include "bullet.h" Human::Human() { @@ -55,7 +57,7 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) p->set_sdmg(sdmg); } -void Human::Shot(Vector2D& target_point, float speed) +void Human::Shot(Vector2D& target_dir, float speed) { { cs::MFShot* shot = frame_data.shots.Add(); @@ -68,8 +70,18 @@ void Human::Shot(Vector2D& target_point, float speed) cs::MFBullet* bullet = frame_data.bullets.Add(); bullet->set_player_id(entity_uniid); bullet->set_bullet_id(10001); - target_point.ToPB(bullet->mutable_pos()); - (pos - target_point).Normalize().ToPB(bullet->mutable_dir()); + pos.ToPB(bullet->mutable_pos()); + target_dir.ToPB(bullet->mutable_dir()); bullet->set_bulletskin(10001); } + { + Bullet* bullet = new Bullet(); + bullet->player = this; + bullet->pos = pos; + bullet->dir = target_dir; + bullet->born_pos = pos; + bullet->born_dir = target_dir; + bullet->entity_uniid = bullet->room->AllocUniid(); + room->AddBullet(bullet); + } } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index b9197f0..3de93e6 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -51,6 +51,6 @@ class Human : public Entity virtual float GetSpeed() override; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override; - void Shot(Vector2D& target_point, float speed); + void Shot(Vector2D& target_dir, float speed); }; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 876d701..e176455 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -25,6 +25,7 @@ const int F_ack = 24; Player::Player() { + entity_type = ET_Player; entity_subtype = EST_Player; update_msg = new cs::SMUpdate(); } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e83f3e6..f6cd733 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -7,6 +7,7 @@ #include "android.h" #include "metamgr.h" #include "movement.h" +#include "bullet.h" const int ROOM_MAX_PLAYER_NUM = 50; @@ -96,3 +97,9 @@ Human* Room::SearchEnemy(Human* hum) { return nullptr; } + +void Room::AddBullet(Bullet* bullet) +{ + uniid_hash_[bullet->entity_uniid] = bullet; + moveable_hash_[bullet->entity_uniid] = bullet; +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 74a986a..f3b70d0 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -21,6 +21,7 @@ struct RoomFrameData }; class Entity; +class Bullet; class Human; class Player; class Room @@ -40,6 +41,7 @@ public: void ShuaAndroid(); bool RandomPos(Human* hum, float distance, Vector2D& out_pos); Human* SearchEnemy(Human* hum); + void AddBullet(Bullet* bullet); private: unsigned short current_uniid = 0;