Yeah, korlib was a bit faster than this implementation, but, honestly,
having a second python module made life more difficult than it needed to
be. This fixes that.
If we don't reference the SceneNode from each SceneObject, we can't get
the SceneNode from an ObjInterface. For some strange reason, plClient
overrides the plDrawableSpans SceneNode at runtime. This caused the DSpan
to be removed from all nodes.... :/
It appears that we were storing PyHSPlasma objects in class attributes, so
they were being held after the plResManager went away--therefore their
keys were nuked. We should probably be holding keys and not objects, but
this fix works regardless.
So this is a fairly massive chunk. I tried to get our Plasma Modifiers to
match the Blender Modifier UI fairly well. In the process, I discovered
that Blender "helpfully" hides the modifier button on Empty objects. Bah.
Significant Changes:
- Hid all of the Blender Physics mess
- The Physics context is now the Plasma Object context
- Moved Plasma Object and Plasma Synchronization to the Context Formerly
Known as Physics
- Added a Plasma Modifier Panel
Here's how you create Plasma Modifiers:
- Add your PropertyGroup to properties.modifiers
- Make sure you have a pl_id naming your modifier, a category, and a label
- Implement the export() method to actually export something useful (not
goat porn, please)
- Implement your UI draw function in ui.modifiers.
- Wasn't that easy?
It's important to not block a change if you're equal to yourself because,
in general, you're equal to yourself. I'm sure there are some edge cases
in that generalization though.
We are attempting to encourage the pages=layers paradigm; however, this is
not strictly enforced. This commit has lots of bits and bobs but little
actual substance. More to come when I begin work on the exporter.
According to the sparse documentation, custom render engines are the most
future-proof way of customizing the internal blender panels.
Unfortunately, even then, we must do some metaprogramming hacks...