Files
utd/Tower.lua
T
2025-07-25 13:32:06 -05:00

43 lines
1.2 KiB
Lua

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