mirror of
https://github.com/jcwimer/wrestlingApp
synced 2026-04-02 04:35:26 +00:00
Updated seeding logic for double elim to make byes truly random and to keep bracket lines consistent through match generations
This commit is contained in:
@@ -79,7 +79,6 @@ class WeightsController < ApplicationController
|
||||
format.json { head :no_content }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def pool_order
|
||||
pool = params[:pool_to_order].to_i
|
||||
|
||||
@@ -155,7 +155,7 @@ class Weight < ApplicationRecord
|
||||
wrestlers.select{|w| w.pool == nil}
|
||||
end
|
||||
|
||||
def calculate_bracket_size()
|
||||
def calculate_bracket_size
|
||||
num_wrestlers = wrestlers.reload.size
|
||||
return nil if num_wrestlers <= 0 # Handle invalid input
|
||||
|
||||
|
||||
@@ -3,25 +3,6 @@ class GenerateTournamentMatches
|
||||
@tournament = tournament
|
||||
end
|
||||
|
||||
def generateWeight(weight)
|
||||
if Rails.env.production?
|
||||
self.delay(:job_owner_id => @tournament.id, :job_owner_type => "Generate matches for weights class #{weight.max}").generate_weight_raw(weight)
|
||||
else
|
||||
self.generate_weight_raw(weight)
|
||||
end
|
||||
end
|
||||
|
||||
def generate_weight_raw(weight)
|
||||
@tournament.clear_errored_deferred_jobs
|
||||
WipeTournamentMatches.new(@tournament).wipeWeightMatches(weight)
|
||||
@tournament.curently_generating_matches = 1
|
||||
@tournament.save
|
||||
unAssignBouts
|
||||
PoolToBracketMatchGeneration.new(@tournament).generatePoolToBracketMatchesWeight(weight) if @tournament.tournament_type == "Pool to bracket"
|
||||
postMatchCreationActions
|
||||
PoolToBracketGenerateLoserNames.new(@tournament).assignLoserNamesWeight(weight) if @tournament.tournament_type == "Pool to bracket"
|
||||
end
|
||||
|
||||
def generate
|
||||
if Rails.env.production?
|
||||
self.delay(:job_owner_id => @tournament.id, :job_owner_type => "Generate matches for all weights").generate_raw
|
||||
@@ -45,7 +26,7 @@ class GenerateTournamentMatches
|
||||
@tournament.curently_generating_matches = 1
|
||||
@tournament.save
|
||||
WipeTournamentMatches.new(@tournament).setUpMatchGeneration
|
||||
TournamentSeeding.new(@tournament).setSeeds
|
||||
TournamentSeeding.new(@tournament).set_seeds
|
||||
end
|
||||
|
||||
def postMatchCreationActions
|
||||
|
||||
@@ -3,42 +3,63 @@ class TournamentSeeding
|
||||
@tournament = tournament
|
||||
end
|
||||
|
||||
def setSeeds
|
||||
@tournament.weights.each do |w|
|
||||
resetAllSeeds(w)
|
||||
setOriginalSeeds(w)
|
||||
randomSeeding(w)
|
||||
def set_seeds
|
||||
@tournament.weights.each do |weight|
|
||||
wrestlers = weight.wrestlers
|
||||
bracket_size = weight.calculate_bracket_size
|
||||
|
||||
wrestlers = reset_bracket_line_for_lines_higher_than_bracket_size(wrestlers, bracket_size)
|
||||
wrestlers = set_original_seed_to_bracket_line(wrestlers)
|
||||
wrestlers = random_seeding(wrestlers, bracket_size)
|
||||
wrestlers.each(&:save)
|
||||
end
|
||||
end
|
||||
|
||||
def randomSeeding(weight)
|
||||
wrestlerWithSeeds = weight.wrestlers.select{|w| w.original_seed != nil }.sort_by{|w| w.original_seed}
|
||||
if wrestlerWithSeeds.size > 0
|
||||
highestSeed = wrestlerWithSeeds.last.bracket_line
|
||||
seed = highestSeed + 1
|
||||
else
|
||||
seed = 1
|
||||
def random_seeding(wrestlers, bracket_size)
|
||||
available_bracket_lines = (1..bracket_size).to_a
|
||||
|
||||
# remove bracket lines that are taken from available_bracket_lines
|
||||
wrestlers_with_bracket_lines = wrestlers.select{|w| w.bracket_line != nil }
|
||||
wrestlers_with_bracket_lines.each do |wrestler|
|
||||
available_bracket_lines.delete(wrestler.bracket_line)
|
||||
end
|
||||
wrestlersWithoutSeed = weight.wrestlers.select{|w| w.original_seed == nil }
|
||||
wrestlersWithoutSeed.shuffle.each do |w|
|
||||
w.bracket_line = seed
|
||||
w.save
|
||||
seed += 1
|
||||
|
||||
wrestlers_without_bracket_lines = wrestlers.select{|w| w.bracket_line == nil }
|
||||
# Iterrate over the list randomly
|
||||
wrestlers_without_bracket_lines.shuffle.each do |wrestler|
|
||||
random_available_bracket_line = available_bracket_lines.sample
|
||||
wrestler.bracket_line = random_available_bracket_line
|
||||
available_bracket_lines.delete(random_available_bracket_line)
|
||||
end
|
||||
return wrestlers
|
||||
end
|
||||
|
||||
def setOriginalSeeds(weight)
|
||||
wrestlerWithSeeds = weight.wrestlers.select{|w| w.original_seed != nil }
|
||||
wrestlerWithSeeds.each do |w|
|
||||
w.bracket_line = w.original_seed
|
||||
w.save
|
||||
def set_original_seed_to_bracket_line(wrestlers)
|
||||
wrestlers_with_seeds = wrestlers.select{|w| w.original_seed != nil }
|
||||
wrestlers_with_seeds.each do |wrestler|
|
||||
wrestlers_with_seeded_wrestlers_bracket_line = wrestlers.select{|w| w.bracket_line == wrestler.original_seed && w.id != wrestler.id}
|
||||
wrestlers_with_seeded_wrestlers_bracket_line.each do |wrestler_with_wrong_bracket_line|
|
||||
wrestler_with_wrong_bracket_line.bracket_line = nil
|
||||
end
|
||||
|
||||
wrestler.bracket_line = wrestler.original_seed
|
||||
end
|
||||
return wrestlers
|
||||
end
|
||||
|
||||
def resetAllSeeds(weight)
|
||||
weight.wrestlers.each do |w|
|
||||
def reset_bracket_line_for_lines_higher_than_bracket_size(wrestlers, bracket_size)
|
||||
wrestlers.each do |w|
|
||||
if w.bracket_line && w.bracket_line > bracket_size
|
||||
w.bracket_line = nil
|
||||
end
|
||||
end
|
||||
return wrestlers
|
||||
end
|
||||
|
||||
def reset_all_seeds(wrestlers)
|
||||
wrestlers.each do |w|
|
||||
w.bracket_line = nil
|
||||
w.save
|
||||
end
|
||||
return wrestlers
|
||||
end
|
||||
end
|
||||
@@ -35,7 +35,7 @@
|
||||
<% end %></td>
|
||||
<% if can? :manage, @tournament %>
|
||||
<td>
|
||||
<%= link_to '', wrestler, method: :delete, data: { confirm: "Are you sure you want to delete #{wrestler.name}?" } , :class=>"fas fa-trash-alt" %>
|
||||
<%= link_to '', wrestler, method: :delete, data: { confirm: "Are you sure you want to delete #{wrestler.name}? THIS WILL DELETE ALL MATCHES." } , :class=>"fas fa-trash-alt" %>
|
||||
</td>
|
||||
<% end %>
|
||||
</tr>
|
||||
@@ -43,7 +43,7 @@
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<br><p>*All wrestlers without a seed (determined by tournament director) will be assigned a bracket line.</p>
|
||||
<br><p>*All wrestlers without a seed (determined by tournament director) will be assigned a random bracket line.</p>
|
||||
<% if can? :manage, @tournament %>
|
||||
<br>
|
||||
<%= submit_tag "Save Seeds", :class=>"btn btn-success"%>
|
||||
|
||||
Reference in New Issue
Block a user