line-em-up 0.3.6 → 0.4.0
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 +38 -10
- data/line-em-up/lib/resolution_setting.rb +0 -1
- data/line-em-up/lib/z_order.rb +1 -1
- data/line-em-up/media/back_to_menu.png +0 -0
- data/line-em-up/media/laserbolt.png +0 -0
- data/line-em-up/media/mite.png +0 -0
- data/line-em-up/media/mite_original.png +0 -0
- data/line-em-up/media/progress_bar_0.png +0 -0
- data/line-em-up/media/progress_bar_1.png +0 -0
- data/line-em-up/media/progress_bar_10.png +0 -0
- data/line-em-up/media/progress_bar_11.png +0 -0
- data/line-em-up/media/progress_bar_12.png +0 -0
- data/line-em-up/media/progress_bar_13.png +0 -0
- data/line-em-up/media/progress_bar_14.png +0 -0
- data/line-em-up/media/progress_bar_15.png +0 -0
- data/line-em-up/media/progress_bar_16.png +0 -0
- data/line-em-up/media/progress_bar_17.png +0 -0
- data/line-em-up/media/progress_bar_18.png +0 -0
- data/line-em-up/media/progress_bar_19.png +0 -0
- data/line-em-up/media/progress_bar_2.png +0 -0
- data/line-em-up/media/progress_bar_20.png +0 -0
- data/line-em-up/media/progress_bar_3.png +0 -0
- data/line-em-up/media/progress_bar_4.png +0 -0
- data/line-em-up/media/progress_bar_5.png +0 -0
- data/line-em-up/media/progress_bar_6.png +0 -0
- data/line-em-up/media/progress_bar_7.png +0 -0
- data/line-em-up/media/progress_bar_8.png +0 -0
- data/line-em-up/media/progress_bar_9.png +0 -0
- data/line-em-up/media/rocket_launcher.png +0 -0
- data/line-em-up/media/rocket_launcher_original.png +0 -0
- data/line-em-up/media/tiny_missile.png +0 -0
- data/line-em-up/models/bomb_pack.rb +2 -1
- data/line-em-up/models/bullet.rb +86 -3
- data/line-em-up/models/bullet_open_gl_backup.rb +69 -0
- data/line-em-up/models/dumb_projectile.rb +2 -1
- data/line-em-up/models/enemy_bullet.rb +4 -3
- data/line-em-up/models/enemy_player.rb +1 -1
- data/line-em-up/models/footer_bar.rb +34 -1
- data/line-em-up/models/general_object.rb +2 -0
- data/line-em-up/models/health_pack.rb +5 -3
- data/line-em-up/models/horizontal_swarm.rb +123 -0
- data/line-em-up/models/main.rb +92 -0
- data/line-em-up/models/missile.rb +52 -5
- data/line-em-up/models/missile_boat.rb +9 -3
- data/line-em-up/models/missile_pack.rb +6 -1
- data/line-em-up/models/mite.rb +104 -0
- data/line-em-up/models/mothership.rb +4 -4
- data/line-em-up/models/player.rb +126 -40
- data/line-em-up/models/projectile.rb +28 -13
- data/line-em-up/models/rocket_launcher_pickup.rb +26 -0
- data/line-em-up/models/{enemy_homing_missile.rb → semi_guided_missile.rb} +13 -5
- data/line-em-up/models/small_explosion.rb +18 -6
- data/line-em-up/models/star.rb +7 -3
- data/menu_launcher.rb +1 -95
- metadata +35 -3
- data/line-em-up/media/bomb_original copy.png +0 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
require_relative 'mite.rb'
|
2
|
+
|
3
|
+
class HorizontalSwarm
|
4
|
+
# SPEED = 5
|
5
|
+
# MAX_ATTACK_SPEED = 3.0
|
6
|
+
# POINT_VALUE_BASE = 50
|
7
|
+
# MISSILE_LAUNCHER_MIN_ANGLE = 255
|
8
|
+
# MISSILE_LAUNCHER_MAX_ANGLE = 285
|
9
|
+
# MISSILE_LAUNCHER_INIT_ANGLE = 270
|
10
|
+
# attr_accessor :cooldown_wait, :attack_speed, :health, :armor, :x, :y
|
11
|
+
# SWARM_COUNT = 10
|
12
|
+
SWARM_COUNT = 10
|
13
|
+
|
14
|
+
# def get_image
|
15
|
+
# Gosu::Image.new("#{MEDIA_DIRECTORY}/missile_boat_reverse.png")
|
16
|
+
# end
|
17
|
+
|
18
|
+
def self.trigger_swarm(scale, screen_width, screen_height, y = nil, options = {})
|
19
|
+
# super(scale, x || rand(screen_width), y || 0, screen_width, screen_height, options)
|
20
|
+
# @cooldown_wait = 0
|
21
|
+
# @attack_speed = 0.5
|
22
|
+
# @current_speed = (rand(5) * @scale).round + 1
|
23
|
+
swarm = []
|
24
|
+
x_padding = 40 * scale
|
25
|
+
base_x_padding = 40 * scale
|
26
|
+
y_padding = 40 * scale
|
27
|
+
|
28
|
+
y = y || rand(screen_height / 3) + screen_height / 8
|
29
|
+
|
30
|
+
if rand(2) == 0
|
31
|
+
x_direction = 1
|
32
|
+
else
|
33
|
+
x_direction = -1
|
34
|
+
end
|
35
|
+
|
36
|
+
(0..(SWARM_COUNT - 1)).each do |i|
|
37
|
+
if i.even?
|
38
|
+
new_y = y
|
39
|
+
else
|
40
|
+
new_y = y - y_padding
|
41
|
+
end
|
42
|
+
if x_direction > 0
|
43
|
+
new_x = 0 - x_padding
|
44
|
+
else
|
45
|
+
new_x = screen_width + x_padding
|
46
|
+
end
|
47
|
+
x_padding = x_padding + base_x_padding
|
48
|
+
swarm << Mite.new(scale, new_x, new_y, screen_width, screen_height, x_direction, options)
|
49
|
+
end
|
50
|
+
return swarm
|
51
|
+
end
|
52
|
+
|
53
|
+
# def get_points
|
54
|
+
# return POINT_VALUE_BASE
|
55
|
+
# end
|
56
|
+
|
57
|
+
|
58
|
+
# def take_damage damage
|
59
|
+
# @health -= damage
|
60
|
+
# end
|
61
|
+
|
62
|
+
# def attack player
|
63
|
+
# x_padding_1 = 5 * @scale
|
64
|
+
# x_padding_2 = -(5 * @scale)
|
65
|
+
# return {
|
66
|
+
# projectiles: [
|
67
|
+
# SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {custom_initial_delay: 2}),
|
68
|
+
# SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {custom_initial_delay: 12, x_homing_padding: x_padding_1}),
|
69
|
+
# SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {custom_initial_delay: 18, x_homing_padding: x_padding_2})
|
70
|
+
# ],
|
71
|
+
# cooldown: SemiGuidedMissile::COOLDOWN_DELAY
|
72
|
+
# }
|
73
|
+
# end
|
74
|
+
|
75
|
+
|
76
|
+
# def drops
|
77
|
+
# [
|
78
|
+
# SmallExplosion.new(@scale, @screen_width, @screen_height, @x, @y, @image),
|
79
|
+
# Star.new(@scale, @screen_width, @screen_height, @x, @y)
|
80
|
+
# ]
|
81
|
+
# end
|
82
|
+
|
83
|
+
# def get_draw_ordering
|
84
|
+
# ZOrder::Enemy
|
85
|
+
# end
|
86
|
+
|
87
|
+
# SPEED = 1
|
88
|
+
# def get_speed
|
89
|
+
|
90
|
+
# end
|
91
|
+
|
92
|
+
# def update mouse_x = nil, mouse_y = nil, player = nil
|
93
|
+
# @cooldown_wait -= 1 if @cooldown_wait > 0
|
94
|
+
# if is_alive
|
95
|
+
# # Stay above the player
|
96
|
+
# if player.is_alive && player.y < @y
|
97
|
+
# @y -= @current_speed
|
98
|
+
# else
|
99
|
+
# if rand(2).even?
|
100
|
+
# @y += @current_speed
|
101
|
+
|
102
|
+
# @y = @screen_height / 2 if @y > @screen_height / 2
|
103
|
+
# else
|
104
|
+
# @y -= @current_speed
|
105
|
+
|
106
|
+
# @y = 0 + (get_height / 2) if @y < 0 + (get_height / 2)
|
107
|
+
# end
|
108
|
+
# end
|
109
|
+
# if rand(2).even?
|
110
|
+
# @x += @current_speed
|
111
|
+
# @x = @screen_width if @x > @screen_width
|
112
|
+
# else
|
113
|
+
# @x -= @current_speed
|
114
|
+
# @x = 0 + (get_width / 2) if @x < 0 + (get_width / 2)
|
115
|
+
# end
|
116
|
+
|
117
|
+
# @y < @screen_height + (get_height / 2)
|
118
|
+
# else
|
119
|
+
# false
|
120
|
+
# end
|
121
|
+
# end
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
class Main < Gosu::Window
|
2
|
+
def initialize
|
3
|
+
@width, @height = ResolutionSetting::RESOLUTIONS[0].split('x').collect{|s| s.to_i}
|
4
|
+
super(@width, @height, false)
|
5
|
+
@cursor = Gosu::Image.new(self, "#{MEDIA_DIRECTORY}/cursor.png", false)
|
6
|
+
@gl_background = GLBackground.new
|
7
|
+
# x = self.width / 2 - 100
|
8
|
+
# y = self.height / 2 - 100
|
9
|
+
@center_ui_y = 0
|
10
|
+
@center_ui_x = 0
|
11
|
+
reset_center_font_ui_y
|
12
|
+
lineHeight = 50
|
13
|
+
@font = Gosu::Font.new(20)
|
14
|
+
self.caption = "A menu with Gosu"
|
15
|
+
# items = Array["exit", "additem", "item"]
|
16
|
+
# actions = Array[lambda { self.close }, lambda {
|
17
|
+
# @menu.add_item(Gosu::Image.new(self, "#{MEDIA_DIRECTORY}/item.png", false), x, y, 1, lambda { })
|
18
|
+
# y += lineHeight
|
19
|
+
# }, lambda {}]
|
20
|
+
@menu = Menu.new(self)
|
21
|
+
# for i in (0..items.size - 1)
|
22
|
+
# @menu.add_item(Gosu::Image.new(self, "#{MEDIA_DIRECTORY}/#{items[i]}.png", false), x, y, 1, actions[i], Gosu::Image.new(self, "#{MEDIA_DIRECTORY}/#{items[i]}_hover.png", false))
|
23
|
+
# y += lineHeight
|
24
|
+
# end
|
25
|
+
exit_image = Gosu::Image.new("#{MEDIA_DIRECTORY}/exit.png")
|
26
|
+
# puts "WIDTH HERE: #{exit_image.width}"
|
27
|
+
# 8
|
28
|
+
@menu.add_item(exit_image, ((@width / 2) - (exit_image.width / 2)), get_center_font_ui_y, 1, lambda { self.close }, exit_image)
|
29
|
+
window_height = Gosu.screen_height
|
30
|
+
@resolution_menu = ResolutionSetting.new(window_height, @width, @height, get_center_font_ui_y, CONFIG_FILE)
|
31
|
+
|
32
|
+
@difficulty = nil
|
33
|
+
@difficulty_menu = DifficultySetting.new(@width, @height, get_center_font_ui_y, CONFIG_FILE)
|
34
|
+
|
35
|
+
start_image = Gosu::Image.new("#{MEDIA_DIRECTORY}/start.png")
|
36
|
+
@game_window_width, @game_window_height, @full_screen = [nil, nil, nil]
|
37
|
+
@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)
|
38
|
+
debug_start_image = Gosu::Image.new("#{MEDIA_DIRECTORY}/debug_start.png")
|
39
|
+
@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}) }, debug_start_image)
|
40
|
+
# @font.draw("<", width + 15, get_center_font_ui_y, 1, 1.0, 1.0, 0xff_ffff00)
|
41
|
+
# @font.draw("Resolution", width / 2, get_center_font_ui_y, 1, 1.0, 1.0, 0xff_ffff00)
|
42
|
+
# @font.draw(">", width - 15, get_center_font_ui_y, 1, 1.0, 1.0, 0xff_ffff00)
|
43
|
+
# @menu.add_item(Gosu::Image.new(self, "#{MEDIA_DIRECTORY}/start.png", false), get_center_font_ui_x, get_center_font_ui_y, 1, lambda { self.close; GameWindow.start(nil, nil, {block_controls_until_button_up: true}) }, Gosu::Image.new(self, "#{MEDIA_DIRECTORY}/start.png", false))
|
44
|
+
end
|
45
|
+
|
46
|
+
def dynamic_get_resolution_fs
|
47
|
+
@fullscreen
|
48
|
+
end
|
49
|
+
|
50
|
+
def update
|
51
|
+
@menu.update
|
52
|
+
@resolution_menu.update(self.mouse_x, self.mouse_y)
|
53
|
+
@difficulty_menu.update(self.mouse_x, self.mouse_y)
|
54
|
+
|
55
|
+
@game_window_width, @game_window_height, @fullscreen = @resolution_menu.get_resolution
|
56
|
+
@difficulty = @difficulty_menu.get_difficulty
|
57
|
+
@gl_background.scroll
|
58
|
+
end
|
59
|
+
|
60
|
+
def draw
|
61
|
+
@cursor.draw(self.mouse_x, self.mouse_y, 2)
|
62
|
+
# @back.draw(0,0,0)
|
63
|
+
reset_center_font_ui_y
|
64
|
+
@menu.draw
|
65
|
+
@resolution_menu.draw
|
66
|
+
@difficulty_menu.draw
|
67
|
+
@gl_background.draw(ZOrder::Background)
|
68
|
+
end
|
69
|
+
|
70
|
+
def button_down id
|
71
|
+
if id == Gosu::MsLeft then
|
72
|
+
@menu.clicked
|
73
|
+
@resolution_menu.clicked(self.mouse_x, self.mouse_y)
|
74
|
+
@difficulty_menu.clicked(self.mouse_x, self.mouse_y)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def get_center_font_ui_y
|
79
|
+
return_value = @center_ui_y
|
80
|
+
@center_ui_y += 50
|
81
|
+
return return_value
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_center_font_ui_x
|
85
|
+
return @center_ui_x
|
86
|
+
end
|
87
|
+
|
88
|
+
def reset_center_font_ui_y
|
89
|
+
@center_ui_y = self.height / 2 - 100
|
90
|
+
@center_ui_x = self.width / 2 - 100
|
91
|
+
end
|
92
|
+
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
require_relative 'projectile.rb'
|
2
|
+
|
3
|
+
require 'opengl'
|
4
|
+
# require 'glu'
|
5
|
+
# require 'glut'
|
6
|
+
|
2
7
|
class Missile < Projectile
|
3
8
|
attr_reader :x, :y, :time_alive, :mouse_start_x, :mouse_start_y
|
4
9
|
COOLDOWN_DELAY = 30
|
5
|
-
MAX_SPEED =
|
10
|
+
MAX_SPEED = 30
|
6
11
|
STARTING_SPEED = 0.0
|
7
|
-
INITIAL_DELAY =
|
8
|
-
SPEED_INCREASE_FACTOR =
|
9
|
-
DAMAGE =
|
12
|
+
INITIAL_DELAY = 0.5
|
13
|
+
SPEED_INCREASE_FACTOR = 2
|
14
|
+
DAMAGE = 10
|
10
15
|
AOE = 0
|
11
16
|
|
12
17
|
MAX_CURSOR_FOLLOW = 4
|
@@ -21,9 +26,51 @@ class Missile < Projectile
|
|
21
26
|
# super(scale, screen_width, screen_height, object, end_point_x, end_point_y, angle_min, angle_max, angle_init, options)
|
22
27
|
# # puts "MYYYY MISSILE ANGLE: #{@angle}"
|
23
28
|
# end
|
29
|
+
# include Gl
|
30
|
+
# include Glu
|
31
|
+
# include Glut
|
32
|
+
|
33
|
+
# def draw
|
34
|
+
# z = ZOrder::Projectile
|
35
|
+
# # @image.draw(@x - get_width / 2, @y - get_height / 2, get_draw_ordering, @scale, @scale)
|
36
|
+
# # gl do
|
37
|
+
# # points_x = 3
|
38
|
+
# # pounts_y = 10
|
39
|
+
# # Gosu.gl(z) {
|
40
|
+
# # # glColor3f(r,g,b);
|
41
|
+
# # 0.upto(pounts_y) do |y|
|
42
|
+
# # 0.upto(points_x) do |x|
|
43
|
+
# # # glColor3f(1.0, 1.0, 0.0)
|
44
|
+
# # glColor4d(1, 0, 0, z)
|
45
|
+
# # glBegin(GL_LINES)
|
46
|
+
# # glColor3f(1.0, 0.0, 0.0)
|
47
|
+
# # glVertex3d(@x + x, @y + y, z)
|
48
|
+
# # # glVertex3d(@x - 5, @y , z)
|
49
|
+
# # glEnd
|
50
|
+
# # end
|
51
|
+
# # end
|
52
|
+
# # }
|
53
|
+
|
54
|
+
# Gosu.gl(z) {
|
55
|
+
# glLineWidth(2.5)
|
56
|
+
# glColor3f(1.0, 0.0, 0.0)
|
57
|
+
# glBegin(GL_LINES)
|
58
|
+
# glVertex3f(0.0, 0.0, 0.0)
|
59
|
+
# glVertex3f(15, 0, 0)
|
60
|
+
# glEnd
|
61
|
+
# }
|
62
|
+
|
63
|
+
# # end
|
64
|
+
# end
|
24
65
|
|
25
66
|
def get_image
|
26
|
-
Gosu::Image.new("#{MEDIA_DIRECTORY}/
|
67
|
+
Gosu::Image.new("#{MEDIA_DIRECTORY}/mini_missile.png")
|
68
|
+
end
|
69
|
+
|
70
|
+
def drops
|
71
|
+
[
|
72
|
+
SmallExplosion.new(@scale, @screen_width, @screen_height, @x, @y, nil, {ttl: 2, third_scale: true}),
|
73
|
+
]
|
27
74
|
end
|
28
75
|
|
29
76
|
# def initialize(object, mouse_x = nil, mouse_y = nil, options = {})
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'player.rb'
|
2
2
|
require_relative 'enemy_bullet.rb'
|
3
|
-
require_relative '
|
3
|
+
require_relative 'semi_guided_missile.rb'
|
4
4
|
require_relative 'small_explosion.rb'
|
5
5
|
require_relative 'star.rb'
|
6
6
|
|
@@ -40,9 +40,15 @@ class MissileBoat < GeneralObject
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def attack player
|
43
|
+
x_padding_1 = 5 * @scale
|
44
|
+
x_padding_2 = -(5 * @scale)
|
43
45
|
return {
|
44
|
-
projectiles: [
|
45
|
-
|
46
|
+
projectiles: [
|
47
|
+
SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {custom_initial_delay: 2}),
|
48
|
+
SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {custom_initial_delay: 12, x_homing_padding: x_padding_1}),
|
49
|
+
SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {custom_initial_delay: 18, x_homing_padding: x_padding_2})
|
50
|
+
],
|
51
|
+
cooldown: SemiGuidedMissile::COOLDOWN_DELAY
|
46
52
|
}
|
47
53
|
end
|
48
54
|
|
@@ -11,7 +11,12 @@ class MissilePack < Pickup
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def collected_by_player player
|
14
|
-
|
14
|
+
value = 35
|
15
|
+
boost_increase = player.boost_increase
|
16
|
+
if boost_increase > 1
|
17
|
+
boost_increase = 1 + ((boost_increase - 1) / 10)
|
18
|
+
end
|
19
|
+
player.rockets += (boost_increase * value).round
|
15
20
|
end
|
16
21
|
|
17
22
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require_relative 'player.rb'
|
2
|
+
require_relative 'enemy_bullet.rb'
|
3
|
+
require_relative 'semi_guided_missile.rb'
|
4
|
+
require_relative 'small_explosion.rb'
|
5
|
+
require_relative 'star.rb'
|
6
|
+
require_relative 'general_object.rb'
|
7
|
+
|
8
|
+
class Mite < GeneralObject
|
9
|
+
SPEED = 25
|
10
|
+
MAX_ATTACK_SPEED = 0.8
|
11
|
+
POINT_VALUE_BASE = 5
|
12
|
+
# MISSILE_LAUNCHER_MIN_ANGLE = 255
|
13
|
+
# MISSILE_LAUNCHER_MAX_ANGLE = 285
|
14
|
+
# MISSILE_LAUNCHER_INIT_ANGLE = 270
|
15
|
+
attr_accessor :cooldown_wait, :attack_speed, :health, :armor, :x, :y
|
16
|
+
|
17
|
+
def get_image
|
18
|
+
Gosu::Image.new("#{MEDIA_DIRECTORY}/mite.png")
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(scale, x, y, screen_width, screen_height, x_direction, options = {})
|
22
|
+
# initialize(scale, x, y, screen_width, screen_height, options = {})
|
23
|
+
super(scale, x, y, screen_width, screen_height, options)
|
24
|
+
@cooldown_wait = 0
|
25
|
+
@attack_speed = 1
|
26
|
+
@health = 2
|
27
|
+
@armor = 0
|
28
|
+
@current_speed = self.class.get_max_speed * @scale
|
29
|
+
@x_direction = x_direction
|
30
|
+
@switched_directions = false
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_points
|
34
|
+
return POINT_VALUE_BASE
|
35
|
+
end
|
36
|
+
|
37
|
+
def is_alive
|
38
|
+
@health > 0
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def take_damage damage
|
43
|
+
@health -= damage
|
44
|
+
end
|
45
|
+
|
46
|
+
def attack player
|
47
|
+
return {
|
48
|
+
projectiles: [
|
49
|
+
SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player)
|
50
|
+
],
|
51
|
+
cooldown: SemiGuidedMissile::COOLDOWN_DELAY * MAX_ATTACK_SPEED
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def drops
|
57
|
+
value = [SmallExplosion.new(@scale, @screen_width, @screen_height, @x, @y, nil, {ttl: 2, third_scale: true})]
|
58
|
+
value << Star.new(@scale, @screen_width, @screen_height, @x, @y) if rand(2) == 0
|
59
|
+
return value
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_draw_ordering
|
63
|
+
ZOrder::Enemy
|
64
|
+
end
|
65
|
+
|
66
|
+
# def exec_gl
|
67
|
+
# raise "HERE"
|
68
|
+
# end
|
69
|
+
|
70
|
+
def update mouse_x = nil, mouse_y = nil, player = nil
|
71
|
+
@cooldown_wait -= 1 if @cooldown_wait > 0
|
72
|
+
@time_alive += 1
|
73
|
+
if is_alive
|
74
|
+
@x = @x + (@current_speed * @x_direction)
|
75
|
+
@y = @y + (Math.sin(@x / 50) * 5 * @scale)# * 20 * @scale
|
76
|
+
|
77
|
+
if @switched_directions
|
78
|
+
# puts "CASE 1"
|
79
|
+
if @x_direction > 0
|
80
|
+
# puts "CASE 1.3"
|
81
|
+
@x < @screen_width
|
82
|
+
else
|
83
|
+
# puts 'CASE 1.6'
|
84
|
+
@x > 0
|
85
|
+
end
|
86
|
+
else
|
87
|
+
if @x_direction < 0 && @x < 0 - @screen_width / 2
|
88
|
+
# puts "CASE 2: "
|
89
|
+
@switched_directions = true
|
90
|
+
@x_direction = @x_direction * -1
|
91
|
+
elsif @x_direction > 0 && @x > @screen_width + @screen_width / 2
|
92
|
+
# puts "CASE 3"
|
93
|
+
@switched_directions = true
|
94
|
+
@x_direction = @x_direction * -1
|
95
|
+
end
|
96
|
+
# puts "CASE 4"
|
97
|
+
return true
|
98
|
+
end
|
99
|
+
else
|
100
|
+
# puts "CASE 5"
|
101
|
+
false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# require_relative 'player.rb'
|
2
2
|
require_relative 'enemy_bullet.rb'
|
3
|
-
require_relative '
|
3
|
+
require_relative 'semi_guided_missile.rb'
|
4
4
|
require_relative 'small_explosion.rb'
|
5
5
|
require_relative 'star.rb'
|
6
6
|
require_relative 'enemy_bomb.rb'
|
@@ -67,10 +67,10 @@ class Mothership < GeneralObject
|
|
67
67
|
return {
|
68
68
|
projectiles: [
|
69
69
|
# relative_object not required yet for these
|
70
|
-
|
71
|
-
|
70
|
+
SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {side: 'left', relative_object: self }),
|
71
|
+
SemiGuidedMissile.new(@scale, @screen_width, @screen_height, self, player, MISSILE_LAUNCHER_MIN_ANGLE, MISSILE_LAUNCHER_MAX_ANGLE, MISSILE_LAUNCHER_INIT_ANGLE, {side: 'right', relative_object: self })
|
72
72
|
],
|
73
|
-
cooldown:
|
73
|
+
cooldown: SemiGuidedMissile::COOLDOWN_DELAY
|
74
74
|
}
|
75
75
|
end
|
76
76
|
|