add towers / effects
This commit is contained in:
1 parent
3626379b23
commit
6000889ebf
3 files changed
+154
-2
No files matched your search
@@ -0,0 +1,42 @@
|
||||
local Tower = {}
|
||||
Tower.__index = Tower
|
||||
|
||||
function Tower:new(model, position, range, damage, fireRate, effect)
|
||||
local self = setmetatable({}, Tower)
|
||||
self.model = model:Clone()
|
||||
self.model.Position = position
|
||||
self.model.Anchored = true
|
||||
self.model.Parent = workspace
|
||||
self.range = range
|
||||
self.damage = damage
|
||||
self.fireRate = fireRate or 1 -- shots per second
|
||||
self.effect = effect -- set of params for effect
|
||||
self.lastFire = 0
|
||||
return self
|
||||
end
|
||||
|
||||
function Tower:canAttack(enemy)
|
||||
if not enemy.alive or not enemy.model or not enemy.model.PrimaryPart then return false end
|
||||
local dist = (self.model.Position - enemy.model.PrimaryPart.Position).Magnitude
|
||||
return dist <= self.range
|
||||
end
|
||||
|
||||
function Tower:attack(enemies, dt)
|
||||
self.lastFire = self.lastFire + dt
|
||||
if self.lastFire >= (1 / self.fireRate) then
|
||||
for _, enemy in ipairs(enemies) do
|
||||
if self:canAttack(enemy) then
|
||||
enemy:damage(self.damage)
|
||||
|
||||
if self.effect then
|
||||
enemy:applyEffect(self.effect.name, self.effect.params)
|
||||
end
|
||||
|
||||
self.lastFire = 0
|
||||
break -- Only attack one enemy per fire
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return Tower
|
||||
Reference in new issue
Block a user