open Position
open Global
open Node

let rec process kill_me id kill local_kill =
  await kill(k) in
  if List.mem id k then emit local_kill
  else run (kill_me id kill local_kill)

let process preemptible_node id pos_init move make_msg kill =
  signal local_kill in
  do 
    run (node id pos_init move make_msg)
  until local_kill done
  ||
  run (kill_me id kill local_kill)

let rec process add new_node start =
  await one new_node (pos) in
  run (add new_node start)
  ||
  await immediate start;
  let pos = { x = if pos.x > 0 then min pos.x max_x else 0;
              y = if pos.y > 0 then min pos.y max_y else 0; } 
  in
  run (node (get_new_id())
         pos 
         (Move.random_waypoint (max_x/4) pos) 
         Msg.make)