server status lever and display
[carveJwlIkooP6JGAAIwe30JlM.git] / blender_export.py
index 4b7cf7f0441809e5bed7a87c52dce3ab4dced40d..8b0bd104b88aef9a9ab0a9b747423b6a0810181d 100644 (file)
@@ -382,17 +382,24 @@ class ent_skateshop_worlds(Structure):
    _fields_ = [("id_display",c_uint32),
                ("id_info",c_uint32)]
 #}
+class ent_skateshop_server(Structure):
+#{
+   _fields_ = [("id_lever",c_uint32)]
+#}
 class ent_skateshop_anon_union(Union):
 #{
    _fields_ = [("boards",ent_skateshop_boards),
                ("character",ent_skateshop_characters),
-               ("worlds",ent_skateshop_worlds)]
+               ("worlds",ent_skateshop_worlds),
+               ("server",ent_skateshop_server)]
 #}
 class ent_skateshop(Structure):
 #{
    _fields_ = [("transform",mdl_transform), ("type",c_uint32),
                ("id_camera",c_uint32), 
                ("_anonymous_union",ent_skateshop_anon_union)]
+
+   sr_functions = { 0: 'trigger' }
 #}
 
 class ent_swspreview(Structure):
@@ -910,6 +917,10 @@ def sr_compile_material( mat ):#{
          m.tex_diffuse = sr_compile_texture(inf['tex_diffuse'])
    #}
 
+   if mat.SR_data.tex_diffuse_rt >= 0:#{
+      m.tex_diffuse = 0x80000000 | mat.SR_data.tex_diffuse_rt
+   #}
+
    sr_compile.material_data.extend( bytearray(m) )
    return index
 #}
@@ -1851,7 +1862,10 @@ 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
+
+               ev = 0xffffffff if obj_data.target_event_leave < 0 else \
+                     obj_data.target_event_leave
+               volume._anon.trigger.event_leave = ev
             #}
 
             sr_ent_push(volume)
@@ -1882,6 +1896,10 @@ def sr_compile( collection ):
                worldshop.id_display = sr_entity_id( obj_data.mark_display )
                worldshop.id_info = sr_entity_id( obj_data.mark_info )
             #}
+            elif skateshop.type == 3:#{
+               server = skateshop._anonymous_union.server
+               server.id_lever = sr_entity_id( obj_data.mark_display )
+            #}
             skateshop.id_camera = sr_entity_id( obj_data.cam )
             compile_obj_transform( obj, skateshop.transform )
             sr_ent_push(skateshop)
@@ -2499,6 +2517,7 @@ class SR_MATERIAL_PANEL(bpy.types.Panel):
       _.layout.prop( active_mat.SR_data, "shader" )
       _.layout.prop( active_mat.SR_data, "surface_prop" )
       _.layout.prop( active_mat.SR_data, "collision" )
+      _.layout.prop( active_mat.SR_data, "tex_diffuse_rt" )
 
       if active_mat.SR_data.collision:#{
          box = _.layout.box()
@@ -2978,7 +2997,7 @@ class SR_OBJECT_ENT_VOLUME(bpy.types.PropertyGroup):#{
            type=bpy.types.Object, name="Target", \
            poll=lambda self,obj: sr_filter_ent_type(obj,SR_TRIGGERABLE))
    target_event: bpy.props.IntProperty( name="Enter Ev" )
-   target_event_leave: bpy.props.IntProperty( name="Leave Ev" )
+   target_event_leave: bpy.props.IntProperty( name="Leave Ev", default=-1 )
 
    @staticmethod
    def inspect_target( layout, data, propname, evs = ['_event'] ):#{
@@ -3162,7 +3181,8 @@ class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup):
    tipo: bpy.props.EnumProperty( name='Type',
                                  items=[('0','boards',''),
                                         ('1','character',''),
-                                        ('2','world','')] )
+                                        ('2','world',''),
+                                        ('4','server','')] )
    mark_rack: bpy.props.PointerProperty( \
            type=bpy.types.Object, name="Board Rack", \
            poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker']))
@@ -3171,7 +3191,8 @@ class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup):
            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']))
+           poll=lambda self,obj: sr_filter_ent_type(obj,\
+           ['ent_marker','ent_prop']))
    cam: bpy.props.PointerProperty( \
            type=bpy.types.Object, name="Viewpoint", \
            poll=lambda self,obj: sr_filter_ent_type(obj,['ent_camera']))
@@ -3583,6 +3604,8 @@ class SR_MATERIAL_PROPERTIES(bpy.types.PropertyGroup):
    cubemap: bpy.props.PointerProperty( \
                type=bpy.types.Object, name="cubemap", \
                poll=lambda self,obj: sr_filter_ent_type(obj,['ent_cubemap']))
+
+   tex_diffuse_rt: bpy.props.IntProperty( name="diffuse: RT index", default=-1 )
 #}
 
 # ---------------------------------------------------------------------------- #
@@ -4503,6 +4526,11 @@ def cv_draw():#{
                display = None
                info = None
             #}
+            elif data.tipo == '4':#{
+               rack = None
+               display = None
+               info = None
+            #}
 
             if rack:
                cv_draw_ucube( rack.matrix_world, cc, rack_cu, rack_co )