-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenemyController.lua
More file actions
137 lines (115 loc) · 4.38 KB
/
enemyController.lua
File metadata and controls
137 lines (115 loc) · 4.38 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
enemyController = {}
enemyController.direction = 'r'
enemyController.speed = 200
enemyController.accelerationRate = 40
enemyController.spacing = 60
enemyController.dropRate = 6
enemyController.x = 0
enemyController.y = 0
enemyController.bulletSpeed = 110
enemyController.nextBullet = 1
enemyController.bullets = {}
enemyController.totalEnemies = 16
enemyController.enemies = {}
function enemyController.reset()
enemyController.direction = 'r'
enemyController.speed = 200
enemyController.accelerationRate = 40
enemyController.spacing = 60
enemyController.dropRate = 6
enemyController.x = 0
enemyController.y = 0
enemyController.bulletSpeed = 110
enemyController.nextBullet = 1
enemyController.bullets = {}
enemyController.enemies = {}
enemyController.totalEnemies = 16
-- spawn Enemies
for i=1, enemyController.totalEnemies do enemyController.makeEnemy() end
end
function enemyController.update(dt)
-- update bullets
for i, bullet in ipairs(enemyController.bullets) do
bullet.y = bullet.y + enemyController.bulletSpeed * dt
if bullet.y > love.graphics:getHeight() then bullet.dead = true end
end
-- update enemies position
if enemyController.direction == 'r' then
enemyController.x = enemyController.x + enemyController.speed * dt
else
enemyController.x = enemyController.x - enemyController.speed * dt
end
-- check colisions
for i, enemy in ipairs(enemyController.enemies) do
-- Switch direction
if enemyController.x < 0 - enemy.x then
-- prevents the enemies from going offscreen
enemyController.x = 0 - enemy.x
enemyController.direction = 'r'
enemyController.y = enemyController.y + enemyController.dropRate
end
if enemyController.x + enemy.x + enemy.width > love.graphics:getWidth() then
-- prevents the enemies from going offscreen
enemyController.x = love.graphics:getWidth() - enemy.x - enemy.width
enemyController.direction = 'l'
enemyController.y = enemyController.y + enemyController.dropRate
end
end
-- fire enemy bullets
if enemyController.nextBullet < 0 then
enemyController.spawnEnemyBullet()
local bulletTiming = (1 - (enemyController.totalEnemies - #enemyController.enemies) / enemyController.totalEnemies) * (math.random() * 4)
-- enemyController.nextBullet = bulletTiming
enemyController.nextBullet = bulletTiming
else
enemyController.nextBullet = enemyController.nextBullet - dt
end
--[[ Clean up the dead ]]
-- remove dead bullets
for i=#enemyController.bullets, 1, -1 do
local bullet = enemyController.bullets[i]
if bullet.dead then table.remove(enemyController.bullets, i) end
end
-- remove dead enemies
for i=#enemyController.enemies, 1, -1 do
local enemy = enemyController.enemies[i]
if enemy.dead then table.remove(enemyController.enemies, i) end
end
end
function enemyController.draw()
-- draw bullets
for i, bullet in ipairs(enemyController.bullets) do
love.graphics.rectangle('fill', bullet.x, bullet.y, bullet.width, bullet.height)
end
-- Draw Enemies
for i, enemy in ipairs(enemyController.enemies) do
love.graphics.rectangle('fill', enemyController.x + enemy.x, enemyController.y + enemy.y, enemy.width, enemy.height)
end
end
function enemyController.makeEnemy()
local enemy = {}
enemy.width = 30
enemy.height = 25
enemy.dead = false
local maxEnemiesPerRow = math.floor(love.graphics:getWidth() / (enemy.width + enemyController.spacing))
local numberOfLoops = math.floor(#enemyController.enemies / maxEnemiesPerRow)
enemy.x = (#enemyController.enemies % maxEnemiesPerRow) * (enemy.width + enemyController.spacing)
enemy.y = numberOfLoops * 90
table.insert(enemyController.enemies, enemy)
end
function enemyController.spawnEnemyBullet()
local chosenEnemy = enemyController.enemies[math.random(#enemyController.enemies)]
if chosenEnemy then
local bullet = {}
bullet.width = 4
bullet.height = 20
bullet.dead = false
bullet.x = enemyController.x + chosenEnemy.x + chosenEnemy.width/2
bullet.y = enemyController.y + chosenEnemy.y + bullet.height
table.insert(enemyController.bullets, bullet)
end
end
function enemyController.increaseSpeed()
enemyController.speed = enemyController.speed + enemyController.accelerationRate
end
return enemyController