X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=blender_export.py;h=ccad7bfcb04d001d45f56c083d8dc2f8b8d6262e;hb=409edea2cf6271956137918e4e0b4f1c2addf620;hp=515acd770322a82979dc1391b40b1a81aef3c62a;hpb=2a238d32da833812e837cf38e16a7685c98db5c3;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/blender_export.py b/blender_export.py index 515acd7..ccad7bf 100644 --- a/blender_export.py +++ b/blender_export.py @@ -2,7 +2,7 @@ # ============================================================================= # # Copyright . . . -----, ,----- ,---. .---. -# 2021-2022 |\ /| | / | | | | /| +# 2021-2023 |\ /| | / | | | | /| # | \ / | +-- / +----- +---' | / | # | \ / | | / | | \ | / | # | \/ | | / | | \ | / | @@ -255,6 +255,40 @@ class classtype_gate(Structure): #} #} +class classtype_nonlocal_gate(classtype_gate): +#{ + def encode_obj(_,node,node_def): + #{ + node.classtype = 300 + + obj = node_def['obj'] + _.target = encoder_process_pstr( node_def['obj'].cv_data.strp ) + + if obj.type == 'MESH': + #{ + _.dims[0] = obj.data.cv_data.v0[0] + _.dims[1] = obj.data.cv_data.v0[1] + _.dims[2] = obj.data.cv_data.v0[2] + #} + else: + #{ + _.dims[0] = obj.cv_data.v0[0] + _.dims[1] = obj.cv_data.v0[1] + _.dims[2] = obj.cv_data.v0[2] + #} + #} + + @staticmethod + def editor_interface( layout, obj ): + #{ + layout.prop( obj.cv_data, "strp", text="Nonlocal ID" ) + + mesh = obj.data + layout.label( text=F"(i) Data is stored in {mesh.name}" ) + layout.prop( mesh.cv_data, "v0", text="Gate dimensions" ) + #} +#} + # Classtype 3 # # Purpose: player can reset here, its a safe place @@ -771,6 +805,61 @@ class classtype_audio(Structure): #} #} +# Classtype 200 +# +# Purpose: point light +# +class classtype_point_light(Structure): +#{ + _pack_ = 1 + _fields_ = [("colour",c_float*4)] + + def encode_obj(_, node, node_def): + #{ + node.classtype = 200 + + data = node_def['obj'].data + _.colour[0] = data.color[0] + _.colour[1] = data.color[1] + _.colour[2] = data.color[2] + _.colour[3] = data.energy + #} + + @staticmethod + def editor_interface( layout, obj ): + #{ + pass + #} +#} + +# Classtype 201 +# +# Purpose: lighting settings for world +# +class classtype_lighting_info(Structure): +#{ + _pack_ = 1 + _fields_ = [("colours",(c_float*3)*3), + ("directions",(c_float*2)*3), + ("states",c_uint32*3), + ("shadow_spread",c_float), + ("shadow_length",c_float), + ("ambient",c_float*3)] + + def encode_obj(_, node, node_def): + #{ + node.classtype = 201 + + # TODO + #} + + @staticmethod + def editor_interface( layout, obj ): + #{ + pass + #} +#} + class classtype_spawn_link(Structure): #{ _pack_ = 1 @@ -1241,6 +1330,8 @@ def encoder_build_scene_graph( collection ): def _extend( p, n, d ): #{ + nonlocal collection + uid = _new_uid() tree = {} tree["uid"] = uid @@ -1249,7 +1340,7 @@ def encoder_build_scene_graph( collection ): tree["obj"] = n tree["parent"] = p n.cv_data.uid = uid - + # Descend into amature # if n.type == 'ARMATURE': @@ -1257,6 +1348,7 @@ def encoder_build_scene_graph( collection ): tree["bones"] = [None] # None is the root transform tree["ik_count"] = 0 tree["collider_count"] = 0 + tree["compile_animation"] = collection.cv_data.animations # Here also collects some information about constraints, ik and # counts colliders for the armature. @@ -1305,7 +1397,6 @@ def encoder_build_scene_graph( collection ): # for obj1 in n.children: #{ - nonlocal collection for c1 in obj1.users_collection: #{ if c1 == collection: @@ -1667,7 +1758,12 @@ def encoder_compile_armature( node, node_def ): # extra info node_def['anim_start'] = len(animdata) node_def['anim_count'] = 0 - + + if not node_def['compile_animation']: + #{ + return + #} + # Compile anims # if obj.animation_data: @@ -1809,6 +1905,11 @@ def encoder_process_definition( node_def ): if obj_type == 'ARMATURE': obj_classtype = 'classtype_skeleton' + elif obj_type == 'LIGHT': + #{ + if obj.data.type == 'POINT': + obj_classtype = 'classtype_point_light' + #} else: #{ obj_classtype = obj.cv_data.classtype @@ -2566,6 +2667,7 @@ class CV_OBJ_SETTINGS(bpy.types.PropertyGroup): ('classtype_logic_achievement',"classtype_logic_achievement","",101), ('classtype_logic_relay',"classtype_logic_relay","",102), ('classtype_spawn_link',"classtype_spawn_link","",150), + ('classtype_nonlocal_gate', "classtype_nonlocal_gate", "", 300) ]) #} @@ -2631,6 +2733,7 @@ class CV_SCENE_SETTINGS(bpy.types.PropertyGroup): class CV_COLLECTION_SETTINGS(bpy.types.PropertyGroup): #{ pack_textures: bpy.props.BoolProperty( name="Pack Textures", default=False ) + animations: bpy.props.BoolProperty( name="Export animation", default=True) #} class CV_MATERIAL_SETTINGS(bpy.types.PropertyGroup): @@ -2857,6 +2960,7 @@ class CV_INTERFACE(bpy.types.Panel): #{ box.label( text=col.name + ".mdl" ) box.prop( col.cv_data, "pack_textures" ) + box.prop( col.cv_data, "animations" ) box.operator( "carve.compile_this" ) #} else: