载入中...
搜索中...
未找到
TargetingPipeline.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
14#include "sensing/Sensing.h"
15#include "sensing/Targeting.h"
16
17#include <cstdint>
18#include <limits>
19#include <map>
20#include <memory>
21#include <string>
22#include <string_view>
23#include <vector>
24
25namespace eve::sensing {
26
28enum class TargetingTaskKind : std::uint8_t {
29 Select,
30 Filter,
31 Sort,
32};
33
41 std::string taskId;
43 float coneHalfAngle = 0.f;
44 float coneRange = 0.f;
45 std::uint32_t truncateCount = std::numeric_limits<std::uint32_t>::max();
46};
47
50 std::string id;
51 std::vector<TargetingTaskStep> steps;
52};
53
61 SensingWorld* world = nullptr;
63 float dirX = 1.f;
64 float dirY = 0.f;
65};
66
74public:
76 virtual ~ITargetingTask() = default;
77
79 [[nodiscard]] virtual std::string_view id() const noexcept = 0;
81 [[nodiscard]] virtual TargetingTaskKind kind() const noexcept = 0;
86 [[nodiscard]] virtual Result<void> execute(TargetingSourceContext& context, std::vector<RankedCandidate>& inout,
87 const TargetingTaskStep& step) const = 0;
88};
89
97public:
99 TargetingPipeline() = default;
100 // Class-level dllexport instantiates every member; `tasks_` is a map of
101 // unique_ptr, so the implicit copy assignment would be a hard C2280.
108
110 [[nodiscard]] static TargetingPipeline withBuiltins();
111
116 [[nodiscard]] static TargetingPipeline& sharedBuiltins();
117
119 [[nodiscard]] Result<void> registerTask(std::unique_ptr<ITargetingTask> task);
121 [[nodiscard]] Result<void> registerPreset(TargetingPreset preset);
123 [[nodiscard]] bool hasPreset(std::string_view presetId) const noexcept;
124
130 const TargetingPreset& preset) const;
136 std::string_view presetId) const;
137
138private:
139 std::map<std::string, std::unique_ptr<ITargetingTask>, std::less<>> tasks_;
140 std::map<std::string, TargetingPreset, std::less<>> presets_;
141};
142
143} // namespace eve::sensing
#define EVENGINE_API_PLATFORM
Definition Export.h:107
Coordinate-safe targeting protocol shared by sensing and gameplay adapters.
float step
Definition TreeMesh.cpp:314
const VegetationPresetContext & context
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Pluggable Select/Filter/Sort task.
virtual ~ITargetingTask()=default
Releases ITargetingTask resources.
virtual Result< void > execute(TargetingSourceContext &context, std::vector< RankedCandidate > &inout, const TargetingTaskStep &step) const =0
Runs the task against the working candidate list.
virtual TargetingTaskKind kind() const noexcept=0
Task kind used for diagnostics.
virtual std::string_view id() const noexcept=0
Stable task id used by presets (e.g. "sensing.filter.cone").
Gameplay-facing 2D candidate query service; it never values or selects targets.
Definition Sensing.h:151
In-memory task + preset registry and synchronous executor.
TargetingPipeline()=default
Creates an empty pipeline.
TargetingPipeline(const TargetingPipeline &)=delete
TargetingPipeline & operator=(const TargetingPipeline &)=delete
TargetingPipeline(TargetingPipeline &&)=default
Targeting pipeline.
TargetingPipeline & operator=(TargetingPipeline &&)=default
Operator =.
TargetingTaskKind
Task role inside a TargetingPreset.
World2D origin used for range tests and distance sorting.
Definition Sensing.h:117
Configurable candidate query against SensingWorld.
Definition Sensing.h:98
One ranked candidate produced by SensingWorld::query.
Definition Sensing.h:124
Named ordered list of targeting tasks.
std::vector< TargetingTaskStep > steps
Runtime source for one pipeline execution.
Per-step parameters for a preset entry.