add towers / effects
This commit is contained in:
1 parent
3626379b23
commit
6000889ebf
3 files changed
+154
-2
No files matched your search
+77
-1
@@ -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
|
||||
|
||||
Reference in new issue
Block a user