forked from LeenkxTeam/LNXSDK
Blender 2.8 - 4.5 Support
This commit is contained in:
@ -12,9 +12,18 @@ import bpy.utils.previews
|
||||
import lnx.make as make
|
||||
from lnx.props_traits_props import *
|
||||
import lnx.ui_icons as ui_icons
|
||||
|
||||
def compatible_prop(property_func, **kwargs):
|
||||
"""Create properties compatible with different Blender versions."""
|
||||
if bpy.app.version < (2, 90, 0):
|
||||
# Remove override parameter for Blender 2.83
|
||||
kwargs.pop('override', None)
|
||||
return property_func(**kwargs)
|
||||
|
||||
import lnx.utils
|
||||
import lnx.write_data as write_data
|
||||
|
||||
|
||||
if lnx.is_reload(__name__):
|
||||
lnx.make = lnx.reload_module(lnx.make)
|
||||
lnx.props_traits_props = lnx.reload_module(lnx.props_traits_props)
|
||||
@ -91,20 +100,20 @@ class LnxTraitListItem(bpy.types.PropertyGroup):
|
||||
"""Ensure that only logic node trees show up as node traits"""
|
||||
return tree.bl_idname == 'LnxLogicTreeType'
|
||||
|
||||
name: StringProperty(name="Name", description="The name of the trait", default="", override={"LIBRARY_OVERRIDABLE"})
|
||||
enabled_prop: BoolProperty(name="", description="Whether this trait is enabled", default=True, update=trigger_recompile, override={"LIBRARY_OVERRIDABLE"})
|
||||
is_object: BoolProperty(name="", default=True)
|
||||
fake_user: BoolProperty(name="Fake User", description="Export this trait even if it is deactivated", default=False, override={"LIBRARY_OVERRIDABLE"})
|
||||
type_prop: EnumProperty(name="Type", items=PROP_TYPES_ENUM)
|
||||
name = compatible_prop(StringProperty, name="Name", description="The name of the trait", default="", override={"LIBRARY_OVERRIDABLE"})
|
||||
enabled_prop = compatible_prop(BoolProperty, name="", description="Whether this trait is enabled", default=True, update=trigger_recompile, override={"LIBRARY_OVERRIDABLE"})
|
||||
is_object = BoolProperty(name="", default=True)
|
||||
fake_user = compatible_prop(BoolProperty, name="Fake User", description="Export this trait even if it is deactivated", default=False, override={"LIBRARY_OVERRIDABLE"})
|
||||
type_prop = EnumProperty(name="Type", items=PROP_TYPES_ENUM)
|
||||
|
||||
class_name_prop: StringProperty(name="Class", description="A name for this item", default="", update=update_trait_group, override={"LIBRARY_OVERRIDABLE"})
|
||||
canvas_name_prop: StringProperty(name="Canvas", description="A name for this item", default="", update=update_trait_group, override={"LIBRARY_OVERRIDABLE"})
|
||||
webassembly_prop: StringProperty(name="Module", description="A name for this item", default="", update=update_trait_group, override={"LIBRARY_OVERRIDABLE"})
|
||||
node_tree_prop: PointerProperty(type=NodeTree, update=update_trait_group, override={"LIBRARY_OVERRIDABLE"}, poll=poll_node_trees)
|
||||
class_name_prop = compatible_prop(StringProperty, name="Class", description="A name for this item", default="", update=update_trait_group, override={"LIBRARY_OVERRIDABLE"})
|
||||
canvas_name_prop = compatible_prop(StringProperty, name="Canvas", description="A name for this item", default="", update=update_trait_group, override={"LIBRARY_OVERRIDABLE"})
|
||||
webassembly_prop = compatible_prop(StringProperty, name="Module", description="A name for this item", default="", update=update_trait_group, override={"LIBRARY_OVERRIDABLE"})
|
||||
node_tree_prop = compatible_prop(PointerProperty, type=NodeTree, update=update_trait_group, override={"LIBRARY_OVERRIDABLE"}, poll=poll_node_trees)
|
||||
|
||||
lnx_traitpropslist: CollectionProperty(type=LnxTraitPropListItem)
|
||||
lnx_traitpropslist_index: IntProperty(name="Index for my_list", default=0, options={"LIBRARY_EDITABLE"}, override={"LIBRARY_OVERRIDABLE"})
|
||||
lnx_traitpropswarnings: CollectionProperty(type=LnxTraitPropWarning)
|
||||
lnx_traitpropslist = CollectionProperty(type=LnxTraitPropListItem)
|
||||
lnx_traitpropslist_index = compatible_prop(IntProperty, name="Index for my_list", default=0, options={"LIBRARY_EDITABLE"}, override={"LIBRARY_OVERRIDABLE"})
|
||||
lnx_traitpropswarnings = CollectionProperty(type=LnxTraitPropWarning)
|
||||
|
||||
class LNX_UL_TraitList(bpy.types.UIList):
|
||||
"""List of traits."""
|
||||
@ -475,10 +484,12 @@ class LeenkxGenerateNavmeshButton(bpy.types.Operator):
|
||||
# If not, append vertex
|
||||
traversed_indices.append(vertex_index)
|
||||
vertex = export_mesh.vertices[vertex_index].co
|
||||
# Apply world transform and maintain coordinate system
|
||||
# Apply world transform
|
||||
tv = world_matrix @ vertex
|
||||
# Write to OBJ without flipping coordinates
|
||||
f.write("v %.4f %.4f %.4f\n" % (tv[0], tv[1], tv[2]))
|
||||
# Write to OBJ
|
||||
f.write("v %.4f " % (tv[0]))
|
||||
f.write("%.4f " % (tv[2]))
|
||||
f.write("%.4f\n" % (tv[1])) # Flipped
|
||||
|
||||
# Max index of this object
|
||||
max_index = 0
|
||||
@ -522,10 +533,8 @@ class LeenkxGenerateNavmeshButton(bpy.types.Operator):
|
||||
|
||||
# NavMesh preview settings, cleanup
|
||||
navmesh.name = nav_mesh_name
|
||||
# Match the original object's transform
|
||||
navmesh.location = obj.location
|
||||
navmesh.rotation_euler = obj.rotation_euler
|
||||
navmesh.scale = (1, 1, 1) # Reset scale to avoid distortion
|
||||
navmesh.rotation_euler = (0, 0, 0)
|
||||
navmesh.location = (0, 0, 0)
|
||||
navmesh.lnx_export = False
|
||||
|
||||
bpy.context.view_layer.objects.active = navmesh
|
||||
@ -756,7 +765,8 @@ class LnxRefreshObjectScriptsButton(bpy.types.Operator):
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
cls.poll_message_set(LnxRefreshScriptsButton.poll_msg)
|
||||
if bpy.app.version >= (2, 90, 0):
|
||||
cls.poll_message_set(LnxRefreshScriptsButton.poll_msg)
|
||||
# Technically we could keep the operator enabled here since
|
||||
# fetch_trait_props() checks for overrides and the operator does
|
||||
# not depend on the current object, but this way the user
|
||||
@ -1064,11 +1074,10 @@ __REG_CLASSES = (
|
||||
)
|
||||
__reg_classes, unregister = bpy.utils.register_classes_factory(__REG_CLASSES)
|
||||
|
||||
|
||||
def register():
|
||||
__reg_classes()
|
||||
|
||||
bpy.types.Object.lnx_traitlist = CollectionProperty(type=LnxTraitListItem, override={"LIBRARY_OVERRIDABLE", "USE_INSERTION"})
|
||||
bpy.types.Object.lnx_traitlist_index = IntProperty(name="Index for lnx_traitlist", default=0, options={"LIBRARY_EDITABLE"}, override={"LIBRARY_OVERRIDABLE"})
|
||||
bpy.types.Scene.lnx_traitlist = CollectionProperty(type=LnxTraitListItem, override={"LIBRARY_OVERRIDABLE", "USE_INSERTION"})
|
||||
bpy.types.Scene.lnx_traitlist_index = IntProperty(name="Index for lnx_traitlist", default=0, options={"LIBRARY_EDITABLE"}, override={"LIBRARY_OVERRIDABLE"})
|
||||
bpy.types.Object.lnx_traitlist = compatible_prop(CollectionProperty, type=LnxTraitListItem)
|
||||
bpy.types.Object.lnx_traitlist_index = compatible_prop(IntProperty, name="Index for lnx_traitlist", default=0)
|
||||
bpy.types.Scene.lnx_traitlist = compatible_prop(CollectionProperty, type=LnxTraitListItem)
|
||||
bpy.types.Scene.lnx_traitlist_index = compatible_prop(IntProperty, name="Index for lnx_traitlist", default=0)
|
||||
|
Reference in New Issue
Block a user