-
Notifications
You must be signed in to change notification settings - Fork 0
/
Asteroid.lua
80 lines (70 loc) · 2.14 KB
/
Asteroid.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
local ASTEROID_COLOR = {
red = 232/255,
green = 233/255,
blue = 235/255,
}
local ASTEROID_RADIUS = 10
local ASTEROID_MIN_SPEED = 80
local ASTEROID_MAX_SPEED = 200
Asteroid = GameObj:extend()
Asteroid.spawnTimer = 0
function Asteroid:new()
x, y, self.speed_x, self.speed_y = Asteroid.randomPosSpeed()
Asteroid.super.new(self, x, y, ASTEROID_RADIUS, ASTEROID_COLOR)
end
function Asteroid:update(dt)
self.x = self.x + self.speed_x * dt
self.y = self.y + self.speed_y * dt
if (self.x - self.radius <= 0
and self.speed_x < 0)
or (self.x + self.radius >= love.graphics.getWidth()
and self.speed_x > 0) then
self.speed_x = -self.speed_x
end
if (self.y - self.radius <= 0
and self.speed_y < 0)
or (self.y + self.radius >= love.graphics.getHeight()
and self.speed_y > 0) then
self.speed_y = -self.speed_y
end
end
function Asteroid.classUpdate(dt, asteroids)
Asteroid.spawnTimer = Asteroid.spawnTimer + dt
if (Asteroid.spawnTimer > 3) then
table.insert(asteroids, Asteroid())
Asteroid.spawnTimer = 0
end
end
function Asteroid.randomPosSpeed()
local fourEdges = {
{
love.math.random(0, love.graphics.getWidth()),
-ASTEROID_RADIUS
},
{
love.math.random(0, love.graphics.getWidth()),
love.graphics.getHeight() + ASTEROID_RADIUS
},
{
-ASTEROID_RADIUS,
love.math.random(0, love.graphics.getHeight())
},
{
love.graphics.getWidth() + ASTEROID_RADIUS,
love.math.random(0, love.graphics.getHeight())
}
}
local init_xy = fourEdges[love.math.random(1, 4)]
local angle = math.rad(love.math.random(0, 180))
local speed = love.math.random(ASTEROID_MIN_SPEED, ASTEROID_MAX_SPEED)
local speed_x = math.cos(angle) * ASTEROID_MIN_SPEED
local speed_y = math.sin(angle) * ASTEROID_MAX_SPEED
return init_xy[1], init_xy[2], speed_x, speed_y
end
function Asteroid.spawn(n)
local asteroids = {}
for i = 1, n do
asteroids[i] = Asteroid()
end
return asteroids
end