gosu 0.7.7.1-mswin32 → 0.7.8-mswin32

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.
@@ -4,6 +4,7 @@
4
4
  ## Date: 2007-10-05
5
5
  ## License: Same as for Gosu (MIT)
6
6
  ## Comments: Based on the Gosu Ruby Tutorial, but incorporating the Chipmunk Physics Engine
7
+ ## See http://code.google.com/p/gosu/wiki/RubyChipmunkIntegration for the accompanying text.
7
8
 
8
9
  require 'rubygems'
9
10
  require 'gosu'
@@ -0,0 +1,159 @@
1
+ # Based on the C Demo3 demonstration distributed with Chipmunk.
2
+ # Also with some help from the ChipmunkIntegration.rb program.
3
+ #
4
+ # License: Same as for Gosu (MIT)
5
+ # Created on 21/10/2007, 00:05:19 by Robert Sheehan
6
+
7
+ require 'rubygems'
8
+ require 'gosu'
9
+ require 'chipmunk'
10
+ require 'RMagick'
11
+
12
+ # Convenience method for converting between radians, Gosu degrees and Vec2 vectors.
13
+ class Numeric
14
+ def radians_to_gosu
15
+ self * 180.0 / Math::PI + 90
16
+ end
17
+
18
+ def radians_to_vec2
19
+ CP::Vec2.new(Math::cos(self), Math::sin(self))
20
+ end
21
+ end
22
+
23
+ # Layering of sprites
24
+ module ZOrder
25
+ Background, Box = *0..1
26
+ end
27
+
28
+ SCREEN_WIDTH = 640
29
+ SCREEN_HEIGHT = 480
30
+ TICK = 1.0/60.0
31
+ NUM_POLYGONS = 80
32
+ NUM_SIDES = 4
33
+ EDGE_SIZE = 15
34
+
35
+ # Everything appears in the Gosu::Window.
36
+ class DemoWindow < Gosu::Window
37
+
38
+ def initialize
39
+ super(SCREEN_WIDTH, SCREEN_HEIGHT, false)
40
+ self.caption = "A Chipmunk-RMagick-Gosu Demonstration"
41
+ @space = CP::Space.new
42
+ @space.iterations = 5
43
+ @space.gravity = CP::Vec2.new(0, 100)
44
+ # you can replace the background with any image with this line
45
+ # background = Magick::ImageList.new( "media/Space.png")
46
+ fill = Magick::TextureFill.new(Magick::ImageList.new("granite:"))
47
+ background = Magick::Image.new(SCREEN_WIDTH, SCREEN_HEIGHT, fill)
48
+ setup_triangles(background)
49
+ @background_image = Gosu::Image.new(self, background, true) # turn the image into a Gosu one
50
+ @boxes = create_boxes(NUM_POLYGONS)
51
+ end
52
+
53
+ # Create all of the static triangles.
54
+ # Adds them to the space and the background image.
55
+ def setup_triangles(background)
56
+ gc = Magick::Draw.new
57
+ gc.stroke_width(2)
58
+ gc.stroke('red')
59
+ gc.fill('blue')
60
+ # all the triangles are part of the same body
61
+ body = CP::Body.new(Float::MAX, Float::MAX)
62
+ base = 15
63
+ height = 10
64
+ shape_vertices = [CP::Vec2.new(-base, base), CP::Vec2.new(base, base), CP::Vec2.new(0, -height)]
65
+ # make shapes and images
66
+ 9.times do |i|
67
+ 6.times do |j|
68
+ stagger = (j % 2) * 40
69
+ x = i * 80 + stagger
70
+ y = j * 70 + 80
71
+ shape = CP::Shape::Poly.new(body, shape_vertices, CP::Vec2.new(x, y))
72
+ shape.e = 1
73
+ shape.u = 1
74
+ @space.add_static_shape(shape)
75
+ gc.polygon(x - base + 1, y + base - 1, x + base - 1, y + base - 1, x, y - height + 1)
76
+ end
77
+ end
78
+ # do the drawing
79
+ gc.draw(background)
80
+ end
81
+
82
+ # Produces the vertices of a regular polygon.
83
+ def polygon_vertices(sides, size)
84
+ vertices = []
85
+ sides.times do |i|
86
+ angle = -2 * Math::PI * i / sides
87
+ vertices << angle.radians_to_vec2() * size
88
+ end
89
+ return vertices
90
+ end
91
+
92
+ # Produces the image of a polygon.
93
+ def polygon_image(vertices)
94
+ box_image = Magick::Image.new(EDGE_SIZE * 2, EDGE_SIZE * 2) { self.background_color = 'transparent' }
95
+ gc = Magick::Draw.new
96
+ gc.stroke('red')
97
+ gc.fill('plum')
98
+ draw_vertices = vertices.map { |v| [v.x + EDGE_SIZE, v.y + EDGE_SIZE] }.flatten
99
+ gc.polygon(*draw_vertices)
100
+ gc.draw(box_image)
101
+ return Gosu::Image.new(self, box_image, false)
102
+ end
103
+
104
+ # Produces the polygon objects and adds them to the space.
105
+ def create_boxes(num)
106
+ box_vertices = polygon_vertices(NUM_SIDES, EDGE_SIZE)
107
+ box_image = polygon_image(box_vertices)
108
+ boxes = []
109
+ num.times do
110
+ body = CP::Body.new(1, CP::moment_for_poly(1.0, box_vertices, CP::Vec2.new(0, 0))) # mass, moment of inertia
111
+ body.p = CP::Vec2.new(rand(SCREEN_WIDTH), rand(40) - 50)
112
+ shape = CP::Shape::Poly.new(body, box_vertices, CP::Vec2.new(0, 0))
113
+ shape.e = 0.0
114
+ shape.u = 0.4
115
+ boxes << Box.new(box_image, body)
116
+ @space.add_body(body)
117
+ @space.add_shape(shape)
118
+ end
119
+ return boxes
120
+ end
121
+
122
+ # All the simulation is done here.
123
+ def update
124
+ @space.step(TICK)
125
+ @boxes.each { |box| box.check_off_screen }
126
+ end
127
+
128
+ # All the updating of the screen is done here.
129
+ def draw
130
+ @background_image.draw(0, 0, ZOrder::Background)
131
+ @boxes.each { |box| box.draw }
132
+ end
133
+
134
+ end
135
+
136
+ # The falling boxes class.
137
+ # Nothing more than a body and an image.
138
+ class Box
139
+
140
+ def initialize(image, body)
141
+ @image = image
142
+ @body = body
143
+ end
144
+
145
+ # If it goes offscreen we put it back to the top.
146
+ def check_off_screen
147
+ pos = @body.p
148
+ if pos.y > SCREEN_HEIGHT + EDGE_SIZE or pos.x > SCREEN_WIDTH + EDGE_SIZE or pos.x < -EDGE_SIZE
149
+ @body.p = CP::Vec2.new(rand * SCREEN_WIDTH, 0)
150
+ end
151
+ end
152
+
153
+ def draw
154
+ @image.draw_rot(@body.p.x, @body.p.y, ZOrder::Box, @body.a.radians_to_gosu)
155
+ end
156
+ end
157
+
158
+ window = DemoWindow.new
159
+ window.show
Binary file
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: gosu
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.7.7.1
7
- date: 2007-11-07 00:00:00 +01:00
6
+ version: 0.7.8
7
+ date: 2007-12-11 00:00:00 +01:00
8
8
  summary: 2D game development library.
9
9
  require_paths:
10
10
  - lib
@@ -35,6 +35,7 @@ files:
35
35
  - LICENSE
36
36
  - examples/ChipmunkIntegration.rb
37
37
  - examples/CptnRuby.rb
38
+ - examples/MoreChipmunkAndRMagick.rb
38
39
  - examples/OpenGLIntegration.rb
39
40
  - examples/RMagickIntegration.rb
40
41
  - examples/Tutorial.rb