-
Notifications
You must be signed in to change notification settings - Fork 0
/
bullet.lua
110 lines (100 loc) · 2.58 KB
/
bullet.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
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
--[[bullet = {
x=0,
y=0,
velocity = {x=0,y=0}
direction=0,
friendly=false,-- true means won't harm player (as in it came from the player)
frames={
love.graphics.newImage("Frames/Proj/bullet.png"),
love.graphics.newImage("Frames/Proj/bullet2.png")
},
currentFrame = 1
}--]]
local entity = require (".entity")
bullet = entity:new()
function bullet:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
o.frames = {
love.graphics.newImage("Frames/Proj/bullet.png"),
love.graphics.newImage("Frames/Proj/bullet2.png")
}
return o
end
function bullet:start (x,y,dir,friendly)
self.x=x
self.y=y
self.direction = dir
self.friendly = friendly
self.getSides = function(dir)
local vel=1500
xS = vel*math.cos(dir)
yS = vel*math.sin(dir)
return xS,yS
end
self.currentFrame = 1
self.currentTime = 0
self.velocity={x=0,y=0}
end
bulletTable = {}
bulletCount = 0
shootSound = love.audio.newSource("Sounds/shot.wav","static")
function bulletTable:start()
self = {}
self.todestroy = {}
for i,_ in ipairs(self) do
if math.abs(self[i].x) > love.graphics.getHeight() or math.abs(self[i].y) > love.graphics.getHeight() then
self.todestroy[i] = 1
end
end
for i,_ in ipairs(self.todestroy) do
if self.todestroy[i] == 1 then
self:destroy(i)
end
end
end
function bulletTable:create(x,y,dir,friendly)
--print(self[1])
local newBullet = bullet:new()
newBullet:start(x,y,dir,friendly)
table.insert(self,newBullet)
--print(self[1])
bulletCount = bulletCount+1
if playSound then
shootSound:play()
end
end
function bulletTable:destroy(n)
print("destroyed")
table.remove(self,n)
bulletCount = bulletCount-1
end
function bulletTable:update(dt)
if self[1] ~= 1 then
--[[for i,_ in ipairs(self) do
if math.abs(self[i].x) > love.graphics.getHeight() or math.abs(self[i].y) > love.graphics.getHeight() then
self:destroy(i)
end--]]
--end
for i,_ in ipairs(self) do
local direc = self[i].direction
local dx,dy = self[i].getSides(direc)
self[i]:move(dx,dy,dt,false)
self[i]:animate(dt,0.07)
if self[i].currentFrame >= 3 then
self[i].currentFrame = 1
end
end
end
end
function bulletTable:draw()
local modifier = 6*(love.graphics.getHeight()/1920)
if self[1] ~= 1 then
for i,v in ipairs(self) do
--print(self[i].currentFrame)
love.graphics.draw(self[i].frames[self[i].currentFrame],self[i].x,self[i].y,self[i].direction,modifier,modifier,4,4)
end
end
end
return bulletTable