fix crash invalid input
[convexer.git] / __init__.py
index dfc7f3a31db749ffdc797d9d2f5adbcc6d73da46..b136c396e93e1fb90d7a5c119356b57a00fd8fe4 100644 (file)
@@ -624,6 +624,7 @@ def ent_prop(context):
 
       kvs['origin'] = [pos[1],-pos[0],pos[2]]
       kvs['angles'] = [0,180,0]
+      kvs['uniformscale'] = 1.0
    else:
       kvs = cxr_baseclass([ent_origin],{})
       target = context['object'].instance_collection
@@ -636,10 +637,15 @@ def ent_prop(context):
       angle[2] = euler[0]
       
       kvs['angles'] = angle
+      kvs['uniformscale'] = obj.scale[0]
+   
+   if target.cxr_data.shadow_caster:
+      kvs['enablelightbounce'] = 1
+      kvs['disableshadows'] = 0
+   else:
+      kvs['enablelightbounce'] = 0
+      kvs['disableshadows'] = 1
 
-
-   kvs['enablelightbounce'] = 1
-   kvs['disableshadows'] = 0
    kvs['fademindist'] = -1
    kvs['fadescale'] = 1
    kvs['model'] = F"{asset_path('models',target)}.mdl".lower()
@@ -647,7 +653,6 @@ def ent_prop(context):
    kvs['rendercolor'] = [255, 255, 255]
    kvs['skin'] = 0
    kvs['solid'] = 6
-   kvs['uniformscale'] = 1.0
 
    return kvs
 
@@ -1346,8 +1351,16 @@ def cxr_export_modelsrc( mdl, origin, asset_dir, project_name, transform ):
       o.write(F'$scale {transform["scale"]/100.0}\n')
       o.write(F'$body _ "{uid}_ref.fbx"\n')
       o.write(F'$staticprop\n')
-      o.write(F'$origin {origin[0]} {origin[1]} {origin[2]}\n')
+      o.write(F'$origin {origin[0]:.6f} {origin[1]:.6f} {origin[2]:.6f}\n')
       
+      if mdl.cxr_data.preserve_order:
+         o.write(F"$preservetriangleorder\n")
+
+      if mdl.cxr_data.texture_shadows:
+         o.write(F"$casttextureshadows\n")
+
+      o.write(F"$surfaceprop {mdl.cxr_data.surfaceprop}\n")
+
       if vphys != None:
          o.write(F'$collisionmodel "{uid}_phy.fbx"\n')
          o.write("{\n")
@@ -1441,7 +1454,8 @@ class CXR_PREVIEW_OPERATOR(bpy.types.Operator):
                "Internal-Fail",\
                "Non-Coplanar",\
                "Non-Convex Polygon",\
-               "Bad Result"]\
+               "Bad Result",\
+               "Invalid-Input"]\
                [err.value]
 
          if static.RUNNING:
@@ -2204,6 +2218,25 @@ class CXR_LIGHT_PANEL(bpy.types.Panel):
          elif active_object.type == 'LIGHT_PROBE':
             layout.prop( properties, "size" )
 
+class CXR_COLLECTION_PANEL(bpy.types.Panel):
+   bl_label = "Source Settings"
+   bl_idname = "COL_PT_cxr"
+   bl_space_type = 'PROPERTIES'
+   bl_region_type = 'WINDOW'
+   bl_context = "collection"
+   
+   def draw(self, context):
+      layout = self.layout
+      scene = context.scene
+      
+      active_collection = bpy.context.collection
+      
+      if active_collection != None:
+         layout.prop( active_collection.cxr_data, "shadow_caster" )
+         layout.prop( active_collection.cxr_data, "texture_shadows" )
+         layout.prop( active_collection.cxr_data, "preserve_order" )
+         layout.prop( active_collection.cxr_data, "surfaceprop" )
+
 # Settings groups
 # ------------------------------------------------------------------------------
 
@@ -2277,6 +2310,10 @@ class CXR_ENTITY_SETTINGS(bpy.types.PropertyGroup):
 class CXR_MODEL_SETTINGS(bpy.types.PropertyGroup):
    last_hash: bpy.props.StringProperty( name="" )
    asset_id: bpy.props.IntProperty(name="vmf_settings",default=0)
+   shadow_caster: bpy.props.BoolProperty( name="Shadow caster", default=True )
+   texture_shadows: bpy.props.BoolProperty( name="Texture Shadows", default=False )
+   preserve_order: bpy.props.BoolProperty( name="Preserve Order", default=False )
+   surfaceprop: bpy.props.StringProperty( name="Suface prop",default="default" )
 
 class CXR_SCENE_SETTINGS(bpy.types.PropertyGroup):
    project_name: bpy.props.StringProperty( name="Project Name" )
@@ -2318,7 +2355,7 @@ classes = [ CXR_RELOAD, CXR_DEV_OPERATOR, CXR_INTERFACE, \
             CXR_LIGHT_SETTINGS, CXR_SCENE_SETTINGS, CXR_DETECT_COMPILERS,\
             CXR_ENTITY_PANEL, CXR_LIGHT_PANEL, CXR_PREVIEW_OPERATOR,\
             CXR_VIEW3D, CXR_COMPILER_CHAIN, CXR_RESET_HASHES,\
-            CXR_COMPILE_MATERIAL]
+            CXR_COMPILE_MATERIAL, CXR_COLLECTION_PANEL ]
 
 vmt_param_dynamic_class = None