muMLE/examples/woods/rules/r_advance_time_rhs.od
2024-11-13 10:07:16 +01:00

27 lines
1,004 B
Text

clock:RAM_Clock {
RAM_time = `get_value(this) + 1`;
}
# Advance time has a bunch of side-effects that we cannot easily model using NAC/LHS/RHS-kind of rules,
# so we just do it in code:
:GlobalCondition {
condition = ```
for _, attacking_link in get_all_instances("attacking"):
man_state = get_target(attacking_link)
animal_state = get_source(attacking_link)
if get_type_name(animal_state) == "BearState":
# Bear hunger decreases
set_slot_value(animal_state, "hunger", max(get_slot_value(animal_state, "hunger") - 50, 0))
set_slot_value(man_state, "dead", True)
delete(attacking_link)
# Bear hunger increases
for _, bear_state in get_all_instances("BearState"):
if get_slot_value(bear_state, "dead"):
continue # bear already dead
old_hunger = get_slot_value(bear_state, "hunger")
new_hunger = min(old_hunger + 10, 100)
set_slot_value(bear_state, "hunger", new_hunger)
```;
}