Current section
Files
Jump to
Current section
Files
lib/hex_math.ex
defmodule Point do
defstruct [:x, :y]
end
defmodule Hex do
alias __MODULE__, as: H
defstruct [:q, :r, :s]
def add(%H{ q: xQ, r: xR, s: xS},
%H{ q: yQ, r: yR, s: yS}),
do: %H{ q: xQ + yQ, r: xR + yR, s: xS + yS}
def sub(%H{ q: xQ, r: xR, s: xS},
%H{ q: yQ, r: yR, s: yS}),
do: %H{ q: xQ - yQ, r: xR - yR, s: xS - yS}
defdelegate subtract, to: sub
def scale(%H{ q: xQ, r: xR, s: xS}, k),
do: %H{ q: xQ * k, r: xR * k, s: xS * k }
@directions %{
east: %H{q: 1, r: 0, s: -1},
northeast: %H{q: 1, r: -1, s: 0},
northwest: %H{q: 0, r: -1, s: 1},
west: %H{q: -1, r: 0, s: 1},
southeast: %H{q: -1, r: 1, s: 0},
southwest: %H{q: 0, r: 1, s: -1},
}
def neightbor(h = %H{}, dir), do: add(h, @directions[dir])
end