|
| 1 | +defmodule ViralSpiral.Game.Score.Room do |
| 2 | + alias ViralSpiral.Game.Score.Room |
| 3 | + defstruct chaos_countdown: 10 |
| 4 | + |
| 5 | + def new() do |
| 6 | + %Room{} |
| 7 | + end |
| 8 | + |
| 9 | + def countdown(%Room{} = room) do |
| 10 | + %{room | chaos_countdown: room.chaos_countdown - 1} |
| 11 | + end |
| 12 | +end |
| 13 | + |
| 14 | +defmodule ViralSpiral.Game.Score.Player do |
| 15 | + alias ViralSpiral.Game.Score.Player |
| 16 | + alias ViralSpiral.Game.RoomConfig |
| 17 | + alias ViralSpiral.Game.Player, as: PlayerData |
| 18 | + import ViralSpiral.Game.RoomConfig.Guards |
| 19 | + |
| 20 | + defstruct biases: %{}, affinities: %{}, clout: 0 |
| 21 | + |
| 22 | + def new(%PlayerData{} = player, %RoomConfig{} = room_config) do |
| 23 | + bias_list = Enum.filter(room_config.communities, &(&1 != player.identity)) |
| 24 | + bias_map = Enum.reduce(bias_list, %{}, fn x, acc -> Map.put(acc, x, 0) end) |
| 25 | + |
| 26 | + affinity_list = room_config.affinities |
| 27 | + affinity_map = Enum.reduce(affinity_list, %{}, fn x, acc -> Map.put(acc, x, 0) end) |
| 28 | + |
| 29 | + %Player{ |
| 30 | + biases: bias_map, |
| 31 | + affinities: affinity_map |
| 32 | + } |
| 33 | + end |
| 34 | + |
| 35 | + def change(%Player{} = player, :bias, target_bias, count) |
| 36 | + when is_community(target_bias) and is_integer(count) do |
| 37 | + new_biases = Map.put(player.biases, target_bias, player.biases[target_bias] + count) |
| 38 | + %{player | biases: new_biases} |
| 39 | + end |
| 40 | + |
| 41 | + def change(%Player{} = player, :affinity, target, count) |
| 42 | + when is_affinity(target) and is_integer(count) do |
| 43 | + new_affinities = Map.put(player.affinities, target, player.affinities[target] + count) |
| 44 | + %{player | affinities: new_affinities} |
| 45 | + end |
| 46 | + |
| 47 | + def change(%Player{} = player, :clout, count) when is_integer(count) do |
| 48 | + new_clout = player.clout + count |
| 49 | + %{player | clout: new_clout} |
| 50 | + end |
| 51 | +end |
0 commit comments