('ent_swspreview', 'Workshop Preview', '', 14 ),
('ent_menuitem', 'Menu Item', '', 15 ),
('ent_worldinfo', 'World Info', '', 16 ),
- ('ent_ccmd', 'CCmd', '', 17 )
+ ('ent_ccmd', 'CCmd', '', 17 ),
+ ('ent_challenge', 'Challenge', '', 18 )
]
def get_entity_enum_id( alias ):
_fields_ = [("pstr_command",c_uint32)]
#}
+class ent_challenge(Structure):#{
+ _fields_ = [("transform",mdl_transform),
+ ("submesh_start",c_uint32), ("submesh_count",c_uint32),
+ ("id_next",c_uint32),
+ ("filter",c_uint32)]
+#}
+
def obj_ent_type( obj ):
#{
if obj.type == 'ARMATURE': return 'mdl_armature'
if mat.SR_data.shader == 'boundary':#{
m.shader = 6
#}
+
+ if mat.SR_data.shader == 'fxglow':#{
+ m.shader = 7
+ #}
inf = material_info( mat )
if mat.SR_data.shader == 'standard' or \
mat.SR_data.shader == 'standard_cutout' or \
mat.SR_data.shader == 'terrain_blend' or \
- mat.SR_data.shader == 'vertex_blend':
- #{
+ mat.SR_data.shader == 'vertex_blend' or \
+ mat.SR_data.shader == 'fxglow': #{
if 'tex_diffuse' in inf:
m.tex_diffuse = sr_compile_texture(inf['tex_diffuse'])
#}
yield from _recurse_bone( b )
#}
-def sr_entity_id( obj ):
-#{
+def sr_entity_id( obj ):#{
+ if not obj: return 0
+
tipo = get_entity_enum_id( obj_ent_type(obj) )
index = sr_compile.entity_ids[ obj.name ]
if ent_type == 'ent_font': continue
if ent_type == 'ent_font_variant': continue
if ent_type == 'ent_menuitem': continue
+ if ent_type == 'ent_challenge': continue
#--------------------------
print( F'[SR] {i: 3}/{mesh_count} {obj.name:<40}', end='\r' )
ccmd.pstr_command = sr_compile_string( obj_data.command )
sr_ent_push( ccmd )
#}
+ elif ent_type == 'ent_challenge':#{
+ challenge = ent_challenge()
+ obj_data = obj.SR_data.ent_challenge[0]
+ challenge.id_next = sr_entity_id( obj_data.proxima )
+
+ compile_obj_transform( obj, challenge.transform )
+ challenge.submesh_start, challenge.submesh_count, _ = \
+ sr_compile_mesh_internal( obj )
+
+ sr_ent_push( challenge )
+ #}
#}
#}
command: bpy.props.StringProperty(name="Command Line")
#}
+class SR_OBJECT_ENT_CHALLENGE(bpy.types.PropertyGroup):#{
+ proxima: bpy.props.PointerProperty( \
+ type=bpy.types.Object, name="Next", \
+ poll=lambda self,obj: sr_filter_ent_type(obj,['ent_challenge']))
+ target: bpy.props.PointerProperty( \
+ type=bpy.types.Object, name="Target", \
+ poll=lambda self,obj: sr_filter_ent_type(obj,\
+ ['ent_audio','ent_ccmd']))
+#}
+
class SR_OBJECT_PROPERTIES(bpy.types.PropertyGroup):
#{
ent_gate: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_GATE)
ent_menuitem: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_MENU_ITEM)
ent_worldinfo: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_WORLD_INFO)
ent_ccmd: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_CCMD)
+ ent_challenge: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_CHALLENGE)
ent_type: bpy.props.EnumProperty(
name="Type",
('vertex_blend', "vertex_blend", ''),
('water',"water",''),
('invisible','Invisible',''),
- ('boundary','Boundary','')
+ ('boundary','Boundary',''),
+ ('fxglow','FX Glow',''),
])
surface_prop: bpy.props.EnumProperty(
cv_view_shader, 'LINES', \
{ "pos":cv_view_verts, "color":cv_view_colours })
- lines.draw( cv_view_shader )
+ if bpy.context.scene.SR_data.gizmos:
+ lines.draw( cv_view_shader )
cv_view_verts = []
cv_view_colours = []
p0 = center + (axis + vx*c0 + vy*s0).normalized() * size
p1 = center + (axis + vx*c1 + vy*s1).normalized() * size
- col0 = ( abs(c0), abs(s0), 0.0, 1.0 )
- col1 = ( abs(c1), abs(s1), 0.0, 1.0 )
+ col0 = ( abs(c0), abs(s0), 0.0 )
+ col1 = ( abs(c1), abs(s1), 0.0 )
cv_view_verts += [center, p0, p0, p1]
cv_view_colours += [ (0,0,0), col0, col0, col1 ]
SR_OBJECT_ENT_FONT,SR_OBJECT_ENT_TRAFFIC,SR_OBJECT_ENT_SKATESHOP,\
SR_OBJECT_ENT_WORKSHOP_PREVIEW,SR_OBJECT_ENT_MENU_ITEM,\
SR_OBJECT_ENT_WORLD_INFO,SR_OBJECT_ENT_CCMD,\
+ SR_OBJECT_ENT_CHALLENGE,\
\
SR_OBJECT_PROPERTIES, SR_LIGHT_PROPERTIES, SR_BONE_PROPERTIES,
SR_MESH_PROPERTIES, SR_MATERIAL_PROPERTIES \