gosu_extensions 0.3.0 → 0.3.1

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
data/bin/gogogosu ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/local/bin/ruby
2
+ # TODO remove
3
+
4
+ Signal.trap("INT") { puts; exit } # CTRL-C
5
+
6
+ File.open(File.join(File.dirname(__FILE__), '../VERSION')) do |f|
7
+ puts "Gosu Extensions #{f.read}"
8
+ end
9
+
10
+ application = ARGV.first
11
+
12
+ puts "Usage: gogogosu <application_name>" and exit(1) unless application
13
+
14
+ require File.dirname(__FILE__) + '/../generator/gogogosu'
15
+
16
+ generator = Generator::Gogogosu.new
17
+
18
+ generator.dir application do
19
+ generator.dir 'lib' do
20
+
21
+ end
22
+ generator.dir 'media' do
23
+
24
+ end
25
+ end
26
+
27
+ puts <<-START
28
+ Great!
29
+
30
+ Now proceed as follows:
31
+ 1. cd #{application}
32
+ 2.
33
+ START
@@ -1,3 +1,13 @@
1
+ # In an Imageable, you either need to define method
2
+ # image path, *args
3
+ # for an unchanging image
4
+ # or
5
+ # sequenced_image path, width, height, frequency = 10, &block
6
+ # for a sprite sequence.
7
+ # Or override
8
+ # method image
9
+ # or set an image dynamically.
10
+ #
1
11
  module Imageable extend Trait
2
12
 
3
13
  class ImageMissingError < RuntimeError
@@ -10,6 +20,9 @@ module Imageable extend Trait
10
20
  or
11
21
  sequenced_image path, width, height, frequency = 10, &block
12
22
  for a sprite sequence.
23
+ Or override
24
+ method image
25
+ or set an image dynamically.
13
26
 
14
27
  MESSAGE
15
28
  end
@@ -19,28 +32,32 @@ module Imageable extend Trait
19
32
  klass.extend ClassMethods
20
33
  end
21
34
 
22
- def initialize window
23
- raise ImageMissingError.new unless self.respond_to? :image
24
- super window
35
+ def initialize *args
36
+ super *args
37
+ end
38
+
39
+ attr_writer :image
40
+ def image
41
+ @image || raise(ImageMissingError.new)
25
42
  end
26
43
 
27
44
  module ClassMethods
28
45
 
29
46
  def image path, *args
30
47
  InitializerHooks.register self do
31
- @image = Gosu::Image.new self.window, File.join(Resources.root, path), *args
32
- end
33
- define_method :image do
34
- @image
48
+ self.image = Gosu::Image.new self.window, File.join(Resources.root, path), *args
35
49
  end
36
50
  end
37
51
 
38
52
  def sequenced_image path, width, height, frequency = 10, &block
39
53
  InitializerHooks.register self do
40
54
  @image_sequence_started = Time.now
41
- @image = Gosu::Image::load_tiles self.window, File.join(Resources.root, path), width, height, false
55
+ self.image = Gosu::Image::load_tiles self.window, File.join(Resources.root, path), width, height, false
42
56
  end
43
57
  # divider = 1000 / frequency
58
+
59
+ # Override image.
60
+ #
44
61
  define_method :image do
45
62
  @image[(block ? block : lambda { (Time.now - @image_sequence_started)*frequency % @image.size })[]]
46
63
  end
@@ -41,8 +41,8 @@ module Shooter extend Trait
41
41
  Example:
42
42
  frequency 20
43
43
  shoots Bullet
44
- muzzle_position { self.position + self.rotation_vector.normalize*self.radius }
45
- muzzle_velocity { |_| self.rotation_vector.normalize }
44
+ muzzle_position { self.position + self.rotation_vector.normalize*20 } # Or: Shooter::Position.front(20)
45
+ muzzle_velocity { |_| self.rotation_vector.normalize } # Or: Shooter::Velocity.front(1)
46
46
  muzzle_rotation { |_| self.rotation }
47
47
  MANUAL
48
48
 
data/lib/units/thing.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  class Thing < Sprite
4
4
 
5
5
  attr_reader :shape
6
+ delegate :collision_type, :to => :shape
6
7
 
7
8
  def mass
8
9
  0.1
@@ -27,9 +28,6 @@ class Thing < Sprite
27
28
  }
28
29
  def shape form, *args
29
30
  form_shape_class_mapping = @@form_shape_class_mapping
30
- define_method :radius do
31
- args.first # TODO fix!
32
- end
33
31
  InitializerHooks.prepend self do
34
32
  shape_class = form_shape_class_mapping[form]
35
33
  raise "Shape #{form} does not exist." unless shape_class
@@ -7,6 +7,20 @@ describe Imageable do
7
7
  Resources.stub! :root => 'some/root'
8
8
  end
9
9
 
10
+ describe 'image=' do
11
+ before(:each) do
12
+ @imageable = test_class_with(Imageable).new @window
13
+ end
14
+ it 'should set the image' do
15
+ lambda { @imageable.image = :some_image }.should_not raise_error
16
+ end
17
+ it 'should return that image' do
18
+ @imageable.image = :some_image
19
+
20
+ @imageable.image.should == :some_image
21
+ end
22
+ end
23
+
10
24
  context 'image defined on class' do
11
25
  before(:each) do
12
26
  @imageable_class = test_class_with(Imageable) do
@@ -25,7 +39,7 @@ describe Imageable do
25
39
  sequenced_image 'some/path', :some_width, :some_height, 10.0
26
40
  end
27
41
  end
28
- it "should define a method damage which returns the set value" do
42
+ it "should define a method image" do
29
43
  image = stub :image
30
44
  sequenced_image = stub :image, :size => 10, :[] => image
31
45
 
@@ -36,15 +50,13 @@ describe Imageable do
36
50
  end
37
51
  context 'no image given – what now?' do
38
52
  before(:each) do
39
- @imageable_class = Class.new do
40
- include Imageable
41
- end
53
+ @imageable_class = test_class_with Imageable
42
54
  end
43
55
  it "should raise a ImageMissingError" do
44
- lambda { @imageable_class.new(@window) }.should raise_error(Imageable::ImageMissingError)
56
+ lambda { @imageable_class.new(@window).image }.should raise_error(Imageable::ImageMissingError)
45
57
  end
46
58
  it "should raise with the right message" do
47
- lambda { @imageable_class.new(@window) }.should raise_error(Imageable::ImageMissingError, <<-MESSAGE
59
+ lambda { @imageable_class.new(@window).image }.should raise_error(Imageable::ImageMissingError, <<-MESSAGE
48
60
 
49
61
  In an Imageable, you either need to define method
50
62
  image path, *args
@@ -52,6 +64,9 @@ describe Imageable do
52
64
  or
53
65
  sequenced_image path, width, height, frequency = 10, &block
54
66
  for a sprite sequence.
67
+ Or override
68
+ method image
69
+ or set an image dynamically.
55
70
 
56
71
  MESSAGE
57
72
  )
@@ -8,6 +8,18 @@ describe Thing do
8
8
  @thing = Thing.new @window
9
9
  end
10
10
 
11
+ describe 'collision_type=' do
12
+ before(:each) do
13
+ @shape = stub :shape
14
+ @thing.stub! :shape => @shape
15
+ end
16
+ it 'should delegate to the shape' do
17
+ @shape.should_receive(:collision_type).once.with :some_collision_type
18
+
19
+ @thing.collision_type :some_collision_type
20
+ end
21
+ end
22
+
11
23
  describe "current_size" do
12
24
  it "should return [1.0, 1.0] by default" do
13
25
  @thing.current_size.should == [1.0, 1.0]
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 0
9
- version: 0.3.0
8
+ - 1
9
+ version: 0.3.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Florian Hanke
@@ -16,7 +16,7 @@ bindir: bin
16
16
  cert_chain: []
17
17
 
18
18
  date: 2010-04-15 00:00:00 +02:00
19
- default_executable:
19
+ default_executable: gogogosu
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: gosu
@@ -44,8 +44,8 @@ dependencies:
44
44
  version_requirements: *id002
45
45
  description: ""
46
46
  email: florian.hanke@gmail.com
47
- executables: []
48
-
47
+ executables:
48
+ - gogogosu
49
49
  extensions: []
50
50
 
51
51
  extra_rdoc_files: []