Working about pathfinding

This commit is contained in:
Vladislav Khorev committed 2026-11-08 17:24:15 +06:00
1 parent 6a5adb1c79
commit c6d98bd72a
25 files changed
+1997 -508

No files matched your search

+33
View File
@@ -183,7 +183,12 @@ CharacterState NpcData::toCharacterState() const
state.visibleRange = visibleRange;
state.canAttack = canAttack;
state.enabled = enabled;
state.collisionRadius = navigationAvoidanceRadius;
state.movementContactRadius =
(std::min)(movementContactRadius, navigationAvoidanceRadius);
state.interactionRadius = interactionRadius;
state.configureNavigationRetryCooldowns(
id, navigationRetryCooldownTicks);
Eigen::Quaternionf correction = Eigen::Quaternionf::Identity();
if (modelCorrectionRotX != 0.f)
@@ -342,6 +347,34 @@ LocationDefinition LocationContentLoader::load(
item.value("visibleRange", VISIBLE_RANGE);
data.canAttack = item.value("canAttack", false);
data.enabled = item.value("enabled", true);
data.navigationAvoidanceRadius = item.value(
"navigationAvoidanceRadius",
item.value("collisionRadius", 0.45f));
data.navigationAvoidanceRadius =
(std::max)(0.05f, data.navigationAvoidanceRadius);
data.movementContactRadius = item.value(
"movementContactRadius",
data.navigationAvoidanceRadius * 0.72f);
data.movementContactRadius = (std::max)(
0.05f, (std::min)(
data.movementContactRadius,
data.navigationAvoidanceRadius));
const char* cooldownKey =
item.contains("navigationRetryCooldownTicks")
? "navigationRetryCooldownTicks"
: "navigationRetryCooldownMs";
if (item.contains(cooldownKey) &&
item.at(cooldownKey).is_array()) {
for (const auto& value : item.at(cooldownKey)) {
if (!value.is_number_integer()) continue;
int ticks = value.get<int>();
if (std::string(cooldownKey) ==
"navigationRetryCooldownMs") {
ticks = (std::max)(1, (ticks + 99) / 100);
}
data.navigationRetryCooldownTicks.push_back(ticks);
}
}
result.npcs.push_back(std::move(data));
}
}
+3
View File
@@ -72,7 +72,10 @@ struct NpcData {
float visibleRange = VISIBLE_RANGE;
bool canAttack = false;
bool enabled = true;
float navigationAvoidanceRadius = 0.45f;
float movementContactRadius = 0.32f;
float interactionRadius = 0.f;
std::vector<int> navigationRetryCooldownTicks;
CharacterState toCharacterState() const;
};