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