|
defmodule HexalixirWeb.GameLive do |
|
use HexalixirWeb, :live_view |
|
alias Hexalixir.{Game, Grid} |
|
|
|
@impl true |
|
def mount(_params, _session, socket) do |
|
{:ok, assign(socket, |
|
grid: Grid.new(), |
|
saved_colors: %{1 => {nil, 6}, 2 => {nil, 6}}, |
|
game_won: false |
|
)} |
|
end |
|
|
|
@impl true |
|
def handle_event("click_tile", %{"x" => x, "y" => y}, socket) do |
|
coords = {String.to_integer(x), String.to_integer(y)} |
|
|
|
case Game.click_tile(coords) do |
|
{:ok, new_grid, won} -> |
|
{:noreply, assign(socket, grid: new_grid, game_won: won)} |
|
|
|
{:error, _reason} -> |
|
{:noreply, socket} |
|
end |
|
end |
|
|
|
@impl true |
|
def handle_event("save_color", %{"color" => color, "slot" => slot}, socket) do |
|
slot = String.to_integer(slot) |
|
Game.save_color(color, slot) |
|
|
|
{:noreply, socket} |
|
end |
|
|
|
@impl true |
|
def handle_event("use_saved_color", %{"x" => x, "y" => y, "slot" => slot}, socket) do |
|
coords = {String.to_integer(x), String.to_integer(y)} |
|
slot = String.to_integer(slot) |
|
|
|
case Game.use_saved_color(coords, slot) do |
|
{:ok, new_grid, won} -> |
|
{:noreply, assign(socket, grid: new_grid, game_won: won)} |
|
|
|
{:error, _reason} -> |
|
{:noreply, socket} |
|
end |
|
end |
|
end |
|
|