Queue: tend all until full

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-10-28 14:39:21 +00:00
parent e981e89e6c
commit 9daa648017
3 changed files with 43 additions and 12 deletions

View file

@ -142,7 +142,7 @@ class ActionTest(unittest.TestCase):
def test_queue_rules(self):
world, p = self._smith(4)
self.assertEqual(game.queue_add(world, p, "bury_bones", 1, T0), "Only crafting and gathering can be queued")
self.assertEqual(game.queue_add(world, p, "bury_bones", 1, T0), "Only crafting, gathering and tending can be queued")
self.assertIsNone(game.queue_add(world, p, "smith_copper_helmet", 1, T0))
self.assertEqual(p["action"]["id"], "smith_copper_helmet") # nothing being made: it just starts
self.assertEqual(p["action"]["resume"], "mine_stone")
@ -3012,6 +3012,21 @@ class FirekeepingTest(unittest.TestCase):
self.fires[key].update(fuel=[{"tier": 0, "left": game.fire_bank(1) * 60, "by": "kai"}], at=T0 + 35)
self.assertEqual(game.start_action(self.world, self.kai, "tend_all_logs", T0 + 35), "Your piles are all full")
def test_queued_tending_runs_until_full_then_on_with_the_queue(self):
self.kai["bank"] = {"logs": 500}
game.start_action(self.world, self.kai, "mine_stone", T0)
self.assertIsNone(game.queue_add(self.world, self.kai, "tend_all_logs", 1, T0)) # starts it, mining comes after
self.assertIsNone(game.queue_add(self.world, self.kai, "split_logs", 2, T0))
self.assertEqual(self.kai["action"]["left"], 1)
game.process_player(self.world, self.kai, T0 + 600, random.Random(1))
self.assertEqual(self.kai["action"]["id"], "tend_all_logs") # past one log: no count, still tending
summary = game.process_player(self.world, self.kai, T0 + 4 * 3600, random.Random(1))
self.assertEqual(summary["skipped"], [])
self.assertEqual(self.kai["bank"]["kindling"], 2 * game.KINDLING_YIELD[0])
self.assertEqual((self.kai["action"]["id"], summary["resumed"]), ("mine_stone", "mine_stone"))
tended = 500 - 2 - self.kai["bank"]["logs"]
self.assertGreater(tended, 4 * game.fire_bank(1) / game.fire_minutes(1)) # every pile filled
def test_better_logs_need_the_level(self):
self.kai["bank"] = {"maple_logs": 3}
self.assertEqual(game.start_action(self.world, self.kai, "tend_forge_maple_logs", T0), "Needs level 45")