X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=blender_export.py;h=4b7cf7f0441809e5bed7a87c52dce3ab4dced40d;hb=70ff4a83e5a4b35436388d9bb999c939559ac23f;hp=b4a501d64ad36bce28ed88f6473e7f70f46bab25;hpb=63fe317d7db724162561da52aa382c82ac3c29be;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/blender_export.py b/blender_export.py index b4a501d..4b7cf7f 100644 --- a/blender_export.py +++ b/blender_export.py @@ -40,7 +40,8 @@ sr_entity_list = [ ('ent_objective', 'Objective', '', 18 ), ('ent_challenge', 'Challenge', '', 19 ), ('ent_relay', 'Relay', '', 20 ), - ('ent_miniworld', 'Mini World', '', 22 ) + ('ent_miniworld', 'Mini World', '', 22 ), + ('ent_prop', 'Prop', '', 23 ) ] MDL_VERSION_NR = 104 @@ -283,7 +284,7 @@ class ent_water(Structure): class volume_trigger(Structure): #{ _fields_ = [("event",c_uint32), - ("blank",c_uint32)] + ("event_leave",c_uint32)] #} class volume_particles(Structure): @@ -527,9 +528,17 @@ class ent_cubemap(Structure):#{ class ent_miniworld(Structure):#{ _fields_ = [("transform",mdl_transform), ("pstr_world",c_uint32), - ("purpose",c_int32)] + ("camera",c_uint32), + ("proxy",c_uint32)] + + sr_functions = { 0: 'zone', 1: 'leave' } +#} - sr_functions = { 0: 'zone' } +class ent_prop(Structure):#{ + _fields_ = [("transform",mdl_transform), + ("submesh_start",c_uint32), + ("submesh_count",c_uint32), + ("flags",c_uint32)] #} def obj_ent_type( obj ): @@ -1665,6 +1674,7 @@ def sr_compile( collection ): # entity ignore mesh list # if ent_type == 'ent_traffic': continue + if ent_type == 'ent_prop': continue if ent_type == 'ent_font': continue if ent_type == 'ent_font_variant': continue if ent_type == 'ent_menuitem': continue @@ -1841,6 +1851,7 @@ def sr_compile( collection ): if obj_data.target:#{ volume.target = sr_entity_id( obj_data.target ) volume._anon.trigger.event = obj_data.target_event + volume._anon.trigger.event_leave = obj_data.target_event_leave #} sr_ent_push(volume) @@ -1960,8 +1971,18 @@ def sr_compile( collection ): compile_obj_transform( obj, miniworld.transform ) miniworld.pstr_world = sr_compile_string( obj_data.world ) + miniworld.proxy = sr_entity_id( obj_data.proxy ) + miniworld.camera = sr_entity_id( obj_data.camera ) sr_ent_push( miniworld ) #} + elif ent_type == 'ent_prop':#{ + prop = ent_prop() + compile_obj_transform( obj, prop.transform ) + prop.submesh_start, prop.submesh_count, _ = \ + sr_compile_mesh_internal( obj ) + prop.flags = 0 + sr_ent_push( prop ) + #} #} #} @@ -2601,6 +2622,12 @@ class SR_OBJECT_ENT_ROUTE_ENTRY(bpy.types.PropertyGroup): class SR_OBJECT_ENT_MINIWORLD(bpy.types.PropertyGroup): #{ world: bpy.props.StringProperty( name='world UID' ) + proxy: bpy.props.PointerProperty( \ + type=bpy.types.Object, name='proxy', \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_prop'])) + camera: bpy.props.PointerProperty( \ + type=bpy.types.Object, name="Camera", \ + poll=lambda self,obj: sr_filter_ent_type(obj,['ent_camera'])) #} class SR_UL_ROUTE_NODE_LIST(bpy.types.UIList): @@ -2950,40 +2977,44 @@ 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,SR_TRIGGERABLE)) - target_event: bpy.props.IntProperty( name="Event/Method" ) + target_event: bpy.props.IntProperty( name="Enter Ev" ) + target_event_leave: bpy.props.IntProperty( name="Leave Ev" ) @staticmethod - def inspect_target( layout, data, propname ):#{ + def inspect_target( layout, data, propname, evs = ['_event'] ):#{ box = layout.box() box.prop( data[0], propname ) - row = box.row() - row.prop( data[0], propname + '_event') - - target = getattr( data[0], propname ) - if target:#{ - tipo = target.SR_data.ent_type - cls = globals()[ tipo ] - - table = getattr( cls, 'sr_functions', None ) - if table:#{ - index = getattr( data[0], propname+'_event') - if index in table: - row.label( text=table[index] ) - else: - row.label( text="undefined function" ) + for evname in evs:#{ + row = box.row() + row.prop( data[0], propname + evname ) + + target = getattr( data[0], propname ) + if target:#{ + tipo = target.SR_data.ent_type + cls = globals()[ tipo ] + + table = getattr( cls, 'sr_functions', None ) + if table:#{ + index = getattr( data[0], propname + evname ) + if index in table: + row.label( text=table[index] ) + else: + row.label( text="undefined function" ) + #} + #} + else:#{ + row.label( text="..." ) + row.enabled=False #} - #} - else:#{ - row.label( text="..." ) - row.enabled=False #} #} @staticmethod def sr_inspector( layout, data ):#{ layout.prop( data[0], 'subtype' ) - SR_OBJECT_ENT_VOLUME.inspect_target( layout, data, 'target' ) + SR_OBJECT_ENT_VOLUME.inspect_target( layout, data, 'target', \ + ['_event','_event_leave'] ) #} #}