gosu_extensions 0.2.7 → 0.2.8
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 +1 -1
- data/bin/gogogosu +33 -0
- data/lib/core/background.rb +47 -0
- data/lib/core/collision.rb +3 -2
- data/lib/core/game_window.rb +11 -21
- data/lib/core/rotation.rb +6 -0
- data/lib/extensions/math.rb +7 -0
- data/lib/gosu_extensions.rb +3 -0
- data/lib/traits/shooter.rb +33 -3
- data/lib/units/sprite.rb +4 -6
- metadata +9 -6
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.8
|
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
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
#
|
3
|
+
class Background
|
4
|
+
|
5
|
+
#
|
6
|
+
#
|
7
|
+
attr_reader :window, :draw_function
|
8
|
+
|
9
|
+
#
|
10
|
+
#
|
11
|
+
def initialize window
|
12
|
+
@window = window
|
13
|
+
@draw_function = functionify window.background_options
|
14
|
+
end
|
15
|
+
|
16
|
+
def functionify path_or_color
|
17
|
+
Gosu::Color === path_or_color ? color_draw_function(path_or_color) : image_draw_function(path_or_color)
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
#
|
22
|
+
def color_draw_function color
|
23
|
+
lambda do
|
24
|
+
window.draw_quad(0, 0, color,
|
25
|
+
window.width, 0, color,
|
26
|
+
window.width, window.height, color,
|
27
|
+
0, window.height, color,
|
28
|
+
0, :default)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
#
|
34
|
+
def image_draw_function path
|
35
|
+
image = Gosu::Image.new window, File.join(Resources.root, path), true
|
36
|
+
lambda do
|
37
|
+
image.draw 0, 0, Layer::Background, 1.0, 1.0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
#
|
43
|
+
def draw
|
44
|
+
draw_function.call
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
data/lib/core/collision.rb
CHANGED
@@ -48,15 +48,16 @@ class Collision
|
|
48
48
|
#
|
49
49
|
def complex_package definition
|
50
50
|
lambda do |this_shape, that_shape|
|
51
|
-
this_that = Array.new
|
51
|
+
this_that = Array.new 2
|
52
52
|
window.moveables.each do |moveable|
|
53
53
|
if moveable.shape == this_shape
|
54
54
|
this_that[0] = moveable
|
55
|
+
break if this_that.all?
|
55
56
|
end
|
56
57
|
if moveable.shape == that_shape
|
57
58
|
this_that[1] = moveable
|
59
|
+
break if this_that.all?
|
58
60
|
end
|
59
|
-
break if this_that.all?
|
60
61
|
end
|
61
62
|
definition.call *this_that
|
62
63
|
end
|
data/lib/core/game_window.rb
CHANGED
@@ -25,15 +25,14 @@ class GameWindow < Gosu::Window
|
|
25
25
|
:caption,
|
26
26
|
:screen_width,
|
27
27
|
:screen_height,
|
28
|
-
:gravity_vector
|
28
|
+
:gravity_vector,
|
29
|
+
:background_options
|
29
30
|
attr_reader :environment,
|
30
31
|
:moveables,
|
31
32
|
:font,
|
32
33
|
:scheduling,
|
33
34
|
:collisions
|
34
|
-
attr_accessor :
|
35
|
-
:background_hard_borders,
|
36
|
-
:stop_condition,
|
35
|
+
attr_accessor :stop_condition,
|
37
36
|
:proceed_condition
|
38
37
|
|
39
38
|
def initialize
|
@@ -117,6 +116,9 @@ class GameWindow < Gosu::Window
|
|
117
116
|
def gravity_vector
|
118
117
|
@gravity_vector || @gravity_vector = CP::Vec2.new(0, 0.98/SUBSTEPS)
|
119
118
|
end
|
119
|
+
def background_options
|
120
|
+
Gosu::Color::WHITE
|
121
|
+
end
|
120
122
|
|
121
123
|
class << self
|
122
124
|
def gravity amount = 0.98
|
@@ -150,10 +152,10 @@ class GameWindow < Gosu::Window
|
|
150
152
|
self.font_size = size
|
151
153
|
end
|
152
154
|
end
|
153
|
-
def background
|
155
|
+
def background path_or_color = Gosu::Color::WHITE
|
156
|
+
attr_reader :background_options
|
154
157
|
InitializerHooks.register self do
|
155
|
-
self.
|
156
|
-
self.background_hard_borders = options[:hard_borders] || false
|
158
|
+
self.background_options = path_or_color
|
157
159
|
end
|
158
160
|
end
|
159
161
|
def full_screen
|
@@ -206,9 +208,7 @@ class GameWindow < Gosu::Window
|
|
206
208
|
self.caption = self.class.caption || ""
|
207
209
|
end
|
208
210
|
def setup_background
|
209
|
-
|
210
|
-
@background_image = Gosu::Image.new self, File.join(Resources.root, self.background_path), self.background_hard_borders
|
211
|
-
end
|
211
|
+
@background = Background.new self
|
212
212
|
end
|
213
213
|
def setup_moveables
|
214
214
|
@moveables = Moveables.new
|
@@ -442,7 +442,7 @@ class GameWindow < Gosu::Window
|
|
442
442
|
# Draws a background image.
|
443
443
|
#
|
444
444
|
def draw_background
|
445
|
-
@
|
445
|
+
@background.draw
|
446
446
|
end
|
447
447
|
# Draw ambient objects, like asteroids or the like that do not influence the player.
|
448
448
|
#
|
@@ -460,16 +460,6 @@ class GameWindow < Gosu::Window
|
|
460
460
|
def draw_ui
|
461
461
|
@uis.each(&:draw_ui)
|
462
462
|
end
|
463
|
-
#
|
464
|
-
#
|
465
|
-
# Example:
|
466
|
-
# imprint do
|
467
|
-
# circle x, y, radius, :fill => true, :color => :black
|
468
|
-
# end
|
469
|
-
#
|
470
|
-
def imprint &block
|
471
|
-
@background_image.paint &block
|
472
|
-
end
|
473
463
|
|
474
464
|
# Input handling.
|
475
465
|
#
|
data/lib/gosu_extensions.rb
CHANGED
@@ -17,17 +17,20 @@ end
|
|
17
17
|
$:.unshift File.join(File.dirname(__FILE__), '/extensions')
|
18
18
|
require 'module'
|
19
19
|
require 'numeric'
|
20
|
+
require 'math'
|
20
21
|
|
21
22
|
$:.unshift File.join(File.dirname(__FILE__), '/core')
|
22
23
|
require 'resources'
|
23
24
|
|
24
25
|
require 'vector_utilities'
|
26
|
+
require 'rotation'
|
25
27
|
require 'initializer_hooks'
|
26
28
|
|
27
29
|
require 'trait'
|
28
30
|
require 'traits'
|
29
31
|
require 'it_is_a'
|
30
32
|
|
33
|
+
require 'background'
|
31
34
|
require 'moveables'
|
32
35
|
require 'remove_shapes'
|
33
36
|
require 'wave'
|
data/lib/traits/shooter.rb
CHANGED
@@ -1,5 +1,32 @@
|
|
1
1
|
module Shooter extend Trait
|
2
2
|
|
3
|
+
module Position
|
4
|
+
def self.front x, y = nil
|
5
|
+
# y || (y, x = x, 0)
|
6
|
+
y ||= 0
|
7
|
+
relative x, y
|
8
|
+
end
|
9
|
+
def self.relative x, y
|
10
|
+
relative_position = CP::Vec2.new x, y
|
11
|
+
relative_length = relative_position.length
|
12
|
+
relative_rotation = relative_position.to_angle
|
13
|
+
lambda { self.position + (self.rotation - relative_rotation).radians_to_vec2*relative_length }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
module Velocity
|
17
|
+
def self.front initial_speed
|
18
|
+
lambda { |_| self.rotation_vector*initial_speed }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
module Rotation
|
22
|
+
def self.custom rotation; lambda { |_| rotation } end
|
23
|
+
Frontal = lambda { |_| self.rotation }
|
24
|
+
Right = lambda { |_| self.rotation + Rotation::Half }
|
25
|
+
Backwards = lambda { |_| -self.rotation }
|
26
|
+
Left = lambda { |_| self.rotation - Rotation::Half }
|
27
|
+
Default = Frontal
|
28
|
+
end
|
29
|
+
|
3
30
|
Shoot = :shoot
|
4
31
|
|
5
32
|
manual <<-MANUAL
|
@@ -51,17 +78,20 @@ module Shooter extend Trait
|
|
51
78
|
self.shot_type = type
|
52
79
|
end
|
53
80
|
end
|
54
|
-
def muzzle_position &block
|
81
|
+
def muzzle_position lam = nil, &block
|
82
|
+
block ||= lam
|
55
83
|
InitializerHooks.register self do
|
56
84
|
muzzle_position_func &block
|
57
85
|
end
|
58
86
|
end
|
59
|
-
def muzzle_velocity &block
|
87
|
+
def muzzle_velocity lam = nil, &block
|
88
|
+
block ||= lam
|
60
89
|
InitializerHooks.register self do
|
61
90
|
muzzle_velocity_func &block
|
62
91
|
end
|
63
92
|
end
|
64
|
-
def muzzle_rotation &block
|
93
|
+
def muzzle_rotation lam = nil, &block
|
94
|
+
block ||= lam
|
65
95
|
InitializerHooks.register self do
|
66
96
|
muzzle_rotation_func &block
|
67
97
|
end
|
data/lib/units/sprite.rb
CHANGED
@@ -28,7 +28,7 @@ class Sprite
|
|
28
28
|
# Default rotation is upwards.
|
29
29
|
#
|
30
30
|
def rotation
|
31
|
-
@rotation || -
|
31
|
+
@rotation || -Rotation::Half
|
32
32
|
end
|
33
33
|
|
34
34
|
class << self
|
@@ -44,11 +44,9 @@ class Sprite
|
|
44
44
|
#
|
45
45
|
#
|
46
46
|
def rotation amount = nil, &block
|
47
|
-
|
48
|
-
#
|
49
|
-
to_execute = block || lambda { amount }
|
47
|
+
block ||= lambda { amount }
|
50
48
|
InitializerHooks.append self do
|
51
|
-
self.rotation =
|
49
|
+
self.rotation = block[]
|
52
50
|
end
|
53
51
|
end
|
54
52
|
def random_rotation
|
@@ -148,7 +146,7 @@ class Sprite
|
|
148
146
|
self.rotation.radians_to_vec2
|
149
147
|
end
|
150
148
|
def current_speed
|
151
|
-
speed.length
|
149
|
+
speed.length # Hm, speed should already be the absolute value.
|
152
150
|
end
|
153
151
|
|
154
152
|
# Movement and Position.
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 8
|
9
|
+
version: 0.2.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Florian Hanke
|
@@ -15,8 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-04-
|
19
|
-
default_executable:
|
18
|
+
date: 2010-04-13 00:00:00 +02:00
|
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: []
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- Rakefile
|
55
55
|
- VERSION
|
56
56
|
- generator/gogogosu.rb
|
57
|
+
- lib/core/background.rb
|
57
58
|
- lib/core/collision.rb
|
58
59
|
- lib/core/control.rb
|
59
60
|
- lib/core/controls.rb
|
@@ -65,12 +66,14 @@ files:
|
|
65
66
|
- lib/core/moveables.rb
|
66
67
|
- lib/core/remove_shapes.rb
|
67
68
|
- lib/core/resources.rb
|
69
|
+
- lib/core/rotation.rb
|
68
70
|
- lib/core/scheduling.rb
|
69
71
|
- lib/core/trait.rb
|
70
72
|
- lib/core/traits.rb
|
71
73
|
- lib/core/vector_utilities.rb
|
72
74
|
- lib/core/wave.rb
|
73
75
|
- lib/core/waves.rb
|
76
|
+
- lib/extensions/math.rb
|
74
77
|
- lib/extensions/module.rb
|
75
78
|
- lib/extensions/numeric.rb
|
76
79
|
- lib/gosu_extensions.rb
|