1#include "BeamGroupComponent.h"
4#include "ExtensionRegistry.h"
6#include "DataSetComponent.h"
7#include "DataRefComponent.h"
8#include "../Systems/DataSetSystem.h"
12using namespace Cogs::Core::EchoSounder;
14void BeamGroupComponent::registerType()
18 {
"SingleBeam", Topology::SingleBeam },
19 {
"VerticalPlane", Topology::VerticalPlane },
20 {
"TransversalPlane", Topology::TransversalPlane },
21 {
"ConeSector", Topology::ConeSector },
22 {
"Grid", Topology::Grid },
23 {
"Cone", Topology::Cone }
25 TypeDatabase::createType<Topology>().setEnumerators(enumerators);
28 Field(
Name(
"topology"), &BeamGroupComponent::topology),
29 Field(
Name(
"majorCount"), &BeamGroupComponent::majorCount),
30 Field(
Name(
"minorCount"), &BeamGroupComponent::minorCount),
31 Field(
Name(
"beams"), &BeamGroupComponent::beams)
34 Method(
Name(
"initialize"), &BeamGroupComponent::initialize),
35 Method(
Name(
"update"), &BeamGroupComponent::update),
37 DynamicComponent::registerDerivedType<BeamGroupComponent>()
42void BeamGroupComponent::initialize(
Context * context)
44 this->context = context;
47void BeamGroupComponent::update()
49 auto * dataRefComp = getComponent<DataRefComponent>();
54 if (!dataRefComp)
goto insane;
55 if (!dataRefComp->data)
goto insane;
58 if (!dataComp)
goto insane;
60 dataSystem = ExtensionRegistry::getExtensionSystem<DataSetSystem>(context);
61 if (!dataSystem)
goto insane;
63 auto& dataData = dataSystem->getData(dataComp);
66 (dataComp_ != dataComp_) ||
67 (dataConfGen != dataData.configGen);
71 changed = changed || (majorCount != majorCount_);
72 changed = changed || (minorCount != minorCount_);
73 changed = changed || (beams.size() != beams_.size());
75 for (
size_t i = 0; i < beams.size() && !changed; i++) {
76 changed = changed || (beams[i] != beams_[i]);
83 dataComp_ = dataComp_;
84 dataConfGen = dataData.configGen;
85 majorCount_ = majorCount;
86 minorCount_ = minorCount;
89 if ((majorCount == 0) || (minorCount == 0))
goto insane;
93 case Cogs::Core::EchoSounder::Topology::SingleBeam:
94 if ((majorCount != 1) || (minorCount != 1))
goto insane;
97 case Cogs::Core::EchoSounder::Topology::VerticalPlane:
98 if (majorCount != 1)
goto insane;
101 case Cogs::Core::EchoSounder::Topology::TransversalPlane:
102 if (majorCount != 1)
goto insane;
105 case Cogs::Core::EchoSounder::Topology::ConeSector:
106 if (majorCount != 1)
goto insane;
109 case Cogs::Core::EchoSounder::Topology::Grid:
112 case Cogs::Core::EchoSounder::Topology::Cone:
113 if (majorCount != 1)
goto insane;
117 assert(
false &&
"Unhandled case");
120 const auto& config = dataData.persistent->config;
122 if (majorCount * minorCount != beams.size())
goto insane;
123 for (
auto ix : beams) {
124 if (config.beamCount <= ix)
goto insane;
136 for (
size_t i = 0; i < beams.size(); i++) {
147 if (majorCount == 1) {
ComponentType * getComponent() const
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Field definition describing a single data member of a data structure.
Simple method definition.
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
Contains reflection support.
bool minorClosed
Maintained by BeamGroupComponent::update.
std::vector< float > directionY
Subset of directions, maintained by BeamGroupComponent::update.
float minDistance
Along ray, maintained by BeamGroupComponent::update.
float maxBeamWidthY
Maintained by BeamGroupComponent::update.
float maxBeamWidthX
Maintained by BeamGroupComponent::update.
float minDirectionY
Maintained by BeamGroupComponent::update.
float minDirectionX
Maintained by BeamGroupComponent::update.
std::vector< float > directionX
Subset of directions, maintained by BeamGroupComponent::update.
float maxDirectionX
Maintained by BeamGroupComponent::update.
float maxDistance
Along ray, maintained by BeamGroupComponent::update.
float maxDirectionY
Maintained by BeamGroupComponent::update.
Represents an unique name.