feat: add initial starvation consequence
This commit is contained in:
@@ -11,6 +11,8 @@ var intelligence: float
|
||||
var current_task: String = "idle"
|
||||
var position: Vector3
|
||||
|
||||
var is_starving := false
|
||||
|
||||
func _init(
|
||||
_id: int,
|
||||
_npc_name: String,
|
||||
@@ -47,6 +49,14 @@ func simulate_tick(village: SimVillage) -> void:
|
||||
current_task = "rest"
|
||||
energy += 20.0
|
||||
return
|
||||
|
||||
is_starving = hunger >= 90.0
|
||||
|
||||
if is_starving:
|
||||
energy -= 8.0
|
||||
|
||||
hunger = clamp(hunger, 0.0, 100.0)
|
||||
energy = clamp(energy, 0.0, 100.0)
|
||||
|
||||
if village.food < 15.0:
|
||||
current_task = "gather_food"
|
||||
|
||||
@@ -37,15 +37,21 @@ func update_modifiers() -> void:
|
||||
|
||||
|
||||
func apply_npc_task(npc: SimNPC) -> void:
|
||||
var productivity := 1.0
|
||||
if npc.energy < 20.0:
|
||||
productivity = 0.25
|
||||
elif npc.energy < 40.0:
|
||||
productivity = 0.5
|
||||
|
||||
match npc.current_task:
|
||||
"gather_food":
|
||||
food += 2.0
|
||||
food += 2.0 * productivity
|
||||
"gather_wood":
|
||||
wood += 2.0
|
||||
wood += 2.0 * productivity
|
||||
"patrol":
|
||||
safety += 1.0
|
||||
safety += 1.0 * productivity
|
||||
"study":
|
||||
knowledge += 1.0
|
||||
knowledge += 1.0 * productivity
|
||||
"eat":
|
||||
food -= 1.0
|
||||
"rest":
|
||||
|
||||
@@ -94,3 +94,10 @@ func add_safety(amount: float) -> void:
|
||||
func add_knowledge(amount: float) -> void:
|
||||
village.knowledge += amount
|
||||
village_changed.emit(village)
|
||||
|
||||
func get_starving_count() -> int:
|
||||
var count := 0
|
||||
for npc in npcs:
|
||||
if npc.is_starving:
|
||||
count += 1
|
||||
return count
|
||||
|
||||
+2
-1
@@ -27,6 +27,7 @@ func _on_village_changed(village: SimVillage) -> void:
|
||||
Wood: %s
|
||||
Safety: %s
|
||||
Knowledge: %s
|
||||
Starving: %s
|
||||
|
||||
Food Mod: %.2f
|
||||
Safety Mod: %.2f
|
||||
@@ -36,7 +37,7 @@ func _on_village_changed(village: SimVillage) -> void:
|
||||
round(village.wood),
|
||||
round(village.safety),
|
||||
round(village.knowledge),
|
||||
|
||||
simulation_manager.get_starving_count(),
|
||||
village.food_modifier,
|
||||
village.safety_modifier,
|
||||
village.knowledge_modifier
|
||||
|
||||
Reference in New Issue
Block a user