gosu 0.7.20 → 0.7.21

Sign up to get free protection for your applications and to get access to all the features.
@@ -53,6 +53,7 @@ namespace Gosu {
53
53
 
54
54
  #endif
55
55
  #else
56
+ #define NOMINMAX
56
57
  #include <windows.h>
57
58
  wstring Gosu::utf8ToWstring(const string& utf8)
58
59
  {
@@ -245,16 +245,16 @@ Gosu::Window::Window(unsigned width, unsigned height, bool fullscreen,
245
245
  if (GetLastError() != 0)
246
246
  Win::throwLastError("setting the window's GWLP_USERDATA pointer");
247
247
 
248
- // Windowed: Create window large enough to display stuff
249
- // This is a pretty brutal heuristic I guess.
250
-
248
+ // Windowed: Create window large enough to display stuff
249
+ // This is a pretty brutal heuristic I guess.
250
+
251
251
  if (!fullscreen)
252
252
  {
253
- double factor = std::min(0.9 * screenWidth() / width,
254
- 0.8 * screenHeight() / height);
255
-
256
- if (factor < 1)
257
- width *= factor, height *= factor;
253
+ double factor = std::min(0.9 * screenWidth() / width,
254
+ 0.8 * screenHeight() / height);
255
+
256
+ if (factor < 1)
257
+ width *= factor, height *= factor;
258
258
  }
259
259
 
260
260
  // Determine the size the window needs to have.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Shows how to
4
4
  # * implement jumping/gravity
5
- # * implement scrolling
5
+ # * implement scrolling using Window#translate
6
6
  # * implement a simple tile-based map
7
7
  # * load levels from primitive text files
8
8
 
@@ -25,14 +25,15 @@
25
25
  # ...Enemies, a more sophisticated object system, weapons, title and credits
26
26
  # screens...
27
27
 
28
- begin
29
- # In case you use Gosu via rubygems.
30
- require 'rubygems'
31
- rescue LoadError
32
- # In case you don't.
33
- end
34
-
35
- require 'gosu'
28
+ require '../lib/gosu'
29
+ # begin
30
+ # # In case you use Gosu via rubygems.
31
+ # require 'rubygems'
32
+ # rescue LoadError
33
+ # # In case you don't.
34
+ # end
35
+ #
36
+ # require 'gosu'
36
37
  include Gosu
37
38
 
38
39
  module Tiles
@@ -48,10 +49,9 @@ class CollectibleGem
48
49
  @x, @y = x, y
49
50
  end
50
51
 
51
- def draw(screen_x, screen_y)
52
+ def draw
52
53
  # Draw, slowly rotating
53
- @image.draw_rot(@x - screen_x, @y - screen_y, 0,
54
- 25 * Math.sin(milliseconds / 133.7))
54
+ @image.draw_rot(@x, @y, 0, 25 * Math.sin(milliseconds / 133.7))
55
55
  end
56
56
  end
57
57
 
@@ -72,7 +72,7 @@ class CptnRuby
72
72
  @cur_image = @standing
73
73
  end
74
74
 
75
- def draw(screen_x, screen_y)
75
+ def draw
76
76
  # Flip vertically when facing to the left.
77
77
  if @dir == :left then
78
78
  offs_x = -25
@@ -81,7 +81,7 @@ class CptnRuby
81
81
  offs_x = 25
82
82
  factor = -1.0
83
83
  end
84
- @cur_image.draw(@x - screen_x + offs_x, @y - screen_y - 49, 0, factor, 1.0)
84
+ @cur_image.draw(@x + offs_x, @y - 49, 0, factor, 1.0)
85
85
  end
86
86
 
87
87
  # Could the object be placed at x + offs_x/y + offs_y without being stuck?
@@ -146,7 +146,6 @@ class Map
146
146
  def initialize(window, filename)
147
147
  # Load 60x60 tiles, 5px overlap in all four directions.
148
148
  @tileset = Image.load_tiles(window, "media/CptnRuby Tileset.png", 60, 60, true)
149
- @sky = Image.new(window, "media/Space.png", true)
150
149
 
151
150
  gem_img = Image.new(window, "media/CptnRuby Gem.png", false)
152
151
  @gems = []
@@ -171,11 +170,7 @@ class Map
171
170
  end
172
171
  end
173
172
 
174
- def draw(screen_x, screen_y)
175
- # Sigh, stars!
176
- @sky.draw(0, 0, 0)
177
-
178
-
173
+ def draw
179
174
  # Very primitive drawing function:
180
175
  # Draws all the tiles, some off-screen, some on-screen.
181
176
  @height.times do |y|
@@ -184,11 +179,11 @@ class Map
184
179
  if tile
185
180
  # Draw the tile with an offset (tile images have some overlap)
186
181
  # Scrolling is implemented here just as in the game objects.
187
- @tileset[tile].draw(x * 50 - screen_x - 5, y * 50 - screen_y - 5, 0)
182
+ @tileset[tile].draw(x * 50 - 5, y * 50 - 5, 0)
188
183
  end
189
184
  end
190
185
  end
191
- @gems.each { |c| c.draw(screen_x, screen_y) }
186
+ @gems.each { |c| c.draw }
192
187
  end
193
188
 
194
189
  # Solid at a given pixel position?
@@ -203,10 +198,11 @@ class Game < Window
203
198
  def initialize
204
199
  super(640, 480, false)
205
200
  self.caption = "Cptn. Ruby"
201
+ @sky = Image.new(self, "media/Space.png", true)
206
202
  @map = Map.new(self, "media/CptnRuby Map.txt")
207
203
  @cptn = CptnRuby.new(self, 400, 100)
208
- # Scrolling is stored as the position of the top left corner of the screen.
209
- @screen_x = @screen_y = 0
204
+ # The scrolling position is stored as top left corner of the screen.
205
+ @camera_x = @camera_y = 0
210
206
  end
211
207
  def update
212
208
  move_x = 0
@@ -215,12 +211,15 @@ class Game < Window
215
211
  @cptn.update(move_x)
216
212
  @cptn.collect_gems(@map.gems)
217
213
  # Scrolling follows player
218
- @screen_x = [[@cptn.x - 320, 0].max, @map.width * 50 - 640].min
219
- @screen_y = [[@cptn.y - 240, 0].max, @map.height * 50 - 480].min
214
+ @camera_x = [[@cptn.x - 320, 0].max, @map.width * 50 - 640].min
215
+ @camera_y = [[@cptn.y - 240, 0].max, @map.height * 50 - 480].min
220
216
  end
221
217
  def draw
222
- @map.draw @screen_x, @screen_y
223
- @cptn.draw @screen_x, @screen_y
218
+ @sky.draw 0, 0, 0
219
+ translate(-@camera_x, -@camera_y) do
220
+ @map.draw
221
+ @cptn.draw
222
+ end
224
223
  end
225
224
  def button_down(id)
226
225
  if id == KbUp then @cptn.try_to_jump end
@@ -9,7 +9,7 @@ begin
9
9
  require "#{File.dirname(__FILE__)}/gosu.for_#{version}.#{Config::CONFIG['DLEXT']}"
10
10
  require "#{File.dirname(__FILE__)}/gosu/swig_patches.rb"
11
11
  rescue LoadError => e
12
- require "#{File.dirname(__FILE__)}/gosu.custom.#{Config::CONFIG['DLEXT']}"
12
+ require "#{File.dirname(__FILE__)}/gosu.#{Config::CONFIG['DLEXT']}"
13
13
  require "#{File.dirname(__FILE__)}/gosu/swig_patches.rb"
14
14
  end
15
15
 
@@ -20,7 +20,7 @@ SOURCE_FILES =
20
20
  Graphics/RotFlip.cpp Graphics/BlockAllocator.cpp
21
21
  Graphics/Texture.cpp Graphics/LargeImageData.cpp
22
22
  Graphics/BitmapPNG.cpp Graphics/Font.cpp Graphics/BitmapBMP.cpp
23
- Graphics/TextUnix.cpp Graphics/Text.cpp
23
+ Graphics/TextUnix.cpp Graphics/Text.cpp Graphics/Transform.cpp
24
24
  Graphics/BitmapColorKey.cpp DirectoriesUnix.cpp
25
25
  Audio/AudioSDL.cpp RubyGosu_wrap.cxx)
26
26
 
@@ -32,7 +32,7 @@ SOURCE_FILES.each { |file| `cp ../GosuImpl/#{file} #{File.basename(file)}` }
32
32
 
33
33
  # Symlink our pretty gosu.so into ../lib
34
34
  # FIXME gosu.rb should just look in the right place
35
- `ln -s ../linux/gosu.so ../lib/gosu.custom.so`
35
+ `ln -s ../linux/gosu.so ../lib/gosu.so`
36
36
 
37
37
  sdl_config = with_config("sdl-config", "sdl-config")
38
38
  pango_config = "pkg-config pangoft2" # FIXME should probably use with_config
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gosu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.20
4
+ hash: 41
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 7
9
+ - 21
10
+ version: 0.7.21
5
11
  platform: ruby
6
12
  authors:
7
13
  - Julian Raschke
@@ -10,7 +16,7 @@ autorequire:
10
16
  bindir: bin
11
17
  cert_chain: []
12
18
 
13
- date: 2010-05-30 00:00:00 +08:00
19
+ date: 2010-06-13 00:00:00 +08:00
14
20
  default_executable:
15
21
  dependencies: []
16
22
 
@@ -105,6 +111,7 @@ files:
105
111
  - GosuImpl/Graphics/Common.hpp
106
112
  - GosuImpl/Graphics/DrawOp.hpp
107
113
  - GosuImpl/Graphics/Font.cpp
114
+ - GosuImpl/Graphics/FormattedString.hpp
108
115
  - GosuImpl/Graphics/GosuView.hpp
109
116
  - GosuImpl/Graphics/GosuView.mm
110
117
  - GosuImpl/Graphics/Graphics.cpp
@@ -123,6 +130,7 @@ files:
123
130
  - GosuImpl/Graphics/Texture.cpp
124
131
  - GosuImpl/Graphics/Texture.hpp
125
132
  - GosuImpl/Graphics/TextWin.cpp
133
+ - GosuImpl/Graphics/Transform.cpp
126
134
  - GosuImpl/Iconv.hpp
127
135
  - GosuImpl/InputMac.mm
128
136
  - GosuImpl/InputTouch.mm
@@ -135,7 +143,6 @@ files:
135
143
  - GosuImpl/RubyGosu_DllMain.cxx
136
144
  - GosuImpl/RubyGosu_SWIG_GC_PATCH.patch
137
145
  - GosuImpl/RubyGosu_wrap.cxx
138
- - GosuImpl/RubyGosu_wrap.cxx.rej
139
146
  - GosuImpl/RubyGosu_wrap.h
140
147
  - GosuImpl/RubyGosuStub.mm
141
148
  - GosuImpl/Sockets/CommSocket.cpp
@@ -168,17 +175,25 @@ rdoc_options: []
168
175
  require_paths:
169
176
  - lib
170
177
  required_ruby_version: !ruby/object:Gem::Requirement
178
+ none: false
171
179
  requirements:
172
180
  - - ">="
173
181
  - !ruby/object:Gem::Version
182
+ hash: 51
183
+ segments:
184
+ - 1
185
+ - 8
186
+ - 2
174
187
  version: 1.8.2
175
- version:
176
188
  required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
177
190
  requirements:
178
191
  - - ">="
179
192
  - !ruby/object:Gem::Version
193
+ hash: 3
194
+ segments:
195
+ - 0
180
196
  version: "0"
181
- version:
182
197
  requirements:
183
198
  - g++
184
199
  - pkg-config
@@ -191,7 +206,7 @@ requirements:
191
206
  g++ pkg-config ruby-dev xorg-dev libsdl-mixer1.2-dev libgl1-mesa-dev libpango1.0-dev
192
207
  )
193
208
  rubyforge_project:
194
- rubygems_version: 1.3.5
209
+ rubygems_version: 1.3.7
195
210
  signing_key:
196
211
  specification_version: 3
197
212
  summary: 2D game development library.
@@ -1,187 +0,0 @@
1
- ***************
2
- *** 8,13 ****
3
- * interface file instead.
4
- * ----------------------------------------------------------------------------- */
5
-
6
- #define SWIGRUBY
7
- #define SWIG_DIRECTORS
8
-
9
- --- 8,17 ----
10
- * interface file instead.
11
- * ----------------------------------------------------------------------------- */
12
-
13
- + // This file was afterwards patched using the following instructions:
14
- + // http://sourceforge.net/tracker/index.php?func=detail&aid=2034216&group_id=1645&atid=101645
15
- + // (Many thanks to Kevin Burge for that.)
16
- +
17
- #define SWIGRUBY
18
- #define SWIG_DIRECTORS
19
-
20
- ***************
21
- *** 855,860 ****
22
-
23
-
24
- #include <ruby.h>
25
-
26
- /* Remove global macros defined in Ruby's win32.h */
27
- #ifdef write
28
- --- 859,865 ----
29
-
30
-
31
- #include <ruby.h>
32
- + #include <map>
33
-
34
- /* Remove global macros defined in Ruby's win32.h */
35
- #ifdef write
36
- ***************
37
- *** 1183,1189 ****
38
- /* Global Ruby hash table to store Trackings from C/C++
39
- structs to Ruby Objects.
40
- */
41
- - static VALUE swig_ruby_trackings = Qnil;
42
-
43
- /* Global variable that stores a reference to the ruby
44
- hash table delete function. */
45
- --- 1188,1194 ----
46
- /* Global Ruby hash table to store Trackings from C/C++
47
- structs to Ruby Objects.
48
- */
49
- + static std::map<void*, VALUE> swig_ruby_trackings;
50
-
51
- /* Global variable that stores a reference to the ruby
52
- hash table delete function. */
53
- ***************
54
- *** 1200,1233 ****
55
- This is done to allow multiple DSOs to share the same
56
- tracking table.
57
- */
58
- - ID trackings_id = rb_intern( "@__trackings__" );
59
- VALUE verbose = rb_gv_get("VERBOSE");
60
- rb_gv_set("VERBOSE", Qfalse);
61
- - swig_ruby_trackings = rb_ivar_get( _mSWIG, trackings_id );
62
- rb_gv_set("VERBOSE", verbose);
63
-
64
- /* No, it hasn't. Create one ourselves */
65
- - if ( swig_ruby_trackings == Qnil )
66
- - {
67
- - swig_ruby_trackings = rb_hash_new();
68
- - rb_ivar_set( _mSWIG, trackings_id, swig_ruby_trackings );
69
- - }
70
-
71
- /* Now store a reference to the hash table delete function
72
- so that we only have to look it up once.*/
73
- swig_ruby_hash_delete = rb_intern("delete");
74
- }
75
-
76
- - /* Get a Ruby number to reference a pointer */
77
- - SWIGRUNTIME VALUE SWIG_RubyPtrToReference(void* ptr) {
78
- - /* We cast the pointer to an unsigned long
79
- - and then store a reference to it using
80
- - a Ruby number object. */
81
- -
82
- - /* Convert the pointer to a Ruby number */
83
- - return SWIG2NUM(ptr);
84
- - }
85
- -
86
- /* Get a Ruby number to reference an object */
87
- SWIGRUNTIME VALUE SWIG_RubyObjectToReference(VALUE object) {
88
- /* We cast the object to an unsigned long
89
- --- 1205,1222 ----
90
- This is done to allow multiple DSOs to share the same
91
- tracking table.
92
- */
93
- VALUE verbose = rb_gv_get("VERBOSE");
94
- rb_gv_set("VERBOSE", Qfalse);
95
- rb_gv_set("VERBOSE", verbose);
96
-
97
- /* No, it hasn't. Create one ourselves */
98
- + swig_ruby_trackings.clear();
99
-
100
- /* Now store a reference to the hash table delete function
101
- so that we only have to look it up once.*/
102
- swig_ruby_hash_delete = rb_intern("delete");
103
- }
104
-
105
- /* Get a Ruby number to reference an object */
106
- SWIGRUNTIME VALUE SWIG_RubyObjectToReference(VALUE object) {
107
- /* We cast the object to an unsigned long
108
- ***************
109
- *** 1249,1287 ****
110
-
111
- /* Add a Tracking from a C/C++ struct to a Ruby object */
112
- SWIGRUNTIME void SWIG_RubyAddTracking(void* ptr, VALUE object) {
113
- - /* In a Ruby hash table we store the pointer and
114
- - the associated Ruby object. The trick here is
115
- - that we cannot store the Ruby object directly - if
116
- - we do then it cannot be garbage collected. So
117
- - instead we typecast it as a unsigned long and
118
- - convert it to a Ruby number object.*/
119
- -
120
- - /* Get a reference to the pointer as a Ruby number */
121
- - VALUE key = SWIG_RubyPtrToReference(ptr);
122
- -
123
- - /* Get a reference to the Ruby object as a Ruby number */
124
- - VALUE value = SWIG_RubyObjectToReference(object);
125
- -
126
- /* Store the mapping to the global hash table. */
127
- - rb_hash_aset(swig_ruby_trackings, key, value);
128
- }
129
-
130
- /* Get the Ruby object that owns the specified C/C++ struct */
131
- SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) {
132
- - /* Get a reference to the pointer as a Ruby number */
133
- - VALUE key = SWIG_RubyPtrToReference(ptr);
134
- -
135
- - /* Now lookup the value stored in the global hash table */
136
- - VALUE value = rb_hash_aref(swig_ruby_trackings, key);
137
- -
138
- - if (value == Qnil) {
139
- - /* No object exists - return nil. */
140
- return Qnil;
141
- - }
142
- - else {
143
- - /* Convert this value to Ruby object */
144
- - return SWIG_RubyReferenceToObject(value);
145
- - }
146
- }
147
-
148
- /* Remove a Tracking from a C/C++ struct to a Ruby object. It
149
- --- 1238,1253 ----
150
-
151
- /* Add a Tracking from a C/C++ struct to a Ruby object */
152
- SWIGRUNTIME void SWIG_RubyAddTracking(void* ptr, VALUE object) {
153
- /* Store the mapping to the global hash table. */
154
- + swig_ruby_trackings[ptr] = object;
155
- }
156
-
157
- /* Get the Ruby object that owns the specified C/C++ struct */
158
- SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) {
159
- + if (swig_ruby_trackings.count(ptr) == 0)
160
- return Qnil;
161
- + else
162
- + return swig_ruby_trackings[ptr];
163
- }
164
-
165
- /* Remove a Tracking from a C/C++ struct to a Ruby object. It
166
- ***************
167
- *** 1289,1300 ****
168
- since the same memory address may be reused later to create
169
- a new object. */
170
- SWIGRUNTIME void SWIG_RubyRemoveTracking(void* ptr) {
171
- - /* Get a reference to the pointer as a Ruby number */
172
- - VALUE key = SWIG_RubyPtrToReference(ptr);
173
- -
174
- - /* Delete the object from the hash table by calling Ruby's
175
- - do this we need to call the Hash.delete method.*/
176
- - rb_funcall(swig_ruby_trackings, swig_ruby_hash_delete, 1, key);
177
- }
178
-
179
- /* This is a helper method that unlinks a Ruby object from its
180
- --- 1255,1261 ----
181
- since the same memory address may be reused later to create
182
- a new object. */
183
- SWIGRUNTIME void SWIG_RubyRemoveTracking(void* ptr) {
184
- + swig_ruby_trackings.erase(ptr);
185
- }
186
-
187
- /* This is a helper method that unlinks a Ruby object from its