SimsWorld/MessageBasic/motion_access.h

131 lines
3.1 KiB
C
Raw Normal View History

2025-06-14 16:05:57 +00:00
#pragma once
#include "messagebasic.h"
/// <summary>
/// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT NavigateWithRoute : public AbstractMessage {
QString _route_name;
NavigateWithRoute();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
enum MotionType {
None, // û<><C3BB>
StraightLine,// ֱ<>߻<EFBFBD><DFBB><EFBFBD>
StandardArc, // <20><>׼Բ<D7BC><D4B2>
ParabolaLine,// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Bezier2tArc, // <20><><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Bezier3tArc, // <20><><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Ƕȷ<C7B6><C8B7><EFBFBD>
/// </summary>
enum class MotionRotate {
Horizontal, Vertical
};
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
/// </summary>
struct OrthogonalMotionCommand : public Serializable {
/// <summary>
/// <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><E6B7BD>
/// </summary>
/// <returns></returns>
virtual MotionRotate rotateType() const = 0;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
virtual MotionType motionType() const = 0;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ٷֱ<D9B7>λ<EFBFBD><CEBB>
/// </summary>
/// <param name="percent"></param>
/// <returns></returns>
virtual LonLatAltPos posAtPercent(double percent) = 0;
/// <summary>
/// ָ<><D6B8><EFBFBD>ٷֱ<D9B7>λ<EFBFBD>õ<EFBFBD><C3B5>ٶ<EFBFBD>
/// </summary>
/// <param name="percent"></param>
/// <returns></returns>
virtual double speedAtPercent(double percent) = 0;
/// <summary>
/// ָ<><D6B8><EFBFBD>ٷֱ<D9B7>λ<EFBFBD><CEBB><EFBFBD>ٶȷ<D9B6><C8B7><EFBFBD>
/// </summary>
/// <param name="percent"></param>
/// <returns></returns>
virtual QVector2D speedVectorAtPercent(double percent) = 0;
};
/// <summary>
/// ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct PlatformMotionCommand : public AbstractMessage {
QHash<MotionRotate, std::shared_ptr<OrthogonalMotionCommand>> _motion_set; //<2F>ϳɻ<CFB3><C9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double _arrived_time = 0; // <20>ִ<EFBFBD><D6B4>յ<EFBFBD>ʱ<EFBFBD><CAB1>
double _start_time = 0;
PlatformMotionCommand();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// <20>鿴ָ<E9BFB4><D6B8>Ŀ<EFBFBD><C4BF>ʵ<EFBFBD><CAB5><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT MotionSequencePreviewGet : public AbstractMessage {
MotionSequencePreviewGet();
};
/// <summary>
/// ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT PlatformMotionSequence : public AbstractMessage {
QList<std::shared_ptr<PlatformMotionCommand>> _cmd_sequence;
PlatformMotionSequence();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5> =======================================================
/// <summary>
/// ˮƽֱ<C6BD>߻<EFBFBD><DFBB><EFBFBD>
/// </summary>
struct MESSAGEBASIC_EXPORT HorizontalLineMotionCmd : public OrthogonalMotionCommand {
LonLatPos _lonlat_anchor;// <20><>ʼ<EFBFBD><CABC>
double _azimuth_deg = 0; // <20><>ʼ<EFBFBD><CABC>λ<EFBFBD><CEBB>
double _speed_value = 0;// <20><>ʼ<EFBFBD>ٶ<EFBFBD>
double _accerlate_rate = 0;// <20><><EFBFBD>ٶ<EFBFBD>
HorizontalLineMotionCmd();
// Serializable
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
MotionRotate rotateType() const override;
MotionType motionType() const override;
LonLatAltPos posAtPercent(double percent) override;
};
struct MESSAGEBASIC_EXPORT VerticalLineMotionCmd : public OrthogonalMotionCommand {
};