载入中...
搜索中...
未找到
CrowdInteraction.cpp
浏览该文件的文档.
2
3namespace eve::crowd {
4
6 if (!impl_->validId(id))
7 return Result<void>::failure(Diagnostic::error(DiagnosticCode::NotFound, "Crowd agent not found", "id"));
8 if (!std::isfinite(policy.pushability) || policy.pushability < 0.f || policy.pushability > 1.f ||
9 policy.layer < 0 || policy.mask < 0)
11 Diagnostic::error(DiagnosticCode::InvalidArgument, "Invalid crowd interaction policy", "policy"));
12 const size_t index = size_t(id);
13 impl_->interactions[index] = policy;
14 if (policy.holdPosition) {
15 impl_->vxs[index] = impl_->vys[index] = impl_->speeds[index] = 0.f;
16 }
18}
19
21 if (!impl_->validId(id))
23 Diagnostic::error(DiagnosticCode::NotFound, "Crowd agent not found", "id"));
24 return Result<AgentInteraction>::success(impl_->interactions[size_t(id)]);
25}
26
27} // namespace eve::crowd
uint32_t index
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
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
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
Result< void > setAgentInteraction(int id, AgentInteraction policy)
Atomically replace the local interaction policy for a current compact slot.
Result< AgentInteraction > getAgentInteraction(int id) const
Read an owning policy snapshot, or NotFound for an invalid compact slot. @thread Simulation thread on...
Independent local interaction policy, copied into Crowd storage.
Definition Crowd.h:56
float pushability
Relative contact mobility in [0,1]; zero cannot be pushed by agents.
Definition Crowd.h:57
int mask
Both agents must accept the other's layer for interaction.
Definition Crowd.h:60
int layer
Non-negative membership bit mask; zero disables agent interaction.
Definition Crowd.h:59
bool holdPosition
Suppress locomotion and agent pushes; terrain constraints still apply.
Definition Crowd.h:58