X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=blender_export.py;h=00c2de474d1d902eb914fd68d90609a8c887a256;hb=5f34184cad016aa2f8ea530b3be009703459e981;hp=861d69249efbbfa640412cbe35b216dbbd42229c;hpb=b4a83d4fcab39bee5a8cd6e8e6eec06314864e5b;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/blender_export.py b/blender_export.py index 861d692..00c2de4 100644 --- a/blender_export.py +++ b/blender_export.py @@ -30,6 +30,8 @@ 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 ) ] def get_entity_enum_id( alias ): @@ -271,19 +273,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 +338,26 @@ 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_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 #} @@ -677,6 +689,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 ): #{ @@ -1359,6 +1379,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 + sr_ent_push(cam) + #} elif ent_type == 'ent_gate': #{ gate = ent_gate() obj_data = obj.SR_data.ent_gate[0] @@ -1470,9 +1496,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 +1507,16 @@ 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) + #} #} #} @@ -2428,7 +2462,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 +2614,22 @@ 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_PROPERTIES(bpy.types.PropertyGroup): #{ ent_gate: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_GATE) @@ -2590,6 +2641,7 @@ 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_type: bpy.props.EnumProperty( name="Type", items=sr_entity_list, @@ -3540,6 +3592,30 @@ 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 ) + #} #} #} @@ -3573,7 +3649,7 @@ 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_PROPERTIES, SR_LIGHT_PROPERTIES, SR_BONE_PROPERTIES, SR_MESH_PROPERTIES, SR_MATERIAL_PROPERTIES \