class Rubygoal::Formation
Attributes
lines_definition[RW]
players_position[RW]
Public Class Methods
new()
click to toggle source
# File lib/rubygoal/formation.rb, line 7 def initialize @players_position = {} @lines_definition = { defenders: Field::WIDTH / 6, def_midfielders: Field::WIDTH / 3, midfielders: Field::WIDTH / 2, att_midfielders: Field::WIDTH / 3 * 2, attackers: Field::WIDTH / 6 * 5, } end
Public Instance Methods
errors()
click to toggle source
# File lib/rubygoal/formation.rb, line 30 def errors errors = [] # TODO Check if we need to count for the goalkeeper as well if players_position.size != 10 errors << 'Incorrect number of players, are you missing a name?' end errors end
lineup(&block)
click to toggle source
# File lib/rubygoal/formation.rb, line 26 def lineup(&block) instance_eval(&block) end
method_missing(method, *args)
click to toggle source
# File lib/rubygoal/formation.rb, line 19 def method_missing(method, *args) line_name = method.to_s.chomp('=').to_sym if lines_definition[line_name] set_players_in_custom_line(lines_definition[line_name], args) end end
valid?()
click to toggle source
# File lib/rubygoal/formation.rb, line 41 def valid? errors.empty? end
Private Instance Methods
custom_position(&block)
click to toggle source
# File lib/rubygoal/formation.rb, line 51 def custom_position(&block) CustomPosition.apply(self, &block) end
line_position_separation(players)
click to toggle source
# File lib/rubygoal/formation.rb, line 69 def line_position_separation(players) Field::HEIGHT / (players.size + 1) end
lines(&block)
click to toggle source
# File lib/rubygoal/formation.rb, line 47 def lines(&block) CustomLines.apply(self, &block) end
set_players_in_custom_line(position_x, players)
click to toggle source
# File lib/rubygoal/formation.rb, line 55 def set_players_in_custom_line(position_x, players) base_position = Position.new(position_x, 0) separation = line_position_separation(players) players.each_with_index do |player, i| next if player == :none offset = Position.new(0, separation * (i + 1)) position = base_position.add(offset) self.players_position[player] = position end end