Files
torstenandCopilot b774f4035c Qt6 Migration: DDS-Stubs, Logger-Fixes, Export-Header Korrekturen
- NGL_ADD_LIBRARY2: 87 CMakeLists.txt konvertiert für Export-Header Generierung
- 44 Export-Header Include-Pfade korrigiert (_export.h)
- 81 DDS-Stub-Header generiert (*_dtc.h, *_fts.h, *_dts.h, *_ftc.h)
- INGLLogger: Duplikat gelöscht, m_logger Member entfernt, variadische Makros
- Q_FUNC_INFO Redefinition behoben (Qt6 definiert bereits)
- FATAL_LOG Makro hinzugefügt
- InfrastructureManagement DDS-Stubs (ism.hpp, ism_enums.hpp, ism_ftc.h)
- FilterManagement DDS-Stubs (flt_ftc.h, flt_dts.h)
- AreaEffectSimulation DDS-Stubs (aes.hpp, aes_enums.hpp)
- SymbolAppearance Klasse vollständig definiert mit content() Methode
- BuildingComponentFilter Klasse definiert mit Copy-Konstruktor
- Ftc Factory: nullptr Return (abstract class)
- AesFilter Klasse in aes.hpp hinzugefügt
- Dtc Klasse in ppm.hpp mit participantChanged Signal
- AesType Enum: alle 15 At* Werte definiert
- AesEffectState_def: EsReceived hinzugefügt
- DataModification Enum: eAdded/eModified/eRemoved
- function_reply_object.h → core_types.h Include-Pfad (72 Dateien)
- Enum-Class-Streaming Template-Operator in INGLLogger.h
- ism_mounting_point.h: QImage → QtGui/QImage, QGuiApplication/QScreen
- ism_data_plugin_interface.h: QSet Include, Include-Reihenfolge
- QRegExp → QRegularExpression in tpm_js_parser.cpp
- .underlying() Aufrufe zu direktem Enum-Vergleich korrigiert
- Include-Pfade: aes.hpp in symbol_appearance_settings_impl.h und aes_display_filter_impl.h

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-08-19 06:06:24 +02:00

193 lines
5.9 KiB
C++
Executable File

/**
* @RDE_HEADER@
* GeoPairing
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include "../logger.h"
#include <CentralEffectSimulation/handler_participant.h>
#include <QString>
#include <QMap>
#include <FW_Ballistic/BallisticService.hpp>
#include <FW_Ballistic/AmmunitionTypes.hpp>
#include <GeoPairingImpl/GeoPairingImplAirTarget.hpp>
#include <iostream>
#include <memory>
namespace ZSSIWI
{
class AirTargetsInt;
class AutomaticCannonInt;
class GeoPairingDataInt;
class MortarHowitzerInt;
class SurfaceToAirInt;
}
class GeoPairing
{
public:
enum class ElevationError
{
NoError = 0,
ToHigh = 1,
ToLow = 2,
BelowZero = 3
};
struct FireToAircraft
{
qint64 impactTime = 0;
int participantIdTarget = 0;
int ammunitionTypeId = 0;
int equipmentNumberGunner = 0;
bool hit = false;
};
struct ReportTarget
{
QByteArray sendData;
int playerId = 0;
bool send = false;
};
struct SingleFireToCtas
{
qint64 impactTime = 0; int playerId = 0;
int duration = 0;
double impactPositionLat = 0.0;
double impactPositionLong = 0.0;
N_Ballistic::ammunitionTypeIndirectFire ammunitionType = N_Ballistic::UNKNOWN;
bool hit = false;
};
struct AreaFireToCtas
{
int playerId = 0;
qint64 impactTime = 0;
double duration = 0.0;
double impactPositionLat = 0.0;
double impactPositionLong = 0.0;
double fieldWidth = 0.0;
double fieldLength = 0.0;
double heading = 0.0;
int nbrRounds = 0;
N_Ballistic::ammunitionTypeIndirectFire ammunitionType = N_Ballistic::UNKNOWN;
N_Ballistic::ammunitionTypeOSAG ammunitionTypeOSAG = N_Ballistic::UNKNOWN_OSAG;
bool hit = false;
};
private:
struct GeoPCharge
{
int chargeId = 0;
double minEleval = -1.0;
double maxEleval = -1.0;
// QHash<weaponTypeId, allowed yes/no>
QMap<int, bool> isAllowed;
ElevationError checkElevation(double elevation) const
{
if (elevation < 0)
return ElevationError::BelowZero;
if (elevation < minEleval)
return ElevationError::ToLow;
if (elevation > maxEleval)
return ElevationError::ToHigh;
return ElevationError::NoError;
}
// Check if Elevation and Charge is correct, return _false_ if errors accure and
// change the Error integers
bool checkArty(int weaponTypeId, double elevation, ElevationError &eleError, int &chargeError) const
{
eleError = checkElevation(elevation);
bool ret = (eleError == ElevationError::NoError);
if (!isAllowed.value(weaponTypeId)) //Falls wert nicht vorhanden immer Falsche Kombi
{
chargeError = 1;
ret = false;
}
else
chargeError = 0;
return ret;
}
GeoPCharge(int _chargeId, double _minEleval, double _maxEleval, const QMap<int, bool> &_isAllowed)
: chargeId(_chargeId), minEleval(_minEleval), maxEleval(_maxEleval), isAllowed(_isAllowed)
{}
GeoPCharge() = default;
};
using GeoPMunitonMap = QMap<int, QMap<int, GeoPCharge> >;
public:
Q_DISABLE_COPY(GeoPairing)
explicit GeoPairing(const std::shared_ptr<N_Ballistic::BallisticService> &ballisticService);
bool geoPairingData(const std::shared_ptr<N_Ballistic::BallisticService> &ballisticService,
int equipmentNumber,
qint64 time,
double positionLat,
double positionLon,
const QByteArray &transparentDataAr,
const QHash<int, CentralEffectSimulation::HandlerParticipant::CesParticipantData> &aircrafts);
FireToAircraft fireToAircraft() const { return m_fireToAircraft; }
SingleFireToCtas singleFireToCtas() const { return m_singleFireToCtas; }
AreaFireToCtas areaFireToCtas() const { return m_areaFireToCtas; }
ReportTarget reportTarget() const { return m_reportTarget; }
// sets the global meteo conditions
// winddirection in degrees -+180
// windspeed in m/s
// temperature in degrees
// pressure default 1013
static void setMeteo(double winddirection, double windspeed, double temperature, double pressure);
//qint64 getImpactTime() { return m_ImpactTime;}
//double getImpactPositionLat() { return m_ImpactPositionLat;}
//double getImpactPositionLon() { return m_ImpactPositionLon;}
//int getAmmunitionType() { return m_AmmunitionType;}
//N_Ballistic::ammunitionTypeOSAG getAmmunitionTypeOSAG() { return m_AmmunitionTypeOSAG;}
//int getDeviceID() { return m_DeviceID;}
private:
//ZSSIWI::AirTargetsInt *m_airTargets;
//ZSSIWI::AutomaticCannonInt* m_automaticCannon;
//ZSSIWI::GeoPairingDataInt* m_geoPairingData;
//ZSSIWI::MortarHowitzerInt *m_mortarHowitzer;
//ZSSIWI::SurfaceToAirInt* m_surfaceToAir;
QString m_konfigPath; // Pfad fuer Konfigurationsverzeichnis
int m_equipmentNumber = -1;
qint64 m_Time = 0;
double m_PositionLat = 0;
double m_PositionLon = 0;
double m_PositionHeight = 0;
GeoPMunitonMap m_geoPMunMap;
std::shared_ptr<N_Ballistic::BallisticService> m_ballisticService; ///< Pointer Ballistic Service
//N_Ballistic::ammunitionTypeOSAG m_AmmunitionTypeOSAG;
int m_DeviceID = 0;
FireToAircraft m_fireToAircraft;
SingleFireToCtas m_singleFireToCtas;
AreaFireToCtas m_areaFireToCtas;
ReportTarget m_reportTarget;
void calculateAirFire(const QByteArray &transparentData,
const QHash<int, CentralEffectSimulation::HandlerParticipant::CesParticipantData> &aircrafts);
void calculateAreaFire(const QByteArray &transparentData,
const std::shared_ptr<N_Ballistic::BallisticService> &ballisticService);
void calculateSingleFire(const QByteArray &transparentData,
const std::shared_ptr<N_Ballistic::BallisticService> &ballisticService);
bool searchAirTarget(double a_elevation, double azimuth, int &playerId, uint64_t &impactTime);
void readAmmunitionIni();
};