From f335639b453c8a9faca03b01b5e32cc7685e2126 Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 09:44:19 -0500 Subject: [PATCH 1/9] Add Share Function to Linking Book Mod Adds a "Shareable" toggle to Linking Book Mod when Link Type is set to Private Link (MOUL only). --- korman/properties/modifiers/gui.py | 29 +++++++++++++++++++++++++++++ korman/ui/modifiers/gui.py | 2 ++ 2 files changed, 31 insertions(+) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index f69996a..c6ea8f2 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -427,6 +427,10 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz description="The object the avatar will click on to activate the Linking Book GUI", type=bpy.types.Object, poll=idprops.poll_mesh_objects) + shareable = BoolProperty(name="Shareable", + description="Enable the Book to be Shareable (MOUL private instance only)", + default=False, + options=set()) # -- Path of the Shell options -- # Popup Appearance @@ -633,6 +637,31 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz linking_panel_name.value = self.link_destination if self.link_destination else self.age_name linking_panel_name.link_output(linkingnode, "pfm", "TargetAge") + # Share MSB + if self.shareable: + # Region + share_region = nodes.new("PlasmaVolumeSensorNode") + share_region.region_object = clk_region + share_region.bounds = "hull" + for i in share_region.inputs: + i.allow = True + share_region.link_output(linkingnode, "satisfies", "shareRegion") + # MSB Behavior + share_seek = nodes.new("PlasmaSeekTargetNode") + share_seek.target = self.seek_point + + share_anim_stage = nodes.new("PlasmaAnimStageNode") + share_anim_stage.anim_name = "LinkOut" + share_anim_settings = nodes.new("PlasmaAnimStageSettingsNode") + share_anim_settings.forward = "kPlayAuto" + share_anim_settings.stage_advance = "kAdvanceAuto" + share_anim_stage.link_input(share_anim_settings, "stage", "stage_settings") + + share = nodes.new("PlasmaMultiStageBehaviorNode") + share.link_input(share_seek, "seekers", "seek_target") + share.link_input(share_anim_stage, "stage", "stage_refs") + share.link_output(linkingnode, "hosts", "shareBookSeek") + def sanity_check(self): if self.clickable is None: raise ExportError("{}: Linking Book modifier requires a clickable!", self.id_data.name) diff --git a/korman/ui/modifiers/gui.py b/korman/ui/modifiers/gui.py index 3577cd5..f1d1a33 100644 --- a/korman/ui/modifiers/gui.py +++ b/korman/ui/modifiers/gui.py @@ -88,6 +88,8 @@ def linkingbookmod(modifier, layout, context): layout.separator() layout.prop(modifier, "link_type") + if modifier.link_type == "kOriginalBook": + layout.prop(modifier, "shareable") row_alert("age_instance") if modifier.link_type == "kChildAgeBook": row_alert("age_parent") From 528f381d326ea570459cad59d0d0b6d05672e37c Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 10:27:57 -0500 Subject: [PATCH 2/9] Optional Share region Adds a field for an optional share region (uses click region if blank). --- korman/properties/modifiers/gui.py | 9 ++++++++- korman/ui/modifiers/gui.py | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index c6ea8f2..f492d25 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -431,6 +431,10 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz description="Enable the Book to be Shareable (MOUL private instance only)", default=False, options=set()) + shr_region = PointerProperty(name="Share Region (optional)", + description="Sets an alternate share region (optional)", + type=bpy.types.Object, + poll=idprops.poll_mesh_objects) # -- Path of the Shell options -- # Popup Appearance @@ -641,7 +645,10 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz if self.shareable: # Region share_region = nodes.new("PlasmaVolumeSensorNode") - share_region.region_object = clk_region + if self.shr_region is None: + share_region.region_object = clk_region + else: + share_region.region_object = self.shr_region share_region.bounds = "hull" for i in share_region.inputs: i.allow = True diff --git a/korman/ui/modifiers/gui.py b/korman/ui/modifiers/gui.py index f1d1a33..540359e 100644 --- a/korman/ui/modifiers/gui.py +++ b/korman/ui/modifiers/gui.py @@ -90,6 +90,7 @@ def linkingbookmod(modifier, layout, context): layout.prop(modifier, "link_type") if modifier.link_type == "kOriginalBook": layout.prop(modifier, "shareable") + layout.prop(modifier, "shr_region") row_alert("age_instance") if modifier.link_type == "kChildAgeBook": row_alert("age_parent") From 4cee3d68764629c90fa896f9b2c6bb31c8c5f0a7 Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 18:42:46 -0500 Subject: [PATCH 3/9] Various fixes per Hoikas' suggestions --- korman/properties/modifiers/gui.py | 19 +++++++++---------- korman/ui/modifiers/gui.py | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index f492d25..9d7789e 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -429,12 +429,12 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz poll=idprops.poll_mesh_objects) shareable = BoolProperty(name="Shareable", description="Enable the Book to be Shareable (MOUL private instance only)", - default=False, + default=True, options=set()) - shr_region = PointerProperty(name="Share Region (optional)", - description="Sets an alternate share region (optional)", - type=bpy.types.Object, - poll=idprops.poll_mesh_objects) + share_region = PointerProperty(name="Share Region (optional)", + description="Sets an alternate share region (optional)", + type=bpy.types.Object, + poll=idprops.poll_mesh_objects) # -- Path of the Shell options -- # Popup Appearance @@ -643,17 +643,16 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz # Share MSB if self.shareable: - # Region + # Region share_region = nodes.new("PlasmaVolumeSensorNode") - if self.shr_region is None: + if self.share_region is None: share_region.region_object = clk_region else: - share_region.region_object = self.shr_region - share_region.bounds = "hull" + share_region.region_object = self.share_region for i in share_region.inputs: i.allow = True share_region.link_output(linkingnode, "satisfies", "shareRegion") - # MSB Behavior + # MSB Behavior share_seek = nodes.new("PlasmaSeekTargetNode") share_seek.target = self.seek_point diff --git a/korman/ui/modifiers/gui.py b/korman/ui/modifiers/gui.py index 540359e..9010679 100644 --- a/korman/ui/modifiers/gui.py +++ b/korman/ui/modifiers/gui.py @@ -90,7 +90,7 @@ def linkingbookmod(modifier, layout, context): layout.prop(modifier, "link_type") if modifier.link_type == "kOriginalBook": layout.prop(modifier, "shareable") - layout.prop(modifier, "shr_region") + layout.prop(modifier, "share_region") row_alert("age_instance") if modifier.link_type == "kChildAgeBook": row_alert("age_parent") From 794250141361658b308943e05eb49ade452d17a7 Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 19:17:36 -0500 Subject: [PATCH 4/9] Add pre-export share region code Creates us a new cube if no share region mesh is specified, similar to the click region only bigger --- korman/properties/modifiers/gui.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index 9d7789e..9301509 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -484,6 +484,20 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz yield self.convert_logic(bo, age_name=exporter.age_name, version=exporter.mgr.getVer(), region=rgn_obj) + # Generate the same six foot cube if we need a share region. + if self.shareable: + if self.share_region is None: + with utils.bmesh_object("{}_LinkingBook_ShareRgn".format(self.key_name)) as (share_region, bm): + bmesh.ops.create_cube(bm, size=(8.0)) + share_region_offset = mathutils.Matrix.Translation(self.clickable.matrix_world.translation - share_region.matrix_world.translation) + bmesh.ops.transform(bm, matrix=share_region_offset, space=share_region.matrix_world, verts=bm.verts) + share_region.plasma_object.enabled = True + share_region.hide_render = True + else: + share_region = self.share_region + + yield self.convert_logic(bo, age_name=exporter.age_name, version=exporter.mgr.getVer(), region=share_region) + def export(self, exporter, bo, so): if self._check_version(pvPrime, pvPots): # Create ImageLibraryMod in which to store the Cover, Linking Panel, and Stamp images From 6bef5ba88715fd9034b543905d90c95d242e49cf Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 19:59:03 -0500 Subject: [PATCH 5/9] More fixes to the modifier pre_export, convert_logic, and logicwiz references --- korman/properties/modifiers/gui.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index 9301509..a4b10df 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -482,8 +482,6 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz else: rgn_obj = self.clickable_region - yield self.convert_logic(bo, age_name=exporter.age_name, version=exporter.mgr.getVer(), region=rgn_obj) - # Generate the same six foot cube if we need a share region. if self.shareable: if self.share_region is None: @@ -496,7 +494,7 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz else: share_region = self.share_region - yield self.convert_logic(bo, age_name=exporter.age_name, version=exporter.mgr.getVer(), region=share_region) + yield self.convert_logic(bo, age_name=exporter.age_name, version=exporter.mgr.getVer(), click_region=rgn_obj, share_region=share_region) def export(self, exporter, bo, so): if self._check_version(pvPrime, pvPots): @@ -513,14 +511,14 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz if self.seek_point is not None: yield self.seek_point.name - def logicwiz(self, bo, tree, age_name, version, region): + def logicwiz(self, bo, tree, age_name, version, click_region, share_region): # Assign linking book script based on target version linking_pfm = linking_pfms[version] linkingnode = self._create_python_file_node(tree, linking_pfm["filename"], linking_pfm["attribs"]) if version <= pvPots: - self._create_pots_nodes(bo, tree.nodes, linkingnode, age_name, region) + self._create_pots_nodes(bo, tree.nodes, linkingnode, age_name, click_region) else: - self._create_moul_nodes(bo, tree.nodes, linkingnode, age_name, region) + self._create_moul_nodes(bo, tree.nodes, linkingnode, age_name, click_region, share_region) def _create_pots_nodes(self, clickable_object, nodes, linkingnode, age_name, clk_region): # Clickable @@ -600,7 +598,7 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz responder.link_output(responder_state, "state_refs", "resp") responder.link_output(linkingnode, "keyref", "respOneShot") - def _create_moul_nodes(self, clickable_object, nodes, linkingnode, age_name, clk_region): + def _create_moul_nodes(self, clickable_object, nodes, linkingnode, age_name, clk_region, shr_region): # Clickable clickable_region = nodes.new("PlasmaClickableRegionNode") clickable_region.region_object = clk_region @@ -659,10 +657,7 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz if self.shareable: # Region share_region = nodes.new("PlasmaVolumeSensorNode") - if self.share_region is None: - share_region.region_object = clk_region - else: - share_region.region_object = self.share_region + share_region.region_object = shr_region for i in share_region.inputs: i.allow = True share_region.link_output(linkingnode, "satisfies", "shareRegion") From ca85cb603c03622220aa90487ec8e7e80eee784e Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 20:16:58 -0500 Subject: [PATCH 6/9] More script touch ups per Hoikas. --- korman/properties/modifiers/gui.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index a4b10df..67d98cc 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -482,19 +482,22 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz else: rgn_obj = self.clickable_region - # Generate the same six foot cube if we need a share region. if self.shareable: if self.share_region is None: with utils.bmesh_object("{}_LinkingBook_ShareRgn".format(self.key_name)) as (share_region, bm): + # Generate a cube for the share region. bmesh.ops.create_cube(bm, size=(8.0)) share_region_offset = mathutils.Matrix.Translation(self.clickable.matrix_world.translation - share_region.matrix_world.translation) bmesh.ops.transform(bm, matrix=share_region_offset, space=share_region.matrix_world, verts=bm.verts) share_region.plasma_object.enabled = True share_region.hide_render = True + yield share_region else: share_region = self.share_region + else: + share_region = None - yield self.convert_logic(bo, age_name=exporter.age_name, version=exporter.mgr.getVer(), click_region=rgn_obj, share_region=share_region) + yield self.convert_logic(bo, age_name=exporter.age_name, version=exporter.mgr.getVer(), click_region=rgn_obj, share_region=share_region) def export(self, exporter, bo, so): if self._check_version(pvPrime, pvPots): @@ -598,7 +601,7 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz responder.link_output(responder_state, "state_refs", "resp") responder.link_output(linkingnode, "keyref", "respOneShot") - def _create_moul_nodes(self, clickable_object, nodes, linkingnode, age_name, clk_region, shr_region): + def _create_moul_nodes(self, clickable_object, nodes, linkingnode, age_name, clk_region, share_rgn): # Clickable clickable_region = nodes.new("PlasmaClickableRegionNode") clickable_region.region_object = clk_region @@ -654,10 +657,10 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz linking_panel_name.link_output(linkingnode, "pfm", "TargetAge") # Share MSB - if self.shareable: + if share_region is not None: # Region share_region = nodes.new("PlasmaVolumeSensorNode") - share_region.region_object = shr_region + share_region.region_object = share_rgn for i in share_region.inputs: i.allow = True share_region.link_output(linkingnode, "satisfies", "shareRegion") From b8b3adac5d368c92257f85c857a4ae6c2717abf2 Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 20:49:48 -0500 Subject: [PATCH 7/9] A few naming fixes Naming adjustments in the _create_moul_nodes definition --- korman/properties/modifiers/gui.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index 67d98cc..f0e0b0c 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -601,7 +601,7 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz responder.link_output(responder_state, "state_refs", "resp") responder.link_output(linkingnode, "keyref", "respOneShot") - def _create_moul_nodes(self, clickable_object, nodes, linkingnode, age_name, clk_region, share_rgn): + def _create_moul_nodes(self, clickable_object, nodes, linkingnode, age_name, clk_region, share_region): # Clickable clickable_region = nodes.new("PlasmaClickableRegionNode") clickable_region.region_object = clk_region @@ -659,11 +659,11 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz # Share MSB if share_region is not None: # Region - share_region = nodes.new("PlasmaVolumeSensorNode") - share_region.region_object = share_rgn - for i in share_region.inputs: + share_msb_region = nodes.new("PlasmaVolumeSensorNode") + share_msb_region.region_object = share_region + for i in share_msb_region.inputs: i.allow = True - share_region.link_output(linkingnode, "satisfies", "shareRegion") + share_msb_region.link_output(linkingnode, "satisfies", "shareRegion") # MSB Behavior share_seek = nodes.new("PlasmaSeekTargetNode") share_seek.target = self.seek_point From 7f0d64fce3153a6204be93659076f006db7e86ff Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 21:34:11 -0500 Subject: [PATCH 8/9] More script fixes Adjusts PointerProperty text, increases created share region size, and reorganizes where the share functions are on the modifier --- korman/properties/modifiers/gui.py | 6 +++--- korman/ui/modifiers/gui.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/korman/properties/modifiers/gui.py b/korman/properties/modifiers/gui.py index f0e0b0c..cefeef5 100644 --- a/korman/properties/modifiers/gui.py +++ b/korman/properties/modifiers/gui.py @@ -431,8 +431,8 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz description="Enable the Book to be Shareable (MOUL private instance only)", default=True, options=set()) - share_region = PointerProperty(name="Share Region (optional)", - description="Sets an alternate share region (optional)", + share_region = PointerProperty(name="Share Region", + description="Sets the share region in which the receiving avatar must stand", type=bpy.types.Object, poll=idprops.poll_mesh_objects) @@ -486,7 +486,7 @@ class PlasmaLinkingBookModifier(PlasmaModifierProperties, PlasmaModifierLogicWiz if self.share_region is None: with utils.bmesh_object("{}_LinkingBook_ShareRgn".format(self.key_name)) as (share_region, bm): # Generate a cube for the share region. - bmesh.ops.create_cube(bm, size=(8.0)) + bmesh.ops.create_cube(bm, size=(10.0)) share_region_offset = mathutils.Matrix.Translation(self.clickable.matrix_world.translation - share_region.matrix_world.translation) bmesh.ops.transform(bm, matrix=share_region_offset, space=share_region.matrix_world, verts=bm.verts) share_region.plasma_object.enabled = True diff --git a/korman/ui/modifiers/gui.py b/korman/ui/modifiers/gui.py index 9010679..f9c514a 100644 --- a/korman/ui/modifiers/gui.py +++ b/korman/ui/modifiers/gui.py @@ -85,18 +85,18 @@ def linkingbookmod(modifier, layout, context): if "pvMoul" in modifier.versions: row_alert("seek_point") layout.prop(modifier, "anim_type") - layout.separator() layout.prop(modifier, "link_type") - if modifier.link_type == "kOriginalBook": - layout.prop(modifier, "shareable") - layout.prop(modifier, "share_region") row_alert("age_instance") if modifier.link_type == "kChildAgeBook": row_alert("age_parent") if modifier.link_type == "kBasicLink": row_alert("age_uuid") + if "pvMoul" in modifier.versions and modifier.link_type == "kOriginalBook": + layout.prop(modifier, "shareable") + layout.prop(modifier, "share_region") + row_alert("age_name") if "pvMoul" in modifier.versions: From c442a3a59a72e3b40d69b6c09d262fb98cb176ac Mon Sep 17 00:00:00 2001 From: Patrick Dulebohn Date: Thu, 24 Feb 2022 21:36:52 -0500 Subject: [PATCH 9/9] One more slight adjustment of the UI Moves the share Properties and adds separator like the others --- korman/ui/modifiers/gui.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/korman/ui/modifiers/gui.py b/korman/ui/modifiers/gui.py index f9c514a..cf462c3 100644 --- a/korman/ui/modifiers/gui.py +++ b/korman/ui/modifiers/gui.py @@ -93,12 +93,13 @@ def linkingbookmod(modifier, layout, context): if modifier.link_type == "kBasicLink": row_alert("age_uuid") + row_alert("age_name") + if "pvMoul" in modifier.versions and modifier.link_type == "kOriginalBook": + layout.separator() layout.prop(modifier, "shareable") layout.prop(modifier, "share_region") - row_alert("age_name") - if "pvMoul" in modifier.versions: layout.separator() layout.prop(modifier, "link_destination")