Skip to content

2.0.0

Latest
Compare
Choose a tag to compare
@redruin1 redruin1 released this 03 Jan 00:08
· 26 commits to main since this release
bed147f

For a more user friendly overview of some of the changes, see here.

  • Updated factorio-data to version 2.0.28 (latest)
  • Updated compatibility/defines.lua to 2.0.28 (latest)
  • Updated all prototypes to match Factorio 2.0
  • Added new prototypes in Factorio 2.0
    • AgriculturalTower
    • AsteroidCollector
    • Car
    • CargoBay
    • CargoLandingPad
    • CurvedRailA
    • CurvedRailB
    • DisplayPanel
    • ElevatedCurvedRailA
    • ElevatedCurvedRailB
    • ElevatedHalfDiagonalRail
    • ElevatedStraightRail
    • FusionGenerator
    • FusionReactor
    • HalfDiagonalRail
    • LightningAttractor
    • RailRamp
    • RailSupport
    • SelectorCombinator
    • SpacePlatformHub
    • SpiderVehicle
    • Thruster
  • Removed command line utility draftsman-update
  • Added command line utility draftsman with multiple subcommands
    • draftsman update ... for the original functionality of modifying a Factorio environment
    • draftsman list to list all mods detected under a particular environment
    • draftsman enable/disable ... enables or disables one or more mods
    • draftsman factorio-version reports or sets the version of Factorio's data
    • draftsman version reports Draftsman's own semantic version
    • Write draftsman -h or draftsman [command] -h for more information
  • Swapped from schema to pydantic
    • Format for specifying schemas is now much clearer
    • Both blueprintables and entities now share the same exporting code, overall making more sense
    • Can now create a JSON schema of any entity or blueprintable (by calling Object.json_schema()), which can be exported and used in any other program that reads JSON schema(!)
    • However, minimum Python version is now 3.7 to support type hints
  • Switched from unittest to pytest (more features with similar syntax; coverage run still works the same)
  • Changed the code to be primarily Python3 compatible with the new minimum version
  • Added extras module which implements some handy new features:
    • Added flip_belts(blueprint) which flips all belt entities inside the blueprint (preserving continuity)
  • Added a bunch of equivalent functions from the Factorio StdLib:
    • Added opposite(), next(), previous(), to_orientation(), and to_vector() to Direction
    • Added Orientation class, similar to Direction; comes with it's own suite of __add__(), to_direction(), and to_vector() helpers
    • Added constants.Ticks enumeration which contains SECONDS, MINUTES, HOURS, etc. stored as quantities of Factorio ticks
  • Added union, intersection, and difference to EntityList, TileList, and ScheduleList
  • Updated Direction to now be the Factorio 2.0 16-direction enum; use LegacyDirection for the old enumerations
  • Added TrainConfiguration, which allows you to specify entire trains with strings like "1-4-1" and customize them on a per-car basis
  • Added WaitCondition and WaitConditions objects which keep track of train station condition trees
    • WaitConditions can be combined using bitwise and and or in order to collect them into a WaitConditions object:
    • Added WaitConditionType and WaitConditionCompareType enumerations
  • Added Collection.add_train_at_position() and Collection.add_train_at_station() to make placing trains easier
  • Added Collection.find_trains_filtered() to allow users to search Blueprints/Groups for trains of particular types
  • Added RailPlanner (finally)
  • Added data.fluids module with some useful helpers
  • Added data.planets module allowing you to access planet metadata for things like surface properties
  • Added data.items.fuels which is dict of sets of item names that fall under their respective fuel categories
  • Added data functions signals.add_signal(), tiles.add_tile(), entities.add_entity(), etc. which allow you to add entities on the fly (primarily for Factorio environment compatibility)
  • Added RequestItemsMixin to Locomotive, CargoWagon, and ArtilleryWagon
  • Added unknown keyword to all entity/tile creation constructs which allows the user to specify what should happen when draftsman encounters an entity it doesn't recognize
  • Changed InvalidEntityError and InvalidTileErrors so that they now try to detect a similar tile/entity name and display that information to the user in the error message
    • For example, if you accidentally type Container("wodenchest"), it will realize you probably meant to type Container("wooden-chest") and suggest that to you instead
  • Added a bunch of new documentation to document the above
  • Added a bunch of new examples to test out the above new features
  • Added a fixture that ensures that Draftsman is running a vanilla configuration before running tests, and exits if it detects that it is not the case.
  • Added a new command line option for draftsman-update --lua-version, which prints the version of Lua currently being used for debugging compat issues
  • Added a README.md to the examples folder which provides short descriptions for all of the examples
  • Integrated aforementioned examples into the test suite
  • Removed the area, tile_width, and tile_height properties from Blueprint, which have been replaced with get_world_bounding_box() and get_dimensions()
    • These attributes are no longer cached in the blueprint and have to be recalculated each time such information is desired
    • However, this means that it only has to be calculated when the user actually wants it, instead of every time a user adds a new entity/tile to a blueprint
    • The user has a better idea of when they can cache the blueprint's dimension to reduce calculation, so it's deferred to the user
    • By making them functions it also makes it abundantly clear that calling them is not likely O(1)
  • Added the get_first method to the defaults for the name of every entity
    • This means that if a data configuration has zero entities of a particular type, using a default name will result in a palatable error instead of something cryptic
  • Added index attribute to all Blueprintable types, which allows the end user to customize the index in a parent BlueprintBook manually
    (Still autogenerated based on list order if unspecified, but now can be overridden)
  • Added data functions signals.add_signal(), tiles.add_tile(), entities.add_entity(), etc. which allow you to add entities on the fly (primarily for Factorio environment compatibility)
  • Fixed a bunch of warts in the API:
    • Added the ability to modify x and y attributes of both position and tile_position and have each other update in tandem
    • Made it possible to rotate objects in parent Collections as long as they're either square or rotated such that they preserve their original footprint (akin to Factorio)
    • Added __eq__ operators to pretty much all draftsman things (Entity, EntityList, TileList, ScheduleList, Schedule, WaitConditions, etc.)
    • Added more professional __repr__ functions to pretty much all draftsman things as well
  • Normalized all import filenames to use underscores consistently (potentially breaking change!)
  • Finished up documentation on DeconstructionPlanner
  • [PERF] Reduced memory consumption by up to ~80 percent(!) (This also made it quite a bit faster to boot)
  • Made it so that default collision_mask keys are resolved at once at the data level when you call draftsman-update, so you can query entities.raw for the correct default value
  • Bumped Lupa to 2.0 which allows me to specify Lua version 5.2 which Factorio uses (#50)
    • draftsman-update will issue a warning if it cannot specify the correct Lua version: It'll still try to load and may still work anyway, but it's not guaranteed to\
  • Added --factorio-version command for draftsman-update which either displays the current Factorio version or sets it to a specific Github tag
  • Patched InvalidModVersionError for now (#51)
  • Removed on_(tile/entity)_(insert/set/remove) from all EntityCollection and TileCollection classes
  • Removed on_(insert/set/remove) from all Entity implementations as well (they were not used and are replaced with better things now)
  • Renamed data member to _root member on EntityList and TileList (Internal reasons)
  • Fixed issue #119