diff --git a/korman/nodes/node_messages.py b/korman/nodes/node_messages.py index 97c33cf..fed6273 100644 --- a/korman/nodes/node_messages.py +++ b/korman/nodes/node_messages.py @@ -25,7 +25,7 @@ from .. import enum_props from .node_core import * from ..properties.modifiers.physics import subworld_types from ..properties.modifiers.region import footstep_surfaces, footstep_surface_ids -from ..exporter import ExportError +from ..exporter import ExportError, utils from .. import idprops if TYPE_CHECKING: @@ -676,7 +676,7 @@ class PlasmaSceneObjectMsgRcvrNode(idprops.IDPropObjectMixin, PlasmaNodeBase, bp "message": { "text": "Message", "type": "PlasmaNodeSocketInputGeneral", - "valid_link_sockets": {"PlasmaEnableMessageSocket"}, + "valid_link_sockets": {"PlasmaEnableMessageSocket", "PlasmaWarpMessageSocket"}, "spawn_empty": True, }, } @@ -1043,3 +1043,35 @@ class PlasmaFootstepSoundMsgNode(PlasmaMessageNode, bpy.types.Node): msg.BCastFlags |= (plMessage.kPropagateToModifiers | plMessage.kNetPropagate) msg.surface = footstep_surface_ids[self.surface] return msg + + +class PlasmaWarpMsgNode(PlasmaMessageNode, bpy.types.Node): + bl_category = "MSG" + bl_idname = "PlasmaWarpMsgNode" + bl_label = "Warp" + + pos_object = PointerProperty(name="Position", + description="Object defining the target position", + type=bpy.types.Object) + + output_sockets = OrderedDict([ + ("receivers", { + "text": "Send To", + "type": "PlasmaWarpMessageSocket", + "valid_link_sockets": {"PlasmaWarpMessageSocket", "PlasmaNodeSocketInputGeneral"}, + }), + ]) + + def draw_buttons(self, context, layout): + layout.prop(self, "pos_object") + + def convert_message(self, exporter, so): + msg = plWarpMsg() + msg.BCastFlags |= plMessage.kNetPropagate + msg.warpFlags |= plWarpMsg.kFlushTransform + msg.transform = utils.matrix44(self.pos_object.matrix_local) + return msg + + +class PlasmaWarpMessageSocket(PlasmaNodeSocketBase, bpy.types.NodeSocket): + bl_color = (0.427, 0.196, 0.0, 1.0)