diff --git a/lib/viral_spiral/canon/card.ex b/lib/viral_spiral/canon/card.ex
new file mode 100644
index 0000000..802a13e
--- /dev/null
+++ b/lib/viral_spiral/canon/card.ex
@@ -0,0 +1,6 @@
+defmodule ViralSpiral.Canon.Card do
+ alias ViralSpiral.Canon.Card.Bias
+ alias ViralSpiral.Affinity
+
+ @type t :: Affinity.t() | Bias.t()
+end
diff --git a/lib/viral_spiral/canon/card/affinity.ex b/lib/viral_spiral/canon/card/affinity.ex
index 66df421..f69fe34 100644
--- a/lib/viral_spiral/canon/card/affinity.ex
+++ b/lib/viral_spiral/canon/card/affinity.ex
@@ -8,6 +8,11 @@ defmodule ViralSpiral.Canon.Card.Affinity do
headline: nil,
image: nil,
article_id: nil
+
+ @type t :: %__MODULE__{
+ id: String.t(),
+ tgb: integer()
+ }
end
# defmodule ViralSpiral.Canon.Card.Affinity.Cat do
diff --git a/lib/viral_spiral/canon/card/bias.ex b/lib/viral_spiral/canon/card/bias.ex
index c09c2ec..c7518fe 100644
--- a/lib/viral_spiral/canon/card/bias.ex
+++ b/lib/viral_spiral/canon/card/bias.ex
@@ -8,4 +8,9 @@ defmodule ViralSpiral.Canon.Card.Bias do
headline: nil,
image: nil,
article_id: nil
+
+ @type t :: %__MODULE__{
+ id: String.t(),
+ tgb: integer()
+ }
end
diff --git a/lib/viral_spiral/room/factory.ex b/lib/viral_spiral/room/factory.ex
index 8ac6d21..11108eb 100644
--- a/lib/viral_spiral/room/factory.ex
+++ b/lib/viral_spiral/room/factory.ex
@@ -2,6 +2,7 @@ defmodule ViralSpiral.Gameplay.Factory do
@moduledoc """
Create entities for a Game Room
"""
+ alias ViralSpiralWeb.GameRoomState
alias ViralSpiral.Entity.Deck
alias ViralSpiral.Canon.Deck, as: CanonDeck
alias ViralSpiral.Canon.DrawTypeRequirements
@@ -70,4 +71,37 @@ defmodule ViralSpiral.Gameplay.Factory do
store: CanonDeck.create_store(cards)
}
end
+
+ def make_gameroom(%State{} = state) do
+ %GameRoomState{
+ room: %{
+ name: state.room.name,
+ chaos: state.room.chaos
+ },
+ players:
+ for(
+ {_id, player} <- state.players,
+ do: %{
+ name: player.name,
+ clout: player.clout,
+ affinities: player.affinities,
+ biases: player.biases,
+ is_active: state.turn.current == player.id,
+ cards:
+ player.active_cards
+ |> Enum.map(&state.deck.store[{&1, true}])
+ |> Enum.map(
+ &%{
+ id: &1.id,
+ type: &1.type,
+ veracity: &1.veracity,
+ headline: &1.headline,
+ image: &1.image,
+ article_id: &1.article_id
+ }
+ )
+ }
+ )
+ }
+ end
end
diff --git a/lib/viral_spiral/room/reducer.ex b/lib/viral_spiral/room/reducer.ex
index 43b6d9c..b7ddd2b 100644
--- a/lib/viral_spiral/room/reducer.ex
+++ b/lib/viral_spiral/room/reducer.ex
@@ -10,7 +10,7 @@ defmodule ViralSpiral.Room.Reducer do
alias ViralSpiral.Canon.Deck
alias ViralSpiral.Room.Action
- @spec reduce(State.t(), Action.t()) :: State.t()
+ # @spec reduce(State.t(), Action.t()) :: State.t()
def reduce(%State{} = state, %{type: :draw_card} = action) do
draw_type = action.payload.draw_type
diff --git a/lib/viral_spiral_web/components/atoms.ex b/lib/viral_spiral_web/components/atoms.ex
new file mode 100644
index 0000000..25d87a9
--- /dev/null
+++ b/lib/viral_spiral_web/components/atoms.ex
@@ -0,0 +1,13 @@
+defmodule ViralSpiralWeb.Atoms do
+ use ViralSpiralWeb, :html
+
+ attr :card, :map, required: true
+
+ def card(assigns) do
+ ~H"""
+
+
<%= @card.headline %>
+
+ """
+ end
+end
diff --git a/lib/viral_spiral_web/components/layouts/app.html.heex b/lib/viral_spiral_web/components/layouts/app.html.heex
index 74698cb..2bb6e75 100644
--- a/lib/viral_spiral_web/components/layouts/app.html.heex
+++ b/lib/viral_spiral_web/components/layouts/app.html.heex
@@ -2,25 +2,19 @@
-
+
- v<%= Application.spec(:phoenix, :vsn) %>
+ <%= Application.spec(:viral_spiral, :vsn) %>
diff --git a/lib/viral_spiral_web/live/game_room.ex b/lib/viral_spiral_web/live/game_room.ex
index 7b6c02c..5042092 100644
--- a/lib/viral_spiral_web/live/game_room.ex
+++ b/lib/viral_spiral_web/live/game_room.ex
@@ -1,21 +1,46 @@
defmodule ViralSpiralWeb.GameRoom do
+ import ViralSpiralWeb.Atoms
+ alias ViralSpiral.Canon.Card
+ alias ViralSpiral.Entity.Player
+ alias ViralSpiral.Canon.Deck
+ alias ViralSpiral.Gameplay.Factory
+ alias ViralSpiral.Room.Actions
+ alias ViralSpiral.Room.Reducer
alias ViralSpiral.Room.State
alias ViralSpiral.Entity.Room
use ViralSpiralWeb, :live_view
def mount(params, session, socket) do
- room =
- Room.new()
- |> Room.start(4)
+ room = Room.new() |> Room.start(4)
+ state = State.new(room, ["adhiraj", "krys", "aman", "farah"])
+ requirements = Factory.draw_type(state)
+ draw_type = Deck.draw_type(requirements)
+ state = Reducer.reduce(state, Actions.draw_card(draw_type))
- root = State.new(room, ["adhiraj", "krys", "aman", "farah"])
- IO.inspect(root)
- IO.puts("hi")
+ gameroom_state = Factory.make_gameroom(state)
- {:ok, assign(socket, :root, root)}
+ {:ok, assign(socket, :state, gameroom_state)}
end
def handle_event("start_game", _params, socket) do
{:noreply, socket}
end
+
+ def handle_event("pass_to", params, socket) do
+ # card = socket.assigns.card
+
+ # state = Reducers.reduce(state, Actions.pass_card())
+
+ {:noreply, socket}
+ end
+
+ def player_options(state, player) do
+ pass_to_ids = state.turn.pass_to
+
+ pass_to_names =
+ pass_to_ids
+ |> Enum.map(&state.players[&1].name)
+
+ pass_to_names
+ end
end
diff --git a/lib/viral_spiral_web/live/game_room.html.heex b/lib/viral_spiral_web/live/game_room.html.heex
index 9c82ea1..c66f013 100644
--- a/lib/viral_spiral_web/live/game_room.html.heex
+++ b/lib/viral_spiral_web/live/game_room.html.heex
@@ -1,20 +1,61 @@
- <%= @root.room.name %>
- <%= @root.room.id %>
- <%= @root.room.state %>
- <%= @root.room.chaos_counter %>
+ <%= @state.room.name %>
+ <%!-- <%= @state.room.id %>
+ <%= @state.room.state %> --%>
+ <%= @state.room.chaos %>
-
- <%= for player <- Enum.map(@root.players, fn {_id, player} -> player end) do %>
-
+
- <%= player.name %>
+ ]}
+ >
+
<%= player.name %>
+
+ <%!--
<%= player.identity %> --%>
+
+
+
Clout
+ <%= player.clout %>
- <% end %>
+
+
+
Affinities
+
+ <%= elem(affinity, 0) %>
+ <%= elem(affinity, 1) %>
+
+
+
+
Bias
+
+ <%= elem(bias, 0) %>
+ <%= elem(bias, 1) %>
+
+
+
+
+
+ <.card card={card}>
+
+
+
+ <%!--
+ <%= if current_player?(@state, player) do %>
+ <.card>
+
<%= card(@state, player).headline %>
+
+
+
Pass to
+ <%= for pass_to <- player_options(@state, player) do %>
+
<%= pass_to %>
+ <% end %>
+ <% end %> --%>
+
diff --git a/lib/viral_spiral_web/live/game_room_state.ex b/lib/viral_spiral_web/live/game_room_state.ex
new file mode 100644
index 0000000..aa64574
--- /dev/null
+++ b/lib/viral_spiral_web/live/game_room_state.ex
@@ -0,0 +1,15 @@
+defmodule ViralSpiralWeb.GameRoomState do
+ defstruct room: %{}, players: []
+
+ @type t :: %__MODULE__{
+ room: %{
+ name: String.t(),
+ chaos: integer()
+ },
+ players:
+ list(%{
+ name: String.t(),
+ affinities: %{atom() => integer()}
+ })
+ }
+end
diff --git a/priv/static/images/logo.png b/priv/static/images/logo.png
new file mode 100644
index 0000000..bf8cdb4
Binary files /dev/null and b/priv/static/images/logo.png differ