1fireball = class:new()
2
3function fireball:init(x, y, dir, v)
4	--PHYSICS STUFF
5	self.y = y+4/16
6	self.speedy = 0
7	if dir == "right" then
8		self.speedx = fireballspeed
9		self.x = x+6/16
10	else
11		self.speedx = -fireballspeed
12		self.x = x
13	end
14	self.width = 8/16
15	self.height = 8/16
16	self.active = true
17	self.static = false
18	self.category = 13
19
20	self.mask = {	true,
21					false, true, false, false, true,
22					false, true, false, true, false,
23					false, true, false, true, false,
24					true, true, false, false, false,
25					false, true, false, false, true,
26					false, false, false, false, true}
27
28	self.destroy = false
29	self.destroysoon = false
30	--self.gravity = 40
31
32	--IMAGE STUFF
33	self.drawable = true
34	self.graphic = fireballimg
35	self.quad = fireballquad[1]
36	self.offsetX = 4
37	self.offsetY = 4
38	self.quadcenterX = 4
39	self.quadcenterY = 4
40
41	self.fireballthrower = v
42
43	self.rotation = 0 --for portals
44	self.timer = 0
45	self.quadi = 1
46end
47
48function fireball:update(dt)
49	--rotate back to 0 (portals)
50	self.rotation = 0
51
52	--animate
53	self.timer = self.timer + dt
54	if self.destroysoon == false then
55		while self.timer > staranimationdelay do
56			self.quadi = self.quadi + 1
57			if self.quadi == 5 then
58				self.quadi = 1
59			end
60			self.quad = fireballquad[self.quadi]
61			self.timer = self.timer - staranimationdelay
62		end
63	else
64		while self.timer > staranimationdelay do
65			self.quadi = self.quadi + 1
66			if self.quadi == 8 then
67				self.destroy = true
68				self.quadi = 7
69			end
70
71			self.quad = fireballquad[self.quadi]
72			self.timer = self.timer - staranimationdelay
73		end
74	end
75
76	if self.x < xscroll-1 or self.x > xscroll+width+1 or self.y > 15 and self.active then
77		self.fireballthrower:fireballcallback()
78		self.destroy = true
79	end
80
81	if self.destroy then
82		return true
83	else
84		return false
85	end
86end
87
88function fireball:leftcollide(a, b)
89	self.x = self.x-.5
90	self:hitstuff(a, b)
91
92	self.speedx = fireballspeed
93	return false
94end
95
96function fireball:rightcollide(a, b)
97	self:hitstuff(a, b)
98
99	self.speedx = -fireballspeed
100	return false
101end
102
103function fireball:floorcollide(a, b)
104	if a ~= "tile" and a ~= "portalwall" then
105		self:hitstuff(a, b)
106	end
107
108	self.speedy = -fireballjumpforce
109	return false
110end
111
112function fireball:ceilcollide(a, b)
113	self:hitstuff(a, b)
114end
115
116function fireball:passivecollide(a, b)
117	self:ceilcollide(a, b)
118	return false
119end
120
121function fireball:hitstuff(a, b)
122	if a == "tile" or a == "bulletbill" or a == "portalwall" or a == "spring" then
123		self:explode()
124		playsound(blockhitsound)
125
126	elseif a == "goomba" or a == "koopa" or a == "hammerbro" or a == "plant" or a == "cheep" or a == "bowser" or a == "squid" or a == "cheep" or a == "flyingfish" or a == "lakito" then
127		if a ~= "koopa" or b.t ~= "beetle" then
128			b:shotted("right")
129			if a ~= "bowser" then
130				addpoints(firepoints[a], self.x, self.y)
131			end
132		end
133		self:explode()
134	end
135end
136
137function fireball:explode()
138	if self.active then
139		self.fireballthrower:fireballcallback()
140
141		self.destroysoon = true
142		self.quadi = 5
143		self.quad = fireballquad[self.quadi]
144		self.active = false
145	end
146end