scorched_earth 5.0.1.pre-java → 5.0.2.pre-java

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: dfa1221f5544042db555d173cf834a693e8f45b2
4
- data.tar.gz: d1a2e0323a1e430ff7c3d6d31091c7147e34e8f1
3
+ metadata.gz: 28ec71507af5b6c4c986dfe98825053cd5020e57
4
+ data.tar.gz: 3a437e2bf60c1461586f239789ac9b2cb4228a1d
5
5
  SHA512:
6
- metadata.gz: ef23bc10966526eb981726d24ef69312758bf2bf87e2dc105b69477e158b385557206d42c2fd6333e8ac425f175425ea1323e6f6f1f78b7fc17a85fc97bc6a9d
7
- data.tar.gz: 4e9fb4f997f614af6c8dfd71ce123acca2a2dc4963d8e652606f5a239fac0eb0dccaa9e8feb7faababf3cb4d4394e557b51e49917b84b1cc1274978bd5cca213
6
+ metadata.gz: 9c5eb534155f895af79fa11b1dde3812d3e6e26b891df7c36ae18ef843ace49f7d1234c305fad0558503204ed296e99bf70394bcbd29ca085393f0b73b8350cd
7
+ data.tar.gz: 383e0c02b970496f8ed3be4d4ee11460ac30ff7f436f9cdda2a0727fc65303278c857437453f7cb3360cfe72ee6357ae461f54bf7af21ef1f6ea2d50458a47be
@@ -15,8 +15,8 @@ module ScorchedEarth
15
15
  end
16
16
 
17
17
  def get(key)
18
- cache.fetch(key) do |key|
19
- cache[key] = first
18
+ cache[key] ||= begin
19
+ first
20
20
  end
21
21
  end
22
22
 
@@ -24,7 +24,7 @@ module ScorchedEarth
24
24
  return enum_for(:each) unless block_given?
25
25
 
26
26
  loop do
27
- color = strategy.color(colors)
27
+ color = strategy.color colors
28
28
  yield color
29
29
  end
30
30
  end
@@ -1,24 +1,25 @@
1
1
  module ScorchedEarth
2
2
  class EventRunner
3
- attr_reader :events, :subscribers
3
+ attr_reader :queue, :subscribers
4
4
 
5
5
  def initialize
6
- @events = Queue.new
6
+ @queue = Queue.new
7
7
  @subscribers = []
8
8
  end
9
9
 
10
10
  def publish(event)
11
- events << event
11
+ queue << event
12
12
  end
13
13
 
14
14
  def subscribe(klass, &block)
15
15
  subscribers << [klass, block]
16
16
  end
17
17
 
18
- def process_events!
19
- until events.empty?
20
- event = events.pop
18
+ def process!
19
+ processing = queue.size.times.map { queue.pop }
21
20
 
21
+ processing.each do |event|
22
+ puts event.inspect
22
23
  subscribers.each do |klass, block|
23
24
  block.call event if event.is_a? klass
24
25
  end
@@ -0,0 +1,5 @@
1
+ module ScorchedEarth
2
+ module Events
3
+ EntityDestroyed = Struct.new(:entity)
4
+ end
5
+ end
@@ -1,3 +1,7 @@
1
+ include Java
2
+
3
+ import java.awt.Color
4
+
1
5
  require 'scorched_earth/helpers'
2
6
  require 'scorched_earth/terrain'
3
7
  require 'scorched_earth/player'
@@ -7,12 +11,9 @@ require 'scorched_earth/mouse'
7
11
  require 'scorched_earth/color_palette'
8
12
  require 'scorched_earth/event_runner'
9
13
  require 'scorched_earth/events/entity_created'
14
+ require 'scorched_earth/events/entity_destroyed'
10
15
  require 'scorched_earth/events/game_ending'
11
16
 
12
- include Java
13
-
14
- import java.awt.Color
15
-
16
17
  module ScorchedEarth
17
18
  class Game
18
19
  include Helpers
@@ -27,30 +28,23 @@ module ScorchedEarth
27
28
  end
28
29
 
29
30
  def setup
30
- @color_palette = ColorPalette.new Color::RED, Color::YELLOW, Color::WHITE
31
+ @color_palette = ColorPalette.new Color.red, Color.yellow, Color.white
31
32
  @entities = []
32
33
  @event_runner = EventRunner.new
33
34
  @players = Array.new(2) { |index| Player.new rand(width), color_palette.get("player_#{index}") }
34
35
  @terrain = Terrain.new width, height, rand(10), color_palette.get('terrain')
35
36
  @mouse = Mouse.new event_runner, players, terrain
36
37
 
37
- event_runner.subscribe(Events::EntityCreated) { |event| entities << event.entity }
38
- event_runner.subscribe(Events::GameEnding) { |event| event.time < Time.now ? setup : event_runner.publish(event) }
38
+ register_events
39
39
  end
40
40
 
41
41
  def update(delta)
42
- event_runner.process_events!
43
-
44
- radius = 50
45
- @entities.each { |entity| entity.update delta }
46
- @entities, @dead = *@entities.partition { |entity| terrain.fetch(entity.x, 0) < entity.y }
47
- @dead
48
- .select { |entity| entity.is_a? Shot }
49
- .select { |entity| entity.x < terrain.width && entity.x > 0 }
50
- .each { |entity| terrain.bite entity.x, radius }
51
- .each { |entity| event_runner.publish Events::EntityCreated.new(Explosion.new(entity.x, entity.y)) }
52
- .select { |entity| players.any? { |player| inside_radius? entity.x - player.x, 0, radius } }
53
- .each { event_runner.publish Events::GameEnding.new(Time.now + 1) }
42
+ event_runner.process!
43
+
44
+ @entities
45
+ .each { |entity| entity.update delta }
46
+ .reject { |entity| terrain.fetch(entity.x, 0) < entity.y }
47
+ .each { |entity| event_runner.publish Events::EntityDestroyed.new(entity) }
54
48
  end
55
49
 
56
50
  def render(graphics)
@@ -73,5 +67,26 @@ module ScorchedEarth
73
67
  def publish(event)
74
68
  event_runner.publish event
75
69
  end
70
+
71
+ private
72
+
73
+ def register_events
74
+ event_runner.subscribe Events::MousePressed, &mouse.method(:mouse_pressed)
75
+ event_runner.subscribe Events::MouseReleased, &mouse.method(:mouse_released)
76
+ event_runner.subscribe Events::MouseMoved, &mouse.method(:mouse_moved)
77
+ event_runner.subscribe(Events::GameEnding) { |event| event.time < Time.now ? setup : event_runner.publish(event) }
78
+ event_runner.subscribe(Events::EntityCreated) { |event| entities << event.entity }
79
+ event_runner.subscribe(Events::EntityDestroyed) { |event| entities.delete event.entity }
80
+ event_runner.subscribe(Events::EntityDestroyed) do |event|
81
+ radius = 50
82
+ [event.entity]
83
+ .select { |entity| entity.is_a? Shot }
84
+ .select { |entity| entity.x < terrain.width && entity.x > 0 }
85
+ .each { |entity| terrain.bite entity.x, radius }
86
+ .each { |entity| event_runner.publish Events::EntityCreated.new(Explosion.new(entity.x, entity.y)) }
87
+ .select { |entity| players.any? { |player| inside_radius? entity.x - player.x, 0, radius } }
88
+ .each { event_runner.publish Events::GameEnding.new(Time.now + 0.25) }
89
+ end
90
+ end
76
91
  end
77
92
  end
@@ -13,10 +13,6 @@ module ScorchedEarth
13
13
  @event_runner = event_runner
14
14
  @players = players
15
15
  @terrain = terrain
16
-
17
- event_runner.subscribe Events::MousePressed, &method(:mouse_pressed)
18
- event_runner.subscribe Events::MouseReleased, &method(:mouse_released)
19
- event_runner.subscribe Events::MouseMoved, &method(:mouse_moved)
20
16
  end
21
17
 
22
18
  def current_player
@@ -9,7 +9,7 @@ module ScorchedEarth
9
9
 
10
10
  def draw(graphics, y)
11
11
  height = graphics.destination.height
12
- radius = 20
12
+ radius = 25
13
13
 
14
14
  graphics.set_color color
15
15
  graphics.fill_oval x - radius / 2, height - y - radius / 2, radius, radius
@@ -1,3 +1,7 @@
1
+ include Java
2
+
3
+ import java.awt.BasicStroke
4
+
1
5
  require 'scorched_earth/helpers'
2
6
 
3
7
  module ScorchedEarth
@@ -22,13 +26,14 @@ module ScorchedEarth
22
26
 
23
27
  def draw(graphics)
24
28
  height = graphics.destination.height
25
- degrees = angle(velocity_y, velocity_x)
29
+ degrees = angle velocity_y, velocity_x
26
30
  x1 = x
27
31
  y1 = height - y
28
32
  x2 = x1 + offset_x(degrees, length)
29
33
  y2 = y1 + offset_y(degrees, length)
30
34
 
31
35
  graphics.set_color color
36
+ graphics.setStroke BasicStroke.new 3
32
37
  graphics.draw_line x1, y1, x2, y2
33
38
  end
34
39
 
@@ -11,7 +11,7 @@ module ScorchedEarth
11
11
  attr_reader :color, :height
12
12
 
13
13
  def initialize(width, height, cycles, color)
14
- @color = color
14
+ @color = color
15
15
  @height = height
16
16
 
17
17
  super(width) do |index|
@@ -27,21 +27,6 @@ module ScorchedEarth
27
27
  graphics.draw_image cache { _draw(graphics) }, 0, 0, nil
28
28
  end
29
29
 
30
- def _draw(graphics)
31
- image = graphics
32
- .get_device_configuration
33
- .create_compatible_image width, height, Transparency::TRANSLUCENT
34
-
35
- each_with_index do |y, x|
36
- image.graphics.tap do |image_graphics|
37
- image_graphics.set_color color
38
- image_graphics.draw_line x, height - y, x, height
39
- end
40
- end
41
-
42
- image
43
- end
44
-
45
30
  def bite(center_x, radius, center_y = self[center_x])
46
31
  circle(radius) do |offset_x, offset_y|
47
32
  x = center_x + offset_x
@@ -59,6 +44,21 @@ module ScorchedEarth
59
44
 
60
45
  private
61
46
 
47
+ def _draw(graphics)
48
+ image = graphics
49
+ .get_device_configuration
50
+ .create_compatible_image width, height, Transparency::TRANSLUCENT
51
+
52
+ each_with_index do |y, x|
53
+ image.graphics.tap do |image_graphics|
54
+ image_graphics.set_color color
55
+ image_graphics.draw_line x, height - y, x, height
56
+ end
57
+ end
58
+
59
+ image
60
+ end
61
+
62
62
  def cache
63
63
  @cache ||= begin
64
64
  yield
@@ -1,3 +1,3 @@
1
1
  module ScorchedEarth
2
- VERSION = '5.0.1.pre'.freeze
2
+ VERSION = '5.0.2.pre'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scorched_earth
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1.pre
4
+ version: 5.0.2.pre
5
5
  platform: java
6
6
  authors:
7
7
  - James Moriarty
@@ -102,6 +102,7 @@ files:
102
102
  - lib/scorched_earth/color_palette.rb
103
103
  - lib/scorched_earth/event_runner.rb
104
104
  - lib/scorched_earth/events/entity_created.rb
105
+ - lib/scorched_earth/events/entity_destroyed.rb
105
106
  - lib/scorched_earth/events/game_ending.rb
106
107
  - lib/scorched_earth/events/mouse_moved.rb
107
108
  - lib/scorched_earth/events/mouse_pressed.rb