Files
qt5-legatus-legacy/Lts/Plugins/TargetManagement/Gui/ShootbackTargetConfiguration/tgt_telegrams.h
T
2026-08-13 18:33:10 +02:00

174 lines
4.2 KiB
C++
Executable File

/**
* Telegrams toJSON
* $Id$
* $HeadURL$
* $Author$
* Created by Norbert Thoden, NLE, 2020-06-29
*/
#pragma once
#include <cstdint>
#include <exception>
#include <QJsonObject>
#include <QString>
#include <Services/TargetManagement/tgt_dtc.h>
namespace TargetManagement
{
class JsonException final : public std::exception
{
public:
JsonException(const QJsonObject &obj, const QString &key);
const char *what() const noexcept override { return m_what.data(); }
private:
QJsonObject m_obj;
QString m_key;
QByteArray m_what;
};
template <typename T>
struct Constraints;
//
// Enumerations
//
//
// Structs
//
// ------------------------------------------------------------------
// ------------------------------------------------------------------
struct Target
{
virtual ~Target() = default;
virtual QJsonObject toJson() const = 0;
virtual QString type() const = 0;
};
struct GeoPosition2D
{
GeoPosition2D() = default;
explicit GeoPosition2D(const Core::GeoPosition2D pos)
: lat(pos.lat()), lon(pos.lon()) {}
double lat = 0; // in degree, WGS-84
double lon = 0; // in degree, WGS-84
static GeoPosition2D fromJson(const QJsonObject &obj);
QJsonObject toJson() const;
// Core::GeoPosition2D toCoreGeoPosition2D() const { return {lon, lat}; }
};
// ------------------------------------------------------------------
template <typename T>
struct TargetBaseTmpl : Target
{
QString type() const override final { return Constraints<T>::type(); }
};
// ------------------------------------------------------------------
struct ShootbackTargetData final : public TargetBaseTmpl<ShootbackTargetData>
{
// use simple members and not generated dds struct to be independent
int32_t id{-1};
int32_t targetDataId{-1};
QString name;
int32_t targetParticipantEquipmentNumber{-1};
bool activateLaserDesignation{false};
bool permanentInstalledTarget{false};
bool activateLights{false};
int32_t hitsToKill{-1};
bool activatePopupAutomatic{false};
// conversion functions
QJsonObject toJson() const override;
static ShootbackTargetData fromJson(const QJsonObject &obj);
};
template <> struct Constraints<ShootbackTargetData>
{
static QString type() { return QStringLiteral("ShootbackTargetData"); }
};
// ------------------------------------------------------------------
struct ShootbackAreaData final : public TargetBaseTmpl<ShootbackAreaData>
{
// use simple members and not generated dds struct to be independent
int32_t id{-1};
QString name;
GeoPosition2D position;
double width{.0};
double height{.0};
// conversion functions
QJsonObject toJson() const override;
static ShootbackAreaData fromJson(const QJsonObject &obj);
};
template <> struct Constraints<ShootbackAreaData>
{
static QString type() { return QStringLiteral("ShootbackAreaData"); }
};
// ------------------------------------------------------------------
struct ShootbackConfigurationData final : public TargetBaseTmpl<ShootbackConfigurationData>
{
// use simple members and not generated dds struct to be independent
int interval1{-1};
bool flash1{false};
TargetManagement::Effect effect1{TargetManagement::Effect_def::NearMiss};
int interval2{-1};
bool flash2{false};
TargetManagement::Effect effect2{TargetManagement::Effect_def::NearMiss};
// conversion functions
QJsonObject toJson() const override;
static ShootbackConfigurationData fromJson(const QJsonObject &obj);
};
template <> struct Constraints<ShootbackConfigurationData>
{
static QString type() { return QStringLiteral("ShootbackConfigurationData"); }
};
// ------------------------------------------------------------------
struct TargetAreaAssignmentData final : public TargetBaseTmpl<TargetAreaAssignmentData>
{
// use simple members and not generated dds struct to be independent
int32_t id{-1};
QString name;
int areaId;
int targetParticipantId;
ShootbackConfigurationData configuration;
bool isActive{false};
// conversion functions
QJsonObject toJson() const override;
static TargetAreaAssignmentData fromJson(const QJsonObject &obj);
};
template <> struct Constraints<TargetAreaAssignmentData>
{
static QString type() { return QStringLiteral("TargetAreaAssignmentData"); }
};
}