line-em-up 0.4.0 → 2.0.0
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.
- checksums.yaml +4 -4
- data/line-em-up/game_window.rb +189 -52
- data/line-em-up/irb_requirements.rb +24 -2
- data/line-em-up/lib/config_setting.rb +126 -16
- data/line-em-up/lib/difficulty_setting.rb +64 -64
- data/line-em-up/lib/lighting.rb +143 -0
- data/line-em-up/lib/resolution_setting.rb +58 -58
- data/line-em-up/lib/setting.rb +104 -0
- data/line-em-up/lib/ship_loadout_setting.rb +476 -0
- data/line-em-up/lib/ship_setting.rb +98 -0
- data/line-em-up/lib/z_order.rb +1 -1
- data/line-em-up/loadout_window.rb +253 -0
- data/line-em-up/media/bullet_launcher_hardpoint.png +0 -0
- data/line-em-up/media/hardpoint_empty.png +0 -0
- data/line-em-up/media/header@2x.psd +0 -0
- data/line-em-up/media/laser-end-background-half.png +0 -0
- data/line-em-up/media/laser-end-background.png +0 -0
- data/line-em-up/media/laser-end-overlay-half.png +0 -0
- data/line-em-up/media/laser-end-overlay.png +0 -0
- data/line-em-up/media/laser-middle-background-half.png +0 -0
- data/line-em-up/media/laser-middle-background.png +0 -0
- data/line-em-up/media/laser-middle-overlay-half.png +0 -0
- data/line-em-up/media/laser-middle-overlay-short.png +0 -0
- data/line-em-up/media/laser-middle-overlay.png +0 -0
- data/line-em-up/media/laser-overlay-half.png +0 -0
- data/line-em-up/media/laser-overlay.png +0 -0
- data/line-em-up/media/laser-start-background-half.png +0 -0
- data/line-em-up/media/laser-start-background.png +0 -0
- data/line-em-up/media/laser-start-overlay-half.png +0 -0
- data/line-em-up/media/laser-start-overlay.png +0 -0
- data/line-em-up/media/laser_beam_hardpoint copy.png +0 -0
- data/line-em-up/media/laser_beam_hardpoint.png +0 -0
- data/line-em-up/media/line-em-up-resolution.png +0 -0
- data/line-em-up/media/menu/loadout.png +0 -0
- data/line-em-up/media/{start.png → menu/start.png} +0 -0
- data/line-em-up/media/missile_launcher.png +0 -0
- data/line-em-up/media/{spaceship.png → pilotable_ships/basic_ship/default.png} +0 -0
- data/line-em-up/media/{spaceship_original.png → pilotable_ships/basic_ship/large.png} +0 -0
- data/line-em-up/media/{spaceship_left.png → pilotable_ships/basic_ship/left.png} +0 -0
- data/line-em-up/media/pilotable_ships/basic_ship/left_broadside.png +0 -0
- data/line-em-up/media/pilotable_ships/basic_ship/original.png +0 -0
- data/line-em-up/media/{spaceship_right.png → pilotable_ships/basic_ship/right.png} +0 -0
- data/line-em-up/media/pilotable_ships/basic_ship/right_broadside.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship/default.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship/large.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship/left.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship/left_broadside.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship/original.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship/right.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship/right_broadside.png +0 -0
- data/line-em-up/media/pilotable_ships/mite_ship.zip +0 -0
- data/line-em-up/models/basic_ship.rb +94 -0
- data/line-em-up/models/bomb.rb +1 -1
- data/line-em-up/models/building.rb +2 -2
- data/line-em-up/models/bullet.rb +127 -74
- data/line-em-up/models/bullet_launcher.rb +23 -0
- data/line-em-up/models/cursor.rb +37 -1
- data/line-em-up/models/dumb_missile_launcher.rb +40 -0
- data/line-em-up/models/dumb_projectile.rb +9 -2
- data/line-em-up/models/enemy_bomb.rb +1 -1
- data/line-em-up/models/enemy_bullet.rb +55 -0
- data/line-em-up/models/enemy_player.rb +1 -1
- data/line-em-up/models/execute_open_gl.rb +80 -0
- data/line-em-up/models/general_object.rb +82 -9
- data/line-em-up/models/gl_background.rb +103 -30
- data/line-em-up/models/grappling_hook.rb +1 -1
- data/line-em-up/models/hardpoint.rb +120 -0
- data/line-em-up/models/laser_launcher.rb +192 -0
- data/line-em-up/models/laser_particle.rb +133 -0
- data/line-em-up/models/launcher.rb +149 -0
- data/line-em-up/models/main.rb +119 -26
- data/line-em-up/models/menu.rb +43 -3
- data/line-em-up/models/menu_item.rb +25 -14
- data/line-em-up/models/missile_boat.rb +5 -4
- data/line-em-up/models/mite.rb +3 -2
- data/line-em-up/models/mite_ship.rb +61 -0
- data/line-em-up/models/mothership.rb +1 -1
- data/line-em-up/models/pickup.rb +2 -2
- data/line-em-up/models/pilotable_ship.rb +599 -0
- data/line-em-up/models/player.rb +207 -150
- data/line-em-up/models/projectile.rb +3 -24
- data/line-em-up/models/semi_guided_missile.rb +1 -1
- data/line-em-up/models/small_explosion.rb +2 -2
- data/line-em-up/models/star.rb +7 -2
- data/menu_launcher.rb +10 -6
- metadata +113 -10
- data/line-em-up/media/spaceship_left-test.png +0 -0
data/line-em-up/models/bullet.rb
CHANGED
@@ -1,8 +1,20 @@
|
|
1
1
|
require_relative 'dumb_projectile.rb'
|
2
|
-
require '
|
3
|
-
# require '
|
2
|
+
require 'gosu'
|
3
|
+
# require 'opengl'
|
4
4
|
# require 'glu'
|
5
|
-
|
5
|
+
|
6
|
+
require 'opengl'
|
7
|
+
require 'glut'
|
8
|
+
|
9
|
+
|
10
|
+
include OpenGL
|
11
|
+
include GLUT
|
12
|
+
|
13
|
+
# For opengl-bindings
|
14
|
+
# OpenGL.load_lib()
|
15
|
+
|
16
|
+
# GLUT.load_lib()
|
17
|
+
|
6
18
|
|
7
19
|
class Bullet < DumbProjectile
|
8
20
|
DAMAGE = 3
|
@@ -20,76 +32,117 @@ class Bullet < DumbProjectile
|
|
20
32
|
# include Glut
|
21
33
|
|
22
34
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
glEnable(GL_BLEND)
|
31
|
-
|
32
|
-
glMatrixMode(GL_PROJECTION)
|
33
|
-
glLoadIdentity
|
34
|
-
glTranslate(0, 0, -4)
|
35
|
-
|
36
|
-
# glEnable(GL_TEXTURE_2D)
|
37
|
-
# glBindTexture(GL_TEXTURE_2D, info.tex_name)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
middle_x = @screen_width / 2
|
42
|
-
puts "MIDDLE X: #{middle_x}"
|
43
|
-
middle_y = @screen_height / 2
|
44
|
-
puts "MIDDLE Y: #{middle_y}"
|
45
|
-
increment_x = 1.0 / middle_x
|
46
|
-
increment_y = 1.0 / middle_y
|
47
|
-
puts "INcREMENT X : #{increment_x}"
|
48
|
-
puts "INcREMENT Y : #{increment_y}"
|
49
|
-
|
50
|
-
puts "PRE X: #{@x}"
|
51
|
-
puts "PRE Y: #{@y}"
|
52
|
-
puts "MID X: #{(@x - middle_x)}"
|
53
|
-
puts "MID Y: #{(@y - middle_y)}"
|
54
|
-
|
55
|
-
new_pos_x = (@x - middle_x) * increment_x
|
56
|
-
new_pos_y = (@y - middle_y) * increment_y
|
57
|
-
# Inverted Y
|
58
|
-
new_pos_y = new_pos_y * -1
|
59
|
-
|
60
|
-
height = @image_height.to_f * increment_x
|
61
|
-
|
62
|
-
puts "NEW POS X: #{new_pos_x}"
|
63
|
-
puts "NEW POS Y: #{new_pos_y}"
|
64
|
-
|
65
|
-
z = ZOrder::Projectile
|
66
|
-
# @image.draw(@x - get_width / 2, @y - get_height / 2, get_draw_ordering, @scale, @scale)
|
67
|
-
# gl do
|
68
|
-
# points_x = 3
|
69
|
-
# pounts_y = 10
|
70
|
-
Gosu.gl(z) do
|
71
|
-
glLineWidth(5)
|
72
|
-
glBegin(GL_LINES)
|
73
|
-
glColor3f(1.0, 0.0, 0.0)
|
74
|
-
glVertex3d(new_pos_x, new_pos_y, z)
|
75
|
-
glVertex3d(new_pos_x, new_pos_y - height, z)
|
76
|
-
# glVertex3d(new_pos_x, new_pos_y - increment_y, z)
|
77
|
-
# glVertex3d(0, 0, z)
|
78
|
-
# glVertex3d(1, 0, z)
|
79
|
-
glEnd
|
80
|
-
end
|
81
|
-
|
82
|
-
# Gosu.gl(z) do
|
83
|
-
# glLineWidth(50)
|
84
|
-
# glColor3f(1.0, 0.0, 0.0)
|
85
|
-
# glBegin(GL_TRIANGLE_STRIP)
|
86
|
-
# glVertex3f(0, 0.0, z)
|
87
|
-
# glVertex3f(0.5, 0, z)
|
88
|
-
# glVertex3f(0.5, 0.5, z)
|
89
|
-
# glEnd
|
90
|
-
# end
|
91
|
-
|
92
|
-
# end
|
35
|
+
def draw
|
36
|
+
# draw nothing
|
37
|
+
@image.draw(@x - get_width / 2, @y - get_height / 2, get_draw_ordering, @scale, @scale)
|
38
|
+
end
|
39
|
+
|
40
|
+
def initialize(scale, screen_width, screen_height, object, options = {})
|
41
|
+
super(scale, screen_width, screen_height, object, options)
|
93
42
|
end
|
94
43
|
|
95
|
-
|
44
|
+
# def convert_x_and_y_to_opengl_coords
|
45
|
+
# # Don't have to recalce these 4 variables on each draw, save to singleton somewhere?
|
46
|
+
# middle_x = @screen_width / 2
|
47
|
+
# puts "CREEN HIEGHT: #{ @screen_height}"
|
48
|
+
# middle_y = @screen_height / 2
|
49
|
+
# increment_x = 1.0 / middle_x
|
50
|
+
# increment_y = 1.0 / middle_y
|
51
|
+
# new_pos_x = (@x - middle_x) * increment_x
|
52
|
+
# new_pos_y = (@y - middle_y) * increment_y
|
53
|
+
# # Inverted Y
|
54
|
+
# new_pos_y = new_pos_y * -1
|
55
|
+
|
56
|
+
# # height = @image_height.to_f * increment_x
|
57
|
+
# return [new_pos_x, new_pos_y, increment_x, increment_y]
|
58
|
+
# end
|
59
|
+
|
60
|
+
# def draw_gl
|
61
|
+
# new_pos_x, new_pos_y, increment_x, increment_y = convert_x_and_y_to_opengl_coords
|
62
|
+
|
63
|
+
# height = 15 * increment_y
|
64
|
+
|
65
|
+
# puts "X and Y: #{@x} and #{@y}"
|
66
|
+
# puts "increment Y: #{increment_y}"
|
67
|
+
# puts "increment X: #{increment_x}"
|
68
|
+
|
69
|
+
# puts "hieght bullet: #{height}"
|
70
|
+
# puts "NEW POS Y: #{new_pos_y}"
|
71
|
+
|
72
|
+
# z = ZOrder::Projectile
|
73
|
+
|
74
|
+
# # glLineWidth(5 * @scale)
|
75
|
+
# glLineWidth(5)
|
76
|
+
# glBegin(GL_LINES)
|
77
|
+
# # 22.4% red, 100% green and 7.8% blue
|
78
|
+
# glColor3f(1, 1.0, 1.0)
|
79
|
+
# glVertex3d(new_pos_x, new_pos_y, z)
|
80
|
+
# glVertex3d(new_pos_x, new_pos_y + height, z)
|
81
|
+
# glEnd
|
82
|
+
# end
|
83
|
+
|
84
|
+
|
85
|
+
# end
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
def draw_gl
|
90
|
+
# height = 20 * @scale
|
91
|
+
# width = 30 * @scale
|
92
|
+
# new_pos_x, new_pos_y, increment_x, increment_y = Bullet.convert_x_and_y_to_opengl_coords(@x, @y, @screen_width, @screen_height)
|
93
|
+
# new_width1, new_height1, increment_x, increment_y = Bullet.convert_x_and_y_to_opengl_coords(@x + width / 2, @y, @screen_width, @screen_height)
|
94
|
+
# new_width2, new_height2, increment_x, increment_y = Bullet.convert_x_and_y_to_opengl_coords(@x, @y + height, @screen_width, @screen_height)
|
95
|
+
# new_width3, new_height3, increment_x, increment_y = Bullet.convert_x_and_y_to_opengl_coords(@x - width / 2, @y, @screen_width, @screen_height)
|
96
|
+
|
97
|
+
# # height = 55 * increment_y * @scale
|
98
|
+
# # width = 55 * increment_x * @scale
|
99
|
+
|
100
|
+
# z = ZOrder::Projectile
|
101
|
+
|
102
|
+
# # glLineWidth(5 * @scale)
|
103
|
+
# # scale = 1.0 * @scale
|
104
|
+
|
105
|
+
|
106
|
+
# glBegin(GL_TRIANGLES)
|
107
|
+
# glColor4f(1, 0.5, 0.5, get_draw_ordering)
|
108
|
+
# glVertex3f(new_width1, new_height1, 0.0)
|
109
|
+
# glVertex3f(new_width2, new_height2, 0.0)
|
110
|
+
# glVertex3f(new_width3, new_height3, 0.0)
|
111
|
+
# glEnd
|
112
|
+
|
113
|
+
# # glBegin(GL_TRIANGLES)
|
114
|
+
# # glColor4f(1, 1, 1, 1)
|
115
|
+
# # glVertex3f(new_width1, new_height3 + 0.1, 0.0)
|
116
|
+
# # glVertex3f(new_width3, new_height2 + 0.1, 0.0)
|
117
|
+
# # glVertex3f(new_width2, new_height1 + 0.1, 0.0)
|
118
|
+
# # glEnd
|
119
|
+
|
120
|
+
# new_width1, new_height1, increment_x, increment_y = Bullet.convert_x_and_y_to_opengl_coords(@x - width / 2, @y + height, @screen_width , @screen_height)
|
121
|
+
# new_width2, new_height2, increment_x, increment_y = Bullet.convert_x_and_y_to_opengl_coords(@x , @y , @screen_width, @screen_height)
|
122
|
+
# new_width3, new_height3, increment_x, increment_y = Bullet.convert_x_and_y_to_opengl_coords(@x + width / 2, @y + height, @screen_width , @screen_height)
|
123
|
+
# glBegin(GL_TRIANGLES)
|
124
|
+
# glColor4f(0.5, 1, 0.5, get_draw_ordering)
|
125
|
+
# glVertex3f(new_width1, new_height1, 0.0)
|
126
|
+
# glVertex3f(new_width2, new_height2, 0.0)
|
127
|
+
# glVertex3f(new_width3, new_height3, 0.0)
|
128
|
+
# glEnd
|
129
|
+
|
130
|
+
|
131
|
+
# # =======
|
132
|
+
# # glLineWidth(20 * @scale)
|
133
|
+
# # glBegin(GL_LINES)
|
134
|
+
# # # 22.4% red, 100% green and 7.8% blue
|
135
|
+
# # glColor3f(1, 1.0, 1.0)
|
136
|
+
# # glVertex3d(new_pos_x, new_pos_y, z)
|
137
|
+
# # glVertex3d(new_pos_x, new_pos_y + height, z)
|
138
|
+
# # glEnd
|
139
|
+
# # >>>>>>> 8012b34281af3e19bb5f897bcab2161c1a00e7b0
|
140
|
+
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'launcher.rb'
|
2
|
+
class BulletLauncher < Launcher
|
3
|
+
def init_projectile options
|
4
|
+
Bullet.new(@scale, @screen_width, @screen_height, self, options)
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
def self.get_hardpoint_image
|
9
|
+
Gosu::Image.new("#{MEDIA_DIRECTORY}/bullet_launcher_hardpoint.png")
|
10
|
+
end
|
11
|
+
def draw
|
12
|
+
if @inited
|
13
|
+
if @active
|
14
|
+
# @image.draw(@x - @image_width_half, @y - @image_height_half, get_draw_ordering, @scale, @scale)
|
15
|
+
end
|
16
|
+
|
17
|
+
return true
|
18
|
+
else
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/line-em-up/models/cursor.rb
CHANGED
@@ -8,7 +8,9 @@ class Cursor < GeneralObject
|
|
8
8
|
end
|
9
9
|
|
10
10
|
|
11
|
-
def initialize scale
|
11
|
+
def initialize scale, screenx, screeny
|
12
|
+
@screen_width = screenx
|
13
|
+
@screen_height = screeny
|
12
14
|
@scale = scale
|
13
15
|
@image = get_image
|
14
16
|
@image_width = @image.width * @scale
|
@@ -24,9 +26,43 @@ class Cursor < GeneralObject
|
|
24
26
|
@image.draw(@x - @image_width_half, @y - @image_height_half, ZOrder::Cursor, @scale, @scale)
|
25
27
|
end
|
26
28
|
|
29
|
+
def convert_x_and_y_to_opengl_coords
|
30
|
+
# puts "convert_x_and_y_to_opengl_coords"
|
31
|
+
# puts "@screen_width: #{@screen_width}"
|
32
|
+
middle_x = @screen_width.to_f / 2.0
|
33
|
+
# puts "MIDDLE X: #{middle_x}"
|
34
|
+
middle_y = @screen_height.to_f / 2.0
|
35
|
+
increment_x = 1.0 / middle_x
|
36
|
+
# The zoom issue maybe, not quite sure why we need the Y offset.
|
37
|
+
increment_y = (1.0 / middle_y)
|
38
|
+
new_pos_x = (@x.to_f - middle_x) * increment_x
|
39
|
+
# puts ""
|
40
|
+
new_pos_y = (@y.to_f - middle_y) * increment_y
|
41
|
+
# Inverted Y
|
42
|
+
new_pos_y = new_pos_y * -1
|
43
|
+
|
44
|
+
# height = @image_height.to_f * increment_x
|
45
|
+
# puts "@screen_height: #{@screen_height}"
|
46
|
+
# puts "@screen_width: #{@screen_width}"
|
47
|
+
# puts "@new_pos_x: #{new_pos_x}"
|
48
|
+
# puts "@new_pos_y: #{new_pos_y}"
|
49
|
+
# puts "@x: #{@x}"
|
50
|
+
# puts "@y: #{@y}"
|
51
|
+
return [new_pos_x, new_pos_y, increment_x, increment_y]
|
52
|
+
end
|
53
|
+
|
27
54
|
def update mouse_x, mouse_y
|
28
55
|
@x = mouse_x
|
29
56
|
@y = mouse_y
|
57
|
+
# puts "CURSOR X: #{@x}"
|
58
|
+
# puts "CURSOR Y: #{@y}"
|
59
|
+
new_pos_x, new_pos_y, increment_x, increment_y = convert_x_and_y_to_opengl_coords
|
60
|
+
# puts "START CURSOR"
|
61
|
+
# puts " new_pos_x: #{new_pos_x}"
|
62
|
+
# puts " new_pos_y: #{new_pos_y}"
|
63
|
+
# puts " increment_x: #{increment_x}"
|
64
|
+
# puts " increment_y: #{increment_y}"
|
65
|
+
# puts "END CURSOR"
|
30
66
|
end
|
31
67
|
|
32
68
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative 'launcher.rb'
|
2
|
+
class DumbMissileLauncher < Launcher
|
3
|
+
MISSILE_LAUNCHER_MIN_ANGLE = 75
|
4
|
+
MISSILE_LAUNCHER_MAX_ANGLE = 105
|
5
|
+
MISSILE_LAUNCHER_INIT_ANGLE = 90
|
6
|
+
# COOLDOWN_DELAY = 15
|
7
|
+
|
8
|
+
def init_projectile pointer, options
|
9
|
+
# Bullet.new(@scale, @screen_width, @screen_height, self, options)
|
10
|
+
Missile.new(@scale, @screen_width, @screen_height, self, pointer.x, pointer.y, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {damage_increase: @damage_increase})
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def self.get_hardpoint_image
|
15
|
+
Gosu::Image.new("#{MEDIA_DIRECTORY}/missile_launcher.png")
|
16
|
+
end
|
17
|
+
# def draw
|
18
|
+
# if @inited
|
19
|
+
# if @active
|
20
|
+
# # @image.draw(@x - @image_width_half, @y - @image_height_half, get_draw_ordering, @scale, @scale)
|
21
|
+
# end
|
22
|
+
|
23
|
+
# return true
|
24
|
+
# else
|
25
|
+
# return false
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
|
29
|
+
def attack pointer
|
30
|
+
# puts "DUMB MISSILE LAUNCHER ATTACK"
|
31
|
+
if @cooldown_wait <= 0
|
32
|
+
options = {damage_increase: @damage_increase}
|
33
|
+
projectile = init_projectile(pointer, options)
|
34
|
+
# @projectiles << projectile
|
35
|
+
@cooldown_wait = get_cooldown
|
36
|
+
return projectile
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -21,13 +21,19 @@ class DumbProjectile < GeneralObject
|
|
21
21
|
def initialize(scale, screen_width, screen_height, object, options = {})
|
22
22
|
options[:relative_object] = object
|
23
23
|
@damage_increase = options[:damage_increase] || 1
|
24
|
+
# if options[:debug] == true
|
25
|
+
# puts "NEW DUMB PROJECTILE: X- #{object.x}"
|
26
|
+
# puts "NEW DUMB PROJECTILE: y- #{object.y}"
|
27
|
+
# end
|
24
28
|
super(scale, object.x, object.y, screen_width, screen_height, options)
|
25
29
|
@current_speed = self.class.get_max_speed * @scale
|
26
30
|
end
|
27
31
|
|
32
|
+
def draw_gl
|
33
|
+
end
|
28
34
|
|
29
|
-
def update mouse_x = nil, mouse_y = nil, player = nil
|
30
|
-
@y -= @current_speed
|
35
|
+
def update mouse_x = nil, mouse_y = nil, player = nil, scroll_factor = 1
|
36
|
+
@y -= @current_speed * scroll_factor
|
31
37
|
@y > 0 && @y < @screen_height
|
32
38
|
end
|
33
39
|
|
@@ -77,6 +83,7 @@ class DumbProjectile < GeneralObject
|
|
77
83
|
end
|
78
84
|
end
|
79
85
|
@y = @off_screen if hit_object
|
86
|
+
collision_triggers if hit_object
|
80
87
|
return {drops: drops, point_value: points, killed: killed}
|
81
88
|
end
|
82
89
|
|
@@ -21,7 +21,7 @@ class EnemyBomb < Projectile
|
|
21
21
|
end
|
22
22
|
|
23
23
|
|
24
|
-
def update mouse_x = nil, mouse_y = nil, player = nil
|
24
|
+
def update mouse_x = nil, mouse_y = nil, player = nil, scroll_factor = 1
|
25
25
|
vx = (self.class.get_starting_speed * @scale) * Math.cos(@angle * Math::PI / 180)
|
26
26
|
|
27
27
|
vy = (self.class.get_starting_speed * @scale) * Math.sin(@angle * Math::PI / 180)
|
@@ -1,4 +1,7 @@
|
|
1
1
|
require_relative 'dumb_projectile.rb'
|
2
|
+
require 'opengl'
|
3
|
+
require 'glu'
|
4
|
+
require 'glut'
|
2
5
|
|
3
6
|
class EnemyBullet < DumbProjectile
|
4
7
|
DAMAGE = 3
|
@@ -10,4 +13,56 @@ class EnemyBullet < DumbProjectile
|
|
10
13
|
def get_image
|
11
14
|
Gosu::Image.new("#{MEDIA_DIRECTORY}/bullet-mini-reverse.png")
|
12
15
|
end
|
16
|
+
|
17
|
+
# include Gl
|
18
|
+
# include Glu
|
19
|
+
# include Glut
|
20
|
+
|
21
|
+
def draw
|
22
|
+
# draw nothing
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def draw_gl
|
27
|
+
new_pos_x, new_pos_y, increment_x, increment_y = convert_x_and_y_to_opengl_coords
|
28
|
+
|
29
|
+
height = @image_height.to_f * increment_y
|
30
|
+
|
31
|
+
z = ZOrder::Projectile
|
32
|
+
|
33
|
+
glLineWidth(5 * @scale)
|
34
|
+
glBegin(GL_LINES)
|
35
|
+
glColor3f(1.0, 0.0, 0.0)
|
36
|
+
glVertex3d(new_pos_x, new_pos_y, z)
|
37
|
+
glVertex3d(new_pos_x, new_pos_y - height, z)
|
38
|
+
glEnd
|
39
|
+
|
40
|
+
# scale = 1.0 * @scale
|
41
|
+
|
42
|
+
# glColor4f(scale, scale, scale, scale / 2)
|
43
|
+
|
44
|
+
# glBegin(GL_QUADS)
|
45
|
+
# glVertex3f(-1.0, +1.0, 0.0);
|
46
|
+
# glVertex3f(-1.0, -1.0, 0.0)
|
47
|
+
# glVertex3f(+1.0, -1.0, 0.0)
|
48
|
+
# glVertex3f(+1.0, +1.0, 0.0)
|
49
|
+
# glEnd
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
# def draw_gl
|
54
|
+
# new_pos_x, new_pos_y, increment_x, increment_y = convert_x_and_y_to_opengl_coords
|
55
|
+
|
56
|
+
# height = @image_height.to_f * increment_y
|
57
|
+
|
58
|
+
# z = ZOrder::Projectile
|
59
|
+
|
60
|
+
# glLineWidth(5 * @scale)
|
61
|
+
# glBegin(GL_LINES)
|
62
|
+
# glColor3f(1.0, 0.0, 0.0)
|
63
|
+
# glVertex3d(new_pos_x, new_pos_y, z)
|
64
|
+
# glVertex3d(new_pos_x, new_pos_y - height, z)
|
65
|
+
# glEnd
|
66
|
+
# end
|
67
|
+
|
13
68
|
end
|
@@ -63,7 +63,7 @@ class EnemyPlayer < GeneralObject
|
|
63
63
|
@current_speed
|
64
64
|
end
|
65
65
|
|
66
|
-
def update mouse_x = nil, mouse_y = nil, player = nil
|
66
|
+
def update mouse_x = nil, mouse_y = nil, player = nil, scroll_factor = 1
|
67
67
|
@cooldown_wait -= 1 if @cooldown_wait > 0
|
68
68
|
if is_alive
|
69
69
|
# Stay above the player
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'gosu'
|
2
|
+
|
3
|
+
require 'opengl'
|
4
|
+
require 'glu'
|
5
|
+
require 'glut'
|
6
|
+
|
7
|
+
|
8
|
+
include OpenGL
|
9
|
+
include GLUT
|
10
|
+
# OpenGL.load_lib()
|
11
|
+
# GLUT.load_lib()
|
12
|
+
|
13
|
+
class ExecuteOpenGl
|
14
|
+
# def self.init_scene
|
15
|
+
# glEnable(GL_TEXTURE_2D)
|
16
|
+
# glShadeModel(GL_SMOOTH)
|
17
|
+
# glClearColor(0,0,0,0.5)
|
18
|
+
# glClearDepth(1)
|
19
|
+
# glBlendFunc(GL_SRC_ALPHA,GL_ONE) #see nehe08
|
20
|
+
# glEnable(GL_BLEND)
|
21
|
+
# end
|
22
|
+
|
23
|
+
# def self.add_perspective_to_scene
|
24
|
+
# glMatrixMode(GL_PROJECTION)
|
25
|
+
# glLoadIdentity
|
26
|
+
# gluPerspective(45.0, width / height, 0.1, 100.0)
|
27
|
+
# glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) #see nehe07
|
28
|
+
# end
|
29
|
+
|
30
|
+
# include Gl
|
31
|
+
# include Glu
|
32
|
+
# include Glut
|
33
|
+
|
34
|
+
def draw background, projectiles, player
|
35
|
+
# @zoom = -14
|
36
|
+
Gosu.gl do
|
37
|
+
# init_scene
|
38
|
+
# glEnable(GL_TEXTURE_2D)
|
39
|
+
# glShadeModel(GL_SMOOTH)
|
40
|
+
# glClearColor(0.0, 0.2, 0.5, 1.0)
|
41
|
+
glClearColor(0.0, 0.0, 0.0, 0.0)
|
42
|
+
glClearDepth(0)
|
43
|
+
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
44
|
+
# glBlendFunc(GL_SRC_ALPHA,GL_ONE) #see nehe08
|
45
|
+
# glEnable(GL_BLEND)
|
46
|
+
|
47
|
+
# glMatrixMode(GL_MODELVIEW) #see lesson 01
|
48
|
+
# glLoadIdentity #see lesson 01
|
49
|
+
# glTranslatef(0, 0, -13) #see lesson 01
|
50
|
+
background.exec_gl
|
51
|
+
|
52
|
+
glShadeModel(GL_SMOOTH) # selects smooth shading
|
53
|
+
glLoadIdentity #see lesson 01
|
54
|
+
# puts "-projectile.get_draw_ordering - 10: #{-projectile.get_draw_ordering - 10}"
|
55
|
+
glTranslatef(0, 0, -13) #see lesson 01
|
56
|
+
@ambient_light = [0.5, 0.5, 0.5, 1]
|
57
|
+
mat_shininess = [50]
|
58
|
+
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess)
|
59
|
+
glLightfv(GL_LIGHT1, GL_AMBIENT, @ambient_light) # sets ambient light for light source
|
60
|
+
glEnable(GL_LIGHT1)
|
61
|
+
|
62
|
+
|
63
|
+
projectiles.each_with_index do |projectile, i|
|
64
|
+
glMatrixMode(GL_MODELVIEW) #see lesson 01
|
65
|
+
glLoadIdentity #see lesson 01
|
66
|
+
# puts "-projectile.get_draw_ordering - 10: #{-projectile.get_draw_ordering - 10}"
|
67
|
+
glTranslatef(0, 0, -13) #see lesson 01
|
68
|
+
# glTranslatef(0, 0, -14) #see lesson 01
|
69
|
+
projectile.draw_gl
|
70
|
+
end
|
71
|
+
player.draw_gl_list.each do |item|
|
72
|
+
glMatrixMode(GL_MODELVIEW) #see lesson 01
|
73
|
+
glLoadIdentity #see lesson 01
|
74
|
+
glTranslatef(0, 0, -13) #see lesson 01
|
75
|
+
item.draw_gl
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -1,14 +1,26 @@
|
|
1
1
|
class GeneralObject
|
2
|
-
attr_accessor :time_alive, :x, :y, :health
|
2
|
+
attr_accessor :time_alive, :x, :y, :health, :image_width, :image_height, :image_size, :image_radius, :image_width_half, :image_height_half, :image_path, :inited
|
3
3
|
LEFT = 'left'
|
4
4
|
RIGHT = 'right'
|
5
5
|
SCROLLING_SPEED = 4
|
6
6
|
MAX_SPEED = 5
|
7
7
|
|
8
|
-
def get_image
|
8
|
+
def self.get_image
|
9
9
|
Gosu::Image.new("#{MEDIA_DIRECTORY}/question.png")
|
10
10
|
end
|
11
11
|
|
12
|
+
def get_image
|
13
|
+
self.class.get_image
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.get_image_path
|
17
|
+
"#{MEDIA_DIRECTORY}/question.png"
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_image_path
|
21
|
+
self.class.get_image_path
|
22
|
+
end
|
23
|
+
|
12
24
|
def initialize(scale, x, y, screen_width, screen_height, options = {})
|
13
25
|
@scale = scale
|
14
26
|
@image = options[:image] || get_image
|
@@ -19,17 +31,21 @@ class GeneralObject
|
|
19
31
|
@x = options[:relative_object].x - (options[:relative_object].get_width / 2)
|
20
32
|
@y = options[:relative_object].y
|
21
33
|
elsif RIGHT == options[:side]
|
22
|
-
@x = (options[:relative_object].x + options[:relative_object].get_width / 2)
|
34
|
+
@x = (options[:relative_object].x + options[:relative_object].get_width / 2)
|
23
35
|
@y = options[:relative_object].y
|
24
36
|
else
|
25
37
|
@x = options[:relative_object].x
|
26
38
|
@y = options[:relative_object].y
|
27
39
|
end
|
28
|
-
@x = @x + options[:relative_x_padding] if options[:relative_x_padding]
|
29
40
|
else
|
30
41
|
@x = x
|
31
42
|
@y = y
|
32
43
|
end
|
44
|
+
@x = @x + options[:relative_x_padding] if options[:relative_x_padding]
|
45
|
+
@y = @y + options[:relative_y_padding] if options[:relative_y_padding]
|
46
|
+
# if options[:relative_y_padding]
|
47
|
+
# puts "options[:relative_y_padding]: #{options[:relative_y_padding]}"
|
48
|
+
# end
|
33
49
|
|
34
50
|
@time_alive = 0
|
35
51
|
# For objects that don't take damage, they'll never get hit by anything due to having 0 health
|
@@ -47,6 +63,7 @@ class GeneralObject
|
|
47
63
|
@screen_width = screen_width
|
48
64
|
@screen_height = screen_height
|
49
65
|
@off_screen = screen_height + screen_height
|
66
|
+
@inited = true
|
50
67
|
end
|
51
68
|
|
52
69
|
# If using a different class for ZOrder than it has for model name, or if using subclass (from subclass or parent)
|
@@ -83,7 +100,7 @@ class GeneralObject
|
|
83
100
|
@image_radius
|
84
101
|
end
|
85
102
|
|
86
|
-
def update mouse_x = nil, mouse_y = nil, player = nil
|
103
|
+
def update mouse_x = nil, mouse_y = nil, player = nil, scroll_factor = 1
|
87
104
|
# Inherit, add logic, then call this to calculate whether it's still visible.
|
88
105
|
# @time_alive ||= 0 # Temp solution
|
89
106
|
@time_alive += 1
|
@@ -214,16 +231,72 @@ class GeneralObject
|
|
214
231
|
GeneralObject.nearest_angle(angle, min_angle, max_angle)
|
215
232
|
end
|
216
233
|
|
234
|
+
# # new_pos_x = @x / @screen_width.to_f * (AXIS_X_MAX - AXIS_X_MIN) + AXIS_X_MIN;
|
235
|
+
# # new_pos_y = (1 - @y / @screen_height.to_f) * (AXIS_Y_MAX - AXIS_Y_MIN) + AXIS_Y_MIN;
|
236
|
+
# # This isn't exactly right, objects are drawn farther away from center than they should be.
|
237
|
+
# def convert_x_and_y_to_opengl_coords
|
238
|
+
# # Don't have to recalce these 4 variables on each draw, save to singleton somewhere?
|
239
|
+
# middle_x = (@screen_width.to_f) / 2.0
|
240
|
+
# middle_y = (@screen_height.to_f) / 2.0
|
241
|
+
# increment_x = 1.0 / middle_x
|
242
|
+
# increment_y = 1.0 / middle_y
|
243
|
+
# new_pos_x = (@x.to_f - middle_x) * increment_x
|
244
|
+
# new_pos_y = (@y.to_f - middle_y) * increment_y
|
245
|
+
# # Inverted Y
|
246
|
+
# new_pos_y = new_pos_y * -1.0
|
247
|
+
|
248
|
+
# # height = @image_height.to_f * increment_x
|
249
|
+
# return [new_pos_x, new_pos_y, increment_x, increment_y]
|
250
|
+
# end
|
251
|
+
|
252
|
+
|
253
|
+
# This isn't exactly right, objects are drawn farther away from center than they should be.
|
254
|
+
def convert_x_and_y_to_opengl_coords
|
255
|
+
middle_x = @screen_width / 2
|
256
|
+
middle_y = @screen_height / 2
|
257
|
+
|
258
|
+
ratio = @screen_width.to_f / @screen_height.to_f
|
259
|
+
|
260
|
+
increment_x = (ratio / middle_x) * 0.97
|
261
|
+
# The zoom issue maybe, not quite sure why we need the Y offset.
|
262
|
+
increment_y = (1.0 / middle_y) * 0.75
|
263
|
+
new_pos_x = (@x - middle_x) * increment_x
|
264
|
+
new_pos_y = (@y - middle_y) * increment_y
|
265
|
+
# Inverted Y
|
266
|
+
new_pos_y = new_pos_y * -1
|
267
|
+
|
268
|
+
# height = @image_height.to_f * increment_x
|
269
|
+
return [new_pos_x, new_pos_y, increment_x, increment_y]
|
270
|
+
end
|
217
271
|
|
272
|
+
def self.convert_x_and_y_to_opengl_coords(x, y, screen_width, screen_height)
|
273
|
+
middle_x = screen_width.to_f / 2.0
|
274
|
+
middle_y = screen_height.to_f / 2.0
|
218
275
|
|
276
|
+
ratio = screen_width.to_f / screen_height.to_f
|
219
277
|
|
278
|
+
increment_x = (ratio / middle_x) * 0.97
|
279
|
+
# The zoom issue maybe, not quite sure why we need the Y offset.
|
280
|
+
increment_y = (1.0 / middle_y)
|
281
|
+
new_pos_x = (x.to_f - middle_x) * increment_x
|
282
|
+
new_pos_y = (y.to_f - middle_y) * increment_y
|
283
|
+
# Inverted Y
|
284
|
+
new_pos_y = new_pos_y * -1
|
285
|
+
return [new_pos_x, new_pos_y, increment_x, increment_y]
|
286
|
+
end
|
220
287
|
|
221
288
|
|
289
|
+
def y_is_on_screen
|
290
|
+
@y >= 0 && @y <= @screen_height
|
291
|
+
end
|
222
292
|
|
293
|
+
def collision_triggers
|
294
|
+
# Explosion or something
|
295
|
+
# Override
|
296
|
+
end
|
223
297
|
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
298
|
+
def self.descendants
|
299
|
+
ObjectSpace.each_object(Class).select { |klass| klass < self }
|
300
|
+
end
|
228
301
|
|
229
302
|
end
|