File size: 1,236 Bytes
8752997 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
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
|