('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
class volume_trigger(Structure):
#{
_fields_ = [("event",c_uint32),
- ("blank",c_uint32)]
+ ("event_leave",c_uint32)]
#}
class volume_particles(Structure):
class ent_miniworld(Structure):#{
_fields_ = [("transform",mdl_transform),
("pstr_world",c_uint32),
- ("purpose",c_int32)]
+ ("purpose",c_int32),
+ ("proxy",c_uint32)]
- sr_functions = { 0: 'zone' }
+ sr_functions = { 0: 'zone', 1: 'leave' }
+#}
+
+class ent_prop(Structure):#{
+ _fields_ = [("transform",mdl_transform),
+ ("submesh_start",c_uint32),
+ ("submesh_count",c_uint32),
+ ("flags",c_uint32)]
#}
def obj_ent_type( obj ):
# 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
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)
compile_obj_transform( obj, miniworld.transform )
miniworld.pstr_world = sr_compile_string( obj_data.world )
+ miniworld.proxy = sr_entity_id( obj_data.proxy )
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 )
+ #}
#}
#}
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']))
#}
class SR_UL_ROUTE_NODE_LIST(bpy.types.UIList):
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'] )
#}
#}