Aleksei-bird 7c9c708c92 Первый фикс
Пачки некоторых позиций увеличены
2024-03-01 20:54:33 +03:00

119 lines
3.4 KiB
Lua

local base_util = require("__core__/lualib/util")
local util = {}
util.ruin_half_sizes =
{
small = 8 / 2,
medium = 16 / 2,
large = 32 / 2
}
util.ruin_min_distance_multiplier =
{
small = 1,
medium = 2.5,
large = 5
}
util.debugprint = __DebugAdapter and __DebugAdapter.print or function() end
---@param chunk_position ChunkPosition
---@return MapPosition
util.get_center_of_chunk = function(chunk_position)
return {x = chunk_position.x * 32 + 16, y = chunk_position.y * 32 + 16}
end
---@param half_size number
---@param center MapPosition
---@return BoundingBox
util.area_from_center_and_half_size = function(half_size, center)
return {{center.x - half_size, center.y - half_size}, {center.x + half_size, center.y + half_size}}
end
---@param haystack string
---@param needles table<string, boolean> The boolean should always be true, it is ignored.
---@return boolean @True if the haystack contains at least one of the needles from the table
util.str_contains_any_from_table = function(haystack, needles)
for needle in pairs(needles) do
if haystack:find(needle, 1, true) then -- plain find, no pattern
return true
end
end
return false
end
-- TODO Bilka: this doesn't show in intellisense
---@param entity LuaEntity
---@param item_dict table<string, uint> Dictionary of item names to counts
util.safe_insert = base_util.insert_safe
---@param entity LuaEntity
---@param fluid_dict table<string, number> Dictionary of fluid names to amounts
util.safe_insert_fluid = function(entity, fluid_dict)
if not (entity and entity.valid and fluid_dict) then return end
local fluids = game.fluid_prototypes
local insert = entity.insert_fluid
for name, amount in pairs (fluid_dict) do
if fluids[name] then
insert{name = name, amount = amount}
else
log("Fluid to insert not valid: " .. name)
end
end
end
---@param entity LuaEntity
---@param damage_info Damage
---@param damage_amount number
util.safe_damage = function(entity, damage_info, damage_amount)
if not (entity and entity.valid) then return end
entity.damage(damage_amount, damage_info.force or "neutral", damage_info.type or "physical")
end
---@param entity LuaEntity
---@param chance number
util.safe_die = function(entity, chance)
if not (entity and entity.valid) then return end
if math.random() <= chance then entity.die() end
end
-- Set cease_fire status for all forces.
util.set_enemy_force_cease_fire = function(enemy_force, cease_fire)
for _, force in pairs(game.forces) do
if force ~= enemy_force then
force.set_cease_fire(enemy_force, cease_fire)
enemy_force.set_cease_fire(force, cease_fire)
end
end
end
-- Set cease_fire status for all forces and friend = true for all biter forces.
util.set_enemy_force_diplomacy = function(enemy_force, cease_fire)
for _, force in pairs(game.forces) do
if force.ai_controllable then
force.set_friend(enemy_force, true)
enemy_force.set_friend(force, true)
end
end
util.set_enemy_force_cease_fire(enemy_force, cease_fire)
end
local function setup_enemy_force()
local enemy_force = game.forces["AbandonedRuins:enemy"] or game.create_force("AbandonedRuins:enemy")
util.set_enemy_force_diplomacy(enemy_force, false)
global.enemy_force = enemy_force
return enemy_force
end
util.get_enemy_force = function()
if (global.enemy_force and global.enemy_force.valid) then
return global.enemy_force
end
return setup_enemy_force()
end
return util