Renewable resources: tree growth + WildGrowth + Quarry on BigRockNode
Trees: 4 growth stages (Sapling→Young→Growing→Mature), only Mature yields wood. WildGrowth ticker fires every in-game hour; rejection- samples grass tiles and plants a sapling with ~30% probability (capped at MAP_TREE_LIMIT=60). New `paint_plant_tree` designation lets the player manually plant — ghost sapling registered as a build_site that ConstructionProvider fulfils. Stage round-trips through save/load. Initial seed mixes 4 saplings + 6 mature so growth is visible day 1. Quarry: new BigRockNode entity (2×2 permanent stone outcrop, never depletes). 3 nodes seeded far from cabin. New QuarryWorkbench (extends Workbench, auto-FOREVER `quarry_stone` bill, recipe drops 1 stone per 300 work-ticks). New `paint_quarry` designation only accepts BigRockNode tiles. CraftingProvider now supports recipes with `ingredient_count == 0` — skips ingredient-fetch and goes straight to walk+craft toils. Recipe gains `ingredient_count` field (defaults 0). Save/load layering: big_rock_node spawns at priority 0 (same as rock/tree), quarry_workbench at priority 2 (after the node). UI: Plant tree + Build quarry buttons added to Build drawer. build_drawer_thumb gains `plant_tree` (sapling sprout in dirt) and `paint_quarry` (stone block + chisel + cut-stone pile) shapes. inspect_tooltip recognises BigRockNode + shows tree growth stage on hover. Delegation: gdscript-refactor (Sonnet ×2) for trees full impl + quarry skeleton; quick-edit (Haiku) for CraftingProvider no-ingredient plumbing + TopBar polish; integration handled on Opus.
This commit is contained in:
parent
296894ff7a
commit
d98d2c2425
20 changed files with 716 additions and 38 deletions
|
|
@ -19,6 +19,7 @@ var work_providers: Array = []
|
|||
# from their _ready/_exit_tree. Phase 16 will add stable IDs and persistence wiring.
|
||||
var trees: Array = [] # Array of Tree
|
||||
var rocks: Array = [] # Array of Rock
|
||||
var big_rock_nodes: Array = [] # Array of BigRockNode (permanent stone outcrops)
|
||||
var items: Array = [] # Array of Item (on-floor stacks)
|
||||
var stockpiles: Array = [] # Array of StorageDestination (StockpileZone for now; containers Phase 5)
|
||||
|
||||
|
|
@ -207,6 +208,24 @@ func unregister_rock(r) -> void:
|
|||
rocks.erase(r)
|
||||
|
||||
|
||||
func register_big_rock_node(n) -> void:
|
||||
if not big_rock_nodes.has(n):
|
||||
big_rock_nodes.append(n)
|
||||
|
||||
|
||||
func unregister_big_rock_node(n) -> void:
|
||||
big_rock_nodes.erase(n)
|
||||
|
||||
|
||||
## Returns the BigRockNode whose 2×2 footprint covers `tile`, or null.
|
||||
## Used by `paint_quarry` designation to validate the build site.
|
||||
func big_rock_node_at_tile(tile: Vector2i):
|
||||
for n in big_rock_nodes:
|
||||
if n.is_at(tile):
|
||||
return n
|
||||
return null
|
||||
|
||||
|
||||
func register_item(it) -> void:
|
||||
if items.has(it):
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue