imgui stuff
[carveJwlIkooP6JGAAIwe30JlM.git] / blender_export.py
index b533afee8927e6aa01a6b3ac6c70775b9c76cde9..73d17059d19fded822a9af16c95c818104bae03d 100644 (file)
@@ -30,7 +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_skateshop',    'Skate Shop',     '', 12 ),
+   ('ent_camera',       'Camera',         '', 13 )
 ]
 
 def get_entity_enum_id( alias ):
@@ -342,13 +343,21 @@ class ent_skateshop(Structure):
    _fields_ = [("transform",mdl_transform),
                ("id_display",c_uint32),
                ("id_info",c_uint32),
-               ("id_rack",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
 #}
 
@@ -458,6 +467,10 @@ cxr_graph_mapping = \
             "Color": material_tex_image("tex_normal")
          }
       }
+   },
+   "Emission":
+   {
+      "Color": material_tex_image("tex_diffuse")
    }
 }
 
@@ -966,7 +979,7 @@ def sr_compile_fonts( collection ):
       font.glyph_start = glyph_count
 
       glyph_base = data.glyphs[0].utf32
-      glyph_range = data.glyphs[-1].utf32 - glyph_base
+      glyph_range = data.glyphs[-1].utf32+1 - glyph_base
 
       font.glyph_utf32_base = glyph_base
       font.glyph_count = glyph_range
@@ -1370,6 +1383,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]
@@ -1498,6 +1517,7 @@ def sr_compile( collection ):
             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)
          #}
@@ -2393,7 +2413,8 @@ class SR_UL_FONT_GLYPH_LIST(bpy.types.UIList):
       s1 = c.split(factor=0.3)
       c = s1.column()
       row = c.row()
-      lbl = chr(item.utf32) if item.utf32 >= 32 and item.utf32 <= 126 else 'ERR'
+      lbl = chr(item.utf32) if item.utf32 >= 32 and item.utf32 <= 126 else \
+                                                              f'x{item.utf32:x}'
       row.label(text=lbl)
       c = s1.column()
       c.prop( item, 'utf32', text='', emboss=True )
@@ -2609,6 +2630,9 @@ class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup):
    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):
@@ -3585,7 +3609,7 @@ def cv_draw():
 
             rack_cu = Vector((3.15,2.0,0.1))*0.5
             rack_co = Vector((0.0,0.0,0.0))
-            display_cu = Vector((0.2,1.2,0.1))*0.5
+            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