feat: add simple village simulation of resources
This commit is contained in:
@@ -0,0 +1,36 @@
|
|||||||
|
class_name SimVillage
|
||||||
|
extends RefCounted
|
||||||
|
|
||||||
|
var food := 20.0
|
||||||
|
var wood := 10.0
|
||||||
|
var safety := 50.0
|
||||||
|
var knowledge := 0.0
|
||||||
|
|
||||||
|
func apply_npc_task(npc: SimNPC) -> void:
|
||||||
|
match npc.current_task:
|
||||||
|
"gather_food":
|
||||||
|
food += 2.0
|
||||||
|
"gather_wood":
|
||||||
|
wood += 2.0
|
||||||
|
"patrol":
|
||||||
|
safety += 1.0
|
||||||
|
"study":
|
||||||
|
knowledge += 1.0
|
||||||
|
"eat":
|
||||||
|
food -= 1.0
|
||||||
|
"rest":
|
||||||
|
pass
|
||||||
|
"wander":
|
||||||
|
pass
|
||||||
|
|
||||||
|
food = max(food, 0.0)
|
||||||
|
wood = max(wood, 0.0)
|
||||||
|
safety = clamp(safety, 0.0, 100.0)
|
||||||
|
|
||||||
|
func get_summary() -> String:
|
||||||
|
return "Village | food: %s | wood: %s | safety: %s | knowledge: %s" % [
|
||||||
|
round(food),
|
||||||
|
round(wood),
|
||||||
|
round(safety),
|
||||||
|
round(knowledge)
|
||||||
|
]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://oqdf44lxs3dg
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
signal npc_task_changed(npc: SimNPC, old_task: String, new_task: String)
|
signal npc_task_changed(npc: SimNPC, old_task: String, new_task: String)
|
||||||
|
signal village_changed(village: SimVillage)
|
||||||
|
|
||||||
|
var village := SimVillage.new()
|
||||||
|
|
||||||
const DEBUG_LOGS := true
|
const DEBUG_LOGS := true
|
||||||
|
|
||||||
var npcs: Array[SimNPC] = []
|
var npcs: Array[SimNPC] = []
|
||||||
@@ -68,3 +72,9 @@ func simulate_tick() -> void:
|
|||||||
" | energy: ",
|
" | energy: ",
|
||||||
round(npc.energy)
|
round(npc.energy)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for npc in npcs:
|
||||||
|
village.apply_npc_task(npc)
|
||||||
|
village_changed.emit(village)
|
||||||
|
if DEBUG_LOGS:
|
||||||
|
print(village.get_summary())
|
||||||
|
|||||||
Reference in New Issue
Block a user