Added Paths

This commit is contained in:
Cooldude2606
2019-03-28 22:47:51 +00:00
parent b3fdf05532
commit bf97096dd7
9 changed files with 388 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
--- Makes paths which wear down and paths where entities are placed.
-- @module WornPaths@^4.0.0
-- @author Cooldude2606
-- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE
-- @alias ThisModule
-- Module Require
local Game = require('FactorioStdLib.Game')
-- Local Variables
local entities = require(module_path..'/src/entites')
local paths = require(module_path..'/src/paths')
for _,value in pairs(paths) do value[1]=-1/value[1] end
local placed_paths = require(module_path..'/src/placed')
local adjacency_boost = 2 -- makes paths more likely to be next to each other; must be greater than 0
adjacency_boost = 10/adjacency_boost -- dont change this line
-- Module Define
local module_verbose = false
local ThisModule = {}
-- Global Define
local global = {}
Global.register(global,function(tbl) global = tbl end)
-- Function Define
local function global_key(surface,pos)
return 'S'..surface.name..'X'..math.floor(pos.x)..'Y'..math.floor(pos.y)
end
--- Downgrades a tile in this position
-- @usage ThisModule.down_grade(surface,{x=10,y=10})
-- @tparam surface surface the surface the tile is on
-- @tparam table pos the position of the tile to change
function ThisModule.down_grade(surface,pos)
local tile = surface.get_tile(pos).name
local new_tile = paths[tile][2]
if new_tile == 'world-gen' then
new_tile = global[global_key(surface,pos)] or 'grass-1'
end
surface.set_tiles{{name=new_tile,position=pos}}
end
-- Event Handlers Define
Event.add({defines.events.on_player_built_tile,defines.events.on_robot_built_tile}, function(event)
local surface = event.surface_index and game.surfaces[event.surface_index] or event.robot and event.robot.surface
local old_tiles = event.tiles
for _,old_tile in pairs(old_tiles) do
if not placed_paths[old_tile.old_tile.name] and old_tile.old_tile.name ~= 'water' and old_tile.old_tile.name ~= 'deepwater' then
global[global_key(surface,old_tile.position)]=old_tile.old_tile.name -- not a mistake, this makes it have demising returns
end
end
end)
Event.add(defines.events.on_player_changed_position, function(event)
local player = Game.get_player(event)
if not player or not player.valid or game.tick < 10 then return end
if player.afk_time > 300 then return end
local surface = player.surface
local pos = player.position
local tile_name = surface.get_tile(pos).name
if not paths[tile_name] then return end
local count = -9 -- this value is important
for x = -1,1 do for y = -1,1 do
local _pos = {pos.x+x,pos.y+y}
if placed_paths[tile_name] and not placed_paths[surface.get_tile(_pos).name]
or surface.get_tile(_pos).name == paths[tile_name][2]
then count=count+1 end
end end
local chance = paths[tile_name][1]/(count-adjacency_boost)
if math.random() < chance then
ThisModule.down_grade(surface,pos)
end
end)
Event.add({defines.events.on_built_entity,on_robot_built_entity}, function(event)
local entity = event.created_entity
local surface = entity.surface
if entities[entity.name] then
local box = entity.prototype.collision_box
for x = box.left_top.x,box.right_bottom.x do for y = box.left_top.y,box.right_bottom.y do
local pos = {x=entity.position.x+x,y=entity.position.y+y}
local tile = surface.get_tile(pos).name
if paths[tile] then ThisModule.down_grade(surface,pos) end
end end
end
end)
-- Module Return
-- when called it will downgrade a tile
return setmetatable(ThisModule,{__call=function(self,...) self.down_grade(...) end})
--[[
/interface
local tile_name = surface.get_tile(position).name
if not paths[tile_name] then return end
local count = -9 -- this value is important
for x = -1,1 do for y = -1,1 do
local _pos = {position.x+x,position.y+y}
if placed_paths[tile_name] and not placed_paths[surface.get_tile(_pos).name]
or surface.get_tile(_pos).name == paths[tile_name][2]
then count=count+1 end
end end
return paths[tile_name][1]/(count-adjacency_boost)
]]

View File

@@ -0,0 +1,19 @@
{
"name": "WornPaths",
"version": "4.0.0",
"description": "Makes paths which wear down and paths where entites are placed.",
"location": "FSM_ARCHIVE",
"keywords": [
"Paths",
"Worn",
"Decay",
"Degrade"
],
"author": "Cooldude2606",
"contact": "Discord: Cooldude2606#5241",
"license": "https://github.com/explosivegaming/scenario/blob/master/LICENSE",
"dependencies": {
"FactorioStdLib.Game": "^0.8.0"
},
"submodules": {}
}

View File

@@ -0,0 +1,31 @@
return {
['stone-furnace']=true,
['steel-furnace']=true,
['electric-furnace']=true,
['assembling-machine-1']=true,
['assembling-machine-2']=true,
['assembling-machine-3']=true,
['beacon']=true,
['centrifuge']=true,
['chemical-plant']=true,
['oil-refinery']=true,
['storage-tank']=true,
['nuclear-reactor']=true,
['steam-engine']=true,
['steam-turbine']=true,
['boiler']=true,
['heat-exchanger']=true,
['stone-wall']=true,
['gate']=true,
['gun-turret']=true,
['laser-turret']=true,
['flamethrower-turret']=true,
['radar']=true,
['lab']=true,
['big-electric-pole']=true,
['substation']=true,
['rocket-silo']=true,
['pumpjack']=true,
['electric-mining-drill']=true,
['roboport']=true
}

View File

@@ -0,0 +1,27 @@
return {
-- ['tile name'] = {health,convert to}
-- the greater health is the lower the chance it will be down graded, must be grater than 0
['refined-concrete']={70,'concrete'},
['refined-hazard-concrete-right']={70,'hazard-concrete-right'},
['refined-hazard-concrete-left']={70,'hazard-concrete-left'},
['concrete']={50,'stone-path'},
['hazard-concrete-right']={50,'stone-path'},
['hazard-concrete-left']={50,'stone-path'},
['stone-path']={40,'world-gen'}, -- world-gen just makes it pick the last tile not placed by a player
['sand-1']={5,'sand-2'},
['sand-2']={10,'sand-3'},
['sand-3']={5,'red-desert-3'},
['red-desert-3']={5,'red-desert-2'},
['red-desert-2']={10,'dirt-1'},
['grass-2']={5,'grass-1'},
['grass-1']={5,'grass-3'},
['grass-3']={10,'red-desert-0'},
['red-desert-0']={5,'red-desert-1'},
['red-desert-1']={10,'dirt-1'},
['dirt-1']={5,'dirt-2'},
['dirt-2']={5,'dirt-3'},
['dirt-3']={10,'dirt-4'},
['dirt-4']={5,'dirt-5'},
['dirt-5']={5,'dirt-6'},
['grass-4']={10,'dirt-4'}
}

View File

@@ -0,0 +1,9 @@
return {
['refined-concrete']=true,
['refined-hazard-concrete-right']=true,
['refined-hazard-concrete-left']=true,
['concrete']=true,
['hazard-concrete-right']=true,
['hazard-concrete-left']=true,
['stone-path']=true
}