X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=blender_export.py;h=7b0751e1fee2d63fef019248239dfec1088f2cc9;hb=6d98c1e42c1617a8a426f9f0c0df99b75725b486;hp=4508bca48d8f0f53b3c759ce61bcda421f8297dd;hpb=1f0e3292c021e8263716e5f4544a1efcedf3f03d;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/blender_export.py b/blender_export.py index 4508bca..7b0751e 100644 --- a/blender_export.py +++ b/blender_export.py @@ -71,6 +71,7 @@ class mdl_material(Structure): _fields_ = [("pstr_name",c_uint32), ("shader",c_uint32), ("flags",c_uint32), + ("surface_prop",c_uint32), ("colour",c_float*4), ("colour1",c_float*4), ("tex_diffuse",c_uint32), @@ -293,6 +294,8 @@ class classtype_spawn(Structure): cv_view_verts += [(v1[0],v1[1],v1[2])] cv_view_colours += [(0,1,1,1),(0,1,1,1)] #} + + cv_draw_sphere( obj.location, 20.0, [0.1,0,0.9,0.4] ) #} @staticmethod @@ -758,6 +761,49 @@ class classtype_audio(Structure): #} #} +class classtype_spawn_link(Structure): +#{ + _pack_ = 1 + _fields_ = [("connections",c_uint32*4)] + + def encode_obj(_, node,node_def ): + #{ + node.classtype = 0 + #} + + @staticmethod + def editor_interface( layout, obj ): + #{ + pass + #} + + @staticmethod + def draw_scene_helpers( obj ): + #{ + global cv_view_verts, cv_view_colours + + count = 0 + + for obj1 in bpy.context.collection.objects: + #{ + if (obj1.cv_data.classtype != 'classtype_spawn_link') and \ + (obj1.cv_data.classtype != 'classtype_spawn') : + continue + + if (obj1.location - obj.location).length < 40.0: + #{ + cv_draw_line( obj.location, obj1.location, [1,1,1,1] ) + count +=1 + #} + + if count == 4: + break + #} + + cv_draw_sphere( obj.location, 20.0, [0.5,0,0.2,0.4] ) + #} +#} + # ---------------------------------------------------------------------------- # # # # Compiler section # @@ -1080,8 +1126,13 @@ def encoder_process_material( mat ): flags = 0x00 if mat.cv_data.skate_surface: flags |= 0x1 if mat.cv_data.collision: flags |= 0x2 + if mat.cv_data.grow_grass: flags |= 0x4 dest.flags = flags + if mat.cv_data.surface_prop == 'concrete': dest.surface_prop = 0 + if mat.cv_data.surface_prop == 'wood': dest.surface_prop = 1 + if mat.cv_data.surface_prop == 'grass': dest.surface_prop = 2 + if mat.cv_data.shader == 'standard': dest.shader = 0 if mat.cv_data.shader == 'standard_cutout': dest.shader = 1 if mat.cv_data.shader == 'terrain_blend': @@ -1101,8 +1152,8 @@ def encoder_process_material( mat ): #{ dest.shader = 3 - dest.colour1[0] = mat.cv_data.uv_offset[0] - dest.colour1[1] = mat.cv_data.uv_offset[1] + dest.colour1[0] = mat.cv_data.blend_offset[0] + dest.colour1[1] = mat.cv_data.blend_offset[1] #} if mat.cv_data.shader == 'water': @@ -1892,6 +1943,9 @@ def write_model(collection_name): #{ global g_encoder print( F"Model graph | Create mode '{collection_name}'" ) + folder = bpy.path.abspath(bpy.context.scene.cv_data.export_dir) + path = F"{folder}{collection_name}.mdl" + print( path ) collection = bpy.data.collections[collection_name] @@ -1907,8 +1961,6 @@ def write_model(collection_name): # Write # - # TODO HOLY - path = F"/home/harry/Documents/carve/models_src/{collection_name}.mdl" encoder_write_to_file( path ) print( F"Completed {collection_name}.mdl" ) @@ -2342,6 +2394,7 @@ class CV_OBJ_SETTINGS(bpy.types.PropertyGroup): ('classtype_trigger',"classtype_trigger","",100), ('classtype_logic_achievement',"classtype_logic_achievement","",101), ('classtype_logic_relay',"classtype_logic_relay","",102), + ('classtype_spawn_link',"classtype_spawn_link","",150), ]) #} @@ -2405,6 +2458,14 @@ class CV_MATERIAL_SETTINGS(bpy.types.PropertyGroup): ('vertex_blend', "vertex_blend", "", 3), ('water',"water","",4), ]) + + surface_prop: bpy.props.EnumProperty( + name="Surface Property", + items = [ + ('concrete','concrete','',0), + ('wood','wood','',1), + ('grass','grass','',2) + ]) collision: bpy.props.BoolProperty( \ name="Collisions Enabled",\ @@ -2416,6 +2477,11 @@ class CV_MATERIAL_SETTINGS(bpy.types.PropertyGroup): default=True,\ description = "Should the game try to target this surface?" \ ) + grow_grass: bpy.props.BoolProperty( \ + name="Grow Grass", \ + default=False,\ + description = "Spawn grass sprites on this surface?" \ + ) blend_offset: bpy.props.FloatVectorProperty( \ name="Blend Offset", \ size=2, \ @@ -2464,10 +2530,12 @@ class CV_MATERIAL_PANEL(bpy.types.Panel): info = material_info( active_mat ) _.layout.prop( active_mat.cv_data, "shader" ) + _.layout.prop( active_mat.cv_data, "surface_prop" ) _.layout.prop( active_mat.cv_data, "collision" ) if active_mat.cv_data.collision: _.layout.prop( active_mat.cv_data, "skate_surface" ) + _.layout.prop( active_mat.cv_data, "grow_grass" ) if active_mat.cv_data.shader == "terrain_blend": #{