mirror of
https://github.com/Refactorio/RedMew.git
synced 2025-03-05 15:05:57 +02:00
Added functional GUI for stone sent
This commit is contained in:
parent
440327b882
commit
029a2b38fd
@ -171,26 +171,24 @@ local Config = {
|
|||||||
stone_to_surface_amount = 50,
|
stone_to_surface_amount = 50,
|
||||||
currency_item = 'stone',
|
currency_item = 'stone',
|
||||||
|
|
||||||
-- price in currency_item
|
|
||||||
-- item_name to give
|
|
||||||
unlockables = {
|
unlockables = {
|
||||||
{stone = 50, type = 'buff', prototype = {name = 'mining_speed', value = 10}},
|
{stone = 50, type = 'buff', prototype = {name = 'mining_speed', value = 10}},
|
||||||
{stone = 50, type = 'buff', prototype = {name = 'inventory_slot', value = 3}},
|
{stone = 50, type = 'buff', prototype = {name = 'inventory_slot', value = 3}},
|
||||||
{stone = 50, type = 'market', prototype = {price = 50, item_name = 'raw-fish'}},
|
{stone = 50, type = 'market', prototype = {price = 50, name = 'raw-fish'}},
|
||||||
{stone = 50, type = 'market', prototype = {price = 175, item_name = 'steel-axe'}},
|
{stone = 50, type = 'market', prototype = {price = 175, name = 'steel-axe'}},
|
||||||
|
|
||||||
{stone = 250, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
{stone = 250, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
||||||
{stone = 250, type = 'buff', prototype = {name = 'inventory_slot', value = 2}},
|
{stone = 250, type = 'buff', prototype = {name = 'inventory_slot', value = 2}},
|
||||||
{stone = 250, type = 'market', prototype = {price = 50, item_name = 'small-electric-pole'}},
|
{stone = 250, type = 'market', prototype = {price = 50, name = 'small-electric-pole'}},
|
||||||
{stone = 250, type = 'market', prototype = {price = 50, item_name = 'small-lamp'}},
|
{stone = 250, type = 'market', prototype = {price = 50, name = 'small-lamp'}},
|
||||||
{stone = 250, type = 'market', prototype = {price = 25, item_name = 'stone-brick'}},
|
{stone = 250, type = 'market', prototype = {price = 25, name = 'stone-brick'}},
|
||||||
{stone = 250, type = 'market', prototype = {price = 125, item_name = 'stone-wall'}},
|
{stone = 250, type = 'market', prototype = {price = 125, name = 'stone-wall'}},
|
||||||
|
|
||||||
{stone = 450, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
{stone = 450, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
||||||
{stone = 450, type = 'buff', prototype = {name = 'inventory_slot', value = 2}},
|
{stone = 450, type = 'buff', prototype = {name = 'inventory_slot', value = 2}},
|
||||||
{stone = 450, type = 'market', prototype = {price = 1000, item_name = 'submachine-gun'}},
|
{stone = 450, type = 'market', prototype = {price = 1000, name = 'submachine-gun'}},
|
||||||
{stone = 450, type = 'market', prototype = {price = 100, item_name = 'firearm-magazine'}},
|
{stone = 450, type = 'market', prototype = {price = 100, name = 'firearm-magazine'}},
|
||||||
{stone = 450, type = 'market', prototype = {price = 500, item_name = 'light-armor'}},
|
{stone = 450, type = 'market', prototype = {price = 500, name = 'light-armor'}},
|
||||||
|
|
||||||
{stone = 750, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
{stone = 750, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
||||||
{stone = 750, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
{stone = 750, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
||||||
@ -209,8 +207,8 @@ local Config = {
|
|||||||
|
|
||||||
{stone = 10000, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
{stone = 10000, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
||||||
{stone = 10000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
{stone = 10000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
||||||
{stone = 10000, type = 'market', prototype = {price = 175, item_name = 'piercing-rounds-magazine'}},
|
{stone = 10000, type = 'market', prototype = {price = 175, name = 'piercing-rounds-magazine'}},
|
||||||
{stone = 10000, type = 'market', prototype = {price = 750, item_name = 'heavy-armor'}},
|
{stone = 10000, type = 'market', prototype = {price = 750, name = 'heavy-armor'}},
|
||||||
|
|
||||||
{stone = 15000, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
{stone = 15000, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
||||||
{stone = 15000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
{stone = 15000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
||||||
@ -219,7 +217,7 @@ local Config = {
|
|||||||
|
|
||||||
{stone = 35000, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
{stone = 35000, type = 'buff', prototype = {name = 'mining_speed', value = 5}},
|
||||||
{stone = 35000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
{stone = 35000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
||||||
{stone = 35000, type = 'market', prototype = {price = 1500, item_name = 'modular-armor'}},
|
{stone = 35000, type = 'market', prototype = {price = 1500, name = 'modular-armor'}},
|
||||||
|
|
||||||
{stone = 50000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
{stone = 50000, type = 'buff', prototype = {name = 'inventory_slot', value = 1}},
|
||||||
},
|
},
|
||||||
|
@ -46,15 +46,6 @@ local on_market_timeout_finished = Token.register(function(params)
|
|||||||
Template.market(params.surface, params.position, params.player_force, params.currency_item, {})
|
Template.market(params.surface, params.position, params.player_force, params.currency_item, {})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local function on_init()
|
|
||||||
Task.set_timeout_in_ticks(50, on_market_timeout_finished, {
|
|
||||||
surface = game.surfaces.nauvis,
|
|
||||||
position = config.market_spawn_position,
|
|
||||||
player_force = game.forces.player,
|
|
||||||
currency_item = config.currency_item,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local function update_mining_speed(force)
|
local function update_mining_speed(force)
|
||||||
-- remove the current buff
|
-- remove the current buff
|
||||||
local old_modifier = force.manual_mining_speed_modifier - mining_efficiency.active_modifier
|
local old_modifier = force.manual_mining_speed_modifier - mining_efficiency.active_modifier
|
||||||
@ -93,7 +84,7 @@ local function update_market_contents(market)
|
|||||||
if (is_in_range and unlockable.type == 'market') then
|
if (is_in_range and unlockable.type == 'market') then
|
||||||
market.add_market_item({
|
market.add_market_item({
|
||||||
price = {{config.currency_item, unlockable.prototype.price}},
|
price = {{config.currency_item, unlockable.prototype.price}},
|
||||||
offer = {type = 'give-item', item = unlockable.prototype.item_name, count = 1}
|
offer = {type = 'give-item', item = unlockable.prototype.name, count = 1}
|
||||||
})
|
})
|
||||||
elseif (is_in_range and unlockable.type == 'buff' and unlockable.prototype.name == 'mining_speed') then
|
elseif (is_in_range and unlockable.type == 'buff' and unlockable.prototype.name == 'mining_speed') then
|
||||||
should_update_mining_speed = true
|
should_update_mining_speed = true
|
||||||
@ -153,6 +144,97 @@ local function on_placed_entity(event)
|
|||||||
update_market_contents(event.entity)
|
update_market_contents(event.entity)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function MarketExchange.get_extra_map_info(config)
|
||||||
|
return 'Market Exchange, trade your stone or send it to the surface'
|
||||||
|
end
|
||||||
|
|
||||||
|
local function redraw_title(data)
|
||||||
|
data.frame.caption = stone_tracker.stone_sent_to_surface .. ' stone sent to the surface'
|
||||||
|
end
|
||||||
|
|
||||||
|
local function redraw_list(data)
|
||||||
|
local market_scroll_pane = data.market_scroll_pane
|
||||||
|
Gui.clear(market_scroll_pane)
|
||||||
|
|
||||||
|
for _, unlockable in pairs(config.unlockables) do
|
||||||
|
local is_unlocked = unlockable.stone <= stone_tracker.stone_sent_to_surface
|
||||||
|
local message
|
||||||
|
-- only add the item to the market if it's between the old and new stone range
|
||||||
|
if (unlockable.type == 'market') then
|
||||||
|
message = 'Market item: ' .. unlockable.prototype.name
|
||||||
|
elseif (unlockable.type == 'buff' and unlockable.prototype.name == 'mining_speed') then
|
||||||
|
message = 'Manual mining speed: +' .. unlockable.prototype.value .. '%'
|
||||||
|
elseif (unlockable.type == 'buff' and unlockable.prototype.name == 'inventory_slot') then
|
||||||
|
message = 'Inventory slot: +' .. unlockable.prototype.value
|
||||||
|
else
|
||||||
|
Debug.print('failed getting a message for: ' .. serpent.line(unlockable))
|
||||||
|
end
|
||||||
|
|
||||||
|
message = unlockable.stone .. ' stone: ' .. message
|
||||||
|
|
||||||
|
local label = market_scroll_pane.add({type = 'label', caption = message})
|
||||||
|
if (is_unlocked) then
|
||||||
|
label.style.font_color = {r = 1, g = 1, b = 1}
|
||||||
|
else
|
||||||
|
label.style.font_color = {r = 0.5, g = 0.5, b = 0.5}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function toggle(event)
|
||||||
|
local player = event.player
|
||||||
|
local center = player.gui.center
|
||||||
|
local frame = center['Diggy.MarketExchange.Frame']
|
||||||
|
|
||||||
|
if (frame) then
|
||||||
|
Gui.destroy(frame)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
frame = center.add({name = 'Diggy.MarketExchange.Frame', type = 'frame', direction = 'vertical'})
|
||||||
|
|
||||||
|
local market_scroll_pane = frame.add({type = 'scroll-pane'})
|
||||||
|
market_scroll_pane.style.maximal_height = 400
|
||||||
|
|
||||||
|
frame.add({ type = 'button', name = 'Diggy.MarketExchange.Button', caption = 'Close'})
|
||||||
|
|
||||||
|
local data = {
|
||||||
|
frame = frame,
|
||||||
|
market_scroll_pane = market_scroll_pane,
|
||||||
|
}
|
||||||
|
|
||||||
|
redraw_title(data)
|
||||||
|
redraw_list(data)
|
||||||
|
|
||||||
|
Gui.set_data(frame, data)
|
||||||
|
|
||||||
|
player.opened = frame
|
||||||
|
end
|
||||||
|
|
||||||
|
local function on_player_created(event)
|
||||||
|
game.players[event.player_index].gui.top.add({
|
||||||
|
name = 'Diggy.MarketExchange.Button',
|
||||||
|
type = 'sprite-button',
|
||||||
|
sprite = 'item/stone',
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
Gui.on_click('Diggy.MarketExchange.Button', toggle)
|
||||||
|
Gui.on_custom_close('Diggy.MarketExchange.Frame', function (event)
|
||||||
|
event.element.destroy()
|
||||||
|
end)
|
||||||
|
|
||||||
|
function MarketExchange.on_init()
|
||||||
|
Task.set_timeout_in_ticks(50, on_market_timeout_finished, {
|
||||||
|
surface = game.surfaces.nauvis,
|
||||||
|
position = config.market_spawn_position,
|
||||||
|
player_force = game.forces.player,
|
||||||
|
currency_item = config.currency_item,
|
||||||
|
})
|
||||||
|
|
||||||
|
update_mining_speed(game.forces.player)
|
||||||
|
end
|
||||||
|
|
||||||
--[[--
|
--[[--
|
||||||
Registers all event handlers.
|
Registers all event handlers.
|
||||||
]]
|
]]
|
||||||
@ -167,44 +249,7 @@ function MarketExchange.register(cfg)
|
|||||||
Event.add(defines.events.on_research_finished, on_research_finished)
|
Event.add(defines.events.on_research_finished, on_research_finished)
|
||||||
Event.add(defines.events.on_market_item_purchased, on_market_item_purchased)
|
Event.add(defines.events.on_market_item_purchased, on_market_item_purchased)
|
||||||
Event.add(Template.events.on_placed_entity, on_placed_entity)
|
Event.add(Template.events.on_placed_entity, on_placed_entity)
|
||||||
end
|
Event.add(defines.events.on_player_created, on_player_created)
|
||||||
|
|
||||||
function MarketExchange.get_extra_map_info(config)
|
|
||||||
return 'Market Exchange, trade your stone or send it to the surface'
|
|
||||||
end
|
|
||||||
|
|
||||||
function MarketExchange.on_init()
|
|
||||||
if ('function' ~= type(on_init)) then
|
|
||||||
error('Expected local on_init in MarketExchange to have a function assigned.')
|
|
||||||
end
|
|
||||||
|
|
||||||
on_init()
|
|
||||||
update_mining_speed(game.forces.player)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function toggle(event)
|
|
||||||
local player = event.player
|
|
||||||
local center = player.gui.center
|
|
||||||
local main_frame = center['Diggy.MarketExchange.Frame']
|
|
||||||
|
|
||||||
if (main_frame) then
|
|
||||||
Gui.destroy(main_frame)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
main_frame = center.add({name = 'Diggy.MarketExchange.Frame', type = 'frame', direction = 'vertical'})
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[--
|
|
||||||
@param config LuaGuiElement
|
|
||||||
]]
|
|
||||||
function MarketExchange.top_menu_button_prototype(config)
|
|
||||||
return {
|
|
||||||
name = 'Diggy.MarketExchange.Button',
|
|
||||||
type = 'sprite-button',
|
|
||||||
sprite = 'item/stone',
|
|
||||||
toggle = toggle,
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return MarketExchange
|
return MarketExchange
|
||||||
|
@ -87,20 +87,24 @@ function SimpleRoomGenerator.register(config)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local noise = get_noise(event.surface, position.x, position.y)
|
local surface = event.surface
|
||||||
|
local noise = get_noise(surface, position.x, position.y)
|
||||||
|
|
||||||
for _, noise_range in pairs(config.room_noise_ranges) do
|
for _, noise_range in pairs(config.room_noise_ranges) do
|
||||||
if (noise >= noise_range.min and noise <= noise_range.max) then
|
if (noise >= noise_range.min and noise <= noise_range.max) then
|
||||||
handle_noise(noise_range.name, event.surface, position)
|
handle_noise(noise_range.name, surface, position)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if (config.enable_noise_grid) then
|
if (config.enable_noise_grid) then
|
||||||
Event.add(defines.events.on_chunk_generated, function (event)
|
Event.add(defines.events.on_chunk_generated, function (event)
|
||||||
for x = event.area.left_top.x, event.area.left_top.x + 31 do
|
local surface = event.surface
|
||||||
for y = event.area.left_top.y, event.area.left_top.y + 31 do
|
local area = event.area
|
||||||
Debug.print_grid_value(get_noise(event.surface, x, y), event.surface, {x = x, y = y})
|
|
||||||
|
for x = area.left_top.x, area.left_top.x + 31 do
|
||||||
|
for y = area.left_top.y, area.left_top.y + 31 do
|
||||||
|
Debug.print_grid_value(get_noise(surface, x, y), surface, {x = x, y = y})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -24,14 +24,15 @@ function StartingZone.register(config)
|
|||||||
|
|
||||||
local function on_chunk_generated(event)
|
local function on_chunk_generated(event)
|
||||||
local start_point_area = {{-1, -1}, {0, 0}}
|
local start_point_area = {{-1, -1}, {0, 0}}
|
||||||
|
local surface = event.surface
|
||||||
|
|
||||||
-- hack to figure out whether the important chunks are generated via Diggy.Feature.RefreshMap.
|
-- hack to figure out whether the important chunks are generated via Diggy.Feature.RefreshMap.
|
||||||
if (4 ~= event.surface.count_tiles_filtered({start_point_area, name = 'lab-dark-1'})) then
|
if (4 ~= surface.count_tiles_filtered({start_point_area, name = 'lab-dark-1'})) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- ensure a clean starting point
|
-- ensure a clean starting point
|
||||||
for _, entity in pairs(event.surface.find_entities_filtered({area = start_point_area, type = 'resource'})) do
|
for _, entity in pairs(surface.find_entities_filtered({area = start_point_area, type = 'resource'})) do
|
||||||
entity.destroy()
|
entity.destroy()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -55,7 +56,7 @@ function StartingZone.register(config)
|
|||||||
|
|
||||||
-- hack to avoid starting area from collapsing
|
-- hack to avoid starting area from collapsing
|
||||||
if (distance > floor(starting_zone_size / 10)) then
|
if (distance > floor(starting_zone_size / 10)) then
|
||||||
DiggyCaveCollapse.stress_map_blur_add(event.surface, {x = x, y = y}, -0.3)
|
DiggyCaveCollapse.stress_map_blur_add(surface, {x = x, y = y}, -0.3)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user