rubygoal-core 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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