172 lines
5.5 KiB
Lua
172 lines
5.5 KiB
Lua
local TPlib = require("__SchallTankPlatoon__.lib.TPlib")
|
|
local cfg1 = require("config.config-1")
|
|
local basept = require("__SchallTankPlatoon__.lib.base-pt")
|
|
|
|
|
|
|
|
local TPpt = {}
|
|
|
|
|
|
-- Vehicle Grid
|
|
local function read_grid_values(setting, defw, defh)
|
|
if setting then
|
|
local rt = {}
|
|
for v in string.gmatch(setting.value, "%d+") do table.insert(rt, tonumber(v)) end
|
|
return table.unpack(rt)
|
|
-- return string.match(setting.value, "(%d+)x(%d+)")
|
|
else
|
|
return defw, defh
|
|
end
|
|
end
|
|
|
|
TPpt.VEH_base_grid = {
|
|
[0] = {read_grid_values(settings.startup["tankplatoon-tank-t0-grid"], 5, 4)},
|
|
[1] = {read_grid_values(settings.startup["tankplatoon-tank-t1-grid"], 7, 7)},
|
|
[2] = {read_grid_values(settings.startup["tankplatoon-tank-t2-grid"], 10, 10)},
|
|
[3] = {read_grid_values(settings.startup["alientech-tank-t3-grid"], 12, 14)},
|
|
}
|
|
|
|
function TPpt.VEH_grid_width(tier, size_add)
|
|
return math.max(TPpt.VEH_base_grid[tier][1] + size_add, 0)
|
|
end
|
|
|
|
function TPpt.VEH_grid_height(tier, size_add)
|
|
return math.max(TPpt.VEH_base_grid[tier][2] + size_add, 0)
|
|
end
|
|
|
|
|
|
-- Transport Group
|
|
TPpt.subgroup_vehmil = {
|
|
[0] = "transport",
|
|
[1] = "transport",
|
|
[2] = "transport",
|
|
[3] = "transport"
|
|
}
|
|
|
|
if mods["SchallTransportGroup"] then
|
|
TPpt.subgroup_vehmil = {
|
|
[0] = "vehicles-military",
|
|
[1] = "vehicles-military",
|
|
[2] = "vehicles-military",
|
|
[3] = "vehicles-military"
|
|
}
|
|
if cfg1.tiered_subgroups then
|
|
for k, v in pairs(TPpt.subgroup_vehmil) do
|
|
if k>0 then TPpt.subgroup_vehmil[k] = v.."-"..k end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
TPpt.tank_icon_path = {
|
|
["ori"] = "__base__/graphics/icons/tank.png",
|
|
["tint"] = "__SchallTankPlatoon__/graphics/icons/tank-to-tint.png",
|
|
}
|
|
|
|
|
|
function TPpt.tank_base_icon_layer(spec)
|
|
return {icon = TPpt.tank_icon_path[spec.icon_base], icon_size = 64, icon_mipmaps = 4, tint = spec.tint}
|
|
end
|
|
|
|
function TPpt.VEH_icons(spec, tier)
|
|
return {
|
|
TPpt.tank_base_icon_layer(spec),
|
|
TPlib.tier_icon_layer(tier)
|
|
}
|
|
end
|
|
|
|
function TPpt.VEH_name(name, tier)
|
|
return name .. cfg1.tier_suffix[tier]
|
|
end
|
|
|
|
function TPpt.VEH_name_table_replace(name, rt)
|
|
for k, v in pairs(rt) do
|
|
rt[k][1] = v[1]:gsub("__VEH__(%d+)__", function(a) return TPpt.VEH_name(name, tonumber(a)) end)
|
|
end
|
|
end
|
|
|
|
function TPpt.VEH_item(spec, tier)
|
|
local entyname = TPpt.VEH_name(spec.name, tier)
|
|
return
|
|
{
|
|
type = "item-with-entity-data",
|
|
name = entyname,
|
|
icons = TPpt.VEH_icons(spec, tier),
|
|
subgroup = TPpt.subgroup_vehmil[tier],
|
|
order = "b[personal-transport]-" .. spec.subcat .. tier,
|
|
place_result = entyname,
|
|
equipment_grid = entyname .. "-equipment-grid",
|
|
stack_size = 1
|
|
}
|
|
end
|
|
|
|
function TPpt.VEH_entity(spec, tier)
|
|
local enty = table.deepcopy(basept.tank.entity)
|
|
local entyname = TPpt.VEH_name(spec.name, tier)
|
|
enty.hide_resistances = cfg1.hide_resistances
|
|
enty.name = entyname
|
|
enty.icons = TPpt.VEH_icons(spec, tier)
|
|
enty.minable = {mining_time = spec.mining_time, result = entyname}
|
|
enty.max_health = spec.base_health * cfg1.tier_health_mul[tier]
|
|
enty.resistances = TPlib.resistances(spec.base_resistances, cfg1.resistances_add[tier])
|
|
TPlib.table_recursive_multiply(enty.collision_box, spec.scale)
|
|
TPlib.table_recursive_multiply(enty.selection_box, spec.scale)
|
|
TPlib.table_recursive_multiply(enty.drawing_box, spec.scale)
|
|
enty.effectivity = spec.effectivity
|
|
if tier >= 3 then
|
|
enty.burner = TPlib.energy_source(enty.burner, "nuclear", spec.burner)
|
|
else
|
|
enty.burner = TPlib.energy_source(enty.burner, "chemical", spec.burner)
|
|
end
|
|
enty.braking_power = spec.base_braking_power * cfg1.tier_power_mul[tier] .. "kW"
|
|
enty.consumption = spec.base_consumption * cfg1.tier_power_mul[tier] .. "kW"
|
|
enty.terrain_friction_modifier = spec.terrain_friction_modifier
|
|
enty.weight = spec.weight * cfg1.tier_weight_mul[tier]
|
|
enty.turret_rotation_speed = spec.turret_rotation_speed
|
|
enty.rotation_speed = spec.rotation_speed
|
|
enty.inventory_size = spec.base_inventory_size + cfg1.tier_inventory_size_add[tier]
|
|
enty.guns = spec.guns[tier]
|
|
enty.equipment_grid = entyname .. "-equipment-grid"
|
|
enty.minimap_representation = cfg1.minimap_representation(spec.scale, spec.vehicle_type)
|
|
TPlib.sprite_tint_recursive(enty.animation, spec.tint)
|
|
TPlib.sprite_rescale_recursive(enty.animation, spec.scale, 1, {skipanimscale = true})
|
|
TPlib.sprite_rescale_recursive(enty.turret_animation, spec.scale, 1, {skipanimscale = true})
|
|
TPlib.sprite_rescale_recursive(enty.water_reflection.pictures, spec.scale, 1, {skipanimscale = true})
|
|
return enty
|
|
end
|
|
|
|
function TPpt.VEH_recipe(spec, tier)
|
|
local rcp = table.deepcopy(spec.recipe_specs[tier])
|
|
local entyname = TPpt.VEH_name(spec.name, tier)
|
|
rcp.type = "recipe"
|
|
rcp.name = entyname
|
|
if rcp.normal then
|
|
rcp.normal.enabled = rcp.normal.enabled or false
|
|
rcp.normal.result = entyname
|
|
TPpt.VEH_name_table_replace(spec.name, rcp.normal.ingredients)
|
|
rcp.expensive.enabled = rcp.expensive.enabled or false
|
|
rcp.expensive.result = entyname
|
|
TPpt.VEH_name_table_replace(spec.name, rcp.expensive.ingredients)
|
|
else
|
|
rcp.enabled = rcp.enabled or false
|
|
rcp.result = entyname
|
|
TPpt.VEH_name_table_replace(spec.name, rcp.ingredients)
|
|
end
|
|
return rcp
|
|
end
|
|
|
|
function TPpt.VEH_grid(spec, tier)
|
|
local entyname = TPpt.VEH_name(spec.name, tier)
|
|
return
|
|
{
|
|
type = "equipment-grid",
|
|
name = entyname .. "-equipment-grid",
|
|
width = TPpt.VEH_grid_width(tier, spec.grid.width_add or 0),
|
|
height = TPpt.VEH_grid_height(tier, spec.grid.height_add or 0),
|
|
equipment_categories = spec.grid.equipment_categories
|
|
}
|
|
end
|
|
|
|
|
|
|
|
return TPpt |