lift the shared Centroid helper into ai/Centroid.h
AdvanceExecutor and StandbyExecutor each carried a verbatim copy of the struct in an anonymous namespace; it now sits next to OrbitMath.h. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GH8ZMRY3vhxxXcaUxBqxkk
This commit is contained in:
@@ -5,6 +5,7 @@ SET(HDRS
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/ai/AttackEvaluator.h
|
${CMAKE_CURRENT_SOURCE_DIR}/ai/AttackEvaluator.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/ai/AttackExecutor.h
|
${CMAKE_CURRENT_SOURCE_DIR}/ai/AttackExecutor.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/ai/BehaviorTargeting.h
|
${CMAKE_CURRENT_SOURCE_DIR}/ai/BehaviorTargeting.h
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/ai/Centroid.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/ai/DeliverScrapEvaluator.h
|
${CMAKE_CURRENT_SOURCE_DIR}/ai/DeliverScrapEvaluator.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/ai/DeliverScrapExecutor.h
|
${CMAKE_CURRENT_SOURCE_DIR}/ai/DeliverScrapExecutor.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/ai/RallyEvaluator.h
|
${CMAKE_CURRENT_SOURCE_DIR}/ai/RallyEvaluator.h
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "AdvanceBehavior.h"
|
#include "AdvanceBehavior.h"
|
||||||
#include "BehaviorKind.h"
|
#include "BehaviorKind.h"
|
||||||
|
#include "Centroid.h"
|
||||||
#include "EntityAdmin.h"
|
#include "EntityAdmin.h"
|
||||||
#include "FactionComponent.h"
|
#include "FactionComponent.h"
|
||||||
#include "HealthComponent.h"
|
#include "HealthComponent.h"
|
||||||
@@ -16,28 +17,6 @@
|
|||||||
#include "StationBodyComponent.h"
|
#include "StationBodyComponent.h"
|
||||||
#include "tracing.h"
|
#include "tracing.h"
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
// Accumulates positions to produce their centroid (the center between them).
|
|
||||||
struct Centroid
|
|
||||||
{
|
|
||||||
QVector2D sum;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
void add(const QVector2D& point)
|
|
||||||
{
|
|
||||||
sum += point;
|
|
||||||
count += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<QVector2D> value() const
|
|
||||||
{
|
|
||||||
if (count == 0) { return std::nullopt; }
|
|
||||||
return sum / static_cast<float>(count);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void AdvanceExecutor::execute(EntityAdmin& admin)
|
void AdvanceExecutor::execute(EntityAdmin& admin)
|
||||||
{
|
{
|
||||||
TRACE();
|
TRACE();
|
||||||
|
|||||||
26
src/lib/ecs/system/ai/Centroid.h
Normal file
26
src/lib/ecs/system/ai/Centroid.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
|
#include <QVector2D>
|
||||||
|
|
||||||
|
// Accumulates positions to produce their centroid (the center between them).
|
||||||
|
// Shared by the behavior executors that steer toward the middle of a group of
|
||||||
|
// entities (AdvanceExecutor: defence stations; StandbyExecutor: friendly ships).
|
||||||
|
struct Centroid
|
||||||
|
{
|
||||||
|
QVector2D sum;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
void add(const QVector2D& point)
|
||||||
|
{
|
||||||
|
sum += point;
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::optional<QVector2D> value() const
|
||||||
|
{
|
||||||
|
if (count == 0) { return std::nullopt; }
|
||||||
|
return sum / static_cast<float>(count);
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <QVector2D>
|
#include <QVector2D>
|
||||||
|
|
||||||
#include "BehaviorKind.h"
|
#include "BehaviorKind.h"
|
||||||
|
#include "Centroid.h"
|
||||||
#include "EntityAdmin.h"
|
#include "EntityAdmin.h"
|
||||||
#include "FactionComponent.h"
|
#include "FactionComponent.h"
|
||||||
#include "HealthComponent.h"
|
#include "HealthComponent.h"
|
||||||
@@ -16,28 +17,6 @@
|
|||||||
#include "StationBodyComponent.h"
|
#include "StationBodyComponent.h"
|
||||||
#include "tracing.h"
|
#include "tracing.h"
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
// Accumulates positions to produce their centroid (the center between them).
|
|
||||||
struct Centroid
|
|
||||||
{
|
|
||||||
QVector2D sum;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
void add(const QVector2D& point)
|
|
||||||
{
|
|
||||||
sum += point;
|
|
||||||
count += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<QVector2D> value() const
|
|
||||||
{
|
|
||||||
if (count == 0) { return std::nullopt; }
|
|
||||||
return sum / static_cast<float>(count);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void StandbyExecutor::execute(EntityAdmin& admin)
|
void StandbyExecutor::execute(EntityAdmin& admin)
|
||||||
{
|
{
|
||||||
TRACE();
|
TRACE();
|
||||||
|
|||||||
Reference in New Issue
Block a user