载入中...
搜索中...
未找到
Navigation.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
7#include "npc_ai/NpcAi.h"
8
9#include <array>
10#include <cstddef>
11#include <cstdint>
12#include <map>
13#include <memory>
14#include <string>
15#include <tuple>
16#include <vector>
17
18namespace eve::npc_ai {
19
23
25enum class NavigationPhase : std::uint8_t { Pending, Moving, Arrived, Unreachable, Cancelled };
26
30 std::array<double, 3> start{};
31 std::array<double, 3> destination{};
32 double agentRadius = 0.5;
33 double acceptanceRadius = 0.25;
34 std::string filter;
35 std::uint64_t requestedTick = 0;
36};
37
44
51public:
53 virtual ~INavigationProvider() = default;
55 [[nodiscard]] virtual Result<NavigationTicket> begin(const NavigationRequest& request) = 0;
57 [[nodiscard]] virtual Result<NavigationProgress> poll(NavigationTicket ticket, std::uint64_t simulationTick) = 0;
63 virtual void abandon(NavigationTicket ticket) noexcept = 0;
64};
65
68public:
70 virtual ~INavigationRequestFactory() = default;
72 [[nodiscard]] virtual Result<NavigationRequest> create(const TaskContext& context, const TaskSpec& task) const = 0;
73};
74
82public:
84 [[nodiscard]] static Result<std::unique_ptr<NavigationTaskService>> create(
85 std::unique_ptr<INavigationProvider> provider, std::unique_ptr<INavigationRequestFactory> requestFactory);
87 ~NavigationTaskService() override;
88
91
94 [[nodiscard]] Result<void> start(const TaskContext& context, const TaskSpec& spec,
95 std::string& inOutMemoryJson) override;
98 [[nodiscard]] Result<TaskStatus> tick(const TaskContext& context, const TaskSpec& spec,
99 std::string& inOutMemoryJson) override;
102 void stop(const TaskContext& context, const TaskSpec& spec, StopReason reason,
103 std::string_view memoryJson) noexcept override;
105 [[nodiscard]] std::size_t outstandingCount() const noexcept { return active_.size(); }
106
107private:
108 struct TaskKey {
109 AgentHandle agent;
110 std::string state;
111 std::string task;
113 friend bool operator<(const TaskKey& left, const TaskKey& right) noexcept {
114 return std::tuple{left.agent, left.state, left.task} < std::tuple{right.agent, right.state, right.task};
115 }
116 };
117
118 NavigationTaskService(std::unique_ptr<INavigationProvider> provider,
119 std::unique_ptr<INavigationRequestFactory> requestFactory);
120 [[nodiscard]] static TaskKey key(const TaskContext& context, const TaskSpec& spec);
121
122 std::unique_ptr<INavigationProvider> provider_;
123 std::unique_ptr<INavigationRequestFactory> requestFactory_;
124 std::map<TaskKey, NavigationTicket> active_;
125};
126
127} // namespace eve::npc_ai
Duration start
#define EVENGINE_API_PLATFORM
Definition Export.h:107
const GltfImportRequest & request
std::uint32_t key
HexVec3 left
HexVec3 right
Move-only, checked operation results for the common layer.
Strong generation-qualified handles for non-ECS runtime registries.
SimulationTick tick
const VegetationPresetContext & context
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Process-local slot identity tagged by the registry that owns it.
Narrow asynchronous pathfinding and locomotion provider contract. @thread Calls are simulation-thread...
Definition Navigation.h:50
virtual Result< NavigationProgress > poll(NavigationTicket ticket, std::uint64_t simulationTick)=0
Polls one ticket without blocking the simulation thread.
virtual void abandon(NavigationTicket ticket) noexcept=0
Unconditionally abandons local/backend work during task teardown.
virtual Result< NavigationTicket > begin(const NavigationRequest &request)=0
Starts an owning backend request and returns its generation ticket.
virtual ~INavigationProvider()=default
Releases INavigationProvider resources.
Builds a typed navigation request from an authored task and current agent projection.
Definition Navigation.h:67
virtual Result< NavigationRequest > create(const TaskContext &context, const TaskSpec &task) const =0
Creates an owning request without mutating provider or world state.
virtual ~INavigationRequestFactory()=default
Releases INavigationRequestFactory resources.
Owned extension point for navigation, animation, combat and gameplay tasks. @thread All calls are sim...
Definition NpcAi.h:195
ITaskService adapter for asynchronous move-to requests.
Definition Navigation.h:81
NavigationTaskService(const NavigationTaskService &)=delete
std::size_t outstandingCount() const noexcept
Number of live backend tickets owned by this adapter.
Definition Navigation.h:105
NavigationTaskService & operator=(const NavigationTaskService &)=delete
NavigationPhase
NavigationPhase public API.
Definition Navigation.h:25
StopReason
StopReason public API.
Definition NpcAi.h:31
NavigationProgress public API.
Definition Navigation.h:39
std::array< double, 3 > desiredVelocity
Definition Navigation.h:41
NavigationRequest public API.
Definition Navigation.h:28
std::array< double, 3 > destination
Definition Navigation.h:31
std::array< double, 3 > start
Definition Navigation.h:30
NavigationTicketTag public API.
Definition Navigation.h:21
TaskContext public API.
Definition NpcAi.h:181
TaskSpec public API.
Definition NpcAi.h:63