* Now asserting instead of throwing exceptions in some cases where we
don't want to fail gracefully
* Added "export space" option for PSA & PSK exports.
* Removed "Root Motion" option in PSA export, replace with a "Root"
export space.
* Added support for exporting multiple armatures to a PSK (only works
for collection exporter atm)
* More graceful error handling for IO errors (i.e., writing to a
for which the user doesn't have permission)
* Proper handling for slotted actions.
Previously this was not really possible because the PSA import operator
was interactive and required the sequence name list to be populated.
This new operator simply imports everything from the PSA.
Also started using mixin classes instead of ugly class annotation
ammendments. Various other clean-up items as well including using
generators where appropriate instead of returning full lists etc.
All the Python facing operators are now within `bpy.ops.psk` and
`bpy.ops.psa`. Before, they were scattered in a bunch of different
places because I wasn't really paying attention to consistency.
* Added "Active Action" as the sequence type, allowing the user to
select multiple armatures with the same data block and export an
action for each one.
* Added a "Scale" option for PSA export when exporting animations
for an armature that had been scaled on export.
* You are now able to export meshes without materials.
Armature space exporting means that the user doesn't need to manually
move the armature back to origin before exporting, since it was simply
using world-space exporting before.
Also moved all DFS functions into their own file & cleaned up the
usage interface. Added `is_visible` and `is_selected` properties
for better ergonomics.
This was causing an error for some people because of the bizarre
behavior around `getattr` and `setattr` in `bpy.ops` always reporting
that the BDK was installed.
The issue here was the regex pattern was too restrictive, so it did not
pick up the lines as ones that needed to have the `=` appended at the
end so that the ConfigParser could properly parse the file.