package game Event_Kind :: enum { Enemy_Killed, Wave_Survived, } Event :: struct { kind: Event_Kind, gold_reward: int, } push_event :: proc(world: ^World, kind: Event_Kind, gold_reward: int = 0) { append(&world.events, Event{kind = kind, gold_reward = gold_reward}) } process_events :: proc(world: ^World) { for ev in world.events { switch ev.kind { case .Enemy_Killed: world.gold += ev.gold_reward case .Wave_Survived: world.gold += ev.gold_reward } } clear(&world.events) }