mirror of
https://github.com/Refactorio/RedMew.git
synced 2025-11-06 09:09:26 +02:00
Some small performance fixes and cleanup
This commit is contained in:
@@ -2,12 +2,6 @@
|
|||||||
|
|
||||||
-- this
|
-- this
|
||||||
local Config = {
|
local Config = {
|
||||||
-- enable debug mode, shows extra messages
|
|
||||||
debug = false,
|
|
||||||
|
|
||||||
-- allow cheats, primarily configured under SetupPlayer
|
|
||||||
cheats = false,
|
|
||||||
|
|
||||||
-- a list of features to register and enable
|
-- a list of features to register and enable
|
||||||
-- to disable a feature, change the flag
|
-- to disable a feature, change the flag
|
||||||
features = {
|
features = {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ function Debug.print_serpent(message)
|
|||||||
end
|
end
|
||||||
|
|
||||||
--[[--
|
--[[--
|
||||||
Shows the given message if _DEBUG == true for a given position.
|
Shows the given message if debug is on.
|
||||||
|
|
||||||
@param x number
|
@param x number
|
||||||
@param y number
|
@param y number
|
||||||
|
|||||||
@@ -15,12 +15,6 @@ local insert = table.insert
|
|||||||
local random = math.random
|
local random = math.random
|
||||||
local raise_event = script.raise_event
|
local raise_event = script.raise_event
|
||||||
|
|
||||||
-- todo remove this dependency
|
|
||||||
local ResourceConfig = require 'map_gen.Diggy.Config'.features.ScatteredResources
|
|
||||||
|
|
||||||
local Perlin = require 'map_gen.shared.perlin_noise'
|
|
||||||
local Simplex = require 'map_gen.shared.simplex_noise'
|
|
||||||
|
|
||||||
-- this
|
-- this
|
||||||
local DiggyHole = {}
|
local DiggyHole = {}
|
||||||
|
|
||||||
@@ -62,120 +56,15 @@ local function diggy_hole(entity)
|
|||||||
local rocks = {}
|
local rocks = {}
|
||||||
local surface = entity.surface
|
local surface = entity.surface
|
||||||
local position = entity.position
|
local position = entity.position
|
||||||
local x = position.x
|
|
||||||
local y = position.y
|
|
||||||
|
|
||||||
local out_of_map_found = Scanner.scan_around_position(surface, position, 'out-of-map');
|
local out_of_map_found = Scanner.scan_around_position(surface, position, 'out-of-map');
|
||||||
local distance = ResourceConfig.distance(x, y)
|
|
||||||
|
|
||||||
-- source of noise for resource generation
|
for _, void_position in ipairs(out_of_map_found) do
|
||||||
-- index determines offset
|
insert(tiles, {name = 'dirt-' .. random(1, 7), position = void_position })
|
||||||
-- '-1' is reserved for cluster mode
|
if random() < 0.35 then
|
||||||
-- compound clusters use as many indexes as needed > 1
|
insert(rocks, {name = 'rock-huge', position = void_position })
|
||||||
local base_seed
|
else
|
||||||
local function seeded_noise(surface, x, y, index, sources)
|
insert(rocks, {name = 'sand-rock-big', position = void_position })
|
||||||
base_seed = base_seed or surface.map_gen_settings.seed + surface.index + 4000
|
|
||||||
local noise = 0
|
|
||||||
for _, settings in ipairs(sources) do
|
|
||||||
settings.type = settings.type or 'perlin'
|
|
||||||
settings.offset = settings.offset or 0
|
|
||||||
if settings.type == 'zero' then
|
|
||||||
noise = noise + 0
|
|
||||||
elseif settings.type == 'one' then
|
|
||||||
noise = noise + settings.weight * 1
|
|
||||||
elseif settings.type == 'perlin' then
|
|
||||||
noise = noise + settings.weight * Perlin.noise(x/settings.variance, y/settings.variance,
|
|
||||||
base_seed + 2000*index + settings.offset)
|
|
||||||
elseif settings.type == 'simplex' then
|
|
||||||
noise = noise + settings.weight * Simplex.d2(x/settings.variance, y/settings.variance,
|
|
||||||
base_seed + 2000*index + settings.offset)
|
|
||||||
else
|
|
||||||
Debug.print('noise type \'' .. settings.type .. '\' not recognized')
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
return noise
|
|
||||||
end
|
|
||||||
|
|
||||||
-- global config values
|
|
||||||
local resource_richness_weights = ResourceConfig.resource_richness_weights
|
|
||||||
local resource_richness_weights_sum = 0
|
|
||||||
for _, weight in pairs(resource_richness_weights) do
|
|
||||||
resource_richness_weights_sum = resource_richness_weights_sum + weight
|
|
||||||
end
|
|
||||||
|
|
||||||
local s_resource_weights = ResourceConfig.scattered_resource_weights
|
|
||||||
local s_resource_weights_sum = 0
|
|
||||||
for _, weight in pairs(s_resource_weights) do
|
|
||||||
s_resource_weights_sum = s_resource_weights_sum + weight
|
|
||||||
end
|
|
||||||
|
|
||||||
-- compound cluster spawning
|
|
||||||
local c_mode = ResourceConfig.cluster_mode
|
|
||||||
-- local c_clusters = Config.features.ScatteredResources.clusters
|
|
||||||
local c_clusters = require(ResourceConfig.cluster_file_location)
|
|
||||||
if ('table' ~= type(c_clusters)) then
|
|
||||||
error('cluster_file_location invalid')
|
|
||||||
end
|
|
||||||
|
|
||||||
local c_count = 0
|
|
||||||
for _, cluster in ipairs(c_clusters) do
|
|
||||||
c_count = c_count + 1
|
|
||||||
cluster.weights_sum = 0
|
|
||||||
for _, weight in pairs(cluster.weights) do
|
|
||||||
cluster.weights_sum = cluster.weights_sum + weight
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function spawn_cluster_resource(surface, x, y, cluster_index, cluster)
|
|
||||||
for name, weight in pairs(cluster.weights) do
|
|
||||||
if name == 'skip' then return false end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
local huge_rock_inserted = false
|
|
||||||
for _, position in pairs(out_of_map_found) do
|
|
||||||
insert(tiles, {name = 'dirt-' .. random(1, 7), position = position})
|
|
||||||
|
|
||||||
|
|
||||||
if c_mode then
|
|
||||||
for index,cluster in ipairs(c_clusters) do
|
|
||||||
if distance >= cluster.min_distance and cluster.noise_settings.type ~= 'skip' then
|
|
||||||
if cluster.noise_settings.type == "connected_tendril" then
|
|
||||||
local noise = seeded_noise(surface, x, y, index, cluster.noise_settings.sources)
|
|
||||||
if -1 * cluster.noise_settings.threshold < noise and noise < cluster.noise_settings.threshold then
|
|
||||||
if spawn_cluster_resource(surface, x, y, index, cluster) then
|
|
||||||
insert(rocks, {name = 'rock-huge', position = position})
|
|
||||||
huge_rock_inserted = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif cluster.noise_settings.type == "fragmented_tendril" then
|
|
||||||
local noise1 = seeded_noise(surface, x, y, index, cluster.noise_settings.sources)
|
|
||||||
local noise2 = seeded_noise(surface, x, y, index, cluster.noise_settings.discriminator)
|
|
||||||
if -1 * cluster.noise_settings.threshold < noise1 and noise1 < cluster.noise_settings.threshold
|
|
||||||
and -1 * cluster.noise_settings.discriminator_threshold < noise2
|
|
||||||
and noise2 < cluster.noise_settings.discriminator_threshold then
|
|
||||||
if spawn_cluster_resource(surface, x, y, index, cluster) then
|
|
||||||
insert(rocks, {name = 'rock-huge', position = position})
|
|
||||||
huge_rock_inserted = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
local noise = seeded_noise(surface, x, y, index, cluster.noise_settings.sources)
|
|
||||||
if noise >= cluster.noise_settings.threshold then
|
|
||||||
if spawn_cluster_resource(surface, x, y, index, cluster) then
|
|
||||||
insert(rocks, {name = 'rock-huge', position = position})
|
|
||||||
huge_rock_inserted = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if (huge_rock_inserted == false) then
|
|
||||||
insert(rocks, {name = 'sand-rock-big', position = position})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ Global.register({
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
local Config = {}
|
local config = {}
|
||||||
local string_format = string.format
|
local string_format = string.format
|
||||||
local alien_coin_modifiers = require 'map_gen.Diggy.Config'.features.ArtefactHunting.alien_coin_modifiers
|
local alien_coin_modifiers = require 'map_gen.Diggy.Config'.features.ArtefactHunting.alien_coin_modifiers
|
||||||
local floor = math.floor
|
local floor = math.floor
|
||||||
@@ -51,7 +51,7 @@ local level_up_formula = (function (level_reached)
|
|||||||
local Config = require 'map_gen.Diggy.Config'.features.Experience
|
local Config = require 'map_gen.Diggy.Config'.features.Experience
|
||||||
local difficulty_scale = floor(Config.difficulty_scale)
|
local difficulty_scale = floor(Config.difficulty_scale)
|
||||||
local level_fine_tune = floor(Config.xp_fine_tune)
|
local level_fine_tune = floor(Config.xp_fine_tune)
|
||||||
local start_value = (floor(Config.first_lvl_xp)/2)
|
local start_value = (floor(Config.first_lvl_xp) * 0.5)
|
||||||
local precision = (floor(Config.cost_precision))
|
local precision = (floor(Config.cost_precision))
|
||||||
local function formula(level)
|
local function formula(level)
|
||||||
return (
|
return (
|
||||||
@@ -68,7 +68,7 @@ local level_up_formula = (function (level_reached)
|
|||||||
if lower_value == 0 then
|
if lower_value == 0 then
|
||||||
return value - lower_value
|
return value - lower_value
|
||||||
end
|
end
|
||||||
lower_value = lower_value - (lower_value % (10 ^ (floor(log(lower_value,10)) - precision)))
|
lower_value = lower_value - (lower_value % (10 ^ (floor(log(lower_value, 10)) - precision)))
|
||||||
return value - lower_value
|
return value - lower_value
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@@ -76,10 +76,10 @@ end)
|
|||||||
---@param force LuaForce the force of which will be updated
|
---@param force LuaForce the force of which will be updated
|
||||||
---@param level_up number a level if updating as part of a level up (optional)
|
---@param level_up number a level if updating as part of a level up (optional)
|
||||||
function Experience.update_mining_speed(force, level_up)
|
function Experience.update_mining_speed(force, level_up)
|
||||||
local level_up = level_up ~= nil and level_up or 0
|
level_up = level_up ~= nil and level_up or 0
|
||||||
local buff = Config.buffs['mining_speed']
|
local buff = config.buffs['mining_speed']
|
||||||
if level_up > 0 and buff ~= nil then
|
if level_up > 0 and buff ~= nil then
|
||||||
local value = (buff.double_level ~= nil and level_up%buff.double_level == 0) and buff.value*2 or buff.value
|
local value = (buff.double_level ~= nil and level_up % buff.double_level == 0) and buff.value * 2 or buff.value
|
||||||
mining_efficiency.level_modifier = mining_efficiency.level_modifier + (value * 0.01)
|
mining_efficiency.level_modifier = mining_efficiency.level_modifier + (value * 0.01)
|
||||||
end
|
end
|
||||||
-- remove the current buff
|
-- remove the current buff
|
||||||
@@ -96,10 +96,10 @@ end
|
|||||||
---@param force LuaForce the force of which will be updated
|
---@param force LuaForce the force of which will be updated
|
||||||
---@param level_up number a level if updating as part of a level up (optional)
|
---@param level_up number a level if updating as part of a level up (optional)
|
||||||
function Experience.update_inventory_slots(force, level_up)
|
function Experience.update_inventory_slots(force, level_up)
|
||||||
local level_up = level_up ~= nil and level_up or 0
|
level_up = level_up ~= nil and level_up or 0
|
||||||
local buff = Config.buffs['inventory_slot']
|
local buff = config.buffs['inventory_slot']
|
||||||
if level_up > 0 and buff ~= nil then
|
if level_up > 0 and buff ~= nil then
|
||||||
local value = (buff.double_level ~= nil and level_up%buff.double_level == 0) and buff.value*2 or buff.value
|
local value = (buff.double_level ~= nil and level_up % buff.double_level == 0) and buff.value * 2 or buff.value
|
||||||
inventory_slots.level_modifier = inventory_slots.level_modifier + value
|
inventory_slots.level_modifier = inventory_slots.level_modifier + value
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -117,8 +117,8 @@ end
|
|||||||
---@param force LuaForce the force of which will be updated
|
---@param force LuaForce the force of which will be updated
|
||||||
---@param level_up number a level if updating as part of a level up (optional)
|
---@param level_up number a level if updating as part of a level up (optional)
|
||||||
function Experience.update_health_bonus(force, level_up)
|
function Experience.update_health_bonus(force, level_up)
|
||||||
local level_up = level_up ~= nil and level_up or 0
|
level_up = level_up ~= nil and level_up or 0
|
||||||
local buff = Config.buffs['health_bonus']
|
local buff = config.buffs['health_bonus']
|
||||||
if level_up > 0 and buff ~= nil then
|
if level_up > 0 and buff ~= nil then
|
||||||
local value = (buff.double_level ~= nil and level_up%buff.double_level == 0) and buff.value*2 or buff.value
|
local value = (buff.double_level ~= nil and level_up%buff.double_level == 0) and buff.value*2 or buff.value
|
||||||
health_bonus.level_modifier = health_bonus.level_modifier + value
|
health_bonus.level_modifier = health_bonus.level_modifier + value
|
||||||
@@ -166,7 +166,7 @@ local function on_research_finished(event)
|
|||||||
|
|
||||||
for _, ingredient in pairs(research.research_unit_ingredients) do
|
for _, ingredient in pairs(research.research_unit_ingredients) do
|
||||||
local name = ingredient.name
|
local name = ingredient.name
|
||||||
local reward = Config.XP[name]
|
local reward = config.XP[name]
|
||||||
award_xp = award_xp + reward
|
award_xp = award_xp + reward
|
||||||
end
|
end
|
||||||
local exp = award_xp * research.research_unit_count
|
local exp = award_xp * research.research_unit_count
|
||||||
@@ -179,7 +179,7 @@ local function on_research_finished(event)
|
|||||||
|
|
||||||
|
|
||||||
local current_modifier = mining_efficiency.research_modifier
|
local current_modifier = mining_efficiency.research_modifier
|
||||||
local new_modifier = force.mining_drill_productivity_bonus * Config.mining_speed_productivity_multiplier * 0.5
|
local new_modifier = force.mining_drill_productivity_bonus * config.mining_speed_productivity_multiplier * 0.5
|
||||||
|
|
||||||
if (current_modifier == new_modifier) then
|
if (current_modifier == new_modifier) then
|
||||||
-- something else was researched
|
-- something else was researched
|
||||||
@@ -198,7 +198,7 @@ end
|
|||||||
---Awards experience when a rocket has been launched
|
---Awards experience when a rocket has been launched
|
||||||
---@param event LuaEvent
|
---@param event LuaEvent
|
||||||
local function on_rocket_launched(event)
|
local function on_rocket_launched(event)
|
||||||
local exp = Config.XP['rocket_launch']
|
local exp = config.XP['rocket_launch']
|
||||||
local force = event.force
|
local force = event.force
|
||||||
local text = string_format('Rocket launched! +%d XP', exp)
|
local text = string_format('Rocket launched! +%d XP', exp)
|
||||||
for _, p in pairs(game.connected_players) do
|
for _, p in pairs(game.connected_players) do
|
||||||
@@ -246,7 +246,7 @@ local function on_entity_died (event)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local exp = Config.XP['enemy_killed'] * alien_coin_modifiers[entity.name]
|
local exp = config.XP['enemy_killed'] * alien_coin_modifiers[entity.name]
|
||||||
local text = string_format('+ %d XP', exp)
|
local text = string_format('+ %d XP', exp)
|
||||||
local player_index = cause.player.index
|
local player_index = cause.player.index
|
||||||
Game.print_player_floating_text_position(player_index, text, {r = 144, g = 202, b = 249},-1, -0.5)
|
Game.print_player_floating_text_position(player_index, text, {r = 144, g = 202, b = 249},-1, -0.5)
|
||||||
@@ -258,7 +258,7 @@ end
|
|||||||
local function on_player_respawned(event)
|
local function on_player_respawned(event)
|
||||||
local player = Game.get_player_by_index(event.player_index)
|
local player = Game.get_player_by_index(event.player_index)
|
||||||
local force = player.force
|
local force = player.force
|
||||||
local exp = ForceControl.remove_experience_percentage(force, Config.XP['death-penalty'], 50)
|
local exp = ForceControl.remove_experience_percentage(force, config.XP['death-penalty'], 50)
|
||||||
local text = string_format('%s died! -%d XP', player.name, exp)
|
local text = string_format('%s died! -%d XP', player.name, exp)
|
||||||
for _, p in pairs(game.connected_players) do
|
for _, p in pairs(game.connected_players) do
|
||||||
Game.print_player_floating_text_position(p.index, text, {r = 255, g = 0, b = 0},-1, -0.5)
|
Game.print_player_floating_text_position(p.index, text, {r = 255, g = 0, b = 0},-1, -0.5)
|
||||||
@@ -269,7 +269,7 @@ end
|
|||||||
---@return table with the same format as in the Diggy Config
|
---@return table with the same format as in the Diggy Config
|
||||||
---@see Diggy.Config.features.Experience.Buffs
|
---@see Diggy.Config.features.Experience.Buffs
|
||||||
function Experience.get_buffs()
|
function Experience.get_buffs()
|
||||||
return Config.buffs
|
return config.buffs
|
||||||
end
|
end
|
||||||
|
|
||||||
local level_table = {}
|
local level_table = {}
|
||||||
@@ -291,7 +291,7 @@ function Experience.calculate_level_xp(level)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Experience.register(cfg)
|
function Experience.register(cfg)
|
||||||
Config = cfg
|
config = cfg
|
||||||
|
|
||||||
--Adds the function on how to calculate level caps (When to level up)
|
--Adds the function on how to calculate level caps (When to level up)
|
||||||
ForceControl_builder = ForceControl.register(level_up_formula)
|
ForceControl_builder = ForceControl.register(level_up_formula)
|
||||||
@@ -318,8 +318,8 @@ function Experience.register(cfg)
|
|||||||
Event.add(defines.events.on_entity_died, on_entity_died)
|
Event.add(defines.events.on_entity_died, on_entity_died)
|
||||||
|
|
||||||
-- Prevents table lookup thousands of times
|
-- Prevents table lookup thousands of times
|
||||||
sand_rock_xp = Config.XP['sand-rock-big']
|
sand_rock_xp = config.XP['sand-rock-big']
|
||||||
rock_huge_xp = Config.XP['rock-huge']
|
rock_huge_xp = config.XP['rock-huge']
|
||||||
end
|
end
|
||||||
|
|
||||||
function Experience.on_init()
|
function Experience.on_init()
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ local Task = require 'utils.Task'
|
|||||||
local Gui = require 'utils.gui'
|
local Gui = require 'utils.gui'
|
||||||
local Debug = require 'map_gen.Diggy.Debug'
|
local Debug = require 'map_gen.Diggy.Debug'
|
||||||
local Template = require 'map_gen.Diggy.Template'
|
local Template = require 'map_gen.Diggy.Template'
|
||||||
local Global = require 'utils.global'
|
|
||||||
local Game = require 'utils.game'
|
local Game = require 'utils.game'
|
||||||
local insert = table.insert
|
local insert = table.insert
|
||||||
local force_control = require 'features.force_control'
|
local force_control = require 'features.force_control'
|
||||||
@@ -17,7 +16,6 @@ local Experience = require 'map_gen.Diggy.Feature.Experience'
|
|||||||
local max = math.max
|
local max = math.max
|
||||||
local floor = math.floor
|
local floor = math.floor
|
||||||
local utils = require 'utils.utils'
|
local utils = require 'utils.utils'
|
||||||
local prefix = '## - '
|
|
||||||
|
|
||||||
-- this
|
-- this
|
||||||
local MarketExchange = {}
|
local MarketExchange = {}
|
||||||
@@ -25,7 +23,7 @@ local MarketExchange = {}
|
|||||||
local config = {}
|
local config = {}
|
||||||
|
|
||||||
local on_market_timeout_finished = Token.register(function(params)
|
local on_market_timeout_finished = Token.register(function(params)
|
||||||
Template.market(params.surface, params.position, params.player_force, {})
|
Template.market(params.surface, params.position, params.player_force)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
---Updates market content with new items if they are to be unlocked
|
---Updates market content with new items if they are to be unlocked
|
||||||
@@ -366,13 +364,11 @@ function MarketExchange.update_gui()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function MarketExchange.on_init()
|
function MarketExchange.on_init()
|
||||||
Task.set_timeout_in_ticks(50, on_market_timeout_finished, {
|
Task.set_timeout_in_ticks(1, on_market_timeout_finished, {
|
||||||
surface = game.surfaces.nauvis,
|
surface = game.surfaces.nauvis,
|
||||||
position = config.market_spawn_position,
|
position = config.market_spawn_position,
|
||||||
player_force = game.forces.player,
|
player_force = game.forces.player,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[--
|
--[[--
|
||||||
|
|||||||
@@ -50,15 +50,11 @@ function Scenario.register(debug)
|
|||||||
global.scenario.config.fish_market.enable = nil
|
global.scenario.config.fish_market.enable = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
if ('boolean' == type(debug)) then
|
if (_DEBUG) then
|
||||||
Config.Debug = debug
|
|
||||||
end
|
|
||||||
|
|
||||||
if (Config.debug) then
|
|
||||||
Debug.enable_debug()
|
Debug.enable_debug()
|
||||||
end
|
end
|
||||||
|
|
||||||
if (Config.cheats) then
|
if (_CHEATS) then
|
||||||
Debug.enable_cheats()
|
Debug.enable_cheats()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -163,15 +163,10 @@ end
|
|||||||
@param force LuaForce
|
@param force LuaForce
|
||||||
@param market_items Table
|
@param market_items Table
|
||||||
]]
|
]]
|
||||||
function Template.market(surface, position, force, market_inventory)
|
function Template.market(surface, position, force)
|
||||||
local market = surface.create_entity({name = 'market', position = position})
|
local market = surface.create_entity({name = 'market', position = position})
|
||||||
local add_market_item = market.add_market_item
|
|
||||||
market.destructible = false
|
market.destructible = false
|
||||||
|
|
||||||
for _, item in ipairs(market_inventory) do
|
|
||||||
add_market_item(item)
|
|
||||||
end
|
|
||||||
|
|
||||||
force.add_chart_tag(surface, {
|
force.add_chart_tag(surface, {
|
||||||
text = 'Market',
|
text = 'Market',
|
||||||
position = position,
|
position = position,
|
||||||
|
|||||||
Reference in New Issue
Block a user