diff --git a/simulation/actions/ActionSelectionSystem.gd b/simulation/actions/ActionSelectionSystem.gd index 3d77c80..2dedd79 100644 --- a/simulation/actions/ActionSelectionSystem.gd +++ b/simulation/actions/ActionSelectionSystem.gd @@ -47,7 +47,10 @@ func select_action(npc: SimNPC, village: SimVillage, time_of_day: float = 0.5, a SimulationIds.ACTION_GATHER_FOOD, -1.0, "Critically hungry; must find food" ) - var period := _get_period(time_of_day) + var profession_def := SimulationDefinitions.get_profession(npc.profession) + var offset: float = profession_def.schedule_offset if profession_def != null else 0.0 + var local_time := fmod(time_of_day + offset + 1.0, 1.0) + var period := _get_period(local_time) if period == SchedulePeriod.SLEEP: if npc.energy < 60.0: diff --git a/simulation/definitions/ProfessionDefinition.gd b/simulation/definitions/ProfessionDefinition.gd index 8c906c2..7e879c5 100644 --- a/simulation/definitions/ProfessionDefinition.gd +++ b/simulation/definitions/ProfessionDefinition.gd @@ -5,6 +5,7 @@ extends Resource @export var display_name: String @export var visual_color := Color.WHITE @export var prop_color := Color(0.35, 0.25, 0.15, 1.0) +@export_range(-0.12, 0.12, 0.005) var schedule_offset := 0.0 func validate() -> Array[String]: diff --git a/simulation/definitions/professions/farmer.tres b/simulation/definitions/professions/farmer.tres index 7cc4b33..6d645c4 100644 --- a/simulation/definitions/professions/farmer.tres +++ b/simulation/definitions/professions/farmer.tres @@ -8,3 +8,4 @@ profession_id = &"farmer" display_name = "Farmer" visual_color = Color(0.36, 0.62, 0.28, 1) prop_color = Color(0.65, 0.45, 0.2, 1) +schedule_offset = -0.04 diff --git a/simulation/definitions/professions/guard.tres b/simulation/definitions/professions/guard.tres index c9a254c..833d1ed 100644 --- a/simulation/definitions/professions/guard.tres +++ b/simulation/definitions/professions/guard.tres @@ -8,3 +8,4 @@ profession_id = &"guard" display_name = "Guard" visual_color = Color(0.25, 0.42, 0.68, 1) prop_color = Color(0.72, 0.75, 0.78, 1) +schedule_offset = 0.02 diff --git a/simulation/definitions/professions/scholar.tres b/simulation/definitions/professions/scholar.tres index 8cf3546..9ea92d8 100644 --- a/simulation/definitions/professions/scholar.tres +++ b/simulation/definitions/professions/scholar.tres @@ -8,3 +8,4 @@ profession_id = &"scholar" display_name = "Scholar" visual_color = Color(0.52, 0.34, 0.68, 1) prop_color = Color(0.78, 0.66, 0.28, 1) +schedule_offset = 0.05 diff --git a/simulation/definitions/professions/woodcutter.tres b/simulation/definitions/professions/woodcutter.tres index 3fbc064..ccbeb91 100644 --- a/simulation/definitions/professions/woodcutter.tres +++ b/simulation/definitions/professions/woodcutter.tres @@ -8,3 +8,4 @@ profession_id = &"woodcutter" display_name = "Woodcutter" visual_color = Color(0.67, 0.34, 0.2, 1) prop_color = Color(0.34, 0.22, 0.14, 1) +schedule_offset = -0.02 diff --git a/tests/npc_schedule_test.gd b/tests/npc_schedule_test.gd index 1ab8f80..7de0184 100644 --- a/tests/npc_schedule_test.gd +++ b/tests/npc_schedule_test.gd @@ -69,6 +69,7 @@ func _test_work_period_during_day() -> void: "100 ticks should land in the work period" ) var npc: SimNPC = manager.npcs[0] + npc.profession = SimulationIds.PROFESSION_WANDERER npc.hunger = 20.0 npc.energy = 80.0 npc.home_position = npc.position @@ -94,6 +95,7 @@ func _test_meal_period_hunger() -> void: "50 ticks should land in the breakfast meal period" ) var npc: SimNPC = manager.npcs[0] + npc.profession = SimulationIds.PROFESSION_WANDERER npc.hunger = 65.0 npc.energy = 80.0 manager.village.food = 5.0