#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 &current, const VecPos &target, VecPos &currentVelocity, float smoothTime, int maxSpeed, float deltaTime);
};
