SimsWorld/MessageBasic/motion_access.h

193 lines
4.9 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "messagebasic.h"
/// <summary>
/// 指定航路机动模式
/// </summary>
enum class NavigateDriveMode {
Cruise, // 巡航模式,长途奔袭模式
FullSpeed,// 全速模式,战斗机动
ReachStop, // 停驻模式
};
/// <summary>
/// 依照指定名称路径机动
/// </summary>
struct MESSAGEBASIC_EXPORT NavigateWithRoute : public AbstractMessage {
QString _route_name; // 规划航线名称
NavigateDriveMode _drive_mode; // 驱动模式
NavigateWithRoute();
// Serializable
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 平台机动命令机体坐标系主轴为Y向右为X向上为Z
/// </summary>
struct MESSAGEBASIC_EXPORT PlatformMotionCommand : public AbstractMessage {
PlatformMotionCommand(const QString &nm);
/// <summary>
/// 机动起始时间
/// </summary>
/// <returns></returns>
virtual double startTimepoint() const = 0;
/// <summary>
/// 消耗时间
/// </summary>
/// <returns></returns>
virtual double timeExpend() const = 0;
/// <summary>
/// 指定时间点的相对位置
/// </summary>
/// <param name="time"></param>
/// <returns>机体坐标系</returns>
virtual QVector3D posAtTimeSpan(double time) const = 0;
/// <summary>
/// 指定时间点的速度矢量
/// </summary>
/// <param name="time"></param>
/// <returns>机体坐标系</returns>
virtual QVector3D speedAtTimeSpan(double time) const = 0;
};
/// <summary>
/// 推演指定时间点机动状态
/// </summary>
struct MESSAGEBASIC_EXPORT MotionDeduceRequest : public AbstractMessage {
double _target_time = 0;
MotionDeduceRequest();
// Serializable
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 查看指定目标实体的机动指令序列
/// </summary>
struct MESSAGEBASIC_EXPORT MotionSequencePreviewGet : public AbstractMessage {
MotionSequencePreviewGet();
std::shared_ptr<Serializable> newDefault() const override;
};
/// <summary>
/// 平台机动命令序列
/// </summary>
struct MESSAGEBASIC_EXPORT PlatformMotionSequence : public AbstractMessage {
QList<std::shared_ptr<PlatformMotionCommand>> _cmd_sequence;
PlatformMotionSequence();
// Serializable
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// 机动命令实现 =======================================================
/// <summary>
/// 直线机动
/// </summary>
struct MESSAGEBASIC_EXPORT StrightLineMotion : public PlatformMotionCommand {
/// <summary>
/// 起始时间
/// </summary>
double _start_time = 0;
/// <summary>
/// 机动速度m/s
/// </summary>
double _speed_motion = 0;
/// <summary>
/// 加速度m/s^2
/// </summary>
double _accerlate_rates = 0;
/// <summary>
/// 路径长度
/// </summary>
double _length_total = 0;
StrightLineMotion();
double startTimepoint() const override;
double timeExpend() const override;
QVector3D posAtTimeSpan(double time) const override;
QVector3D speedAtTimeSpan(double time) const override;
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
#include <QVector3D>
/// <summary>
/// 基于机体坐标系的水平标准圆弧机动
/// </summary>
struct MESSAGEBASIC_EXPORT HorizontalArcMotion : public PlatformMotionCommand {
/// <summary>
/// 起始时间
/// </summary>
double _start_time = 0;
/// <summary>
/// 转弯圆心,<xpos, ypos, 0>
/// </summary>
QVector3D _center_point;
/// <summary>
/// 弧线转角,°
/// </summary>
double _rotate_deg = 0;
/// <summary>
/// 机动速度m/s
/// </summary>
double _speed_motion = 0;
HorizontalArcMotion();
double startTimepoint() const override;
double timeExpend() const override;
QVector3D posAtTimeSpan(double time) const override;
QVector3D speedAtTimeSpan(double time) const override;
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// 基于机体坐标系的垂直标准圆弧机动
/// </summary>
struct MESSAGEBASIC_EXPORT VerticalArcMotion : public PlatformMotionCommand {
/// <summary>
/// 起始时间
/// </summary>
double _start_time = 0;
/// <summary>
/// 转弯圆心,<0, ypos, zpos>
/// </summary>
QVector3D _center_point;
/// <summary>
/// 弧线转角,°
/// </summary>
double _rotate_deg = 0;
/// <summary>
/// 机动速度m/s
/// </summary>
double _speed_motion = 0;
VerticalArcMotion();
double startTimepoint() const override;
double timeExpend() const override;
QVector3D posAtTimeSpan(double time) const override;
QVector3D speedAtTimeSpan(double time) const override;
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};