Merge branch 'lang/npc-pool' into lang/leaks2
This commit is contained in:
commit
f8358d117a
4 changed files with 32 additions and 5 deletions
|
|
@ -4,6 +4,7 @@ module ludic_npc uses ludic_base
|
|||
numbers float
|
||||
import "ludic.base"
|
||||
import "defs.ludic"
|
||||
import "pool.ludic"
|
||||
import "person.ludic"
|
||||
import "port.ludic"
|
||||
import "ground.ludic"
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ export state NpcState {
|
|||
np_n: int = 0 # walkers about
|
||||
np_dice: Rng = rng_new(20260925)
|
||||
np_facts: Queue<NpcFact> = np_facts__new()
|
||||
np_fpool: []NpcFact = new []NpcFact # every fact record made, reused once no drain holds it
|
||||
np_ffree: []NpcFact = new []NpcFact
|
||||
np_fpool: []NpcFact = np_pool_new() # every fact record made, reused once no drain holds it
|
||||
np_ffree: []NpcFact = np_list_sized()
|
||||
np_fnext: int = 0
|
||||
np_next_h: float = 0.0 # the hour the census is next looked at
|
||||
np_hold: bool = false # held where they stand (a shot of their poses)
|
||||
|
|
@ -109,4 +109,4 @@ function np_hi(lo: int, hi: int) -> int {
|
|||
if hi < lo { return lo }
|
||||
return hi
|
||||
}
|
||||
function np_facts__new() -> Queue<NpcFact> { return queue_new("npc.facts") }
|
||||
function np_facts__new() -> Queue<NpcFact> { return np_queue_sized(queue_new("npc.facts")) }
|
||||
|
|
|
|||
26
packages/ludic.npc/pool.ludic
Normal file
26
packages/ludic.npc/pool.ludic
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# ludic.npc/pool.ludic - the facts' records and the queue's lists made at their size once, at the
|
||||
# start: a frame's facts are reused records, and a frame with more than it has seen before still
|
||||
# makes none until NP_FACTS are held at once
|
||||
const NP_FACTS: int = 64
|
||||
|
||||
function np_pool_new() -> []NpcFact {
|
||||
let l = new []NpcFact
|
||||
for i in 0 .. NP_FACTS { push(l, new NpcFact) }
|
||||
return l
|
||||
}
|
||||
# an empty list with room for them all: q_unheld fills it without growing it
|
||||
function np_list_sized() -> []NpcFact {
|
||||
let l = np_pool_new()
|
||||
List.clear(l)
|
||||
return l
|
||||
}
|
||||
function np_queue_sized(q: Queue<NpcFact>) -> Queue<NpcFact> {
|
||||
let f = new NpcFact
|
||||
for i in 0 .. NP_FACTS {
|
||||
push(q.items, f)
|
||||
push(q.spare, f)
|
||||
}
|
||||
List.clear(q.items)
|
||||
List.clear(q.spare)
|
||||
return q
|
||||
}
|
||||
|
|
@ -102,7 +102,7 @@ program NpcWayTest {
|
|||
expect(p.phase > 100.0)
|
||||
}
|
||||
|
||||
test "an arrival a turn, drained each turn, makes a few fact records and then reuses them" (npc_st: mut NpcState, npc_tests_fake_st: mut NpcTestsFakeState, way_test_st: WayTestState) {
|
||||
test "an arrival a turn, drained each turn, makes no fact record past the ones made at the start" (npc_st: mut NpcState, npc_tests_fake_st: mut NpcTestsFakeState, way_test_st: WayTestState) {
|
||||
fk_setup(npc_st, npc_tests_fake_st)
|
||||
npc_tests_fake_st.fk_want = 1
|
||||
let p = npc_spawn(npc_st, NPCK_HIKER)
|
||||
|
|
@ -115,6 +115,6 @@ program NpcWayTest {
|
|||
for i in 0 .. len(fs) { if fs[i].what == NPC_F_ARRIVED { arrived += 1 } }
|
||||
}
|
||||
expect(arrived > 400)
|
||||
expect(npc_fact_records(npc_st) <= 4)
|
||||
expect_eq(npc_fact_records(npc_st), 64)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue