gosu_extensions 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
@@ -54,6 +54,7 @@ class GameWindow < Gosu::Window
54
54
  setup_steps
55
55
  setup_scheduling
56
56
  setup_font
57
+ setup_uis
57
58
 
58
59
  setup_containers
59
60
 
@@ -163,7 +164,7 @@ class GameWindow < Gosu::Window
163
164
 
164
165
  attr_accessor :collisions
165
166
  def no_collision this, that = this
166
- # Doesn't work, as &nil == nil
167
+ # The next line doesn't work, as &nil == nil
167
168
  # collision this, that, &Collision::None
168
169
  InitializerHooks.register self do
169
170
  self.collisions << Collision.new(self, this, that)
@@ -235,6 +236,9 @@ class GameWindow < Gosu::Window
235
236
  def setup_font
236
237
  @font = Gosu::Font.new self, self.font_name, self.font_size
237
238
  end
239
+ def setup_uis
240
+ @uis = []
241
+ end
238
242
  def setup_environment
239
243
  @environment = Environment.new
240
244
  class << @environment
@@ -288,6 +292,7 @@ class GameWindow < Gosu::Window
288
292
  @current_loop = lambda do
289
293
  proceed if proceed_condition && instance_eval(&proceed_condition)
290
294
  advance_step
295
+ handle_input
291
296
  # TODO stopped
292
297
  end
293
298
  after_stopping
@@ -354,8 +359,18 @@ class GameWindow < Gosu::Window
354
359
  # end
355
360
  #
356
361
  def unregister thing
362
+ # explicitly call unregister_ui thing if you want it
357
363
  remove thing.shape
358
364
  end
365
+ # Register a user interfaceable object.
366
+ #
367
+ def register_ui thing
368
+ @uis << thing
369
+ end
370
+ def unregister_ui thing
371
+ @uis.delete thing
372
+ end
373
+
359
374
  # Remove this shape the next turn.
360
375
  #
361
376
  # Note: Internal use. Use unregister to properly remove a moveable.
@@ -444,7 +459,7 @@ class GameWindow < Gosu::Window
444
459
  # @font.draw "P1 Score: ", 10, 10, ZOrder::UI, 1.0, 1.0, 0xffff0000
445
460
  #
446
461
  def draw_ui
447
-
462
+ @uis.each(&:draw_ui)
448
463
  end
449
464
  #
450
465
  #
@@ -41,6 +41,7 @@ require 'controls'
41
41
  require 'layer'
42
42
 
43
43
  $:.unshift File.join(File.dirname(__FILE__), '/traits')
44
+ require 'user_interface'
44
45
  require 'pod'
45
46
  require 'attachable'
46
47
  require 'damaging'
@@ -0,0 +1,32 @@
1
+ #
2
+ #
3
+ module UserInterface extend Trait
4
+
5
+ def self.included base
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ # Call this to install an UI on all instances of
10
+ # this class at the given position.
11
+ #
12
+ module ClassMethods
13
+ attr_accessor :ui
14
+ def ui x = 20, y = 10, color = Gosu::Color::BLACK, &display
15
+ InitializerHooks.append self do
16
+ ui x, y, color, &display
17
+ end
18
+ end
19
+ end
20
+
21
+ # Call this to dynamically add itself to the ui displaying.
22
+ #
23
+ def ui x = 20, y = 10, color = Gosu::Color::BLACK, &display
24
+ metaclass.instance_eval do
25
+ define_method :draw_ui do
26
+ window.font.draw instance_eval(&display), x, y, Layer::UI, 1.0, 1.0, color
27
+ end
28
+ end
29
+ window.register_ui self
30
+ end
31
+
32
+ end
@@ -6,7 +6,7 @@ describe Traits do
6
6
  it "should return a list of all traits that can be included using it_is_a, it_is, or it_has" do
7
7
  ActiveSupport::Deprecation.stub! :warn => :shut_up
8
8
 
9
- Traits.list.should == [Attachable, Controllable, Damaging, Generator, Hitpoints, Imageable, Lives, Moveable, Pod, Shooter, ShortLived, Shot, Targetable, Targeting::Closest, Turnable]
9
+ Traits.list.should == [Attachable, Controllable, Damaging, Generator, Hitpoints, Imageable, Lives, Moveable, Pod, Shooter, ShortLived, Shot, Targetable, Targeting::Closest, Turnable, UserInterface]
10
10
  end
11
11
  end
12
12
 
@@ -0,0 +1,44 @@
1
+ require File.join(File.dirname(__FILE__), '/../../spec_helper')
2
+
3
+ describe UserInterface do
4
+
5
+ before(:each) do
6
+ @window = stub :window
7
+ @user_interface = test_class_with(UserInterface).new @window
8
+ end
9
+
10
+ describe "ui" do
11
+ before(:each) do
12
+ @font = stub :font, :null_object => true
13
+ @window.stub! :font => @font
14
+ @window.stub! :register_ui
15
+ end
16
+ it "should register itself with window" do
17
+ @window.should_receive(:register_ui).once.with @user_interface
18
+
19
+ @user_interface.ui
20
+ end
21
+ it "should install a method draw_ui" do
22
+ @user_interface.ui do end
23
+
24
+ lambda { @user_interface.draw_ui }.should_not raise_error
25
+ end
26
+ it "should do the right thing on calling draw_ui (defaults)" do
27
+ some_block = lambda { :some_result }
28
+ @user_interface.ui &some_block
29
+
30
+ @font.should_receive(:draw).once.with :some_result, 20, 10, Layer::UI, 1.0, 1.0, Gosu::Color::BLACK
31
+
32
+ @user_interface.draw_ui
33
+ end
34
+ it "should do the right thing on calling draw_ui" do
35
+ some_block = lambda { :some_result }
36
+ @user_interface.ui :some_x, :some_y, :some_color, &some_block
37
+
38
+ @font.should_receive(:draw).once.with :some_result, :some_x, :some_y, Layer::UI, 1.0, 1.0, :some_color
39
+
40
+ @user_interface.draw_ui
41
+ end
42
+ end
43
+
44
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 3
9
- version: 0.2.3
8
+ - 4
9
+ version: 0.2.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Florian Hanke
@@ -89,6 +89,7 @@ files:
89
89
  - lib/traits/targeting.rb
90
90
  - lib/traits/targeting/closest.rb
91
91
  - lib/traits/turnable.rb
92
+ - lib/traits/user_interface.rb
92
93
  - lib/units/sprite.rb
93
94
  - lib/units/thing.rb
94
95
  has_rdoc: true
@@ -145,4 +146,5 @@ test_files:
145
146
  - spec/lib/traits/targetable_spec.rb
146
147
  - spec/lib/traits/targeting_spec.rb
147
148
  - spec/lib/traits/turnable_spec.rb
149
+ - spec/lib/traits/user_interface_spec.rb
148
150
  - spec/lib/units/thing_spec.rb