From e356fbc67e2772a4e76dead815c0dbfbaf759933 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 15 Mar 2019 13:55:49 +0800 Subject: [PATCH] add movement component --- server/gameserver/android.cc | 6 ++++++ server/gameserver/android.h | 1 + server/gameserver/entity.h | 4 ++++ server/gameserver/human.cc | 12 ++++++++++++ server/gameserver/human.h | 2 ++ server/gameserver/movehelper.cc | 0 server/gameserver/movehelper.h | 0 server/gameserver/movement.cc | 8 ++++++++ server/gameserver/movement.h | 11 +++++++++++ server/gameserver/player.cc | 2 ++ server/gameserver/room.cc | 5 ++++- server/gameserver/room.h | 1 + server/gameserver/roommgr.cc | 1 + 13 files changed, 52 insertions(+), 1 deletion(-) delete mode 100644 server/gameserver/movehelper.cc delete mode 100644 server/gameserver/movehelper.h create mode 100644 server/gameserver/movement.cc create mode 100644 server/gameserver/movement.h diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 1993d3f..13cc345 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -2,6 +2,7 @@ #include "android.h" #include "metamgr.h" +#include "movement.h" Android::Android() { @@ -12,3 +13,8 @@ void Android::Initialize() { health = meta->i->health(); } + +void Android::Update(int delta_time) +{ + movement_component->Update(delta_time); +} diff --git a/server/gameserver/android.h b/server/gameserver/android.h index b670b43..66f6b99 100644 --- a/server/gameserver/android.h +++ b/server/gameserver/android.h @@ -8,4 +8,5 @@ class Android : public Human Android(); virtual void Initialize() override; + virtual void Update(int delta_time) override; }; diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index a550d66..9a5be18 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -28,6 +28,7 @@ enum EntitySubType_e }; class Room; +class MovementComponent; class Entity { public: @@ -38,7 +39,10 @@ class Entity Vector2D pos; Vector2D dir; int updated_times = 0; + MovementComponent* movement_component = nullptr; + Entity() {}; + virtual ~Entity() {}; virtual void Initialize() {}; virtual void Update(int delta_time) {}; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) {}; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 98cd12a..a6e97fa 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2,6 +2,18 @@ #include "human.h" #include "cs_proto.pb.h" +#include "movement.h" + +Human::Human() +{ + movement_component = new MovementComponent(); +} + +Human::~Human() +{ + delete movement_component; + movement_component = nullptr; +} void Human::FillMFObjectPart(cs::MFObjectPart* part_data) { diff --git a/server/gameserver/human.h b/server/gameserver/human.h index a8519b4..4a463b3 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -36,6 +36,8 @@ class Human : public Entity std::set new_players; std::set part_players; + Human(); + virtual ~Human() override; virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override; diff --git a/server/gameserver/movehelper.cc b/server/gameserver/movehelper.cc deleted file mode 100644 index e69de29..0000000 diff --git a/server/gameserver/movehelper.h b/server/gameserver/movehelper.h deleted file mode 100644 index e69de29..0000000 diff --git a/server/gameserver/movement.cc b/server/gameserver/movement.cc new file mode 100644 index 0000000..b0bc35b --- /dev/null +++ b/server/gameserver/movement.cc @@ -0,0 +1,8 @@ +#include "precompile.h" + +#include "movement.h" + +void MovementComponent::Update(int delta_time) +{ + +} diff --git a/server/gameserver/movement.h b/server/gameserver/movement.h new file mode 100644 index 0000000..d40527d --- /dev/null +++ b/server/gameserver/movement.h @@ -0,0 +1,11 @@ +#pragma once + +class Entity; +class MovementComponent +{ + public: + Entity* owner = nullptr; + int elapsed_time_ = 0; + + virtual void Update(int delta_time); +}; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index d3ea191..6e1a151 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -5,6 +5,7 @@ #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; @@ -34,6 +35,7 @@ void Player::Initialize() void Player::Update(int delta_time) { + movement_component->Update(delta_time); if (updated_times % 2 == 0) { cs::SMUpdate msg; { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index c46c00e..3dc3104 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -6,6 +6,7 @@ #include "room.h" #include "android.h" #include "metamgr.h" +#include "movement.h" const int ROOM_MAX_PLAYER_NUM = 50; @@ -13,7 +14,7 @@ void Room::Update(int delta_time) { elapsed_time_ += delta_time; while (elapsed_time_ >= 50) { - for (auto& pair : uniid_hash_) { + for (auto& pair : moveable_hash_) { pair.second->Update(50); pair.second->updated_times++; } @@ -57,6 +58,7 @@ void Room::AddPlayer(Player* hum) hum->pos.y = 200 + rand() % 200; hum->room = this; uniid_hash_[hum->entity_uniid] = hum; + moveable_hash_[hum->entity_uniid] = hum; accountid_hash_[hum->account_id] = hum; } @@ -81,5 +83,6 @@ void Room::ShuaAndroid() hum->room = this; hum->Initialize(); uniid_hash_[hum->entity_uniid] = hum; + moveable_hash_[hum->entity_uniid] = hum; } } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 17715af..792d322 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -37,4 +37,5 @@ public: std::map accountid_hash_; std::map uniid_hash_; + std::map moveable_hash_; }; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 5f35aaf..2344575 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -8,6 +8,7 @@ #include "playermgr.h" #include "app.h" #include "metamgr.h" +#include "movement.h" void RoomMgr::Init() {