载入中...
搜索中...
未找到
TargetingPipeline.cpp
浏览该文件的文档.
15bool insideCone(float px, float py, float apexX, float apexY, float dirX, float dirY, float halfAngle,
33[[nodiscard]] bool matchesFactFilters(const Subject& subject, float distance, const QuerySpec& spec) {
57 [[nodiscard]] TargetingTaskKind kind() const noexcept override { return TargetingTaskKind::Select; }
59 [[nodiscard]] Result<void> execute(TargetingSourceContext& context, std::vector<RankedCandidate>& inout,
80 [[nodiscard]] TargetingTaskKind kind() const noexcept override { return TargetingTaskKind::Filter; }
82 [[nodiscard]] Result<void> execute(TargetingSourceContext& context, std::vector<RankedCandidate>& inout,
97 if (matchesFactFilters(found->second, candidate.distance, step.querySpec)) kept.push_back(candidate);
107 [[nodiscard]] TargetingTaskKind kind() const noexcept override { return TargetingTaskKind::Filter; }
109 [[nodiscard]] Result<void> execute(TargetingSourceContext& context, std::vector<RankedCandidate>& inout,
111 if (!finite(step.coneHalfAngle) || step.coneHalfAngle < 0.f || step.coneHalfAngle > 3.14159265f ||
112 !finite(step.coneRange) || step.coneRange < 0.f || !finite(context.dirX) || !finite(context.dirY) ||
122 if (insideCone(candidate.x, candidate.y, context.origin.x, context.origin.y, context.dirX, context.dirY,
135 [[nodiscard]] TargetingTaskKind kind() const noexcept override { return TargetingTaskKind::Filter; }
137 [[nodiscard]] Result<void> execute(TargetingSourceContext& context, std::vector<RankedCandidate>& inout,
164 [[nodiscard]] TargetingTaskKind kind() const noexcept override { return TargetingTaskKind::Sort; }
166 [[nodiscard]] Result<void> execute(TargetingSourceContext& /*context*/, std::vector<RankedCandidate>& inout,
183 [[nodiscard]] TargetingTaskKind kind() const noexcept override { return TargetingTaskKind::Sort; }
185 [[nodiscard]] Result<void> execute(TargetingSourceContext& /*context*/, std::vector<RankedCandidate>& inout,
197 pipeline.registerTask(std::make_unique<SelectWorldTask>()).ignore("builtin sensing.select.world");
198 pipeline.registerTask(std::make_unique<FilterSpecTask>()).ignore("builtin sensing.filter.spec");
199 pipeline.registerTask(std::make_unique<FilterConeTask>()).ignore("builtin sensing.filter.cone");
201 pipeline.registerTask(std::make_unique<SortDistanceTask>()).ignore("builtin sensing.sort.distance");
202 pipeline.registerTask(std::make_unique<SortTruncateTask>()).ignore("builtin sensing.sort.truncate");
249 DiagnosticCode::InvalidArgument, "targeting task id must not be empty", "task.id", {}, "sensing"));
253 DiagnosticCode::AlreadyExists, "targeting task id already registered", "task.id", {}, "sensing"));
262 DiagnosticCode::InvalidArgument, "targeting preset id must not be empty", "preset.id", {}, "sensing"));
Ordered Select/Filter/Sort task pipeline over SensingWorld candidates.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
void ignore(std::string_view reason={}) const noexcept
Explicitly discard this result after documenting the reason.
Definition Result.h:537
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Owning ranked result; does not assign a primary target.
Definition Sensing.h:134
In-memory task + preset registry and synchronous executor.
Definition TargetingPipeline.h:96
static TargetingPipeline & sharedBuiltins()
Process-local builtins pipeline used by SensingWorld::executePreset. @ownership Process lifetime; cal...
Definition TargetingPipeline.cpp:236
bool hasPreset(std::string_view presetId) const noexcept
Returns whether a preset id is registered.
Definition TargetingPipeline.cpp:280
static TargetingPipeline withBuiltins()
Creates a pipeline with built-in sensing tasks and one coneSelect preset.
Definition TargetingPipeline.cpp:195
Result< void > registerTask(std::unique_ptr< ITargetingTask > task)
Registers a unique task; duplicate ids fail with AlreadyExists.
Definition TargetingPipeline.cpp:241
Result< CandidateQueryResult > executePreset(TargetingSourceContext &context, std::string_view presetId) const
Looks up a preset by id and executes it.
Definition TargetingPipeline.cpp:316
Result< CandidateQueryResult > execute(TargetingSourceContext &context, const TargetingPreset &preset) const
Executes a preset against a source context.
Definition TargetingPipeline.cpp:284
Result< void > registerPreset(TargetingPreset preset)
Registers or replaces a preset after validating task ids exist.
Definition TargetingPipeline.cpp:259
static Result< WorldPoint > world2D(float x, float y)
Creates a finite 2D world point.
Definition Targeting.cpp:128
Definition RTSSystems.h:257
@ DistanceAscending
std::variant< WorldPoint, GridPoint > TargetLocation
Either a world point or a grid point, with the tag retained.
Definition Targeting.h:198
@ TruncateToMax
Keep the best maxCount candidates after sorting (legacy circle/box limit).
std::vector< RuntimeTensor > execute(const Node &n, const std::vector< const RuntimeTensor * > &in, OnnxCompute *compute)
Execute.
Definition OnnxExecute.cpp:207
@ InvalidArgument
@ NotFound
@ AlreadyExists
@ Unsupported
@ Applied
Named ordered list of targeting tasks.
Definition TargetingPipeline.h:49
std::vector< TargetingTaskStep > steps
Definition TargetingPipeline.h:51
Runtime source for one pipeline execution.
Definition TargetingPipeline.h:60
Per-step parameters for a preset entry.
Definition TargetingPipeline.h:40
std::uint32_t truncateCount
Definition TargetingPipeline.h:45