Working about pathfinding
This commit is contained in:
1 parent
6a5adb1c79
commit
c6d98bd72a
25 files changed
+1997
-508
No files matched your search
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user