DYTSrouce/src/workspace/Timestep.h

74 lines
1.5 KiB
C
Raw Normal View History

2025-01-04 04:12:51 +00:00
#pragma once
#include <vector>
#include <QObject>
#include <QString>
class WorkSpace;
class Timestep : public QObject {
Q_OBJECT
public:
enum class PlayStatus : uint8_t {
PS_Started,
PS_Stoped,
PS_Suspended,
};
public:
explicit Timestep(const std::vector<double>& steps, const QString& path, WorkSpace* parent = nullptr) noexcept;
~Timestep() override = default;
static Timestep* Load(const QString& path, WorkSpace* workSpace = nullptr);
2025-01-04 04:12:51 +00:00
const std::vector<double>& GetSteps() const {
return steps_;
}
const QString& GetPath() const {
return path_;
}
void GetRange(double& minTime, double& maxTime, double& step);
void Update(double dt);
double GetCurrent() const {
return current_;
}
bool IsPause();
bool IsStoped();
void Start();
void Resume();
void Pause();
void Stop();
void Up();
2025-11-10 15:19:13 +00:00
void Down();
2025-01-04 04:12:51 +00:00
2025-07-06 15:33:27 +00:00
WorkSpace* GetWorkSpace() const {
return workSpace_;
}
2025-01-04 04:12:51 +00:00
Q_SIGNALS:
void StatusChanged(int);
void StepChanged(double);
void TimeChanged(double);
private:
2025-11-10 15:19:13 +00:00
std::vector<double> steps_;
QString path_;
double current_{ 0.0 };
double maxTime_{ 0.0 };
// 播放速度(倍率),与 UI 显示一致,比如 0.5x、1x、2x
double currentStep_{ 1.0 };
// 有限倍率列表,防止无限放大/缩小导致无法恢复
std::vector<double> speedLevels_{ 0.25, 0.5, 1.0, 2.0, 4.0, 8.0 };
int speedIndex_{ 2 }; // 默认指向 1.0x
2025-01-04 04:12:51 +00:00
2025-11-10 15:19:13 +00:00
PlayStatus playStatus_{ PlayStatus::PS_Stoped };
WorkSpace* workSpace_{ nullptr };
2025-01-04 04:12:51 +00:00
};