Untitled diff

Created Diff never expires
4 removals
142 lines
4 additions
142 lines
package.path = package.path .. ";data/scripts/systems/?.lua"
package.path = package.path .. ";data/scripts/systems/?.lua"
package.path = package.path .. ";data/scripts/lib/?.lua"
package.path = package.path .. ";data/scripts/lib/?.lua"
require ("basesystem")
require ("basesystem")
require ("utility")
require ("utility")
require ("randomext")
require ("randomext")


materialLevel = 0
materialLevel = 0
range = 0
range = 0
amount = 0
amount = 0


function getBonuses(seed, rarity)
function getBonuses(seed, rarity)
math.randomseed(seed)
math.randomseed(seed)


local range = 200 -- base value
local range = 200 -- base value
-- add flat range based on rarity
-- add flat range based on rarity
range = range + (rarity.value + 1) * 40 -- add 0 (worst rarity) to +240 (best rarity)
range = range + (rarity.value + 1) * 400 -- add 0 (worst rarity) to +240 (best rarity)
-- add randomized range, span is based on rarity
-- add randomized range, span is based on rarity
range = range + math.random() * ((rarity.value + 1) * 20) -- add random value between 0 (worst rarity) and 120 (best rarity)
range = range + math.random() * ((rarity.value + 1) * 20) -- add random value between 0 (worst rarity) and 120 (best rarity)


local material = rarity.value + 1
local material = rarity.value + 1
if math.random() < 0.25 then
if math.random() < 0.25 then
material = material + 1
material = material + 1
end
end


local amount = 3
local amount = 3
-- add flat amount based on rarity
-- add flat amount based on rarity
amount = amount + (rarity.value + 1) * 2 -- add 0 (worst rarity) to +120 (best rarity)
amount = amount + (rarity.value + 1) * 2 -- add 0 (worst rarity) to +120 (best rarity)
-- add randomized amount, span is based on rarity
-- add randomized amount, span is based on rarity
amount = amount + math.random() * ((rarity.value + 1) * 5) -- add random value between 0 (worst rarity) and 60 (best rarity)
amount = amount + math.random() * ((rarity.value + 1) * 5) -- add random value between 0 (worst rarity) and 60 (best rarity)


return material, range, amount
return material, range, amount
end
end


function onInstalled(seed, rarity)
function onInstalled(seed, rarity)
if onClient() then
if onClient() then
Player():registerCallback("onPreRenderHud", "onPreRenderHud")
Player():registerCallback("onPreRenderHud", "onPreRenderHud")
end
end


materialLevel, range, amount = getBonuses(seed, rarity)
materialLevel, range, amount = getBonuses(seed, rarity)
end
end


function onUninstalled(seed, rarity)
function onUninstalled(seed, rarity)


end
end


function sort(a, b)
function sort(a, b)
return a.distance < b.distance
return a.distance < b.distance
end
end


function onPreRenderHud()
function onPreRenderHud()


local ship = Entity()
local ship = Entity()
local shipPos = ship.translationf
local shipPos = ship.translationf


local sphere = Sphere(shipPos, 500)
local sphere = Sphere(shipPos, 2600)
local nearby = {Sector():getEntitiesByLocation(sphere)}
local nearby = {Sector():getEntitiesByLocation(sphere)}
local displayed = {}
local displayed = {}


-- detect all asteroids in range
-- detect all asteroids in range
for _, entity in pairs(nearby) do
for _, entity in pairs(nearby) do


if entity.type == EntityType.Asteroid then
if entity.type == EntityType.Asteroid then
local resources = entity:getMineableResources()
local resources = entity:getMineableResources()
if resources ~= nil and resources > 0 then
if resources ~= nil and resources > 0 then
local material = entity:getMineableMaterial()
local material = entity:getMineableMaterial()


if material.value <= materialLevel then
if material.value <= materialLevel then


local d = distance2(entity.translationf, shipPos)
local d = distance2(entity.translationf, shipPos)


table.insert(displayed, {material = material, asteroid = entity, distance = d})
table.insert(displayed, {material = material, asteroid = entity, distance = d})
end
end
end
end
end
end


end
end


-- sort by distance
-- sort by distance
table.sort(displayed, sort)
table.sort(displayed, sort)


-- display nearest x
-- display nearest x
local renderer = UIRenderer()
local renderer = UIRenderer()


for i = 1, math.min(#displayed, amount) do
for i = 1, math.min(#displayed, amount) do
local tuple = displayed[i]
local tuple = displayed[i]
renderer:renderEntityTargeter(tuple.asteroid, tuple.material.color);
renderer:renderEntityTargeter(tuple.asteroid, tuple.material.color);
renderer:renderEntityArrow(tuple.asteroid, 30, 10, 250, tuple.material.color, 0);
renderer:renderEntityArrow(tuple.asteroid, 30, 10, 250, tuple.material.color, 0);




end
end


renderer:display()
renderer:display()
end
end


function getName(seed, rarity)
function getName(seed, rarity)
return "Mining System"%_t
return "Mining System"%_t
end
end


function getIcon(seed, rarity)
function getIcon(seed, rarity)
return "data/textures/icons/mining.png"
return "data/textures/icons/mining.png"
end
end


function getEnergy(seed, rarity)
function getEnergy(seed, rarity)
local materialLevel, range, amount = getBonuses(seed, rarity)
local materialLevel, range, amount = getBonuses(seed, rarity)


return (range * 0.0005 * materialLevel * 1000 * 1000 * 1000) + (amount * 5 * 1000 * 1000)
return (range * 0.00005 * materialLevel * 1000 * 1000 * 1000) + (amount * 5 * 1000 * 1000)
end
end


function getPrice(seed, rarity)
function getPrice(seed, rarity)
local materialLevel, range, amount = getBonuses(seed, rarity)
local materialLevel, range, amount = getBonuses(seed, rarity)


local price = materialLevel * 5000 + amount * 750 + range * 1.5;
local price = materialLevel * 5000 + amount * 750 + range * .5;


return price * 2.5 ^ rarity.value
return price * 2.5 ^ rarity.value
end
end


function getTooltipLines(seed, rarity)
function getTooltipLines(seed, rarity)
local texts = {}
local texts = {}


local materialLevel, range, amount = getBonuses(seed, rarity)
local materialLevel, range, amount = getBonuses(seed, rarity)
materialLevel = math.max(0, math.min(materialLevel, NumMaterials() - 1))
materialLevel = math.max(0, math.min(materialLevel, NumMaterials() - 1))
local material = Material(materialLevel)
local material = Material(materialLevel)


table.insert(texts, {ltext = "Material"%_t, rtext = material.name%_t, rcolor = material.color, icon = "data/textures/icons/metal-bar.png"})
table.insert(texts, {ltext = "Material"%_t, rtext = material.name%_t, rcolor = material.color, icon = "data/textures/icons/metal-bar.png"})
table.insert(texts, {ltext = "Range"%_t, rtext = string.format("%g", round(range / 100, 2)), icon = "data/textures/icons/rss.png"})
table.insert(texts, {ltext = "Range"%_t, rtext = string.format("%g", round(range / 100, 2)), icon = "data/textures/icons/rss.png"})
table.insert(texts, {ltext = "Asteroids"%_t, rtext = string.format("%i", amount), icon = "data/textures/icons/rock.png"})
table.insert(texts, {ltext = "Asteroids"%_t, rtext = string.format("%i", amount), icon = "data/textures/icons/rock.png"})


return texts
return texts
end
end


function getDescriptionLines(seed, rarity)
function getDescriptionLines(seed, rarity)
local texts = {}
local texts = {}


local materialLevel, range, amount = getBonuses(seed, rarity)
local materialLevel, range, amount = getBonuses(seed, rarity)
materialLevel = math.max(0, math.min(materialLevel, NumMaterials() - 1))
materialLevel = math.max(0, math.min(materialLevel, NumMaterials() - 1))
local material = Material(materialLevel)
local material = Material(materialLevel)


table.insert(texts, {ltext = "Highlights nearby asteroids"%_t})
table.insert(texts, {ltext = "Highlights nearby asteroids"%_t})


return texts
return texts
end
end