depend on factory data instead of BuildingSystem in the AI path

This commit is contained in:
2026-08-05 06:44:49 +02:00
parent 46932e4abf
commit 0408336cf9
17 changed files with 238 additions and 126 deletions

View File

@@ -1,4 +1,5 @@
#include "DeliverScrapEvaluator.h"
#include "FactoryQueries.h"
#include <unordered_map>
@@ -12,7 +13,7 @@
#include "PositionComponent.h"
#include "tracing.h"
void DeliverScrapEvaluator::evaluate(EntityAdmin& admin, const BuildingSystem& buildings)
void DeliverScrapEvaluator::evaluate(EntityAdmin& admin, const FactoryState& state)
{
TRACE();
const std::unordered_map<entt::entity, CargoState> cargoByShip = buildCargoByShip(admin);
@@ -34,7 +35,7 @@ void DeliverScrapEvaluator::evaluate(EntityAdmin& admin, const BuildingSystem& b
if (!deliver.deliveryBay.has_value())
{
const Building* bay =
buildings.findNearestBuilding(pos.value, BuildingType::SalvageBay);
findNearestBuilding(state, pos.value, BuildingType::SalvageBay);
if (bay) { deliver.deliveryBay = bay->id; }
}

View File

@@ -1,12 +1,13 @@
#pragma once
#include "FactoryQueries.h"
class EntityAdmin;
class BuildingSystem;
// Scores high only when the ship's cargo is full, and assigns the nearest
// SalvageBay as the delivery destination.
class DeliverScrapEvaluator
{
public:
void evaluate(EntityAdmin& admin, const BuildingSystem& buildings);
void evaluate(EntityAdmin& admin, const FactoryState& state);
};

View File

@@ -1,4 +1,5 @@
#include "DeliverScrapExecutor.h"
#include "FactoryQueries.h"
#include <QVector2D>
@@ -12,7 +13,7 @@
#include "SelectedBehaviorComponent.h"
#include "tracing.h"
void DeliverScrapExecutor::execute(EntityAdmin& admin, const BuildingSystem& buildings)
void DeliverScrapExecutor::execute(EntityAdmin& admin, const FactoryState& state)
{
TRACE();
admin.forEach<DeliverScrapBehavior, SelectedBehaviorComponent, PositionComponent,
@@ -26,7 +27,7 @@ void DeliverScrapExecutor::execute(EntityAdmin& admin, const BuildingSystem& bui
QVector2D dest = pos.value;
if (deliver.deliveryBay.has_value())
{
const Building* bay = buildings.findBuilding(*deliver.deliveryBay);
const Building* bay = findBuilding(state, *deliver.deliveryBay);
if (bay)
{
dest = QVector2D(bay->anchor.x() + bay->footprint.width() / 2.0f,

View File

@@ -1,12 +1,13 @@
#pragma once
#include "FactoryQueries.h"
class EntityAdmin;
class BuildingSystem;
// Moves a ship toward its delivery bay when DeliverScrap is the winning
// behavior. Never decrements cargo — SalvagerSystem performs the delivery.
class DeliverScrapExecutor
{
public:
void execute(EntityAdmin& admin, const BuildingSystem& buildings);
void execute(EntityAdmin& admin, const FactoryState& state);
};