first chicken and egg
This commit is contained in:
46
lib/chicken_egg_web/live/index_live.ex
Normal file
46
lib/chicken_egg_web/live/index_live.ex
Normal file
@ -0,0 +1,46 @@
|
||||
defmodule ChickenEggWeb.IndexLive do
|
||||
use ChickenEggWeb, :live_view
|
||||
|
||||
alias ChickenEggWeb.ChickenComponents
|
||||
|
||||
def render(assigns) do
|
||||
~H"""
|
||||
<div
|
||||
class="board relative overflow-hidden bg-green-200 w-screen h-screen"
|
||||
phx-window-keyup="boak"
|
||||
phx-key=" "
|
||||
>
|
||||
<ChickenComponents.chicken x={@chicken.x} y={@chicken.y} />
|
||||
|
||||
<div id="chicken-eggs" phx-update="stream">
|
||||
<div :for={{dom_id, egg} <- @streams.eggs} class="egg" id={dom_id}>
|
||||
<ChickenComponents.egg x={egg.x} y={egg.y} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
"""
|
||||
end
|
||||
|
||||
def mount(_params, _session, socket) do
|
||||
eggs = []
|
||||
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(:chicken, %{x: 300, y: 200})
|
||||
|> stream(:eggs, eggs)}
|
||||
end
|
||||
|
||||
def handle_event("boak", _params, socket) do
|
||||
%{x: cx, y: cy} = socket.assigns.chicken
|
||||
new_chicken = %{x: Enum.random(1..800), y: Enum.random(1..600)}
|
||||
|
||||
new_egg =
|
||||
%{id: "egg#{cx}#{cy}", x: cx, y: cy}
|
||||
|> IO.inspect()
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:chicken, new_chicken)
|
||||
|> stream_insert(:eggs, new_egg)}
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user