From 23283f27eb4a14456ba00dc05e83bf19ad71b1a6 Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 24 Apr 2022 16:28:29 +0100 Subject: [PATCH] fix crash invalid input --- __init__.py | 51 ++++++++++++++++++++++++++++++++++++++++++++------- config.py | 23 +++++++++++++++++++++++ cxr/cxr.h | 13 ++++++++++++- 3 files changed, 79 insertions(+), 8 deletions(-) diff --git a/__init__.py b/__init__.py index dfc7f3a..b136c39 100644 --- a/__init__.py +++ b/__init__.py @@ -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 diff --git a/config.py b/config.py index 983b1ca..5ee294d 100644 --- a/config.py +++ b/config.py @@ -144,6 +144,12 @@ cxr_shader_params = \ "name": "Fresnel Ranges", "type": "vector", "default":(1.0,1.0,1.0) + }, + "$basemapalphaphongmask": + { + "name": "Base alpha mask", + "type": "bool", + "default": False } }, "$envmap": @@ -183,6 +189,12 @@ cxr_shader_params = \ "type": "bool", "default": False } + }, + "$selfillum": + { + "name": "Emission", + "type": "bool", + "default": False } }, "Transparency": @@ -282,5 +294,16 @@ cxr_entities = \ { "allow": ('MESH',), "keyvalues": {} + }, + "trigger_hurt": + { + "allow": ('MESH',), + "keyvalues": + { + "damage": { "type":"int", "default": 10}, + "damagecap": { "type":"int", "default": 20}, + "damagetype": { "type":"int", "default": 0}, + "damagemodel": { "type":"int", "default": 0} + } } } diff --git a/cxr/cxr.h b/cxr/cxr.h index c3f7d86..a664313 100644 --- a/cxr/cxr.h +++ b/cxr/cxr.h @@ -280,7 +280,8 @@ enum cxr_soliderr k_soliderr_degenerate_implicit, k_soliderr_non_coplanar_vertices, k_soliderr_non_convex_poly, - k_soliderr_bad_result + k_soliderr_bad_result, + k_soliderr_invalid_input }; /* @@ -2278,6 +2279,16 @@ CXR_API void cxr_free_tri_mesh( cxr_tri_mesh *mesh ) CXR_API cxr_world *cxr_decompose( cxr_static_mesh *src, i32 *perrcode ) { + /* Make sure data is in the mesh and isn't empty */ + if( !src->edge_count || !src->loop_count || !src->poly_count ) + { + cxr_log( "Error %d\n", k_soliderr_invalid_input ); + if( perrcode ) + *perrcode = k_soliderr_invalid_input; + + return NULL; + } + u32 error = 0x00; cxr_world *world = malloc( sizeof(*world) ); -- 2.25.1