diff --git a/server/gameserver/building.cc b/server/gameserver/building.cc index a885cbb..68eb46d 100644 --- a/server/gameserver/building.cc +++ b/server/gameserver/building.cc @@ -3,7 +3,6 @@ #include "building.h" #include "collider.h" #include "metamgr.h" -#include "room.h" #include "loot.h" #include "app.h" #include "typeconvert.h" diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index fdbb7d0..ee98eda 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -8,7 +8,7 @@ #include "player.h" #include "app.h" -Bullet::Bullet():Entity() +Bullet::Bullet():RoomEntity() { entity_type = ET_Bullet; ++App::Instance()->perf.entity_num[ET_Bullet]; diff --git a/server/gameserver/bullet.h b/server/gameserver/bullet.h index e5400b9..e81094d 100644 --- a/server/gameserver/bullet.h +++ b/server/gameserver/bullet.h @@ -1,6 +1,6 @@ #pragma once -#include "entity.h" +#include "roomentity.h" namespace MetaData { @@ -13,7 +13,7 @@ class Human; class Obstacle; class CircleCollider; class MovementComponent; -class Bullet : public Entity +class Bullet : public RoomEntity { public: int gun_lv = 0; diff --git a/server/gameserver/entity.cc b/server/gameserver/entity.cc index 5acd940..c5bd502 100644 --- a/server/gameserver/entity.cc +++ b/server/gameserver/entity.cc @@ -19,7 +19,9 @@ Entity::~Entity() void Entity::Initialize() { + #if 0 xtimer_attacher.xtimer = &room->xtimer; + #endif } void Entity::GetAabbBox(AabbCollider& aabb_box) diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index 9edc002..ab88aae 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -24,7 +24,6 @@ class Entity Room* room = nullptr; int updated_times = 0; bool deleted = false; - a8::XTimerAttacher xtimer_attacher; bool is_permanent = false; MapService* permanent_map_service = nullptr; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index f9c4d8e..0912cac 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -28,7 +28,7 @@ const int kReviveTimeAdd = 12; const int kSkinNum = 4; -Human::Human():Entity() +Human::Human():RoomEntity() { default_weapon.weapon_idx = 0; default_weapon.weapon_id = 12101; diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 97f580a..6920273 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -1,6 +1,6 @@ #pragma once -#include "entity.h" +#include "roomentity.h" #include "cs_proto.pb.h" #include "GGListener.h" @@ -26,7 +26,7 @@ class AabbCollider; class Obstacle; class Loot; class Buff; -class Human : public Entity +class Human : public RoomEntity { public: int socket_handle = 0; @@ -45,6 +45,7 @@ class Human : public Entity MetaData::Dress* skin_jlf_meta = nullptr; MetaData::Equip* skin_tank_meta = nullptr; HumanAbility ability; + a8::XTimerAttacher xtimer_attacher; a8::Vec2 move_dir; a8::Vec2 attack_dir; diff --git a/server/gameserver/loot.cc b/server/gameserver/loot.cc index db1999f..f12aaa3 100644 --- a/server/gameserver/loot.cc +++ b/server/gameserver/loot.cc @@ -8,7 +8,7 @@ #include "app.h" #include "typeconvert.h" -Loot::Loot():Entity() +Loot::Loot():RoomEntity() { entity_type = ET_Loot; ++App::Instance()->perf.entity_num[ET_Loot]; diff --git a/server/gameserver/loot.h b/server/gameserver/loot.h index 48110e0..4548d4c 100644 --- a/server/gameserver/loot.h +++ b/server/gameserver/loot.h @@ -1,6 +1,6 @@ #pragma once -#include "entity.h" +#include "roomentity.h" namespace MetaData { @@ -10,7 +10,7 @@ namespace MetaData } class Human; -class Loot : public Entity +class Loot : public RoomEntity { public: MetaData::Equip* meta = nullptr; diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index be0eb50..41f3b5e 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -72,7 +72,7 @@ void Obstacle::RecalcSelfCollider() } self_collider_->pos = a8::Vec2(); self_collider_->rad = meta->i->height() / 2.0; - room->map_service.AddCollider(self_collider_); + permanent_map_service->AddCollider(self_collider_); } break; case 2: @@ -84,7 +84,7 @@ void Obstacle::RecalcSelfCollider() } self_collider2_->_min = a8::Vec2(meta->i->width() / -2.0f, meta->i->height() / -2.0f); self_collider2_->_max = a8::Vec2(meta->i->width() / 2.0f, meta->i->height() / 2.0f); - room->map_service.AddCollider(self_collider2_); + permanent_map_service->AddCollider(self_collider2_); } break; } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index cf3d2d6..5b4b729 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -445,7 +445,7 @@ void Room::CreateBullet(Human* hum, Weapon* weapon, } } -void Room::RemoveObjectLater(Entity* entity) +void Room::RemoveObjectLater(RoomEntity* entity) { auto remove_func = [] (const a8::XParams& param) { @@ -1180,11 +1180,11 @@ Obstacle* Room::InternalCreateObstacle(int id, float x, float y, return nullptr; } -void Room::AddObjectLater(Entity* entity) +void Room::AddObjectLater(RoomEntity* entity) { auto add_func = [] (const a8::XParams& param) { - Entity* entity = (Entity*)param.sender.GetUserData(); + RoomEntity* entity = (RoomEntity*)param.sender.GetUserData(); if (entity->entity_type == ET_Bullet) { entity->room->moveable_hash_[entity->entity_uniid] = entity; } diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 34112fc..1568af8 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -25,6 +25,7 @@ namespace metatable struct timer_list; struct xtimer_list; class Entity; +class RoomEntity; class Obstacle; class Bullet; class Human; @@ -72,7 +73,7 @@ public: void AddPlayer(Player* hum); Human* FindEnemy(Human* hum); - void RemoveObjectLater(Entity* entity); + void RemoveObjectLater(RoomEntity* entity); void FillSMJoinedNotify(Player* self_hum, cs::SMJoinedNotify& msg); @@ -129,7 +130,7 @@ private: Obstacle* CreateObstacle(int id, float x, float y); Obstacle* InternalCreateObstacle(int id, float x, float y, std::function on_precreate); - void AddObjectLater(Entity* entity); + void AddObjectLater(RoomEntity* entity); void OnGameOver(); void RandRemoveAndroid(); void NotifyWxVoip(); diff --git a/server/gameserver/roomentity.cc b/server/gameserver/roomentity.cc new file mode 100644 index 0000000..e69de29 diff --git a/server/gameserver/roomentity.h b/server/gameserver/roomentity.h new file mode 100644 index 0000000..efc6969 --- /dev/null +++ b/server/gameserver/roomentity.h @@ -0,0 +1,10 @@ +#pragma once + +#include "entity.h" + +class RoomEntity : public Entity +{ + public: + a8::XTimerAttacher xtimer_attacher; + +};