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

+77 -1
View File
@@ -1,5 +1,41 @@
local RunService = game:GetService("RunService")
local Tower = require(script.Parent.Tower)
local Waves = require(script.Parent.Waves)
local towerTypes = {
{
name = "Basic",
model = workspace.BasicTowerModel,
range = 20,
damage = 10,
fireRate = 1,
},
{
name = "Slow",
model = workspace.SlowTowerModel,
range = 15,
damage = 5,
fireRate = 0.5,
effect = {name = "slow", params = {duration = 2, value = 0.5}}
},
{
name = "Fire",
model = workspace.FireTowerModel,
range = 18,
damage = 8,
fireRate = 1,
effect = {name = "burn", params = {duration = 3, tick = 1, value = 2}}
},
{
name = "Freeze",
model = workspace.FreezeTowerModel,
range = 12,
damage = 0,
fireRate = 0.5,
effect = {name = "freeze", params = {duration = 1}}
}
}
local waypoints = { -- Fill with your waypoint Parts
workspace.Waypoint1,
workspace.Waypoint2,
@@ -7,8 +43,13 @@ local waypoints = { -- Fill with your waypoint Parts
-- etc.
}
local selectedTowerType = towerTypes[1]
local enemies = {} -- Table to hold TrackEnemy objects
local towers = {}
function selectTowerType(index)
selectedTowerType = towerTypes[index]
end
local function spawnWave(waveData)
coroutine.wrap(function()
@@ -17,6 +58,7 @@ local function spawnWave(waveData)
local enemyModel = group.model:Clone()
enemyModel.Parent = workspace
local enemy = TrackEnemy:new(enemyModel, group.name, group.health, group.speed)
table.insert(enemies, enemy)
end
if group.delay and group.delay > 0 then
@@ -28,6 +70,40 @@ end
spawnWave(Waves[1])
local function isOnTrack(position)
for _, waypoint in ipairs(waypoints) do
if (waypoint.Position - position).Magnitude < 5 then -- 5 studs
return true
end
end
return false
end
UserInputService.InputBegan:Connect(function (input, gameProcessed)
if gameProcessed then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
local mouse = game.Players.LocalPlayer():GetMouse()
local position = mouse.Hit.p
if not isOnTrack(position) then
local tower = Tower:new(
selectedTowerType.model,
position,
selectedTowerType.range,
selectedTowerType.damage,
selectedTowerType.fireRate,
selectedTowerType.effect
)
table.insert(towers, tower)
end
end
end)
RunService.Heartbeat:Connect(function(dt)
for _, tower in ipairs(towers) do
tower:attack(enemies, dt)
end
end)
RunService.Heartbeat:Connect(function(dt)
for i, enemy in ipairs(enemies) do
if enemy.alive then