Skip to content

Commit

Permalink
More tests and a slight refactor to improve the algorithm
Browse files Browse the repository at this point in the history
  • Loading branch information
danhunsaker committed Jul 27, 2024
1 parent e98d38a commit ac8b227
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 10 deletions.
23 changes: 14 additions & 9 deletions src/gremlin.lua
Original file line number Diff line number Diff line change
Expand Up @@ -522,19 +522,24 @@ Gremlin = {

return tbl1
end,
spawnPoints = function(_angle, _scatterRadius, _counter)
--- Calculate the positions of units to spawn.
--
-- @function Gremlin.utlis.spawnPoints
-- @tparam number _angle
-- @tparam number|table _scatterRadius
-- @tparam number _counter
-- @treturn number, number
spawnPoints = function(_angle, _scatterRadius)
local _xOffset, _yOffset

if _counter == nil or _counter < 1 then
_counter = 0
end

if type(_scatterRadius) == 'table' then
_xOffset = math.cos(_angle) * math.random(_scatterRadius.min, _scatterRadius.max) * _counter
_yOffset = math.sin(_angle) * math.random(_scatterRadius.min, _scatterRadius.max) * _counter
local _realRadius = math.min(math.max(_scatterRadius.max * math.sqrt(math.random()), _scatterRadius.min), _scatterRadius.max)
_xOffset = math.cos(_angle) * _realRadius
_yOffset = math.sin(_angle) * _realRadius
else
_xOffset = math.cos(_angle) * math.random(_scatterRadius) * _counter
_yOffset = math.sin(_angle) * math.random(_scatterRadius) * _counter
local _realRadius = _scatterRadius * math.sqrt(math.random())
_xOffset = math.cos(_angle) * _realRadius
_yOffset = math.sin(_angle) * _realRadius
end

return _xOffset, _yOffset
Expand Down
2 changes: 1 addition & 1 deletion src/waves.lua
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ Waves._internal.spawnWave = function(_name, _wave)
local _units = {}
for _unitType, _unitCount in pairs(_groupData.units) do
for i = 1, _unitCount do
local _xOffset, _yOffset = Gremlin.utils.spawnPoints(_angle, _groupData.scatter, #_units)
local _xOffset, _yOffset = Gremlin.utils.spawnPoints(_angle, _groupData.scatter)

table.insert(_units, {
type = _unitType,
Expand Down
20 changes: 20 additions & 0 deletions test/gremlin.lua
Original file line number Diff line number Diff line change
Expand Up @@ -653,5 +653,25 @@ TestGremlinUtils = {
-- SIDE EFFECTS
-- N/A?
end,
testSpawnPointsNumber = function()
-- INIT
-- N/A?

-- TEST
lu.assertAlmostEquals({ Gremlin.utils.spawnPoints(0.25 * math.pi, 50) }, { 0, 0 }, 50)

-- SIDE EFFECTS
-- N/A?
end,
testSpawnPointsTable = function()
-- INIT
-- N/A?

-- TEST
lu.assertAlmostEquals({ Gremlin.utils.spawnPoints(0.25 * math.pi, { min = 25, max = 50 }) }, { 0, 0 }, 50)

-- SIDE EFFECTS
-- N/A?
end,
tearDown = tearDown,
}

0 comments on commit ac8b227

Please sign in to comment.