('ent_skateshop', 'Skate Shop', '', 12 ),
('ent_camera', 'Camera', '', 13 ),
('ent_swspreview', 'Workshop Preview', '', 14 ),
- ('ent_menuitem', 'Menu Item', '', 15 )
+ ('ent_menuitem', 'Menu Item', '', 15 ),
+ ('ent_worldinfo', 'World Info', '', 16 ),
+ ('ent_ccmd', 'CCmd', '', 17 )
]
def get_entity_enum_id( alias ):
#{
_fields_ = [("type",c_uint32),
("target", c_uint32),
+ ("key",c_uint32),
("dimensions", c_float*3),
("co", (c_float*3)*2),
("q", (c_float*4)*2),
("index",c_uint32)]
#}
-class ent_skateshop(Structure):
+# Skateshop
+# ---------------------------------------------------------------
+class ent_skateshop_characters(Structure):
#{
- _fields_ = [("transform",mdl_transform),
- ("id_display",c_uint32),
+ _fields_ = [("id_display",c_uint32),
+ ("id_info",c_uint32)]
+#}
+class ent_skateshop_boards(Structure):
+#{
+ _fields_ = [("id_display",c_uint32),
("id_info",c_uint32),
- ("id_rack",c_uint32),
- ("id_camera",c_uint32)]
+ ("id_rack",c_uint32)]
+#}
+class ent_skateshop_worlds(Structure):
+#{
+ _fields_ = [("id_display",c_uint32),
+ ("id_info",c_uint32)]
+#}
+class ent_skateshop_anon_union(Union):
+#{
+ _fields_ = [("boards",ent_skateshop_boards),
+ ("character",ent_skateshop_characters),
+ ("worlds",ent_skateshop_worlds)]
+#}
+class ent_skateshop(Structure):
+#{
+ _fields_ = [("transform",mdl_transform), ("type",c_uint32),
+ ("id_camera",c_uint32),
+ ("_anonymous_union",ent_skateshop_anon_union)]
#}
class ent_swspreview(Structure):
("id_display1",c_uint32)]
#}
+# Menu
+# -----------------------------------------------------------------
class ent_menuitem_slider(Structure):
#{
_fields_ = [("id_min",c_uint32),
("id_handle",c_uint32),
("pstr_data",c_uint32)]
#}
-
class ent_menuitem_button(Structure):
#{
_fields_ = [("pstr",c_uint32)]
#}
-
class ent_menuitem_checkmark(Structure):
#{
_fields_ = [("id_check",c_uint32),
("pstr_data",c_uint32),
("offset",c_float*3)]
#}
-
class ent_menuitem_page(Structure):
#{
_fields_ = [("pstr_name",c_uint32),
("id_entrypoint",c_uint32),
("id_viewpoint",c_uint32)]
#}
-
class ent_menuitem_anon_union(Union):
#{
_fields_ = [("slider",ent_menuitem_slider),
("checkmark",ent_menuitem_checkmark),
("page",ent_menuitem_page)]
#}
-
class ent_menuitem(Structure):
#{
_fields_ = [("type",c_uint32), ("groups",c_uint32),
("fov",c_float)]
#}
+class ent_worldinfo(Structure):
+#{
+ _fields_ = [("pstr_name",c_uint32),
+ ("pstr_author",c_uint32), # unused
+ ("pstr_desc",c_uint32), # unused
+ ("timezone",c_float)]
+#}
+
+class ent_ccmd(Structure):
+#{
+ _fields_ = [("pstr_command",c_uint32)]
+#}
+
def obj_ent_type( obj ):
#{
if obj.type == 'ARMATURE': return 'mdl_armature'
if mat.SR_data.skate_surface: flags |= 0x1
if mat.SR_data.grow_grass: flags |= 0x4
if mat.SR_data.grind_surface: flags |= 0x8
+ if mat.SR_data.preview_visibile: flags |= 0x40
#}
if mat.SR_data.shader == 'invisible': flags |= 0x10
if mat.SR_data.shader == 'boundary': flags |= (0x10|0x20)
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'])
#}
#}
#}
elif obj_data.tipo == 'nonlocal':#{
- gate.target = sr_compile_string(obj_data.key)
+ gate.target = 0
+ gate.key = sr_compile_string(obj_data.key)
gate.type = 2
#}
else: gate.type = 0
elif ent_type == 'ent_skateshop':#{
skateshop = ent_skateshop()
obj_data = obj.SR_data.ent_skateshop[0]
- 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.type = int(obj_data.tipo)
+ if skateshop.type == 0:#{
+ boardshop = skateshop._anonymous_union.boards
+ boardshop.id_display = sr_entity_id( obj_data.mark_display )
+ boardshop.id_info = sr_entity_id( obj_data.mark_info )
+ boardshop.id_rack = sr_entity_id( obj_data.mark_rack )
+ #}
+ elif skateshop.type == 1:#{
+ charshop = skateshop._anonymous_union.character
+ charshop.id_display = sr_entity_id( obj_data.mark_display )
+ charshop.id_info = sr_entity_id( obj_data.mark_info )
+ #}
+ elif skateshop.type == 2:#{
+ worldshop = skateshop._anonymous_union.worlds
+ worldshop.id_display = sr_entity_id( obj_data.mark_display )
+ worldshop.id_info = sr_entity_id( obj_data.mark_info )
+ #}
skateshop.id_camera = sr_entity_id( obj_data.cam )
compile_obj_transform( obj, skateshop.transform )
sr_ent_push(skateshop)
workshop_preview.id_camera = sr_entity_id( obj_data.cam )
sr_ent_push( workshop_preview )
#}
+ elif ent_type == 'ent_worldinfo':#{
+ worldinfo = ent_worldinfo()
+ obj_data = obj.SR_data.ent_worldinfo[0]
+ worldinfo.pstr_name = sr_compile_string( obj_data.name )
+ worldinfo.pstr_author = sr_compile_string( obj_data.author )
+ worldinfo.pstr_desc = sr_compile_string( obj_data.desc )
+ worldinfo.timezone = obj_data.timezone
+ sr_ent_push( worldinfo )
+ #}
+ elif ent_type == 'ent_ccmd':#{
+ ccmd = ent_ccmd()
+ obj_data = obj.SR_data.ent_ccmd[0]
+ ccmd.pstr_command = sr_compile_string( obj_data.command )
+ sr_ent_push( ccmd )
+ #}
#}
#}
path = F"{folder}{collection.name}.mdl"
print( path )
+ os.makedirs(os.path.dirname(path),exist_ok=True)
fp = open( path, "wb" )
header = mdl_header()
header.version = 101
row.prop( active_mat.SR_data, "skate_surface" )
row.prop( active_mat.SR_data, "grind_surface" )
row.prop( active_mat.SR_data, "grow_grass" )
+ row.prop( active_mat.SR_data, "preview_visibile" )
#}
#}
target: bpy.props.PointerProperty( \
type=bpy.types.Object, name="Target", \
poll=lambda self,obj: sr_filter_ent_type(obj,\
- ['ent_audio','ent_skateshop']))
+ ['ent_audio','ent_skateshop','ent_ccmd']))
@staticmethod
def sr_inspector( layout, data ):
box.prop( data[0], 'flag_loop' )
box.prop( data[0], 'flag_auto' )
+ layout.prop( data[0], 'probability_curve' )
+
split = layout.split(factor=0.7)
c = split.column()
c.label( text='Filepath' )
c = split.column()
- c.label( text='Chance (0.1s)' )
-
- layout.prop( data[0], 'probability_curve' )
-
+ c.label( text='Chance' )
layout.template_list('SR_UL_AUDIO_LIST', 'Files', \
- data[0], 'files', data[0], 'file_index', rows=5)
+ data[0], 'files', data[0], 'files_index', rows=5)
row = layout.row()
row.operator( 'skaterift.al_new_entry', text='Add' )
class SR_OBJECT_ENT_SKATESHOP(bpy.types.PropertyGroup):
#{
+ tipo: bpy.props.EnumProperty( name='Type',
+ items=[('0','boards',''),
+ ('1','character',''),
+ ('2','world','')] )
mark_rack: bpy.props.PointerProperty( \
type=bpy.types.Object, name="Board Rack", \
poll=lambda self,obj: sr_filter_ent_type(obj,['ent_marker']))
#}
#}
+class SR_OBJECT_ENT_WORLD_INFO(bpy.types.PropertyGroup):
+#{
+ name: bpy.props.StringProperty(name="Name")
+ desc: bpy.props.StringProperty(name="Description")
+ author: bpy.props.StringProperty(name="Author")
+ timezone: bpy.props.FloatProperty(name="Timezone(hrs) (UTC0 +hrs)")
+#}
+
+class SR_OBJECT_ENT_CCMD(bpy.types.PropertyGroup):
+#{
+ command: bpy.props.StringProperty(name="Command Line")
+#}
+
class SR_OBJECT_PROPERTIES(bpy.types.PropertyGroup):
#{
ent_gate: bpy.props.CollectionProperty(type=SR_OBJECT_ENT_GATE)
ent_swspreview: \
bpy.props.CollectionProperty(type=SR_OBJECT_ENT_WORKSHOP_PREVIEW)
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_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(
default=False,\
description = "Spawn grass sprites on this surface?" \
)
+ preview_visibile: bpy.props.BoolProperty( \
+ name="Preview visibile", \
+ default=True,\
+ description = "Show this material in preview models?" \
+ )
blend_offset: bpy.props.FloatVectorProperty( \
name="Blend Offset", \
size=2, \
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 ]
#}
#}
elif ent_type == 'ent_skateshop':#{
- cc = (0.0,0.9,0.6)
- cc1 = (0.4,0.9,0.2)
- cc2 = (0.9,0.6,0.1)
-
data = obj.SR_data.ent_skateshop[0]
display = data.mark_display
info = data.mark_info
- rack = data.mark_rack
- rack_cu = Vector((3.15,2.0,0.1))*0.5
- rack_co = Vector((0.0,0.0,0.0))
- 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
+ if data.tipo == '0':#{
+ cc = (0.0,0.9,0.6)
+ cc1 = (0.4,0.9,0.2)
+ cc2 = (0.9,0.6,0.1)
+
+ rack = data.mark_rack
+
+ rack_cu = Vector((3.15,2.0,0.1))*0.5
+ rack_co = Vector((0.0,0.0,0.0))
+ 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
+ #}
+ elif data.tipo == '1':#{
+ rack = None
+ cc1 = (1.0,0.0,0.0)
+ cc2 = (1.0,0.5,0.0)
+ display_cu = Vector((0.4,0.4,2.0))*0.5
+ display_co = Vector((0.0,0.0,1.0))*0.5
+ info_cu = Vector((1.2,0.01,0.3))*0.5
+ info_co = Vector((0.0,0.0,0.0))*0.5
+ #}
+ elif data.tipo == '2':#{
+ rack = None
+ cc1 = (1.0,0.0,0.0)
+ cc2 = (1.0,0.5,0.0)
+ display_cu = Vector((1.0,1.0,0.5))*0.5
+ display_co = Vector((0.0,0.0,0.5))*0.5
+ info_cu = Vector((1.2,0.01,0.3))*0.5
+ info_co = Vector((0.0,0.0,0.0))*0.5
+ #}
if rack:
cv_draw_ucube( rack.matrix_world, cc, rack_cu, rack_co )
SR_UL_FONT_VARIANT_LIST,SR_UL_FONT_GLYPH_LIST,\
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_PROPERTIES, SR_LIGHT_PROPERTIES, SR_BONE_PROPERTIES,
SR_MESH_PROPERTIES, SR_MATERIAL_PROPERTIES \