npcs and tutorial stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / blender_export.py
index 7c8c69f6ab104cfdcb821d902e9e199e62066dc0..b1e7677fb232cf5c071a74ff4cff5f6a26af3e21 100644 (file)
@@ -51,7 +51,8 @@ sr_entity_list = [
 MDL_VERSION_NR = 105
 SR_TRIGGERABLE = [ 'ent_audio', 'ent_ccmd', 'ent_gate', 'ent_challenge', \
                    'ent_relay', 'ent_skateshop', 'ent_objective', 'ent_route',\
-                   'ent_miniworld', 'ent_region', 'ent_glider', 'ent_list' ]
+                   'ent_miniworld', 'ent_region', 'ent_glider', 'ent_list',\
+                   'ent_npc' ]
 
 def get_entity_enum_id( alias ):
 #{
@@ -306,7 +307,9 @@ class ent_glider(Structure):#{
 class ent_npc(Structure):#{
    _fields_ = [("transform",mdl_transform),
                ("id",c_uint32),
-               ("context",c_uint32)]
+               ("context",c_uint32),
+               ("camera",c_uint32)]
+   sr_functions = { 0: 'proximity', -1: 'leave' }
 #}
 
 class ent_water(Structure):
@@ -320,7 +323,7 @@ class ent_water(Structure):
 class volume_trigger(Structure):
 #{
    _fields_ = [("event",c_uint32),
-               ("event_leave",c_uint32)]
+               ("event_leave",c_int32)]
 #}
 
 class volume_particles(Structure):
@@ -530,7 +533,7 @@ class ent_objective(Structure):#{
                ("id_next",c_uint32),
                ("filter",c_uint32),("filter2",c_uint32),
                ("id_win",c_uint32),
-               ("win_event",c_uint32),
+               ("win_event",c_int32),
                ("time_limit",c_float)]
 
    sr_functions = { 0: 'trigger',
@@ -543,9 +546,9 @@ class ent_challenge(Structure):#{
                ("pstr_alias",c_uint32),
                ("flags",c_uint32),
                ("target",c_uint32),
-               ("target_event",c_uint32),
+               ("target_event",c_int32),
                ("reset",c_uint32),
-               ("reset_event",c_uint32),
+               ("reset_event",c_int32),
                ("first",c_uint32),
                ("camera",c_uint32),
                ("status",c_uint32)] #runtime
@@ -566,7 +569,7 @@ class ent_region(Structure):#{
 
 class ent_relay(Structure):#{
    _fields_ = [("targets",(c_uint32*2)*4),
-               ("targets_events",c_uint32*4)]
+               ("targets_events",c_int32*4)]
    sr_functions = { 0: 'trigger' }
 #}
 
@@ -1920,10 +1923,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
-
-               ev = 0xffffffff if obj_data.target_event_leave < 0 else \
-                     obj_data.target_event_leave
-               volume._anon.trigger.event_leave = ev
+               volume._anon.trigger.event_leave = obj_data.target_event_leave
             #}
 
             sr_ent_push(volume)
@@ -2080,6 +2080,7 @@ def sr_compile( collection ):
             compile_obj_transform( obj, npc.transform )
             npc.id = obj_data.au
             npc.context = obj_data.context
+            npc.camera = sr_entity_id( obj_data.cam )
             sr_ent_push( npc )
          #}
          elif ent_type == 'ent_cubemap':#{
@@ -3166,6 +3167,9 @@ class SR_OBJECT_ENT_GLIDER(bpy.types.PropertyGroup):#{
 class SR_OBJECT_ENT_NPC(bpy.types.PropertyGroup):#{
    au: bpy.props.IntProperty()
    context: bpy.props.IntProperty()
+   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_VOLUME(bpy.types.PropertyGroup):#{