X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=blender_export.py;h=7c61247c67aa8d902c55f33b5e7245b6b5eb7d82;hb=a99e5f5d5c16a3e865796a96ad648e3c570d32ac;hp=861d69249efbbfa640412cbe35b216dbbd42229c;hpb=b4a83d4fcab39bee5a8cd6e8e6eec06314864e5b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/blender_export.py b/blender_export.py index 861d692..7c61247 100644 --- a/blender_export.py +++ b/blender_export.py @@ -30,6 +30,9 @@ sr_entity_list = [ ('ent_font', 'Font', '', 9 ), ('ent_font_variant', 'Font:Variant', '', 10 ), ('ent_traffic', 'Traffic Model', '', 11 ), + ('ent_skateshop', 'Skate Shop', '', 12 ), + ('ent_camera', 'Camera', '', 13 ), + ('ent_swspreview', 'Workshop Preview', '', 14 ) ] def get_entity_enum_id( alias ): @@ -271,19 +274,13 @@ class volume_union(Union): ("particles",volume_particles)] #} -class ent_index(Structure): -#{ - _fields_ = [("type",c_uint32), - ("index",c_uint32)] -#} - class ent_volume(Structure): #{ _fields_ = [("transform",mdl_transform), ("to_world",(c_float*3)*4), ("to_local",(c_float*3)*4), ("type",c_uint32), - ("target",ent_index), + ("target",c_uint32), ("_anon",volume_union)] #} @@ -342,10 +339,33 @@ class ent_traffic(Structure): ("index",c_uint32)] #} +class ent_skateshop(Structure): +#{ + _fields_ = [("transform",mdl_transform), + ("id_display",c_uint32), + ("id_info",c_uint32), + ("id_rack",c_uint32), + ("id_camera",c_uint32)] +#} + +class ent_swspreview(Structure): +#{ + _fields_ = [("id_camera",c_uint32), + ("id_display",c_uint32), + ("id_display1",c_uint32)] +#} + +class ent_camera(Structure): +#{ + _fields_ = [("transform",mdl_transform), + ("fov",c_float)] +#} + def obj_ent_type( obj ): #{ if obj.type == 'ARMATURE': return 'mdl_armature' elif obj.type == 'LIGHT': return 'ent_light' + elif obj.type == 'CAMERA': return 'ent_camera' else: return obj.SR_data.ent_type #} @@ -455,6 +475,10 @@ cxr_graph_mapping = \ "Color": material_tex_image("tex_normal") } } + }, + "Emission": + { + "Color": material_tex_image("tex_diffuse") } } @@ -677,6 +701,14 @@ def sr_armature_bones( armature ): yield from _recurse_bone( b ) #} +def sr_entity_id( obj ): +#{ + tipo = get_entity_enum_id( obj_ent_type(obj) ) + index = sr_compile.entity_ids[ obj.name ] + + return (tipo&0xffff)<<16 | (index&0xffff) +#} + # Returns submesh_start,count and armature_id def sr_compile_mesh_internal( obj ): #{ @@ -955,7 +987,7 @@ def sr_compile_fonts( collection ): font.glyph_start = glyph_count glyph_base = data.glyphs[0].utf32 - glyph_range = data.glyphs[-1].utf32 - glyph_base + glyph_range = data.glyphs[-1].utf32+1 - glyph_base font.glyph_utf32_base = glyph_base font.glyph_count = glyph_range @@ -1359,6 +1391,12 @@ def sr_compile( collection ): light.colour[3] = obj.data.energy sr_ent_push( light ) #} + elif ent_type == 'ent_camera': #{ + cam = ent_camera() + compile_obj_transform( obj, cam.transform ) + cam.fov = obj.data.angle * 45.0 + sr_ent_push(cam) + #} elif ent_type == 'ent_gate': #{ gate = ent_gate() obj_data = obj.SR_data.ent_gate[0] @@ -1470,9 +1508,7 @@ def sr_compile( collection ): compile_obj_transform( obj, volume.transform ) if obj_data.target:#{ - target = obj_data.target - volume.target.type = get_entity_enum_id( obj_ent_type(target) ) - volume.target.index = sr_compile.entity_ids[ target.name ] + volume.target = sr_entity_id( obj_data.target ) #} sr_ent_push(volume) @@ -1483,6 +1519,24 @@ def sr_compile( collection ): compile_obj_transform( obj, marker.transform ) sr_ent_push(marker) #} + elif ent_type == 'ent_skateshop':#{ + skateshop = ent_skateshop() + obj_data = obj.SR_data.ent_skateshop[0] + skateshop.id_display = sr_entity_id( obj_data.mark_display ) + skateshop.id_info = sr_entity_id( obj_data.mark_info ) + skateshop.id_rack = sr_entity_id( obj_data.mark_rack ) + skateshop.id_camera = sr_entity_id( obj_data.cam ) + compile_obj_transform( obj, skateshop.transform ) + sr_ent_push(skateshop) + #} + elif ent_type == 'ent_swspreview':#{ + workshop_preview = ent_swspreview() + obj_data = obj.SR_data.ent_swspreview[0] + workshop_preview.id_display = sr_entity_id( obj_data.mark_display ) + workshop_preview.id_display1 = sr_entity_id( obj_data.mark_display1) + workshop_preview.id_camera = sr_entity_id( obj_data.cam ) + sr_ent_push( workshop_preview ) + #} #} #} @@ -2375,7 +2429,8 @@ class SR_UL_FONT_GLYPH_LIST(bpy.types.UIList): s1 = c.split(factor=0.3) c = s1.column() row = c.row() - lbl = chr(item.utf32) if item.utf32 >= 32 and item.utf32 <= 126 else 'ERR' + lbl = chr(item.utf32) if item.utf32 >= 32 and item.utf32 <= 126 else \ + f'x{item.utf32:x}' row.label(text=lbl) c = s1.column() c.prop( item, 'utf32', text='', emboss=True ) @@ -2428,7 +2483,8 @@ class SR_OBJECT_ENT_VOLUME(bpy.types.PropertyGroup): target: bpy.props.PointerProperty( \ type=bpy.types.Object, name="Target", \ - poll=lambda self,obj: sr_filter_ent_type(obj,['ent_audio'])) + poll=lambda self,obj: sr_filter_ent_type(obj,\ + ['ent_audio','ent_skateshop'])) @staticmethod def sr_inspector( layout, data ): @@ -2579,6 +2635,35 @@ class SR_OBJECT_ENT_TRAFFIC(bpy.types.PropertyGroup): speed: bpy.props.FloatProperty(default=1.0) #} +class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup): +#{ + mark_rack: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Board Rack", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) + mark_display: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Selected Board Display", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) + mark_info: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Selected Board Info", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) + cam: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Viewpoint", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_camera'])) +#} + +class SR_OBJECT_ENT_WORKSHOP_PREVIEW(bpy.types.PropertyGroup): +#{ + mark_display: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Board Display", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) + mark_display1: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Board Display (other side)", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker'])) + cam: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Viewpoint", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_camera'])) +#} + class SR_OBJECT_PROPERTIES(bpy.types.PropertyGroup): #{ ent_gate: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_GATE) @@ -2590,6 +2675,10 @@ class SR_OBJECT_PROPERTIES(bpy.types.PropertyGroup): ent_glyph: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_GLYPH) ent_font: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_FONT) ent_traffic: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_TRAFFIC) + ent_skateshop: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_SKATESHOP) + ent_swspreview: \ + bpy.props.CollectionProperty(type=SR_OBJECT_ENT_WORKSHOP_PREVIEW) + ent_type: bpy.props.EnumProperty( name="Type", items=sr_entity_list, @@ -3540,6 +3629,42 @@ def cv_draw(): #} #} #} + elif ent_type == 'ent_skateshop':#{ + cc = (0.0,0.9,0.6) + cc1 = (0.4,0.9,0.2) + cc2 = (0.9,0.6,0.1) + + data = obj.SR_data.ent_skateshop[0] + display = data.mark_display + info = data.mark_info + rack = data.mark_rack + + rack_cu = Vector((3.15,2.0,0.1))*0.5 + rack_co = Vector((0.0,0.0,0.0)) + display_cu = Vector((0.3,1.2,0.1))*0.5 + display_co = Vector((0.0,0.0,0.1))*0.5 + info_cu = Vector((1.2,0.01,0.3))*0.5 + info_co = Vector((0.0,0.0,0.0))*0.5 + + if rack: + cv_draw_ucube( rack.matrix_world, cc, rack_cu, rack_co ) + if display: + cv_draw_ucube( display.matrix_world, cc1, display_cu, display_co) + if info: + cv_draw_ucube( info.matrix_world, cc2, info_cu, info_co ) + #} + elif ent_type == 'ent_swspreview':#{ + cc1 = (0.4,0.9,0.2) + data = obj.SR_data.ent_swspreview[0] + display = data.mark_display + display1 = data.mark_display1 + display_cu = Vector((0.3,1.2,0.1))*0.5 + display_co = Vector((0.0,0.0,0.1))*0.5 + if display: + cv_draw_ucube( display.matrix_world, cc1, display_cu, display_co) + if display1: + cv_draw_ucube(display1.matrix_world, cc1, display_cu, display_co) + #} #} #} @@ -3573,7 +3698,8 @@ classes = [ SR_INTERFACE, SR_MATERIAL_PANEL,\ SR_OBJECT_ENT_FONT_VARIANT, SR_OBJECT_ENT_GLYPH_ENTRY,\ SR_UL_FONT_VARIANT_LIST,SR_UL_FONT_GLYPH_LIST,\ - SR_OBJECT_ENT_FONT,SR_OBJECT_ENT_TRAFFIC,\ + SR_OBJECT_ENT_FONT,SR_OBJECT_ENT_TRAFFIC,SR_OBJECT_ENT_SKATESHOP,\ + SR_OBJECT_ENT_WORKSHOP_PREVIEW,\ \ SR_OBJECT_PROPERTIES, SR_LIGHT_PROPERTIES, SR_BONE_PROPERTIES, SR_MESH_PROPERTIES, SR_MATERIAL_PROPERTIES \