Page 1 of 3

[0.13-0.15] [Library]Factorio Standard Library Project 0.8.0

Posted: Wed Apr 06, 2016 1:14 am
by Afforess
Type: Library
Name: Factorio Standard Library
Description: The Factorio Standard Library is a project to bring Factorio modders high-quality, commonly-required utilities and tools
License: MIT License
Version: 0.8.0
Release: 2017-01-12
Tested-With-Factorio-Version: 0.13.11+, 0.14.X, 0.15.X
Category: Library
Github: https://github.com/Afforess/Factorio-Stdlib
Releases: https://github.com/Afforess/Factorio-Stdlib/releases
Wiki: https://github.com/Afforess/Factorio-Stdlib/wiki
Lua Docs: http://afforess.github.io/Factorio-Stdlib/

What is the Factorio Standard Library?
Description
Why the Factorio Standard Library?
Why
How do I use the Factorio Standard Library?
Contributing to the Factorio Standard Library
Contributions
Version history
Versions

Re: [0.12.x] [Library] Factorio Standard Library Project

Posted: Wed Apr 06, 2016 4:49 am
by seronis
Outstanding. Thank you for your work

Re: [0.12.x] [Library] Factorio Standard Library Project

Posted: Wed Apr 06, 2016 10:07 pm
by Supercheese
Another nice bit to have would be a function to copy the contents of one inventory into another (perhaps even with filters to only copy certain types of items?)

A simplistic example:

Code: Select all

function copyInventory(from, to)
	local inventory = from.get_inventory(defines.inventory.chest)
	local contents = inventory.get_contents()
	for n, c in pairs(contents) do
		to.insert({name=n, count=c})
	end
end
I'm not sure the above code will work in all cases, though -- like for blueprints, it might not copy over the set-up blueprint but just give a blank one instead. And it hardcodes the #define for chest, rather than allowing others like player inventory, etc.

Re: [0.12.x] [Library] Factorio Standard Library Project

Posted: Thu Apr 07, 2016 2:12 am
by Afforess
Supercheese wrote:Another nice bit to have would be a function to copy the contents of one inventory into another (perhaps even with filters to only copy certain types of items?)

A simplistic example:

Code: Select all

function copyInventory(from, to)
	local inventory = from.get_inventory(defines.inventory.chest)
	local contents = inventory.get_contents()
	for n, c in pairs(contents) do
		to.insert({name=n, count=c})
	end
end
I'm not sure the above code will work in all cases, though -- like for blueprints, it might not copy over the set-up blueprint but just give a blank one instead. And it hardcodes the #define for chest, rather than allowing others like player inventory, etc.
Inventory.copy_inventory is now in release 0.1.0.

Also notable, all of the code except the logging is currently unit tested. This actually caught a bug in the codebase, and has already proven valuable. ;)

Re: [0.12.x] [Library] Factorio Standard Library Project 0.2.0

Posted: Sat Apr 09, 2016 4:11 am
by Afforess
Version 0.2.0 released. More functions, more unit tests, and now, error messages for missing arguments when using stdlib apis. See the API docs or changelog for details.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.2.1

Posted: Tue Apr 12, 2016 4:03 am
by Afforess
Version 0.2.1 is released. Two new Area functions, and improved the documentation for the Area functions.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.2.1

Posted: Tue Apr 12, 2016 9:13 am
by MrDoomah
Hey, perhaps you can include my code for finding all entities (or filtered entities):

Code: Select all

function create_number_table(array)
	local new_array = {}
	for _,v in pairs(array) do
		table.insert(new_array,v)
	end
	return new_array
end

function find_entities(input)
	-- input = {name = string, type = string, force = string or force, surface = string or {table of surface(s)}
	local array = {}
	
	if type(input.surface) == "string" then input.surface = {game.surfaces[input.surface]} end
	local surfaces = input.surface or game.surfaces
	
	for _,surface in pairs(surfaces) do
		for chunk in surface.get_chunks() do
			local entities = surface.find_entities_filtered{
				area = {left_top = {chunk.x*32, chunk.y*32}, right_bottom = {(chunk.x+1)*32, (chunk.y+1)*32}}, 
				name = input.name, 
				type = input.type, 
				force = input.force}
			for _,entity in ipairs(entities) do
				array["x"..entity.position.x.."y"..entity.position.y] = entity
			end
		end
	end
	return create_number_table(array)
end
Input is a table containing:
name (string)
type (string)
force (string or force (eg game.player.force)
surface (string eg "nauvis" or table of surfaces eg {game.player.surface}, you can't input game.player.surface directly without brackets)
all optional.

The create_number_array() function is optional, it just make sure that your returned array is nicely ordered so you can do a #operator on it.

It could technically overwrite entities if they are on the same spot since I just their location as key for the array. (This is on purpose so that entities that are on chuck borders don't appear twice in the array, without the need to check the array whether or not that entity is already in it.)

Re: [0.12.x] [Library] Factorio Standard Library Project 0.2.1

Posted: Sun Apr 24, 2016 10:11 pm
by Afforess
Factorio Stdlib 0.3.0 is released, with many new additions. See the changelog for full details.
MrDoomah wrote:Hey, perhaps you can include my code for finding all entities (or filtered entities)
Thanks for the suggestion. 0.3.0 includes Surface.find_all_entities, which closely matches what you suggested.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Mon May 09, 2016 11:11 pm
by Afforess
Factorio Standard Library 0.4.0 is released! Many improvements to core classes, like table and string. Factorio Standard Library is entirely forward compatible, if you are on an old version, there is zero risk in upgrading.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Tue May 10, 2016 2:53 am
by Afforess
I've updated the wiki with two new examples on how to use the Factorio Standard Library:

The first new example is on avoiding iteration, and general stdlib tools: https://github.com/Afforess/Factorio-St ... dlib-tools

The second new example is on how to take advantage of entity data storage: https://github.com/Afforess/Factorio-St ... ntity-data

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Tue May 10, 2016 3:48 pm
by kasandraen
I know a few functions I'd like to have easier acces to. dysoch use them a lot in Dytech. If you check Dytech Core and the Ovvrire functions, the functions like change recipe, addtorecipe etc are really helpful to use

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Tue May 10, 2016 5:05 pm
by Afforess
kasandraen wrote:I know a few functions I'd like to have easier acces to. dysoch use them a lot in Dytech. If you check Dytech Core and the Ovvrire functions, the functions like change recipe, addtorecipe etc are really helpful to use
Sounds like a good idea. I haven't written a utility for the data class yet, but it is high on my list of things to improve.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Tue May 10, 2016 5:15 pm
by orzelek
Afforess wrote:
kasandraen wrote:I know a few functions I'd like to have easier acces to. dysoch use them a lot in Dytech. If you check Dytech Core and the Ovvrire functions, the functions like change recipe, addtorecipe etc are really helpful to use
Sounds like a good idea. I haven't written a utility for the data class yet, but it is high on my list of things to improve.
You should talk with bobbingabout - he wrote boblibrary and those kind of functions are there already.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Tue May 10, 2016 5:22 pm
by Afforess
orzelek wrote:
Afforess wrote:
kasandraen wrote:I know a few functions I'd like to have easier acces to. dysoch use them a lot in Dytech. If you check Dytech Core and the Ovvrire functions, the functions like change recipe, addtorecipe etc are really helpful to use
Sounds like a good idea. I haven't written a utility for the data class yet, but it is high on my list of things to improve.
You should talk with bobbingabout - he wrote boblibrary and those kind of functions are there already.
I've seen and used a few of those myself for Marathon, so I know exactly what you are referring to ;)

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Tue May 10, 2016 5:33 pm
by jorgenRe
Like this :)!

:ugeek:

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Tue May 10, 2016 7:03 pm
by CorrettoSambuca
Hi, just leaving a note to say thanks for your work :)

By the way, is there an easy way to trigger events on a clock? For example every sunset and so on...

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Thu May 12, 2016 1:42 am
by y.petremann
Something that would be really great would be a gui library (like what I already do in diplomacy) that would permit :
  • Creating template (with styles) that can later be used needing less repetition of code and a better understanding of the code.
  • Anonymous gui elements (sometimes you don't need a name for a label you never touch again)
  • Advanced element event callback :
    • All : custom function callback and arguments per elements (like I do to pass arguments in diplomacy)
    • Checkbox : Current state
    • Text Area : Text content
    {*]Widgets groups : They will act like a single wigdet and so modifying a property would modify the widget inside it :
    • An example would be a progressbar with label.
    • Simple question dialog.
      {*]Item cell.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Thu May 12, 2016 2:01 am
by Afforess
CorrettoSambuca wrote:Hi, just leaving a note to say thanks for your work :)

By the way, is there an easy way to trigger events on a clock? For example every sunset and so on...
There isn't (you could do an event on tick, and check the time of day), but clock events are an interesting idea.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.4.0

Posted: Thu May 12, 2016 2:03 am
by Afforess
y.petremann wrote:Something that would be really great would be a gui library (like what I already do in diplomacy) that would permit :
  • Creating template (with styles) that can later be used needing less repetition of code and a better understanding of the code.
  • Anonymous gui elements (sometimes you don't need a name for a label you never touch again)
  • Advanced element event callback :
    • All : custom function callback and arguments per elements (like I do to pass arguments in diplomacy)
    • Checkbox : Current state
    • Text Area : Text content
    {*]Widgets groups : They will act like a single wigdet and so modifying a property would modify the widget inside it :
    • An example would be a progressbar with label.
    • Simple question dialog.
      {*]Item cell.
Yea, I have some minor experience with the GUI library, and I will suffice to say it could be massively improved by a library like stdlib. I agree with custom callbacks (the one giant event the game currently offers leads to terrible code most of the time), and the idea of creating gui templates is intriguing. I think there is a lot of ideas that for this particular part of the API.

Re: [0.12.x] [Library] Factorio Standard Library Project 0.5.0

Posted: Sun Jun 12, 2016 5:48 pm
by Afforess
The Factorio Standard Library 0.5.0 is released, with a number of improvements & a few bug fixes:

Version 0.5.0
  • Improved table.map, filter, and each to also include additional arguments and index.
  • Added Event.core_events, allows registering Events for on_init, on_load, and on_configuration_changed
  • Added options to Logger.new, adds option to modify the file extension and alter the timestamp format
  • Added Chunk.get to calculate the chunk coordinates for a given tile position
  • Added Chunk.get_data, retrieves mod data stored on a chunk position
  • Added Chunk.set_data sets mod data on a chunk position
  • Added Tile.from_position, calculates tile coordinates from a position
  • Added Tile.to_area, returns the area that a single tile occupies
  • Added Tile.get_data, retrieves mod data stored on a tile position
  • Added Tile.set_data, sets mod data on a tile position
  • Added Area.spiral_iterate, is an alternate iterator (compared to Area.iterate) that iterates the Area in an inside-out spiral fashion
  • Added Area.center, returns the center position of an Area
  • Added string.contains, tests if a string contains a substring
  • Added Time contants, provides easy reference for Time.SECOND, Time.MINUTE, Time.HOUR, Time.DAY, and Time.WEEK in factorio tick time
  • Improved the lua docs, so they share the same look and feel as the factorio lua docs
  • Fixed Logger writing after one hour instead of one minute
  • Fixed Event registry with Event.core_events.init not raising errors correctly
  • Note: Thanks to mojo2012, Choumiko, and Supercheese for their contributions to 0.5.0