1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-28 23:06:38 +02:00
ComfyFactorio/maps/cube.lua
Gerkiz e91b6a352f 2.0 changes
Change global -> storage
Rework how rendering works
Game prototypes are now stored inside 'prototypes.#'
Renamed entity names
2024-10-22 21:47:11 +02:00

177 lines
6.6 KiB
Lua

--luacheck: ignore
-- cuuuubee
local event = require 'utils.event'
function draw_entity_line(surface, name, position_a, position_b)
local distance = math.sqrt((position_a[1] - position_b[1]) ^ 2 + (position_a[2] - position_b[2]) ^ 2)
local modifier = { (position_b[1] - position_a[1]) / distance, (position_b[2] - position_a[2]) / distance }
local position = { position_a[1], position_a[2] }
local entities = {}
for i = 1, distance, 1 do
if surface.can_place_entity({ name = name, position = position }) then
entities[#entities + 1] = surface.create_entity({ name = name, position = position, create_build_effect_smoke = false })
end
position = { position[1] + modifier[1], position[2] + modifier[2] }
end
return entities
end
local function on_chunk_generated(event)
local surface = game.surfaces['cube']
if event.surface.name ~= surface.name then
return
end
local chunk_pos_x = event.area.left_top.x
local chunk_pos_y = event.area.left_top.y
local area = {
left_top = { x = chunk_pos_x, y = chunk_pos_y },
right_bottom = { x = chunk_pos_x + 31, y = chunk_pos_y + 31 }
}
surface.destroy_decoratives({ area = event.area })
local decoratives = {}
for _, e in pairs(surface.find_entities_filtered({ area = event.area })) do
if e.valid then
if e.name ~= 'character' then
e.destroy()
end
end
end
local tiles = {}
for x = 0, 31, 1 do
for y = 0, 31, 1 do
local pos = { x = event.area.left_top.x + x, y = event.area.left_top.y + y }
table.insert(tiles, { name = 'sand-1', position = pos })
end
end
surface.set_tiles(tiles, true)
end
local function on_player_joined_game(event)
local player = game.players[event.player_index]
if not storage.map_init_done then
local map_gen_settings = {}
map_gen_settings.water = 'none'
map_gen_settings.cliff_settings = { cliff_elevation_interval = 20, cliff_elevation_0 = 20 }
map_gen_settings.autoplace_controls = {
--["coal"] = {frequency = "none", size = "none", richness = "none"},
--["stone"] = {frequency = "none", size = "none", richness = "none"},
--["copper-ore"] = {frequency = "none", size = "none", richness = "none"},
--["uranium-ore"] = {frequency = "none", size = "none", richness = "none"},
--["iron-ore"] = {frequency = "none", size = "none", richness = "none"},
--["crude-oil"] = {frequency = "none", size = "none", richness = "none"},
--["trees"] = {frequency = "none", size = "none", richness = "none"},
['enemy-base'] = { frequency = 'none', size = 'none', richness = 'none' }
}
game.map_settings.pollution.pollution_restored_per_tree_damage = 0
game.create_surface('cube', map_gen_settings)
game.forces['player'].set_spawn_position({ 0, 0 }, game.surfaces['cube'])
local surface = game.surfaces['cube']
surface.daytime = 1
surface.freeze_daytime = 1
storage.cube_pixels = {}
storage.rotation = { x = 0, y = 0, z = 0 }
storage.map_init_done = true
end
local surface = game.surfaces['cube']
if player.online_time < 5 and surface.is_chunk_generated({ 0, 0 }) then
player.teleport(surface.find_non_colliding_position('character', { 0, 0 }, 2, 1), 'cube')
else
if player.online_time < 5 then
player.teleport({ 0, 0 }, 'cube')
end
end
if player.online_time < 10 then
player.insert { name = 'raw-fish', count = 3 }
player.insert { name = 'light-armor', count = 1 }
end
end
local cube_vectors = {
{ -16, -16, 16 },
{ 16, -16, 16 },
{ 16, 16, 16 },
{ -16, 16, 16 },
{ -16, -16, -16 },
{ 16, -16, -16 },
{ 16, 16, -16 },
{ -16, 16, -16 }
}
local function wipe_pixels()
for _, line in pairs(storage.cube_pixels) do
for _, pixel in pairs(line) do
pixel.destroy()
end
storage.cube_pixels[_] = nil
end
end
local function draw_lines(vectors)
wipe_pixels()
local surface = game.surfaces['cube']
for i = 1, 4, 1 do
local position_a = vectors[i]
local position_b = vectors[i + 1]
if i == 4 then
position_b = vectors[1]
end
storage.cube_pixels[#storage.cube_pixels + 1] = draw_entity_line(surface, 'stone-wall', position_a, position_b)
end
for i = 5, 8, 1 do
local position_a = vectors[i]
local position_b = vectors[i + 1]
if i == 8 then
position_b = vectors[5]
end
storage.cube_pixels[#storage.cube_pixels + 1] = draw_entity_line(surface, 'stone-wall', position_a, position_b)
end
storage.cube_pixels[#storage.cube_pixels + 1] = draw_entity_line(surface, 'stone-wall', vectors[1], vectors[5])
storage.cube_pixels[#storage.cube_pixels + 1] = draw_entity_line(surface, 'stone-wall', vectors[2], vectors[6])
storage.cube_pixels[#storage.cube_pixels + 1] = draw_entity_line(surface, 'stone-wall', vectors[3], vectors[7])
storage.cube_pixels[#storage.cube_pixels + 1] = draw_entity_line(surface, 'stone-wall', vectors[4], vectors[8])
end
local function draw_cube()
storage.rotation = { x = storage.rotation.x + 0.025, y = storage.rotation.y + 0.025, z = storage.rotation.z + 0.025 }
local vectors = {}
for _, vector in pairs(cube_vectors) do
local new_vector = { vector[1], vector[2] }
--new_vector = {
-- vector[1] * math.cos(storage.rotation.x) - vector[2] * math.sin(storage.rotation.y) - new_vector[1] - vector[3] * math.sin(storage.rotation.y),
-- vector[2] * math.sin(storage.rotation.x) + vector[2] * math.cos(storage.rotation.y) + new_vector[2] + vector[3] * math.cos(storage.rotation.y),
--}
new_vector[1] = new_vector[1] + vector[3] * math.cos(storage.rotation.z) * 0.75
new_vector[2] = new_vector[2] + vector[3] * math.sin(storage.rotation.z) * 0.75
vectors[#vectors + 1] = new_vector
end
draw_lines(vectors)
end
local function on_tick(event)
if game.tick % 4 ~= 0 then
return
end
draw_cube()
--if game.tick % 300 ~= 0 then return end
--local radius = 256
--game.forces.player.chart(surface, {{x = -1 * radius, y = -1 * radius}, {x = radius, y = radius}})
end
event.add(defines.events.on_tick, on_tick)
event.add(defines.events.on_chunk_generated, on_chunk_generated)
event.add(defines.events.on_chunk_charted, on_chunk_charted)
event.add(defines.events.on_player_joined_game, on_player_joined_game)