mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-10 00:43:27 +02:00
168 lines
6.6 KiB
Lua
168 lines
6.6 KiB
Lua
--luacheck: ignore
|
|
local Immersive_cargo_wagons = require 'modules.immersive_cargo_wagons.main'
|
|
local Public = {}
|
|
|
|
local market_offers = {
|
|
{price = {{'coin', 4}}, offer = {type = 'give-item', item = 'raw-fish'}},
|
|
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'wood', count = 50}},
|
|
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'iron-ore', count = 50}},
|
|
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'copper-ore', count = 50}},
|
|
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'stone', count = 50}},
|
|
{price = {{'coin', 12}}, offer = {type = 'give-item', item = 'coal', count = 50}},
|
|
{price = {{'coin', 20}}, offer = {type = 'give-item', item = 'uranium-ore', count = 50}},
|
|
{price = {{'coin', 8}}, offer = {type = 'give-item', item = 'crude-oil-barrel', count = 1}},
|
|
{price = {{'explosives', 5}, {'steel-plate', 1}, {'coin', 1}}, offer = {type = 'give-item', item = 'land-mine', count = 1}}
|
|
}
|
|
|
|
function Public.locomotive_spawn(surface, position)
|
|
for y = -6, 6, 2 do
|
|
surface.create_entity({name = 'straight-rail', position = {position.x, position.y + y}, force = 'player', direction = 0})
|
|
end
|
|
global.locomotive = surface.create_entity({name = 'locomotive', position = {position.x, position.y + -3}, force = 'player'})
|
|
global.locomotive.get_inventory(defines.inventory.fuel).insert({name = 'wood', count = 100})
|
|
|
|
global.locomotive_cargo = surface.create_entity({name = 'cargo-wagon', position = {position.x, position.y + 3}, force = 'player'})
|
|
global.locomotive_cargo.get_inventory(defines.inventory.cargo_wagon).insert({name = 'raw-fish', count = 1})
|
|
|
|
rendering.draw_light(
|
|
{
|
|
sprite = 'utility/light_medium',
|
|
scale = 5.5,
|
|
intensity = 1,
|
|
minimum_darkness = 0,
|
|
oriented = true,
|
|
color = {255, 255, 255},
|
|
target = global.locomotive,
|
|
surface = surface,
|
|
visible = true,
|
|
only_in_alt_mode = false
|
|
}
|
|
)
|
|
|
|
rendering.draw_light(
|
|
{
|
|
sprite = 'utility/light_medium',
|
|
scale = 5.5,
|
|
intensity = 1,
|
|
minimum_darkness = 0,
|
|
oriented = true,
|
|
color = {255, 255, 255},
|
|
target = global.locomotive_cargo,
|
|
surface = surface,
|
|
visible = true,
|
|
only_in_alt_mode = false
|
|
}
|
|
)
|
|
|
|
global.locomotive.color = {0, 255, 0}
|
|
global.locomotive_cargo.minable = false
|
|
global.locomotive.minable = false
|
|
|
|
for y = -1, 0, 0.05 do
|
|
local scale = math.random(50, 100) * 0.01
|
|
rendering.draw_sprite(
|
|
{
|
|
sprite = 'item/raw-fish',
|
|
orientation = math.random(0, 100) * 0.01,
|
|
x_scale = scale,
|
|
y_scale = scale,
|
|
tint = {math.random(75, 255), math.random(75, 255), math.random(75, 255)},
|
|
render_layer = 'selection-box',
|
|
target = global.locomotive_cargo,
|
|
target_offset = {-0.7 + math.random(0, 140) * 0.01, y},
|
|
surface = surface
|
|
}
|
|
)
|
|
end
|
|
|
|
local wagon = Immersive_cargo_wagons.register_wagon(global.locomotive)
|
|
wagon.entity_count = 999
|
|
|
|
local wagon = Immersive_cargo_wagons.register_wagon(global.locomotive_cargo)
|
|
wagon.entity_count = 999
|
|
|
|
local surface = wagon.surface
|
|
local center_position = {
|
|
x = wagon.area.left_top.x + (wagon.area.right_bottom.x - wagon.area.left_top.x) * 0.5,
|
|
y = wagon.area.left_top.y + (wagon.area.right_bottom.y - wagon.area.left_top.y) * 0.5
|
|
}
|
|
|
|
local position = surface.find_non_colliding_position('market', center_position, 128, 0.5)
|
|
local market = surface.create_entity({name = 'market', position = position, force = 'neutral', create_build_effect_smoke = false})
|
|
market.minable = false
|
|
market.destructible = false
|
|
for _, offer in pairs(market_offers) do
|
|
market.add_market_item(offer)
|
|
end
|
|
|
|
local position = surface.find_non_colliding_position('market', center_position, 128, 0.5)
|
|
local e = surface.create_entity({name = 'big-biter', position = position, force = 'player', create_build_effect_smoke = false})
|
|
e.ai_settings.allow_destroy_when_commands_fail = false
|
|
e.ai_settings.allow_try_return_to_spawner = false
|
|
|
|
for x = center_position.x - 5, center_position.x + 5, 1 do
|
|
for y = center_position.y - 5, center_position.y + 5, 1 do
|
|
if math.random(1, 2) == 1 then
|
|
surface.spill_item_stack({x + math.random(0, 9) * 0.1, y + math.random(0, 9) * 0.1}, {name = 'raw-fish', count = 1}, false)
|
|
end
|
|
surface.set_tiles({{name = 'blue-refined-concrete', position = {x, y}}}, true)
|
|
end
|
|
end
|
|
for x = center_position.x - 3, center_position.x + 3, 1 do
|
|
for y = center_position.y - 3, center_position.y + 3, 1 do
|
|
if math.random(1, 2) == 1 then
|
|
surface.spill_item_stack({x + math.random(0, 9) * 0.1, y + math.random(0, 9) * 0.1}, {name = 'raw-fish', count = 1}, false)
|
|
end
|
|
surface.set_tiles({{name = 'cyan-refined-concrete', position = {x, y}}}, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.fish_tag()
|
|
if not global.locomotive_cargo then
|
|
return
|
|
end
|
|
if not global.locomotive_cargo.valid then
|
|
return
|
|
end
|
|
if not global.locomotive_cargo.surface then
|
|
return
|
|
end
|
|
if not global.locomotive_cargo.surface.valid then
|
|
return
|
|
end
|
|
if global.locomotive_tag then
|
|
if global.locomotive_tag.valid then
|
|
if global.locomotive_tag.position.x == global.locomotive_cargo.position.x and global.locomotive_tag.position.y == global.locomotive_cargo.position.y then
|
|
return
|
|
end
|
|
global.locomotive_tag.destroy()
|
|
end
|
|
end
|
|
global.locomotive_tag =
|
|
global.locomotive_cargo.force.add_chart_tag(
|
|
global.locomotive_cargo.surface,
|
|
{
|
|
icon = {type = 'item', name = 'raw-fish'},
|
|
position = global.locomotive_cargo.position,
|
|
text = ' '
|
|
}
|
|
)
|
|
end
|
|
|
|
function Public.set_player_spawn_and_refill_fish()
|
|
if not global.locomotive_cargo then
|
|
return
|
|
end
|
|
if not global.locomotive_cargo.valid then
|
|
return
|
|
end
|
|
local position = global.locomotive_cargo.surface.find_non_colliding_position('stone-furnace', global.locomotive_cargo.position, 16, 2)
|
|
if position then
|
|
game.forces.player.set_spawn_position({x = position.x, y = position.y}, global.locomotive_cargo.surface)
|
|
end
|
|
return true
|
|
end
|
|
|
|
return Public
|