diff --git a/korman/nodes/node_avatar.py b/korman/nodes/node_avatar.py index 495eb924..5445c125 100644 --- a/korman/nodes/node_avatar.py +++ b/korman/nodes/node_avatar.py @@ -13,9 +13,11 @@ # You should have received a copy of the GNU General Public License # along with Korman. If not, see . +from __future__ import annotations + import bpy from bpy.props import * -from collections import OrderedDict +from typing import * from PyHSPlasma import * from .node_core import PlasmaNodeBase, PlasmaNodeSocketBase @@ -36,20 +38,20 @@ class PlasmaSittingBehaviorNode(PlasmaNodeBase, bpy.types.Node): default={"kApproachFront", "kApproachLeft", "kApproachRight"}, options={"ENUM_FLAG"}) - input_sockets = OrderedDict([ - ("condition", { + input_sockets: dict[str, dict[str, str]] = { + "condition": { "text": "Condition", "type": "PlasmaConditionSocket", - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("satisfies", { + output_sockets: dict[str, dict[str, Any]] = { + "satisfies": { "text": "Satisfies", "type": "PlasmaConditionSocket", "valid_link_sockets": {"PlasmaConditionSocket", "PlasmaPythonFileNodeSocket"}, - }), - ]) + }, + } def draw_buttons(self, context, layout): col = layout.column() @@ -170,31 +172,31 @@ class PlasmaAnimStageSettingsNode(PlasmaNodeBase, bpy.types.Node): default={"kNotifyEnter"}, options={"ENUM_FLAG"}) - input_sockets = OrderedDict([ - ("advance_to", { + input_sockets: dict[str, dict[str, Any]] = { + "advance_to": { "text": "Advance to Stage", "type": "PlasmaAnimStageAdvanceSocketIn", "valid_link_nodes": "PlasmaAnimStageNode", "valid_link_sockets": "PlasmaAnimStageOrderSocketOut", "link_limit": 1, - }), - ("regress_to", { + }, + "regress_to": { "text": "Regress to Stage", "type": "PlasmaAnimStageRegressSocketIn", "valid_link_nodes": "PlasmaAnimStageNode", "valid_link_sockets": "PlasmaAnimStageOrderSocketOut", "link_limit": 1, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("stage", { + output_sockets: dict[str, dict[str, str]] = { + "stage": { "text": "Stage", "type": "PlasmaAnimStageSettingsSocket", "valid_link_nodes": "PlasmaAnimStageNode", "valid_link_sockets": "PlasmaAnimStageSettingsSocket", - }), - ]) + }, + } def draw_buttons(self, context, layout): layout.prop(self, "forward") @@ -230,30 +232,30 @@ class PlasmaAnimStageNode(PlasmaNodeBase, bpy.types.Node): description="Number of times to loop animation", default=0) - input_sockets = OrderedDict([ - ("stage_settings", { + input_sockets: dict[str, dict[str, Any]] = { + "stage_settings": { "text": "Stage Settings", "type": "PlasmaAnimStageSettingsSocket", "valid_link_nodes": "PlasmaAnimStageSettingsNode", "valid_link_sockets": "PlasmaAnimStageSettingsSocket", "link_limit": 1, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("stage", { + output_sockets: dict[str, Any] = { + "stage": { "text": "Behavior", "type": "PlasmaAnimStageRefSocket", "valid_link_nodes": "PlasmaMultiStageBehaviorNode", "valid_link_sockets": "PlasmaAnimStageRefSocket", - }), - ("stage_reference", { + }, + "stage_reference": { "text": "Stage Progression", "type": "PlasmaAnimStageOrderSocketOut", "valid_link_nodes": "PlasmaAnimStageSettingsNode", "valid_link_sockets": {"PlasmaAnimStageAdvanceSocketIn", "PlasmaAnimStageRegressSocketIn"} , - }), - ]) + }, + } def draw_buttons(self, context, layout): layout.prop(self, "anim_name") @@ -293,39 +295,39 @@ class PlasmaMultiStageBehaviorNode(PlasmaNodeBase, bpy.types.Node): description="Reverse forward/back controls at end", default=False) - input_sockets = OrderedDict([ - ("seek_target", { + input_sockets: dict[str, Any] = { + "seek_target": { "text": "Seek Target", "type": "PlasmaSeekTargetSocketIn", "valid_link_sockets": "PlasmaSeekTargetSocketOut", - }), - ("stage_refs", { + }, + "stage_refs": { "text": "Stage", "type": "PlasmaAnimStageRefSocket", "valid_link_nodes": "PlasmaAnimStageNode", "valid_link_sockets": "PlasmaAnimStageRefSocket", "link_limit": 1, "spawn_empty": True, - }), - ("condition", { + }, + "condition": { "text": "Triggered By", "type": "PlasmaConditionSocket", "spawn_empty": True, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("hosts", { + output_sockets: dict[str, Any] = { + "hosts": { "text": "Host Script", "type": "PlasmaBehaviorSocket", - "valid_link_nodes": {"PlasmaPythonFileNode"}, + "valid_link_nodes": "PlasmaPythonFileNode", "spawn_empty": True, - }), - ("satisfies", { + }, + "satisfies": { "text": "Trigger", "type": "PlasmaConditionSocket", - }) - ]) + } + } def draw_buttons(self, context, layout): layout.prop(self, "freeze_phys") @@ -463,14 +465,14 @@ class PlasmaSeekTargetNode(PlasmaNodeBase, bpy.types.Node): description="Object defining the Seek Point's position", type=bpy.types.Object) - output_sockets = OrderedDict([ - ("seekers", { + output_sockets: dict[str, Any] = { + "seekers": { "text": "Seekers", "type": "PlasmaSeekTargetSocketOut", "valid_link_nodes": {"PlasmaMultiStageBehaviorNode", "PlasmaOneShotMsgNode"}, "valid_link_sockets": {"PlasmaSeekTargetSocketIn"}, - }) - ]) + }, + } def draw_buttons(self, context, layout): col = layout.column() diff --git a/korman/nodes/node_conditions.py b/korman/nodes/node_conditions.py index 06be8601..a083d442 100644 --- a/korman/nodes/node_conditions.py +++ b/korman/nodes/node_conditions.py @@ -17,7 +17,6 @@ import bpy from bpy.props import * -from collections import OrderedDict import math from PyHSPlasma import * from typing import * @@ -44,29 +43,29 @@ class PlasmaClickableNode(idprops.IDPropObjectMixin, PlasmaNodeBase, bpy.types.N items=bounds_types, default="hull") - input_sockets = OrderedDict([ - ("region", { + input_sockets: dict[str, Any] = { + "region": { "text": "Avatar Inside Region", "type": "PlasmaClickableRegionSocket", - }), - ("facing", { + }, + "facing": { "text": "Avatar Facing Target", "type": "PlasmaFacingTargetSocket", - }), - ("message", { + }, + "message": { "text": "Message", "type": "PlasmaEnableMessageSocket", "spawn_empty": True, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("satisfies", { + output_sockets: dict[str, dict[str, Any]] = { + "satisfies": { "text": "Satisfies", "type": "PlasmaConditionSocket", "valid_link_sockets": {"PlasmaConditionSocket", "PlasmaPythonFileNodeSocket"}, - }), - ]) + }, + } def draw_buttons(self, context, layout): layout.prop(self, "clickable_object", icon="MESH_DATA") @@ -168,12 +167,12 @@ class PlasmaClickableRegionNode(idprops.IDPropObjectMixin, PlasmaNodeBase, bpy.t items=bounds_types, default="hull") - output_sockets = OrderedDict([ - ("satisfies", { + output_sockets = { + "satisfies": { "text": "Satisfies", "type": "PlasmaClickableRegionSocket", - }), - ]) + }, + } def draw_buttons(self, context, layout): layout.prop(self, "region_object", icon="MESH_DATA") @@ -280,13 +279,13 @@ def _set_tolerance(self, value: float) -> None: get=_get_tolerance, set=_set_tolerance, subtype="ANGLE", options=set()) - output_sockets = OrderedDict([ - ("satisfies", { + output_sockets: dict[str, dict[str, Any]] = { + "satisfies": { "text": "Satisfies", "type": "PlasmaFacingTargetSocket", "link_limit": 1, - }), - ]) + }, + } def _draw_sub_prop(self, layout, prop_name, *, active=True, sidebar=False, **kwargs): sub = layout.row() if sidebar else layout.column() @@ -380,13 +379,13 @@ class PlasmaVolumeReportNode(PlasmaNodeBase, bpy.types.Node): description="How many objects should be in the region for it to trigger", min=0) - output_sockets = OrderedDict([ - ("settings", { + output_sockets: dict[str, dict[str, Any]] = { + "settings": { "text": "Trigger Settings", "type": "PlasmaVolumeSettingsSocketOut", "valid_link_sockets": {"PlasmaVolumeSettingsSocketIn"}, - }), - ]) + }, + } def draw_buttons(self, context, layout): layout.prop(self, "report_when") @@ -433,35 +432,35 @@ def _update_report_on(self, context): default={"kGroupAvatar"}, update=_update_report_on) - input_sockets = OrderedDict([ - ("facing", { + input_sockets: dict[str, dict[str, Any]] = { + "facing": { "text": "Avatar Facing Target", "type": "PlasmaFacingTargetSocket", - }), - ("enter", { + }, + "enter": { "text": "Trigger on Enter", "type": "PlasmaVolumeSettingsSocketIn", "valid_link_sockets": {"PlasmaVolumeSettingsSocketOut"}, - }), - ("exit", { + }, + "exit": { "text": "Trigger on Exit", "type": "PlasmaVolumeSettingsSocketIn", "valid_link_sockets": {"PlasmaVolumeSettingsSocketOut"}, - }), - ("message", { + }, + "message": { "text": "Message", "type": "PlasmaEnableMessageSocket", "spawn_empty": True, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("satisfies", { + output_sockets: dict[str, dict[str, Any]] = { + "satisfies": { "text": "Satisfies", "type": "PlasmaConditionSocket", "valid_link_sockets": {"PlasmaConditionSocket", "PlasmaPythonFileNodeSocket"}, - }), - ]) + }, + } def init(self, context): # The default value for the facing socket is a bit silly for this node type. diff --git a/korman/nodes/node_deprecated.py b/korman/nodes/node_deprecated.py index d3d5bdd1..71e2d1b8 100644 --- a/korman/nodes/node_deprecated.py +++ b/korman/nodes/node_deprecated.py @@ -13,10 +13,12 @@ # You should have received a copy of the GNU General Public License # along with Korman. If not, see . +from __future__ import annotations + import abc import bpy +from typing import * from bpy.props import * -from collections import OrderedDict from .node_core import * @@ -53,28 +55,28 @@ class PlasmaResponderCommandNode(PlasmaDeprecatedNode, bpy.types.Node): bl_idname = "PlasmaResponderCommandNode" bl_label = "Responder Command" - input_sockets = OrderedDict([ - ("whodoneit", { + input_sockets: dict[str, dict[str, str]] = { + "whodoneit": { "text": "Condition", "type": "PlasmaRespCommandSocket", - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("msg", { + output_sockets: dict[str, Any] = { + "msg": { "link_limit": 1, "text": "Message", "type": "PlasmaMessageSocket", - }), - ("trigger", { + }, + "trigger": { "text": "Trigger", "type": "PlasmaRespCommandSocket", - }), - ("reenable", { + }, + "reenable": { "text": "Local Reenable", "type": "PlasmaEnableMessageSocket", - }), - ]) + }, + } def _find_message_sender_node(self, parentCmdNode=None): if parentCmdNode is None: diff --git a/korman/nodes/node_logic.py b/korman/nodes/node_logic.py index a9a38e31..7db40c3e 100644 --- a/korman/nodes/node_logic.py +++ b/korman/nodes/node_logic.py @@ -13,9 +13,11 @@ # You should have received a copy of the GNU General Public License # along with Korman. If not, see . +from __future__ import annotations + import bpy from bpy.props import * -from collections import OrderedDict +from typing import * from PyHSPlasma import * from .node_core import * @@ -51,28 +53,28 @@ def _set_bounds(self, value): block_cameras = BoolProperty(name="Block Cameras", description="The region blocks cameras when it has been cleared") - input_sockets = OrderedDict([ - ("safe_point", { + input_sockets:dict[str, dict[str, Any]] = { + "safe_point": { "type": "PlasmaExcludeSafePointSocket", "text": "Safe Point", "spawn_empty": True, # This never links to anything... "valid_link_sockets": frozenset(), - }), - ("msg", { + }, + "msg": { "type": "PlasmaExcludeMessageSocket", "text": "Message", "spawn_empty": True, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("keyref", { + output_sockets: dict[str, dict[str, Any]] = { + "keyref": { "text": "References", "type": "PlasmaPythonReferenceNodeSocket", "valid_link_nodes": {"PlasmaPythonFileNode"}, - }), - ]) + }, + } def draw_buttons(self, context, layout): layout.prop(self, "region_object", icon="MESH_DATA") diff --git a/korman/nodes/node_messages.py b/korman/nodes/node_messages.py index 43130125..382eee34 100644 --- a/korman/nodes/node_messages.py +++ b/korman/nodes/node_messages.py @@ -19,7 +19,6 @@ from bpy.props import * from PyHSPlasma import * -from collections import OrderedDict from typing import * from .node_core import * @@ -38,14 +37,15 @@ class PlasmaMessageSocket(PlasmaMessageSocketBase, bpy.types.NodeSocket): class PlasmaMessageNode(PlasmaNodeBase): - input_sockets = OrderedDict([ - ("sender", { + + input_sockets: dict[str, dict[str, Any]] = { + "sender": { "text": "Sender", "type": "PlasmaMessageSocket", "valid_link_sockets": "PlasmaMessageSocket", "spawn_empty": True, - }), - ]) + }, + } @property def has_callbacks(self): @@ -54,14 +54,14 @@ def has_callbacks(self): class PlasmaMessageWithCallbacksNode(PlasmaMessageNode): - output_sockets = OrderedDict([ - ("msgs", { + soutput_sockets: dict[str, dict[str, str]] = { + "msgs": { "can_link": "can_link_callback", "text": "Send On Completion", "type": "PlasmaMessageSocket", "valid_link_sockets": "PlasmaMessageSocket", - }), - ]) + }, + } @property def can_link_callback(self): @@ -404,13 +404,13 @@ class PlasmaEnableMsgNode(PlasmaMessageNode, bpy.types.Node): bl_idname = "PlasmaEnableMsgNode" bl_label = "Enable/Disable" - output_sockets = OrderedDict([ - ("receivers", { + output_sockets: dict[str, dict[str, Any]] = { + "receivers": { "text": "Send To", "type": "PlasmaEnableMessageSocket", "valid_link_sockets": {"PlasmaEnableMessageSocket", "PlasmaNodeSocketInputGeneral"}, - }), - ]) + }, + } cmd = EnumProperty(name="Command", description="How should we affect the object's state?", @@ -499,12 +499,12 @@ class PlasmaExcludeRegionMsg(PlasmaMessageNode, bpy.types.Node): bl_idname = "PlasmaExcludeRegionMsg" bl_label = "Exclude Region" - output_sockets = OrderedDict([ - ("region", { + output_sockets: dict[str, dict[str, str]] = { + "region": { "text": "Region", "type": "PlasmaExcludeMessageSocket" - }), - ]) + }, + } cmd = EnumProperty(name="Command", description="Exclude Region State", @@ -703,14 +703,14 @@ class PlasmaSceneObjectMsgRcvrNode(idprops.IDPropObjectMixin, PlasmaNodeBase, bp bl_label = "Send To Object" bl_width_default = 190 - input_sockets = OrderedDict([ - ("message", { + input_sockets: dict[str, dict[str, Any]]= { + "message": { "text": "Message", "type": "PlasmaNodeSocketInputGeneral", "valid_link_sockets": {"PlasmaEnableMessageSocket"}, "spawn_empty": True, - }), - ]) + }, + } target_object = PointerProperty(name="Object", description="Object to send the message to", @@ -1030,15 +1030,15 @@ class PlasmaTriggerMultiStageMsgNode(PlasmaMessageNode, bpy.types.Node): bl_idname = "PlasmaTriggerMultiStageMsgNode" bl_label = "Trigger MultiStage" - output_sockets = OrderedDict([ - ("satisfies", { + output_sockets: dict[str, dict[str, Any]] = { + "satisfies": { "text": "Trigger", "type": "PlasmaConditionSocket", "valid_link_nodes": "PlasmaMultiStageBehaviorNode", "valid_link_sockets": "PlasmaConditionSocket", "link_limit": 1, - }) - ]) + } + } def convert_message(self, exporter, so): # Yeah, this is not a REAL Plasma message, but the Korman way is to try to hide these little diff --git a/korman/nodes/node_responder.py b/korman/nodes/node_responder.py index 579275d8..94301358 100644 --- a/korman/nodes/node_responder.py +++ b/korman/nodes/node_responder.py @@ -17,7 +17,7 @@ import bpy from bpy.props import * -from collections import OrderedDict +from typing import * import inspect from PyHSPlasma import * import uuid @@ -46,38 +46,38 @@ class PlasmaResponderNode(PlasmaVersionedNode, bpy.types.Node): default_state = IntProperty(name="Default State Index", options=set()) - input_sockets = OrderedDict([ - ("condition", { + input_sockets: dict[str, dict[str, Any]] = { + "condition": { "text": "Condition", "type": "PlasmaConditionSocket", "spawn_empty": True, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("keyref", { + output_sockets: dict[str, dict[str, Any]] = { + "keyref": { "text": "References", "type": "PlasmaPythonReferenceNodeSocket", "valid_link_nodes": {"PlasmaPythonFileNode"}, - }), - ("state_refs", { + }, + "state_refs": { "text": "State", "type": "PlasmaRespStateRefSocket", "valid_link_nodes": "PlasmaResponderStateNode", "valid_link_sockets": "PlasmaRespStateRefSocket", "link_limit": 1, "spawn_empty": True, - }), + }, # This version of the states socket has been deprecated. # We need to be able to track 1 socket -> 1 state to manage # responder state IDs - ("states", { + "states": { "text": "States", "type": "PlasmaRespStateSocket", "hidden": True, - }), - ]) + } + } def draw_buttons(self, context, layout): layout.prop(self, "detect_trigger") @@ -227,40 +227,40 @@ def _set_default_state(self, value): set=_set_default_state, options=set()) - input_sockets = OrderedDict([ - ("condition", { + input_sockets: dict[str, Any] = { + "condition": { "text": "Triggers State", "type": "PlasmaRespStateSocket", "spawn_empty": True, - }), - ("resp", { + }, + "resp": { "text": "Responder", "type": "PlasmaRespStateRefSocket", "valid_link_nodes": "PlasmaResponderNode", "valid_link_sockets": "PlasmaRespStateRefSocket", - }), - ]) + }, + } - output_sockets = OrderedDict([ + output_sockets = { # This socket has been deprecated. - ("cmds", { + # While this is deprecated I might as well also convert it. + "cmds": { "text": "Commands", "type": "PlasmaRespCommandSocket", "hidden": True, - }), - - # These sockets are valid. - ("msgs", { + }, + # These ones are valid. + "msgs": { "text": "Send Message", "type": "PlasmaMessageSocket", "valid_link_sockets": "PlasmaMessageSocket", - }), - ("gotostate", { + }, + "gotostate": { "link_limit": 1, "text": "Triggers State", "type": "PlasmaRespStateSocket", - }), - ]) + }, + } def draw_buttons(self, context, layout): layout.active = self.find_input("resp") is not None diff --git a/korman/nodes/node_softvolume.py b/korman/nodes/node_softvolume.py index 06b81449..1b56112a 100644 --- a/korman/nodes/node_softvolume.py +++ b/korman/nodes/node_softvolume.py @@ -13,9 +13,11 @@ # You should have received a copy of the GNU General Public License # along with Korman. If not, see . +from __future__ import annotations + import bpy from bpy.props import * -from collections import OrderedDict +from typing import * from PyHSPlasma import * from .node_core import PlasmaNodeBase, PlasmaNodeSocketBase, PlasmaTreeOutputNodeBase @@ -26,12 +28,12 @@ class PlasmaSoftVolumeOutputNode(PlasmaTreeOutputNodeBase, bpy.types.Node): bl_idname = "PlasmaSoftVolumeOutputNode" bl_label = "Soft Volume Output" - input_sockets = OrderedDict([ - ("input", { + input_sockets: dict[str, dict[str, str]] = { + "input": { "text": "Final Volume", "type": "PlasmaSoftVolumeNodeSocket", - }), - ]) + }, + } def get_key(self, exporter, so): svNode = self.find_input("input") @@ -51,12 +53,12 @@ class PlasmaSoftVolumePropertiesNode(PlasmaNodeBase, bpy.types.Node): bl_idname = "PlasmaSoftVolumePropertiesNode" bl_label = "Soft Volume Properties" - output_sockets = OrderedDict([ - ("target", { + output_sockets: dict[str, dict[str, str]] = { + "target": { "text": "Volume", "type": "PlasmaSoftVolumePropertiesNodeSocket" - }), - ]) + }, + } inside_strength = IntProperty(name="Inside", description="Strength inside the region", subtype="PERCENTAGE", default=100, min=0, max=100) @@ -78,12 +80,12 @@ class PlasmaSoftVolumeReferenceNode(idprops.IDPropObjectMixin, PlasmaNodeBase, b bl_label = "Soft Region" bl_width_default = 150 - output_sockets = OrderedDict([ - ("output", { + output_sockets: dict[str, dict[str, str]] = { + "output": { "text": "Volume", "type": "PlasmaSoftVolumeNodeSocket" - }), - ]) + }, + } soft_volume = PointerProperty(name="Soft Volume", description="Object whose Soft Volume modifier we should use", @@ -111,23 +113,23 @@ class PlasmaSoftVolumeInvertNode(PlasmaNodeBase, bpy.types.Node): bl_label = "Soft Volume Invert" # The only difference between this and PlasmaSoftVolumeLinkNode is this can only have ONE input - input_sockets = OrderedDict([ - ("properties", { + input_sockets: dict[str, dict[str, str]] = { + "properties": { "text": "Properties", "type": "PlasmaSoftVolumePropertiesNodeSocket", - }), - ("input", { + }, + "input": { "text": "Input Volume", "type": "PlasmaSoftVolumeNodeSocket", - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("output", { - "text": "Output Volume", + output_sockets: dict[str, dict[str, str]] = { + "output": { + "text": "Volume", "type": "PlasmaSoftVolumeNodeSocket" - }), - ]) + }, + } def get_key(self, exporter, so): return self._find_create_key(plSoftVolumeInvert, exporter, so=so) @@ -153,24 +155,24 @@ def export_once(self): class PlasmaSoftVolumeLinkNode(PlasmaNodeBase): - input_sockets = OrderedDict([ - ("properties", { + input_sockets: dict[str, Any] = { + "properties": { "text": "Properties", "type": "PlasmaSoftVolumePropertiesNodeSocket", - }), - ("input", { + }, + "input": { "text": "Input Volume", "type": "PlasmaSoftVolumeNodeSocket", "spawn_empty": True, - }), - ]) + }, + } - output_sockets = OrderedDict([ - ("output", { - "text": "Output Volume", + output_sockets: dict[str, dict[str, str]] = { + "output": { + "text": "Volume", "type": "PlasmaSoftVolumeNodeSocket" - }), - ]) + }, + } def export(self, exporter, bo, so): sv = self.get_key(exporter, so).object