line-em-up 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/line-em-up/game_window.rb +118 -104
- data/line-em-up/irb_requirements.rb +5 -6
- data/line-em-up/lib/config_setting.rb +22 -9
- data/line-em-up/lib/difficulty_setting.rb +78 -0
- data/line-em-up/media/mini_missile.png +0 -0
- data/line-em-up/models/bomb.rb +2 -2
- data/line-em-up/models/building.rb +20 -14
- data/line-em-up/models/bullet.rb +3 -34
- data/line-em-up/models/cursor.rb +12 -5
- data/line-em-up/models/dumb_projectile.rb +110 -0
- data/line-em-up/models/enemy_bomb.rb +2 -6
- data/line-em-up/models/enemy_bullet.rb +4 -35
- data/line-em-up/models/enemy_homing_missile.rb +10 -65
- data/line-em-up/models/enemy_player.rb +16 -23
- data/line-em-up/models/general_object.rb +131 -8
- data/line-em-up/models/grappling_hook.rb +16 -20
- data/line-em-up/models/health_pack.rb +4 -18
- data/line-em-up/models/missile.rb +26 -21
- data/line-em-up/models/missile_boat.rb +18 -22
- data/line-em-up/models/mothership.rb +36 -37
- data/line-em-up/models/pickup.rb +8 -16
- data/line-em-up/models/player.rb +38 -57
- data/line-em-up/models/projectile.rb +97 -38
- data/line-em-up/models/small_explosion.rb +7 -3
- data/line-em-up/models/star.rb +7 -10
- data/menu_launcher.rb +9 -2
- metadata +4 -1
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative 'general_object.rb'
|
2
2
|
|
3
3
|
class Projectile < GeneralObject
|
4
|
-
attr_accessor :x, :y, :time_alive, :
|
4
|
+
attr_accessor :x, :y, :time_alive, :vector_x, :vector_y, :angle, :radian
|
5
5
|
# WARNING THESE CONSTANTS DON'T GET OVERRIDDEN BY SUBCLASSES. NEED GETTER METHODS
|
6
6
|
COOLDOWN_DELAY = 50
|
7
7
|
STARTING_SPEED = 3.0
|
@@ -13,47 +13,114 @@ class Projectile < GeneralObject
|
|
13
13
|
ADVANCED_HIT_BOX_DETECTION = false
|
14
14
|
|
15
15
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@mouse_start_x = mouse_x
|
21
|
-
@mouse_start_y = mouse_y
|
16
|
+
def get_image
|
17
|
+
puts "override get_image!"
|
18
|
+
Gosu::Image.new("#{MEDIA_DIRECTORY}/question.png")
|
19
|
+
end
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
elsif RIGHT == options[:side]
|
27
|
-
@x = (object.x + object.get_width / 2) - 4
|
28
|
-
@y = object.y
|
29
|
-
else
|
30
|
-
@x = object.x
|
31
|
-
@y = object.y
|
32
|
-
end
|
21
|
+
def initialize(scale, screen_width, screen_height, object, end_point_x, end_point_y, angle_min = nil, angle_max = nil, angle_init = nil, options = {})
|
22
|
+
options[:relative_object] = object
|
23
|
+
super(scale, nil, nil, screen_width, screen_height, options)
|
33
24
|
|
34
|
-
start_point = OpenStruct.new(:x => @x -
|
25
|
+
start_point = OpenStruct.new(:x => @x - screen_width / 2, :y => @y - screen_height / 2)
|
35
26
|
# start_point = GeoPoint.new(@x - WIDTH / 2, @y - HEIGHT / 2)
|
36
27
|
# end_point = OpenStruct.new(:x => @mouse_start_x, :y => @mouse_start_y)
|
37
|
-
end_point = OpenStruct.new(:x =>
|
28
|
+
end_point = OpenStruct.new(:x => end_point_x - screen_width / 2, :y => end_point_y - screen_height / 2)
|
38
29
|
# end_point = GeoPoint.new(@mouse_start_x - WIDTH / 2, @mouse_start_y - HEIGHT / 2)
|
39
30
|
@angle = calc_angle(start_point, end_point)
|
40
31
|
@radian = calc_radian(start_point, end_point)
|
41
32
|
|
33
|
+
# puts "PRE-ANGLE: #{@angle}"
|
42
34
|
|
35
|
+
@image_angle = @angle
|
43
36
|
if @angle < 0
|
44
37
|
@angle = 360 - @angle.abs
|
45
38
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
39
|
+
|
40
|
+
if angle_min.nil? && angle_max.nil?
|
41
|
+
# do nothing
|
42
|
+
else
|
43
|
+
# if @angle < angle_min
|
44
|
+
# @angle = angle_max
|
45
|
+
# # elsif @angle < angle_min && @angle > add_angles(@angle, 180)
|
46
|
+
# # @angle = angle_max
|
47
|
+
if is_angle_between_two_angles?(@angle, angle_min, angle_max)
|
48
|
+
# Do nothing, we're good
|
49
|
+
# puts "ANGLE WAS BETWEEN TWO POINTS: #{@angle} was between #{angle_min} and #{angle_max}"
|
50
|
+
else
|
51
|
+
# puts "ANGLE WAS CHOSEN TO BE NEAREST: #{@angle} with #{angle_min} and #{angle_max}"
|
52
|
+
@angle = nearest_angle(@angle, angle_min, angle_max)
|
53
|
+
# puts "ANGLE WAS CHSOEN: #{@angle}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
if angle_init
|
59
|
+
@current_image_angle = (angle_init - 90) * -1
|
60
|
+
@end_image_angle = (@angle - 90) * -1
|
61
|
+
else
|
62
|
+
@current_image_angle = (@angle - 90) * -1
|
63
|
+
end
|
64
|
+
|
65
|
+
# puts "POST-ANGLE: #{@angle}"
|
66
|
+
|
67
|
+
# # Limit extreme angles 180 and 0 are the
|
68
|
+
# image_angle = 0
|
69
|
+
# if @angle > 160 <
|
70
|
+
# if @angle > 160 && @ange
|
71
|
+
|
72
|
+
|
51
73
|
end
|
52
74
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
75
|
+
def update mouse_x = nil, mouse_y = nil
|
76
|
+
if @end_image_angle && @time_alive > 10
|
77
|
+
incrementing_amount = 0.5
|
78
|
+
angle_difference = (@current_image_angle - @end_image_angle)
|
79
|
+
if incrementing_amount > angle_difference.abs
|
80
|
+
# puts "ENDING IMAGE HERE!!!!!!"
|
81
|
+
@current_image_angle = @end_image_angle
|
82
|
+
@end_image_angle = nil
|
83
|
+
elsif angle_difference > 0
|
84
|
+
@current_image_angle -= incrementing_amount
|
85
|
+
elsif angle_difference < 0
|
86
|
+
@current_image_angle += incrementing_amount
|
87
|
+
else
|
88
|
+
# puts "ENDING IMAGE HERE!!!!!!"
|
89
|
+
@current_image_angle = @end_image_angle
|
90
|
+
@end_image_angle = nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
new_speed = 0
|
97
|
+
if @time_alive > self.class.get_initial_delay
|
98
|
+
new_speed = self.class.get_starting_speed + (self.class.get_speed_increase_factor > 0 ? @time_alive * self.class.get_speed_increase_factor : 0)
|
99
|
+
new_speed = self.class.get_max_speed if new_speed > self.class.get_max_speed
|
100
|
+
new_speed = new_speed * @scale
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
vx = 0
|
106
|
+
vy = 0
|
107
|
+
if new_speed != 0
|
108
|
+
vx = ((new_speed / 3) * 1) * Math.cos(@angle * Math::PI / 180)
|
109
|
+
|
110
|
+
vy = ((new_speed / 3) * 1) * Math.sin(@angle * Math::PI / 180)
|
111
|
+
vy = vy * -1
|
112
|
+
end
|
113
|
+
|
114
|
+
@x = @x + vx
|
115
|
+
@y = @y + vy
|
116
|
+
|
117
|
+
super(mouse_x, mouse_y)
|
118
|
+
end
|
119
|
+
|
120
|
+
def draw
|
121
|
+
# limiting angle extreme by 2
|
122
|
+
@image.draw_rot(@x, @y, ZOrder::Projectile, @current_image_angle, 0.5, 0.5, @scale, @scale)
|
123
|
+
end
|
57
124
|
|
58
125
|
def get_draw_ordering
|
59
126
|
ZOrder::Projectile
|
@@ -69,7 +136,7 @@ class Projectile < GeneralObject
|
|
69
136
|
# return test
|
70
137
|
end
|
71
138
|
|
72
|
-
require 'benchmark'
|
139
|
+
# require 'benchmark'
|
73
140
|
|
74
141
|
def hit_objects(object_groups)
|
75
142
|
drops = []
|
@@ -95,14 +162,9 @@ class Projectile < GeneralObject
|
|
95
162
|
hit_object = Gosu.distance(@x, @y, object.x, object.y) < self.get_radius + object.get_radius
|
96
163
|
end
|
97
164
|
if hit_object
|
98
|
-
# puts "HIT OBJECT"
|
99
165
|
# hit_object = true
|
100
166
|
if self.class.get_aoe <= 0
|
101
|
-
# puts "shout be here"
|
102
|
-
# puts "1: #{object.respond_to?(:health)}"
|
103
|
-
# puts "2: #{object.respond_to?(:take_damage)}"
|
104
167
|
if object.respond_to?(:health) && object.respond_to?(:take_damage)
|
105
|
-
# puts "OBJECT TALING DAMAGE: #{self.class.get_damage}"
|
106
168
|
object.take_damage(self.class.get_damage)
|
107
169
|
end
|
108
170
|
|
@@ -144,7 +206,7 @@ class Projectile < GeneralObject
|
|
144
206
|
end
|
145
207
|
end
|
146
208
|
end
|
147
|
-
@y =
|
209
|
+
@y = @off_screen if hit_object
|
148
210
|
return {drops: drops, point_value: points, killed: killed}
|
149
211
|
end
|
150
212
|
|
@@ -161,9 +223,6 @@ class Projectile < GeneralObject
|
|
161
223
|
def self.get_starting_speed
|
162
224
|
self::STARTING_SPEED
|
163
225
|
end
|
164
|
-
def self.get_starting_speed
|
165
|
-
self::STARTING_SPEED
|
166
|
-
end
|
167
226
|
def self.get_initial_delay
|
168
227
|
self::INITIAL_DELAY
|
169
228
|
end
|
@@ -4,7 +4,7 @@ class SmallExplosion < GeneralObject
|
|
4
4
|
attr_reader :x, :y, :living_time
|
5
5
|
TIME_TO_LIVE = 50
|
6
6
|
|
7
|
-
def initialize(scale, x = nil, y = nil, image = nil)
|
7
|
+
def initialize(scale, screen_width, screen_height, x = nil, y = nil, image = nil, options = {})
|
8
8
|
@scale = scale
|
9
9
|
@smoke_scale = @scale * 1.2
|
10
10
|
@smoke = Gosu::Image.new("#{MEDIA_DIRECTORY}/smoke.png")
|
@@ -18,6 +18,10 @@ class SmallExplosion < GeneralObject
|
|
18
18
|
@image_size = @image_width * @image_height / 2
|
19
19
|
@image_radius = (@image_width + @image_height) / 4
|
20
20
|
@current_speed = (SCROLLING_SPEED - 1) * @scale
|
21
|
+
|
22
|
+
@screen_width = screen_width
|
23
|
+
@screen_height = screen_height
|
24
|
+
@off_screen = screen_height + screen_height
|
21
25
|
end
|
22
26
|
|
23
27
|
def draw
|
@@ -33,12 +37,12 @@ class SmallExplosion < GeneralObject
|
|
33
37
|
end
|
34
38
|
|
35
39
|
|
36
|
-
def update
|
40
|
+
def update mouse_x = nil, mouse_y = nil, player = nil
|
37
41
|
# Remove even if hasn't gone offscreen
|
38
42
|
if @time_alive <= TIME_TO_LIVE
|
39
43
|
@time_alive += 1
|
40
44
|
@y += @current_speed
|
41
|
-
super(
|
45
|
+
super(mouse_x, mouse_y)
|
42
46
|
else
|
43
47
|
false
|
44
48
|
end
|
data/line-em-up/models/star.rb
CHANGED
@@ -5,20 +5,17 @@ require_relative 'pickup.rb'
|
|
5
5
|
class Star < Pickup
|
6
6
|
POINT_VALUE_BASE = 2
|
7
7
|
|
8
|
-
def initialize(scale, x = nil, y = nil)
|
9
|
-
@scale = scale
|
10
|
-
@image = get_image
|
11
|
-
@time_alive = 0
|
8
|
+
def initialize(scale, screen_width, screen_height, x = nil, y = nil, options = {})
|
9
|
+
# @scale = scale
|
10
|
+
# @image = get_image
|
11
|
+
# @time_alive = 0
|
12
|
+
@x = x || rand * 800
|
13
|
+
@y = y || 0
|
14
|
+
super(scale, screen_width, screen_height, @x, @y, options)
|
12
15
|
@color = Gosu::Color.new(0xff_000000)
|
13
16
|
@color.red = rand(255 - 40) + 40
|
14
17
|
@color.green = rand(255 - 40) + 40
|
15
18
|
@color.blue = rand(255 - 40) + 40
|
16
|
-
@x = x || rand * 800
|
17
|
-
@y = y || 0
|
18
|
-
@image_width = 25 * @scale
|
19
|
-
@image_height = 25 * @scale
|
20
|
-
@image_radius = 13 * @scale
|
21
|
-
@current_speed = SCROLLING_SPEED * @scale
|
22
19
|
end
|
23
20
|
|
24
21
|
def get_image
|
data/menu_launcher.rb
CHANGED
@@ -49,11 +49,14 @@ class Main < Gosu::Window
|
|
49
49
|
window_height = Gosu.screen_height
|
50
50
|
@resolution_menu = ResolutionSetting.new(window_height, @width, @height, get_center_font_ui_y, CONFIG_FILE)
|
51
51
|
|
52
|
+
@difficulty = nil
|
53
|
+
@difficulty_menu = DifficultySetting.new(@width, @height, get_center_font_ui_y, CONFIG_FILE)
|
54
|
+
|
52
55
|
start_image = Gosu::Image.new("#{MEDIA_DIRECTORY}/start.png")
|
53
56
|
@game_window_width, @game_window_height, @full_screen = [nil, nil, nil]
|
54
|
-
@menu.add_item(start_image, (@width / 2) - (start_image.width / 2), get_center_font_ui_y, 1, lambda {self.close; GameWindow.start(@game_window_width, @game_window_height, dynamic_get_resolution_fs, {block_controls_until_button_up: true}) }, start_image)
|
57
|
+
@menu.add_item(start_image, (@width / 2) - (start_image.width / 2), get_center_font_ui_y, 1, lambda {self.close; GameWindow.start(@game_window_width, @game_window_height, dynamic_get_resolution_fs, {block_controls_until_button_up: true, difficulty: @difficulty}) }, start_image)
|
55
58
|
debug_start_image = Gosu::Image.new("#{MEDIA_DIRECTORY}/debug_start.png")
|
56
|
-
@menu.add_item(debug_start_image, (@width / 2) - (debug_start_image.width / 2), get_center_font_ui_y, 1, lambda {self.close; GameWindow.start(@game_window_width, @game_window_height, dynamic_get_resolution_fs, {block_controls_until_button_up: true, debug: true}) }, start_image)
|
59
|
+
@menu.add_item(debug_start_image, (@width / 2) - (debug_start_image.width / 2), get_center_font_ui_y, 1, lambda {self.close; GameWindow.start(@game_window_width, @game_window_height, dynamic_get_resolution_fs, {block_controls_until_button_up: true, debug: true, difficulty: @difficulty}) }, start_image)
|
57
60
|
# @font.draw("<", width + 15, get_center_font_ui_y, 1, 1.0, 1.0, 0xff_ffff00)
|
58
61
|
# @font.draw("Resolution", width / 2, get_center_font_ui_y, 1, 1.0, 1.0, 0xff_ffff00)
|
59
62
|
# @font.draw(">", width - 15, get_center_font_ui_y, 1, 1.0, 1.0, 0xff_ffff00)
|
@@ -67,8 +70,10 @@ class Main < Gosu::Window
|
|
67
70
|
def update
|
68
71
|
@menu.update
|
69
72
|
@resolution_menu.update(self.mouse_x, self.mouse_y)
|
73
|
+
@difficulty_menu.update(self.mouse_x, self.mouse_y)
|
70
74
|
|
71
75
|
@game_window_width, @game_window_height, @fullscreen = @resolution_menu.get_resolution
|
76
|
+
@difficulty = @difficulty_menu.get_difficulty
|
72
77
|
@gl_background.scroll
|
73
78
|
end
|
74
79
|
|
@@ -78,6 +83,7 @@ class Main < Gosu::Window
|
|
78
83
|
reset_center_font_ui_y
|
79
84
|
@menu.draw
|
80
85
|
@resolution_menu.draw
|
86
|
+
@difficulty_menu.draw
|
81
87
|
@gl_background.draw(ZOrder::Background)
|
82
88
|
end
|
83
89
|
|
@@ -85,6 +91,7 @@ class Main < Gosu::Window
|
|
85
91
|
if id == Gosu::MsLeft then
|
86
92
|
@menu.clicked
|
87
93
|
@resolution_menu.clicked(self.mouse_x, self.mouse_y)
|
94
|
+
@difficulty_menu.clicked(self.mouse_x, self.mouse_y)
|
88
95
|
end
|
89
96
|
end
|
90
97
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line-em-up
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Dana
|
@@ -63,6 +63,7 @@ files:
|
|
63
63
|
- line-em-up/game_window.rb
|
64
64
|
- line-em-up/irb_requirements.rb
|
65
65
|
- line-em-up/lib/config_setting.rb
|
66
|
+
- line-em-up/lib/difficulty_setting.rb
|
66
67
|
- line-em-up/lib/resolution_setting.rb
|
67
68
|
- line-em-up/lib/setting.rb
|
68
69
|
- line-em-up/lib/z_order.rb
|
@@ -160,6 +161,7 @@ files:
|
|
160
161
|
- line-em-up/media/item_hover.png
|
161
162
|
- line-em-up/media/landscape.svg
|
162
163
|
- line-em-up/media/large_star.png
|
164
|
+
- line-em-up/media/mini_missile.png
|
163
165
|
- line-em-up/media/mini_missile_reverse.png
|
164
166
|
- line-em-up/media/missile.png
|
165
167
|
- line-em-up/media/missile_boat.png
|
@@ -196,6 +198,7 @@ files:
|
|
196
198
|
- line-em-up/models/building.rb
|
197
199
|
- line-em-up/models/bullet.rb
|
198
200
|
- line-em-up/models/cursor.rb
|
201
|
+
- line-em-up/models/dumb_projectile.rb
|
199
202
|
- line-em-up/models/enemy_bomb.rb
|
200
203
|
- line-em-up/models/enemy_bullet.rb
|
201
204
|
- line-em-up/models/enemy_homing_missile.rb
|