From 6fc58d553a223999fef8234b8c8d51e3c5abef3b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 15 Mar 2019 11:12:27 +0800 Subject: [PATCH] entity add initialize function --- server/gameserver/android.cc | 11 +++++++++++ server/gameserver/android.h | 3 +++ server/gameserver/entity.h | 9 +++++++++ server/gameserver/human.h | 6 ++++++ server/gameserver/player.cc | 11 +++++++++++ server/gameserver/player.h | 2 ++ server/gameserver/room.cc | 26 +++++++++++++++++++++++++- server/gameserver/room.h | 4 +++- server/gameserver/roommgr.cc | 8 ++++++++ 9 files changed, 78 insertions(+), 2 deletions(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index fdfc80a..1993d3f 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -1,3 +1,14 @@ #include "precompile.h" #include "android.h" +#include "metamgr.h" + +Android::Android() +{ + entity_subtype = EST_Android; +} + +void Android::Initialize() +{ + health = meta->i->health(); +} diff --git a/server/gameserver/android.h b/server/gameserver/android.h index 5c7ee38..b670b43 100644 --- a/server/gameserver/android.h +++ b/server/gameserver/android.h @@ -4,5 +4,8 @@ class Android : public Human { + public: + Android(); + virtual void Initialize() override; }; diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index 9c82360..a550d66 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -20,17 +20,26 @@ enum EntityType_e ET_Smoke = 9 }; +enum EntitySubType_e +{ + EST_None = 0, + EST_Player = 1, + EST_Android = 2, +}; + class Room; class Entity { public: unsigned short entity_uniid = 0; EntityType_e entity_type = ET_None; + EntitySubType_e entity_subtype = EST_None; Room* room = nullptr; Vector2D pos; Vector2D dir; int updated_times = 0; + virtual void Initialize() {}; virtual void Update(int delta_time) {}; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) {}; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) {}; diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 134fe86..a8519b4 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -2,10 +2,16 @@ #include "entity.h" +namespace MetaData +{ + struct Player; +} + class Human : public Entity { public: std::string team_uniid; + MetaData::Player* meta = nullptr; float health = 0.0; bool dead = false; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 341b01a..d3ea191 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -4,6 +4,7 @@ #include "player.h" #include "cs_proto.pb.h" #include "room.h" +#include "metamgr.h" const int F_del_objids = 2; const int F_full_objects = 3; @@ -21,6 +22,16 @@ const int F_explosions = 22; const int F_emotes = 23; const int F_ack = 24; +Player::Player() +{ + entity_subtype = EST_Player; +} + +void Player::Initialize() +{ + health = meta->i->health(); +} + void Player::Update(int delta_time) { if (updated_times % 2 == 0) { diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 82e38b8..0ad69c6 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -34,6 +34,8 @@ class Player : public Human GGListener::Instance()->SendToClient(socket_handle, 0, msg); } + Player(); + virtual void Initialize() override; virtual void Update(int delta_time) override; void _CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 969e1d7..c46c00e 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -4,6 +4,8 @@ #include "player.h" #include "cs_proto.pb.h" #include "room.h" +#include "android.h" +#include "metamgr.h" const int ROOM_MAX_PLAYER_NUM = 50; @@ -38,7 +40,10 @@ Player* Room::GetPlayerByAccountId(const std::string& accountid) Player* Room::GetPlayerByUniId(unsigned short uniid) { auto itr = uniid_hash_.find(uniid); - return itr != uniid_hash_.end() ? itr->second : nullptr; + return itr != uniid_hash_.end() && + itr->second->entity_type == ET_Player && + itr->second->entity_subtype == EST_Player ? + (Player*)itr->second : nullptr; } int Room::AliveCount() @@ -59,3 +64,22 @@ unsigned short Room::AllocUniid() { return ++current_uniid; } + +void Room::ShuaAndroid() +{ + MetaData::Player* hum_meta = MetaMgr::Instance()->GetPlayer(40002); + assert(hum_meta); + if (!hum_meta) { + abort(); + } + for (int i = 0; i < 30; ++i) { + Android* hum = new Android(); + hum->meta = hum_meta; + hum->entity_uniid = AllocUniid(); + hum->pos.x = 100 + rand() % 400; + hum->pos.y = 200 + rand() % 500; + hum->room = this; + hum->Initialize(); + uniid_hash_[hum->entity_uniid] = hum; + } +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index ab0122b..17715af 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -12,6 +12,7 @@ namespace MetaData struct Map; } +class Entity; class Player; class Room { @@ -27,6 +28,7 @@ public: Player* GetPlayerByUniId(unsigned short uniid); void AddPlayer(Player* hum); unsigned short AllocUniid(); + void ShuaAndroid(); private: unsigned short current_uniid = 0; @@ -34,5 +36,5 @@ public: int elapsed_time_ = 0; std::map accountid_hash_; - std::map uniid_hash_; + std::map uniid_hash_; }; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 9d7c644..5f35aaf 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -28,6 +28,11 @@ void RoomMgr::Update(int delta_time) void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) { + MetaData::Player* hum_meta = MetaMgr::Instance()->GetPlayer(40001); + assert(hum_meta); + if (!hum_meta) { + abort(); + } Room* room = GetJoinableRoom(msg.account_id()); if (!room) { room = new Room(); @@ -37,11 +42,14 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) abort(); } room->map_meta = MetaMgr::Instance()->GetMap(1001); + room->ShuaAndroid(); room_hash_[room->room_uuid] = room; } unsigned short new_uniid = room->AllocUniid(); Player* hum = PlayerMgr::Instance()->CreatePlayerByCMJoin(new_uniid, msg); + hum->meta = hum_meta; hum->socket_handle = hdr.socket_handle; + hum->Initialize(); room->AddPlayer(hum); {