diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 155b4c2d..c79ba487 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -964,3 +964,16 @@ void Obstacle::ProcDieExplosion(Room* room) ); } } + +void Obstacle::SetRotate(float rotate) +{ + rotate_ = rotate; + for (auto collider : colliders_) { + if (collider->type == CT_Circle) { + CircleCollider* circle_collider = (CircleCollider*)collider; + if (fabs(rotate) > 0.0001) { + circle_collider->pos.Rotate(rotate); + } + } + } +} diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index 08dbacfe..354552aa 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -51,6 +51,8 @@ class Obstacle : public Entity virtual int OnCollisionTrigger(Creature* c, ColliderComponent* collider); virtual bool CanSeeMe(Human* hum); virtual bool ReceiveExplosionDmg(Explosion* explosion) override; + virtual void SetRotate(float rotate); + float GetRotate() { return rotate_; } void SetDoorInfo(Building* building, int door_id_x); bool IsDoor(); DoorState_e GetDoorState(Room* room); @@ -102,5 +104,7 @@ protected: int team_id_ = 0; int master_id_ = 0; + float rotate_ = 0; + friend class EntityFactory; };