add towers / effects

This commit is contained in:
JISAUAY committed 2025-07-25 13:32:06 -05:00
1 parent 3626379b23
commit 6000889ebf
3 files changed
+154 -2

No files matched your search

+42
View File
@@ -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