Module Segments

type vec = float * float * float
type box = {
  1. x0 : float;
  2. y0 : float;
  3. z0 : float;
  4. x1 : float;
  5. y1 : float;
  6. z1 : float;
}
type segment = {
  1. box : box;
  2. rgb : int * int * int;
  3. light : float;
}
type side = {
  1. axis : int;
  2. positive : bool;
}
type quad = {
  1. corners : vec list;
  2. normal : vec;
  3. side : side;
}
type opening = {
  1. into : int;
  2. quad : quad;
}
type level = {
  1. segments : segment array;
  2. walls : quad list array;
  3. openings : opening list array;
  4. start : vec;
  5. exit : int;
}
val make : segment list -> start:vec -> exit:int -> level
val mine : level
val segment_at : level -> vec -> int option
val inside : level -> radius:float -> vec -> bool
val move : level -> radius:float -> vec -> vec -> vec
val clear : level -> vec -> vec -> bool