#pragma once #include "EngineFrame/Actor/Actor.h" class GameMap; class BaseObject; class GameMapCamera : public Actor { private: // 跟随对象 BaseObject *_FromActor = nullptr; public: // 摄像机记录的跟随对象坐标 VecPos3 FromActorPos = {0, 0, 0}; // 缩放比率 float CameraRate = 1.0; // 添加平滑移动相关的成员变量 bool _isSmoothMoving = false; VecPos _currentPosition; // 当前摄像机位置 VecPos _velocity; // 当前移动速度(用于平滑移动) float _smoothTime = 0.1f; // 平滑时间(秒),可调整 int _maxSpeed = 2000; // 最大移动速度,防止过快 public: GameMapCamera(); ~GameMapCamera(); void SetFromActor(BaseObject *actor); void Update(float deltaTime); void SetPos(int x, int y, int z); void AddPos(int x, int y, int z); //同步坐标相关 void SyncPos(float deltaTime); void SyncPosByFromParent(float deltaTime); // 平滑阻尼函数(类似Unity的Mathf.SmoothDamp) VecPos SmoothDamp(const VecPos ¤t, const VecPos &target, VecPos ¤tVelocity, float smoothTime, int maxSpeed, float deltaTime); };