Skip to content

Commit 198e0ae

Browse files
committed
feat: implement aditional player info
1 parent 4fb4900 commit 198e0ae

3 files changed

Lines changed: 66 additions & 28 deletions

File tree

app/controllers/players_controller.rb

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ def show
3434
@player_role = roster_entry[:role]
3535
@team_info = team_data(@player_team)
3636
@is_captain = roster_entry[:captain] || TEAMS_DATA[@player_team]&.dig(:captain) == @player_name
37-
@stats = { games: 0, kills: 0, deaths: 0, assists: 0, kda: 0.0,
37+
@stats = { games: 0, wins: 0, losses: 0, win_rate: 0, kills: 0, deaths: 0, assists: 0, kda: 0.0,
3838
avg_kills: 0.0, avg_deaths: 0.0, avg_assists: 0.0,
39-
avg_cs: 0.0, avg_gold: 0.0, avg_dmg: 0.0 }
39+
avg_cs: 0.0, avg_cs_min: 0.0, avg_gold: 0.0, avg_dmg: 0.0 }
4040
@champ_stats = []
4141
@match_history = []
4242
@games_index = {}
@@ -52,41 +52,52 @@ def show
5252

5353
set_meta_tags(title: "#{@player_name}#{@player_team} — Kings Lendas Cup")
5454

55+
@games_index = db_games.index_by { |g| g["UniqueGame"] }
56+
5557
kills = player_games.sum { |g| g["Kills"].to_i }
5658
deaths = player_games.sum { |g| g["Deaths"].to_i }
5759
assists = player_games.sum { |g| g["Assists"].to_i }
60+
wins = player_games.count { |g| (sg = @games_index[g["UniqueGame"]]) && sg["Winner"] == g["Team"] }
61+
62+
total_minutes = player_games.sum { |g| @games_index[g["UniqueGame"]]&.dig("Gamelength").to_f }
63+
avg_cs_min = total_minutes > 0 ? (player_games.sum { |g| g["CS"].to_i }.to_f / total_minutes).round(1) : 0.0
64+
5865
@stats = {
59-
games: player_games.length,
60-
kills: kills,
61-
deaths: deaths,
62-
assists: assists,
63-
kda: deaths.zero? ? (kills + assists).to_f : ((kills + assists).to_f / deaths).round(2),
64-
avg_kills: (kills.to_f / player_games.length).round(1),
65-
avg_deaths: (deaths.to_f / player_games.length).round(1),
66+
games: player_games.length,
67+
wins: wins,
68+
losses: player_games.length - wins,
69+
win_rate: player_games.length > 0 ? (wins.to_f / player_games.length * 100).round : 0,
70+
kills: kills,
71+
deaths: deaths,
72+
assists: assists,
73+
kda: deaths.zero? ? (kills + assists).to_f : ((kills + assists).to_f / deaths).round(2),
74+
avg_kills: (kills.to_f / player_games.length).round(1),
75+
avg_deaths: (deaths.to_f / player_games.length).round(1),
6676
avg_assists: (assists.to_f / player_games.length).round(1),
67-
avg_cs: (player_games.sum { |g| g["CS"].to_i }.to_f / player_games.length).round(1),
68-
avg_gold: (player_games.sum { |g| g["Gold"].to_i }.to_f / player_games.length).round(0),
69-
avg_dmg: (player_games.sum { |g| g["DamageToChampions"].to_i }.to_f / player_games.length).round(0)
77+
avg_cs: (player_games.sum { |g| g["CS"].to_i }.to_f / player_games.length).round(1),
78+
avg_cs_min: avg_cs_min,
79+
avg_gold: (player_games.sum { |g| g["Gold"].to_i }.to_f / player_games.length).round(0),
80+
avg_dmg: (player_games.sum { |g| g["DamageToChampions"].to_i }.to_f / player_games.length).round(0)
7081
}
7182

7283
# Per champion stats
7384
@champ_stats = player_games.group_by { |g| g["Champion"] }.map do |champ, games|
7485
k = games.sum { |g| g["Kills"].to_i }
7586
d = games.sum { |g| g["Deaths"].to_i }
7687
a = games.sum { |g| g["Assists"].to_i }
88+
w = games.count { |g| (sg = @games_index[g["UniqueGame"]]) && sg["Winner"] == g["Team"] }
7789
{
78-
"champion" => champ,
79-
"games" => games.length,
80-
"wins" => 0, # need scoreboard games cross-reference
81-
"kda" => d.zero? ? (k + a).to_f : ((k + a).to_f / d).round(2),
82-
"avg_kills"=> (k.to_f / games.length).round(1),
83-
"avg_deaths"=> (d.to_f / games.length).round(1),
90+
"champion" => champ,
91+
"games" => games.length,
92+
"wins" => w,
93+
"kda" => d.zero? ? (k + a).to_f : ((k + a).to_f / d).round(2),
94+
"avg_kills" => (k.to_f / games.length).round(1),
95+
"avg_deaths" => (d.to_f / games.length).round(1),
8496
"avg_assists"=> (a.to_f / games.length).round(1),
85-
"avg_cs" => (games.sum { |g| g["CS"].to_i }.to_f / games.length).round(1)
97+
"avg_cs" => (games.sum { |g| g["CS"].to_i }.to_f / games.length).round(1)
8698
}
8799
end.sort_by { |c| -c["games"] }
88100

89101
@match_history = player_games.reverse
90-
@games_index = db_games.index_by { |g| g["UniqueGame"] }
91102
end
92103
end

app/views/players/show.html.erb

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,17 @@
3131
</div>
3232

3333
<!-- Key stats -->
34-
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px;width:100%;max-width:360px">
35-
<% [[@stats[:kda], kda_color(@stats[:kda]), "KDA"], [@stats[:games], "text-white", "Jogos"], [@stats[:avg_cs], "text-kl-gold", "CS/jogo"]].each do |val, color_class, label| %>
36-
<div style="text-align:center;padding:12px 10px;border:1px solid var(--retro-gold-dim);background:rgba(200,155,60,0.04)">
37-
<div style="font-size:26px;font-weight:bold;font-family:Verdana,sans-serif" class="<%= color_class %>"><%= val %></div>
38-
<div style="font-size:17px;color:rgba(255,255,255,0.35);font-family:Verdana,sans-serif;letter-spacing:0.1em;margin-top:3px;text-transform:uppercase"><%= label %></div>
34+
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:8px;width:100%;max-width:480px">
35+
<% key_stats = [
36+
[@stats[:kda], kda_color(@stats[:kda]), "KDA"],
37+
[@stats[:games], "text-white", "Jogos"],
38+
["#{@stats[:win_rate]}%", @stats[:win_rate] >= 60 ? "text-kl-win" : (@stats[:win_rate] >= 40 ? "text-white" : "text-kl-loss"), "Win%"],
39+
[@stats[:avg_cs_min], "text-kl-gold", "CS/min"]
40+
] %>
41+
<% key_stats.each do |val, color_class, label| %>
42+
<div style="text-align:center;padding:12px 8px;border:1px solid var(--retro-gold-dim);background:rgba(200,155,60,0.04)">
43+
<div style="font-size:22px;font-weight:bold;font-family:Verdana,sans-serif" class="<%= color_class %>"><%= val %></div>
44+
<div style="font-size:15px;color:rgba(255,255,255,0.35);font-family:Verdana,sans-serif;letter-spacing:0.1em;margin-top:3px;text-transform:uppercase"><%= label %></div>
3945
</div>
4046
<% end %>
4147
</div>
@@ -47,7 +53,7 @@
4753
</div>
4854

4955
<!-- Stats grid -->
50-
<div class="grid grid-cols-3 sm:grid-cols-6 gap-2 mb-6">
56+
<div class="grid grid-cols-3 sm:grid-cols-6 gap-2 mb-2">
5157
<% [[@stats[:kills],"KILLS","var(--color-kl-win)"],[@stats[:deaths],"DEATHS","var(--color-kl-loss)"],[@stats[:assists],"ASSISTS","var(--retro-teal)"],[@stats[:avg_kills],"K/JOGO","rgba(255,255,255,0.7)"],[@stats[:avg_deaths],"D/JOGO","rgba(255,255,255,0.7)"],[@stats[:avg_assists],"A/JOGO","rgba(255,255,255,0.7)"]].each do |val, label, color| %>
5258
<div style="border:1px solid var(--retro-gold-dim);background:var(--retro-card);padding:12px 8px;text-align:center;position:relative">
5359
<div style="height:2px;background:linear-gradient(to right,<%= color %>,transparent);margin-bottom:6px"></div>
@@ -56,6 +62,21 @@
5662
</div>
5763
<% end %>
5864
</div>
65+
<% if @stats[:games] > 0 %>
66+
<div class="grid grid-cols-3 gap-2 mb-6">
67+
<% gold_k = (@stats[:avg_gold].to_f / 1000).round(1) %>
68+
<% dmg_k = (@stats[:avg_dmg].to_f / 1000).round(1) %>
69+
<% [["#{gold_k}k","GOLD/JOGO","var(--retro-gold)"],["#{dmg_k}k","DMG/JOGO","rgba(255,100,80,0.9)"],[@stats[:avg_cs],"CS/JOGO","rgba(255,255,255,0.5)"]].each do |val, label, color| %>
70+
<div style="border:1px solid var(--retro-gold-dim);background:var(--retro-card);padding:10px 8px;text-align:center">
71+
<div style="height:2px;background:linear-gradient(to right,<%= color %>,transparent);margin-bottom:6px"></div>
72+
<div style="font-size:22px;font-weight:bold;font-family:Verdana,sans-serif;color:<%= color %>"><%= val %></div>
73+
<div style="font-size:15px;color:rgba(255,255,255,0.3);font-family:Verdana,sans-serif;letter-spacing:0.1em;margin-top:3px"><%= label %></div>
74+
</div>
75+
<% end %>
76+
</div>
77+
<% else %>
78+
<div class="mb-6"></div>
79+
<% end %>
5980

6081
<!-- Champion stats -->
6182
<% if @champ_stats.any? %>
@@ -66,6 +87,7 @@
6687
<tr style="border-bottom:1px solid var(--retro-gold-dim)">
6788
<th class="retro-table-head" style="text-align:left">Campeão</th>
6889
<th class="retro-table-head" style="text-align:center">Jogos</th>
90+
<th class="retro-table-head" style="text-align:center">V/D</th>
6991
<th class="retro-table-head" style="text-align:center">KDA</th>
7092
<th class="retro-table-head hidden sm:table-cell" style="text-align:center">K/D/A</th>
7193
<th class="retro-table-head hidden md:table-cell" style="text-align:center">CS/jogo</th>
@@ -81,6 +103,9 @@
81103
</div>
82104
</td>
83105
<td style="padding:10px 8px;text-align:center;font-size:16px;color:rgba(255,255,255,0.45);font-family:Verdana,sans-serif"><%= c["games"] %></td>
106+
<td style="padding:10px 8px;text-align:center;font-size:16px;font-family:Verdana,sans-serif">
107+
<span style="color:var(--color-kl-win)"><%= c["wins"] %></span><span style="color:rgba(255,255,255,0.2)">/</span><span style="color:var(--color-kl-loss)"><%= c["games"] - c["wins"] %></span>
108+
</td>
84109
<td style="padding:10px 8px;text-align:center">
85110
<span style="font-size:17px;font-weight:bold;font-family:Verdana,sans-serif" class="<%= kda_color(c['kda']) %>"><%= c["kda"] %></span>
86111
</td>
@@ -103,7 +128,7 @@
103128
<span class="retro-title">Histórico de Partidas</span>
104129
</div>
105130
<div style="display:flex;flex-direction:column;gap:6px">
106-
<% @match_history.reverse.each do |game| %>
131+
<% @match_history.each do |game| %>
107132
<% sg = @games_index[game["UniqueGame"]] %>
108133
<% if sg %>
109134
<% won = sg["Winner"] == game["Team"] %>

config/initializers/kings_lendas_teams.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@
9595
"paiNtriotas" => { abbr: "PNG", slug: "paintriotas", parody_of: "paiN Gaming", color: "#7B2D8B", logo: "/Teams/Seasons/3/PaiNtriotas.webp" },
9696
"Tepei Assassins" => { abbr: "TEP", slug: "tepei-assassins", parody_of: "Team Liquid", color: "#009FDA", logo: "/Teams/Seasons/2/Tepei.webp" },
9797
"Tepei Esports" => { abbr: "TEP", slug: "tepei-assassins", parody_of: "Team Liquid", color: "#009FDA", logo: "/Teams/Seasons/2/Tepei.webp" },
98-
"ÉanDG" => { abbr: "EDG", slug: "eandg", parody_of: "EDward Gaming", color: "#FF4500", logo: "/Teams/Seasons/3/EanDG.webp" }
98+
"ÉanDG" => { abbr: "EDG", slug: "eandg", parody_of: "EDward Gaming", color: "#FF4500", logo: "/Teams/Seasons/3/EanDG.webp" },
99+
"Team EsA" => { abbr: "ESA", slug: "team-esa", parody_of: "Gen.G", color: "#C8A84B", logo: "/Teams/Seasons/3/TeamEsa.webp" },
100+
"Team Shini" => { abbr: "SHN", slug: "team-shini", parody_of: "LOUD", color: "#00D4FF", logo: "/Teams/Seasons/3/TeamShini.webp" }
99101
}.freeze
100102

101103
SEASONS_DATA = {

0 commit comments

Comments
 (0)