载入中...
搜索中...
未找到
CombatEnemyAI.cpp
浏览该文件的文档.
24 if (!std::isfinite(nearRadius) || nearRadius <= 0.0 || !std::isfinite(midRadius) || midRadius < nearRadius)
28 Diagnostic::error(DiagnosticCode::InvalidArgument, "enemy attack cooldown must be positive", "attackCooldownTicks"));
48Result<void> CombatEnemyIntentSource::setPosition(SubjectRef subject, double x, double y, double z) {
69Result<std::optional<action::AbilityIntent>> CombatEnemyIntentSource::nextIntent(SimulationTick tick) {
89 enemy.phase = enemy.definition.recoverTicks > 0 ? CombatEnemyPhase::Recover : CombatEnemyPhase::Idle;
106 const double dist = distance3(selfPose->second.x, selfPose->second.y, selfPose->second.z, targetPose->second.x,
109 if (enemy.lastAttackTick != 0 && tick.value() < enemy.lastAttackTick + enemy.definition.attackCooldownTicks)
122Result<std::vector<CombatEnemySteering>> CombatEnemyIntentSource::nextSteering(SimulationTick) const {
137 const double dist = distance3(selfPose->second.x, selfPose->second.y, selfPose->second.z, targetPose->second.x,
141 CombatVector3 delta{targetPose->second.x - selfPose->second.x, 0.0, targetPose->second.z - selfPose->second.z};
150 return Result<std::vector<CombatEnemySteering>>::success(std::move(result), Status::success(StatusCode::Applied));
Minimal ring-based combat enemy intent source.
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
Human-readable, scoped identifier in the form namespace:name.
Definition Identity.h:411
const std::string & format() const noexcept
Returns the canonical namespace:name representation.
Definition Identity.h:436
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
bool isValid() const noexcept
Return whether this reference is valid and non-nil.
Definition SubjectRef.h:38
bool isPunishable(SubjectRef subject) const
True while the enemy is in Telegraph or Recover.
Definition CombatEnemyAI.cpp:175
CombatEnemyBand band(SubjectRef subject) const
Current band for debugging; Far when unknown.
Definition CombatEnemyAI.cpp:153
Result< std::vector< CombatEnemySteering > > nextSteering(SimulationTick tick) const
Emit approach steering for Mid/Far enemies that are Idle (not punishing).
Definition CombatEnemyAI.cpp:122
Result< std::optional< action::AbilityIntent > > nextIntent(SimulationTick tick) override
Emit at most one attack intent for the supplied tick.
Definition CombatEnemyAI.cpp:69
Result< void > registerEnemy(CombatEnemyDefinition definition)
Register or replace one enemy definition after validation.
Definition CombatEnemyAI.cpp:32
Result< void > setLightAction(SubjectRef subject, LogicalId actionId)
Set the action id copied into emitted intents.
Definition CombatEnemyAI.cpp:57
Result< void > setPosition(SubjectRef subject, double x, double y, double z)
Provide world positions for band checks (enemies and their targets).
Definition CombatEnemyAI.cpp:48
CombatEnemyPhase phase(SubjectRef subject) const
Current move-set phase; Idle when the subject is unknown.
Definition CombatEnemyAI.cpp:169
Result< CombatLockState > state(SubjectRef owner) const
Return owning lock state or NotFound.
Definition CombatTarget.cpp:118
Definition ActionDamageSink.cpp:9
CombatEnemyPhase
Authored move-set phase; Telegraph and Recover are punish windows.
Definition CombatEnemyAI.h:23
@ Telegraph
@ InvalidArgument
@ NotFound
@ Applied
Owning request to activate one granted ability.
Definition AbilityController.h:16
Owning configuration for one enemy fighter.
Definition CombatEnemyAI.h:33
Result< void > validate() const
Validate subject, owner and positive radii.
Definition CombatEnemyAI.cpp:19
std::uint64_t attackCooldownTicks
Definition CombatEnemyAI.h:39
Owning planar steering suggestion for Mid/Far bands.
Definition CombatEnemyAI.h:26
CombatVector3 moveDirection
Definition CombatEnemyAI.h:28