diff --git a/packages/ludic.nav/lib/macos-arm64/libludicnav.dylib b/packages/ludic.nav/lib/macos-arm64/libludicnav.dylib index 7314e9b3..214b2e5a 100755 --- a/packages/ludic.nav/lib/macos-arm64/libludicnav.dylib +++ b/packages/ludic.nav/lib/macos-arm64/libludicnav.dylib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f373d9a1d4d37d907d7df0869a2ba4e8b2a70de55cb33c6f635cea49486efe2f -size 198240 +oid sha256:0994fc60f85002f8c95ed2a8a75886a94ce8abb46950248f8a6fa42a81bf3538 +size 198320 diff --git a/packages/ludic.nav/native/shim/nav_crowd.inl b/packages/ludic.nav/native/shim/nav_crowd.inl index 2a81400c..7c6585b9 100644 --- a/packages/ludic.nav/native/shim/nav_crowd.inl +++ b/packages/ludic.nav/native/shim/nav_crowd.inl @@ -58,11 +58,12 @@ NAV_SHIM int nav_crowd_target(void *p, int i, float x, float y, float z) { if (!ref) return 0; return c->crowd->requestMoveTarget(i, ref, near) ? 1 : 0; } -// a new top speed, as a walker goes from a walk to a run +// a new top speed, as a walker goes from a walk to a run; 0 stands it still (a new target moves it again) NAV_SHIM void nav_crowd_speed(void *p, int i, float speed) { Crowd *c = static_cast(p); const dtCrowdAgent *a = c->crowd->getAgent(i); if (!a || !a->active) return; + if (speed < 0.01f) { c->crowd->resetMoveTarget(i); return; } // standing: no target, not no acceleration dtCrowdAgentParams ap = a->params; ap.maxSpeed = speed; ap.maxAcceleration = speed * 4.0f; diff --git a/packages/ludic.wildlife/tests/crowd_test.ludic b/packages/ludic.wildlife/tests/crowd_test.ludic index a8fb8e05..1f837c56 100644 --- a/packages/ludic.wildlife/tests/crowd_test.ludic +++ b/packages/ludic.wildlife/tests/crowd_test.ludic @@ -79,5 +79,8 @@ program WildCrowdTest { let out = new []WildAnimal expect_eq(wildlife_near(wildlife_st, 0.0, -4.0, 1.0, out), 1) expect_eq(wildlife_near(wildlife_st, 0.0, 0.0, 1.0, out), 0) + expect(wildlife_listed(wildlife_st, a)) + wildlife_clear(wildlife_st) + expect(not wildlife_listed(wildlife_st, a)) } } diff --git a/packages/ludic.wildlife/walked.ludic b/packages/ludic.wildlife/walked.ludic index 1e0eb584..3001662d 100644 --- a/packages/ludic.wildlife/walked.ludic +++ b/packages/ludic.wildlife/walked.ludic @@ -43,3 +43,6 @@ export function wildlife_moved(wildlife_st: mut WildlifeState, a: WildAnimal, x: if r >= 0 { tb_set_xz(a.tab, WA_X, WA_Z, r, x, z) } wl_walked(wildlife_st, a, wl_sp(wildlife_st, a.sp), d) } + +# still one of this state's animals: false once cleared, reloaded or removed (a crowd lets it go) +export function wildlife_listed(wildlife_st: WildlifeState, a: WildAnimal) -> bool { return a != null and a.tab == wildlife_st.wl.tab and wl_row(a) >= 0 }