rubygoal-core 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03ea48a45147ab75f1cf9fd801c276abbc18ac2a
4
- data.tar.gz: 193e95c0fe4a59656a0b92fccd47e9135ec921e5
3
+ metadata.gz: fb4de14541b186717e8da427436883b6bcd61fa2
4
+ data.tar.gz: fd4e5f7cf4bf87f91bb599ff7561f74f15f8964d
5
5
  SHA512:
6
- metadata.gz: f76d25a6e2111f584d054bcc47f4bac863dd2ebbbeb36a925c3a2d9154861e685c8745ef08560d53a23a8d6ce19be896ac735fc6e3f27ca8d0b0970c3dcb481b
7
- data.tar.gz: 90184605c4bb9a2fe4c17c89251f524fa53ed5ce3626d0f905e27913119acba3732e2b974b4ba7cd43ceed88320c9e52d76a3b3f4cca817dd84ff10d74eb3b23
6
+ metadata.gz: a01c77f8b4f15ab8551ebcfd8c186eafd504bc3f583b2cfad35c3d00e96ef4772dfb828f718af8c7c400ea6ba3c08a4edde08feb0fad540294232f18892a4c0a
7
+ data.tar.gz: 711b27ec77a42df529a30b583be786483e1a6f1eb3b598ad5972049baa0a8b8f92a3cf7fbb453222680c23f78653cdc7a47d25932f045267909c8c9dddd913c3
data/lib/rubygoal/ball.rb CHANGED
@@ -5,6 +5,7 @@ require 'rubygoal/moveable'
5
5
  module Rubygoal
6
6
  class Ball
7
7
  include Moveable
8
+ attr_reader :last_kicker
8
9
 
9
10
  def initialize
10
11
  super
@@ -15,15 +16,17 @@ module Rubygoal
15
16
  Field.goal?(position)
16
17
  end
17
18
 
18
- def move(direction, speed)
19
+ def move(direction, speed, kicker)
19
20
  self.velocity = Velocity.new(
20
21
  Util.offset_x(direction, speed),
21
22
  Util.offset_y(direction, speed)
22
23
  )
24
+ self.last_kicker = kicker
23
25
  end
24
26
 
25
27
  def reinitialize_position
26
28
  self.position = Field.center_position
29
+ self.last_kicker = nil
27
30
  end
28
31
 
29
32
  def update(elapsed_time)
@@ -35,13 +38,11 @@ module Rubygoal
35
38
 
36
39
  private
37
40
 
41
+ attr_writer :last_kicker
42
+
38
43
  def prevent_out_of_bounds
39
- if Field.out_of_bounds_width?(position)
40
- velocity.x *= -1
41
- end
42
- if Field.out_of_bounds_height?(position)
43
- velocity.y *= -1
44
- end
44
+ velocity.x *= -1 if Field.out_of_bounds_width?(position)
45
+ velocity.y *= -1 if Field.out_of_bounds_height?(position)
45
46
  end
46
47
 
47
48
  def decelerate(elapsed_time)
@@ -7,7 +7,8 @@ module Rubygoal
7
7
  :deceleration_coef, :initial_player_positions, :game_time,
8
8
  :average_lower_error, :average_upper_error, :average_speed,
9
9
  :fast_lower_error, :fast_upper_error, :fast_speed,
10
- :captain_error, :captain_speed, :debug_output, :record_game
10
+ :captain_error, :captain_speed, :debug_output, :record_game,
11
+ :record_last_kicker
11
12
  end
12
13
 
13
14
  class << self
@@ -45,5 +46,6 @@ module Rubygoal
45
46
  config.game_time = 120
46
47
  config.debug_output = true
47
48
  config.record_game = false
49
+ config.record_last_kicker = false
48
50
  end
49
51
  end
@@ -11,15 +11,16 @@ module Rubygoal
11
11
 
12
12
  include Moveable
13
13
 
14
- attr_reader :side, :type
14
+ attr_reader :side, :type, :name
15
15
  attr_accessor :coach_defined_position
16
16
 
17
- def initialize(game, side)
17
+ def initialize(game, side, name)
18
18
  super()
19
19
 
20
20
  @time_to_kick_again = 0
21
21
  @side = side
22
22
  @player_movement = PlayerMovement.new(game, self)
23
+ @name = name
23
24
  end
24
25
 
25
26
  def can_kick?(ball)
@@ -30,7 +31,7 @@ module Rubygoal
30
31
  direction = random_direction(target)
31
32
  strength = random_strength
32
33
 
33
- ball.move(direction, strength)
34
+ ball.move(direction, strength, name: name, side: side)
34
35
  reset_waiting_to_kick!
35
36
  end
36
37
 
@@ -27,7 +27,7 @@ module Rubygoal
27
27
  attr_reader :game, :frames
28
28
 
29
29
  def frame_info
30
- {
30
+ frame = {
31
31
  time: @game.time.round(0),
32
32
  score: [@game.score_home, @game.score_away],
33
33
  ball: [
@@ -37,6 +37,9 @@ module Rubygoal
37
37
  home: team_info(@game.team_home),
38
38
  away: team_info(@game.team_away)
39
39
  }
40
+ last_kicker_info(frame) if Rubygoal.configuration.record_last_kicker
41
+
42
+ frame
40
43
  end
41
44
 
42
45
  def team_info(team)
@@ -49,5 +52,14 @@ module Rubygoal
49
52
  ]
50
53
  end
51
54
  end
55
+
56
+ def last_kicker_info(frame)
57
+ if @game.ball.last_kicker
58
+ frame[:last_kicker] = [
59
+ @game.ball.last_kicker[:name],
60
+ @game.ball.last_kicker[:side]
61
+ ]
62
+ end
63
+ end
52
64
  end
53
65
  end
data/lib/rubygoal/team.rb CHANGED
@@ -101,21 +101,21 @@ module Rubygoal
101
101
  end
102
102
 
103
103
  def initialize_players
104
- @players = { goalkeeper: GoalKeeperPlayer.new(game, side) }
104
+ @players = { goalkeeper: GoalKeeperPlayer.new(game, side, :goalkeeper) }
105
105
 
106
106
  unless @coach.valid?
107
107
  puts @coach.errors
108
108
  raise "Invalid team definition: #{@coach.name}"
109
109
  end
110
110
 
111
- @players[@coach.captain_player.name] = CaptainPlayer.new(game, side)
111
+ @players[@coach.captain_player.name] = CaptainPlayer.new(game, side, @coach.captain_player.name)
112
112
 
113
113
  @coach.players_by_type(:fast).each do |player_def|
114
- @players[player_def.name] = FastPlayer.new(game, side)
114
+ @players[player_def.name] = FastPlayer.new(game, side, player_def.name)
115
115
  end
116
116
 
117
117
  @coach.players_by_type(:average).each do |player_def|
118
- @players[player_def.name] = AveragePlayer.new(game, side)
118
+ @players[player_def.name] = AveragePlayer.new(game, side, player_def.name)
119
119
  end
120
120
 
121
121
  initialize_player_positions
@@ -140,12 +140,11 @@ module Rubygoal
140
140
  nearest_teammate = nil
141
141
 
142
142
  (players.values - [player]).each do |teammate|
143
- if teammate_is_on_front?(player, teammate)
144
- dist = player.distance(teammate.position)
145
- if min_dist > dist
146
- nearest_teammate = teammate
147
- min_dist = dist
148
- end
143
+ next unless teammate_is_on_front?(player, teammate)
144
+ dist = player.distance(teammate.position)
145
+ if min_dist > dist
146
+ nearest_teammate = teammate
147
+ min_dist = dist
149
148
  end
150
149
  end
151
150
 
@@ -1,3 +1,3 @@
1
1
  module Rubygoal
2
- VERSION = Gem::Version.new '1.1.0'
2
+ VERSION = Gem::Version.new '1.2.0'
3
3
  end
data/test/player_test.rb CHANGED
@@ -118,6 +118,20 @@ module Rubygoal
118
118
  assert_in_delta 20, velocity_strength, 1
119
119
  end
120
120
 
121
+ def test_kick_registered
122
+ assert_nil game.ball.last_kick
123
+
124
+ position = Position.new(100, 100)
125
+ game.ball.position = position
126
+ game.ball.velocity = Velocity.new(0, 0)
127
+ player.position = position
128
+
129
+ player.kick(game.ball, Position.new(300, 300))
130
+
131
+ assert_equal player.name, game.ball.last_kick[:name]
132
+ assert_equal player.side, game.ball.last_kick[:side]
133
+ end
134
+
121
135
  private
122
136
 
123
137
  attr_reader :game, :player
@@ -108,6 +108,20 @@ module Rubygoal
108
108
  assert_in_delta 115, frames.last[:time], 0.001
109
109
  end
110
110
 
111
+ def test_recorded_frame_with_last_kick
112
+ Rubygoal.configuration.record_last_kicker = true
113
+ name, player = @game.team_home.players.first
114
+ player.position = @game.ball.position
115
+ player.kick(@game.ball, Position.new(100, 100))
116
+ @game.update
117
+
118
+ last_frame = recorder.to_hash[:frames].last
119
+
120
+ assert !last_frame[:last_kicker].nil?
121
+ assert_equal name, last_frame[:last_kicker][0]
122
+ assert_equal :home, last_frame[:last_kicker][1]
123
+ end
124
+
111
125
  private
112
126
 
113
127
  attr_reader :game, :recorder
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubygoal-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jorge Bejar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-16 00:00:00.000000000 Z
11
+ date: 2017-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  version: '0'
132
132
  requirements: []
133
133
  rubyforge_project:
134
- rubygems_version: 2.6.11
134
+ rubygems_version: 2.5.1
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: Rubygoal core