Files
qt5-legatus-legacy/Lts/Proxies/Buildings/BuildingControlUnit/VWM/test_read_xml.cpp
T
2026-08-13 18:33:10 +02:00

152 lines
5.1 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Test application for VWM
* $Id$
* $HeadURL$
* $Author$
* Created by Gerlinde Rudolphus, SLSE, 2016-01-25
*/
#include <nglapplication/nglcoreapplication.h>
#include <QDateTime>
#include <QString>
#include <QTimer>
#include "vwm_api.h"
#include "vwm_math.h"
#include "test_read_xml.h"
#include "bcu_xml_reader.h"
#include <NGLLogger/NGLLoggerBootstrap.h>
Test::Test()
: m_api(new BuildingControlUnit::VWM::Api(this))
, m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("BCU.VWM.Test"))
{
connect(m_api, &BuildingControlUnit::VWM::Api::hitResult,
this, &Test::hitResult);
QTimer::singleShot(0, this, &Test::test1);
}
Test::~Test()
{
delete m_api;
}
void Test::hitResult(const BuildingControlUnit::HitResult &result)
{
INFO_LOG(m_logger) << "Hit Result: sensorId = " << result.sensorId
<< ", originatorId = " << result.originatorId
<< ", chargeTypeId = " << result.chargeTypeId
<< ", dmgPercentOld = " << result.damagePercentOld
<< ", dmgPercentNew = " << result.damagePercentNew
<< ", effectSoundId = " << result.effectSoundId
<< ", effectTime = " << QDateTime::fromMSecsSinceEpoch(result.effectTimeMSec).toString(QStringLiteral("hh:mm:ss.zzz"))
<< ", damageState = " << result.damageState
<< ", #rooms = " << result.rooms.size();
}
void Test::test1()
{
// Incoming hit: sensorId = 11003, originatorId = 1, originatorType = OriginatorType::DirectHit, chargeId = 1,
// effectTimeMSec = 1486718229883, position = 2.084/-0.05/3.823, direction = 0/0/-1
// Searching hit position for position 2.084/-0.05/3.823, direction 0/0/-1
//m_api->onHitOptical(QDateTime::currentMSecsSinceEpoch(), 11001, 4711, 1, 0, 0);
const auto bsmMap = m_api->bsmMap();
for (const BuildingControlUnit::Bsm &bsm : bsmMap)
{
const auto rooms = m_api->building().rooms();
const auto hitPos = BuildingControlUnit::VWM::Math::checkBsmPosition(bsm.position, bsm.direction, rooms);
if (hitPos.state != BuildingControlUnit::VWM::HitPosition::State::OuterWall)
{
WARNING_LOG(m_logger) << "Effect on bsm " << bsm.id << " does not hit building ! - position: "
<< bsm.position << ", direction: " << bsm.direction;
}
else if (hitPos.distance < 0)
{
WARNING_LOG(m_logger) << "Effect on bsm " << bsm.id << " results in hit pos behind a wall ("
<< hitPos.distance << "m) instead in front - BSM is not modelled in the correct place: "
<< bsm.position << ", direction: " << bsm.direction << ", roomId which was hit: " << hitPos.roomId;
}
else
{
DEBUG_LOG(m_logger) << "BSM with id " << bsm.id << " looks fine - room which will be hit: " << hitPos.roomId;
}
}
QTimer::singleShot(1000, this, &Test::test2);
}
// 9.19/5.1/2.83, p2 = 9.19/5.1/6.06, p3 = 9.19/9.05/6.06
void Test::test2()
{
m_api->onHitOpticalOC(QDateTime::currentMSecsSinceEpoch(), 2, 0, 7, BuildingControlUnit::DamageState::Destroyed);
QTimer::singleShot(1000, this, &Test::test3);
}
void Test::test3()
{
m_api->onHitOpticalOC(QDateTime::currentMSecsSinceEpoch(), 2, 1, 8, BuildingControlUnit::DamageState::NoDamage);
QTimer::singleShot(1000, this, &Test::test4);
}
void Test::test4()
{
m_api->onHitEcc(2, BuildingControlUnit::DamageState::Destroyed, QVector<int>());
m_api->onHitEcc(2, BuildingControlUnit::DamageState::NoDamage, QVector<int>());
QTimer::singleShot(1000, this, &Test::test5);
}
void Test::test5()
{
m_api->onHitOptical(QDateTime::currentMSecsSinceEpoch(), 1, 4711, 5, 0, 0);
QTimer::singleShot(1000, this, &Test::test6);
}
void Test::test6()
{
// Todo: Correct ChargeTypeID!
// outside
m_api->onHitCes(QDateTime::currentMSecsSinceEpoch(), 112, 42, 55, 66, LtsUtils::QPoint3D(30,-30,0), {});
// inside
m_api->onHitCes(QDateTime::currentMSecsSinceEpoch(), 112, 42, 55, 66, LtsUtils::QPoint3D(2,2,0), QLatin1String(""));
QTimer::singleShot(0, qApp, &QCoreApplication::quit);
}
int main(int argc, char *argv[])
{
NGLCoreApplication app(argc, argv);
app.createLogger("BCU", 1);
QString path = QCoreApplication::applicationDirPath();
QString chargesConfig = path + QLatin1String("/bldg_7_charges.xml");
QString vulConfig = path + QLatin1String("/bldg_7_vulnerability_model.xml");
QString bldConfigFile = path + QLatin1String("/bldg_7_building_config.xml");
if (app.arguments().size() > 1)
{
// assume: /tmp/bldg_7
path = app.arguments().at(1);
chargesConfig = path + QLatin1String("_charges.xml");
vulConfig = path + QLatin1String("_vulnerability_model.xml");
bldConfigFile = path + QLatin1String("_building_config.xml");
}
BuildingControlUnit::BuildingBsmConfig bsmConfig;
BuildingControlUnit::BuildingEgcuConfig egcuConfig;
if (!BuildingControlUnit::parseBuildingConfigXml(bldConfigFile, bsmConfig, egcuConfig))
return 1;
Test *test = new Test;
if (!test->m_api->init(chargesConfig, vulConfig, bsmConfig, true))
{
delete test;
return 1;
}
app.exec();
delete test;
return 0;
}