载入中...
搜索中...
未找到
CombatEnemyAI.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
9#include "common/Identity.h"
10#include "common/SubjectRef.h"
11
12#include <cstdint>
13#include <map>
14#include <string>
15#include <vector>
16
17namespace eve::combat {
18
20enum class CombatEnemyBand : std::uint8_t { Far, Mid, Near };
21
23enum class CombatEnemyPhase : std::uint8_t { Idle, Telegraph, Recover };
24
31
35 std::string ownerId;
37 double nearRadius = 1.8;
38 double midRadius = 4.0;
39 std::uint64_t attackCooldownTicks = 30;
41 std::uint64_t telegraphTicks = 0;
43 std::uint64_t recoverTicks = 0;
44
46 [[nodiscard]] Result<void> validate() const;
47};
48
58public:
60 [[nodiscard]] Result<void> registerEnemy(CombatEnemyDefinition definition);
62 [[nodiscard]] Result<void> unregisterEnemy(SubjectRef subject);
64 void setTargetRuntime(CombatTargetRuntime& targets) noexcept { targets_ = &targets; }
66 void clearTargetRuntime() noexcept { targets_ = nullptr; }
68 [[nodiscard]] Result<void> setPosition(SubjectRef subject, double x, double y, double z);
70 [[nodiscard]] Result<void> setLightAction(SubjectRef subject, LogicalId actionId);
72 [[nodiscard]] Result<std::optional<action::AbilityIntent>> nextIntent(SimulationTick tick) override;
77 [[nodiscard]] Result<std::vector<CombatEnemySteering>> nextSteering(SimulationTick tick) const;
79 [[nodiscard]] CombatEnemyBand band(SubjectRef subject) const;
81 [[nodiscard]] CombatEnemyPhase phase(SubjectRef subject) const;
83 [[nodiscard]] bool isPunishable(SubjectRef subject) const;
84
85private:
86 struct Pose {
87 double x = 0.0;
88 double y = 0.0;
89 double z = 0.0;
90 };
91 struct EnemyState {
92 CombatEnemyDefinition definition;
93 LogicalId lightAction;
94 bool hasAction = false;
95 std::uint64_t lastAttackTick = 0;
96 CombatEnemyPhase phase = CombatEnemyPhase::Idle;
97 std::uint64_t phaseStartTick = 0;
98 };
99
100 std::map<std::string, EnemyState, std::less<>> enemies_;
101 std::map<std::string, Pose, std::less<>> poses_;
102 CombatTargetRuntime* targets_ = nullptr;
103};
104
105} // namespace eve::combat
Shared player and AI ability-intent routing.
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
int subject
Definition AnimSmr.cpp:163
float phase
Definition CaveMesh.cpp:58
3D action-combat character controller.
Soft/hard lock-on ownership for action combat.
#define EVENGINE_API_BACKENDS
Definition Export.h:108
Strong identity values shared by persistence, content and logical-name APIs.
Stable reference to a runtime gameplay subject.
LogicalId definition
SimulationTick tick
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Strong, domain-neutral reference to a runtime subject.
Definition SubjectRef.h:26
Pull boundary shared by player input queues and AI decision adapters.
Deterministic enemy intent source for arena vertical slices.
void clearTargetRuntime() noexcept
Clears target runtime.
void setTargetRuntime(CombatTargetRuntime &targets) noexcept
Borrow lock-on state so the enemy attacks its current target.
Owner-thread lock-on authority.
CombatEnemyBand
Distance band used by the simple enemy brain.
CombatEnemyPhase
Authored move-set phase; Telegraph and Recover are punish windows.
Owning configuration for one enemy fighter.
Result< void > validate() const
Validate subject, owner and positive radii.
action::AbilityGrantId lightGrant
std::uint64_t recoverTicks
Ticks spent recovering after the light attack; 0 returns to Idle immediately.
std::uint64_t telegraphTicks
Ticks spent warning before the light attack; 0 emits immediately.
Owning planar steering suggestion for Mid/Far bands.
Finite 3D combat vector.