diff --git a/korman/nodes/node_messages.py b/korman/nodes/node_messages.py index e359396..f109aa8 100644 --- a/korman/nodes/node_messages.py +++ b/korman/nodes/node_messages.py @@ -220,6 +220,51 @@ class PlasmaAnimCmdMsgNode(PlasmaMessageNode, bpy.types.Node): return self.event != "NONE" +class PlasmaEnableMsgNode(PlasmaMessageNode, bpy.types.Node): + bl_category = "MSG" + bl_idname = "PlasmaEnableMsgNode" + bl_label = "Enable/Disable" + + cmd = EnumProperty(name="Command", + description="How should we affect the object's state?", + items=[("kDisable", "Disable", "Deactivate the object"), + ("kEnable", "Enable", "Activate the object")], + default="kEnable") + object_name = StringProperty(name="Object", + description="Object whose state we are changing") + settings = EnumProperty(name="Affects", + description="Which attributes should we change", + items=[("kAudible", "Audio", "Sounds played by this object"), + ("kPhysical", "Physics", "Physical simulation of the object"), + ("kDrawable", "Visibility", "Visibility of the object")], + options={"ENUM_FLAG"}, + default={"kAudible", "kDrawable", "kPhysical"}) + + def convert_message(self, exporter, tree, so): + msg = plEnableMsg() + target_bo = bpy.data.objects.get(self.object_name, None) + if target_bo is None: + self.raise_error("target object '{}' is invalid".format(self.object_name)) + msg.addReceiver(exporter.mgr.find_create_key(plSceneObject, bl=target_bo)) + msg.setCmd(getattr(plEnableMsg, self.cmd), True) + + # If we have a full house, let's send it to all the SO's generic modifiers as by compressing + # to kAll :) -- And no, this is not a bug. We do put the named types in commands. The types + # bit vector is for raw Plasma class IDs listing which modifier types we prop to if "kByType" + # is a command. Nice flexibility--I have no idea where that's used in Uru though... + if len(self.settings) == 3: + msg.setCmd(plEnableMsg.kAll, True) + else: + for i in self.settings: + msg.setCmd(getattr(plEnableMsg, i), True) + return msg + + def draw_buttons(self, context, layout): + layout.prop(self, "cmd") + layout.prop_search(self, "object_name", bpy.data, "objects") + layout.prop(self, "settings") + + class PlasmaOneShotMsgNode(PlasmaMessageNode, bpy.types.Node): bl_category = "MSG" bl_idname = "PlasmaOneShotMsgNode"