return kvs
def ent_prop(context):
- kvs = {}
if isinstance( context['object'], bpy.types.Collection ):
- kvs['angles'] = [0,180,0]
- kvs['enablelightbounce'] = 1
- kvs['disableshadows'] = 0
- kvs['fademindist'] = -1
- kvs['fadescale'] = 1
- kvs['model'] = F"{asset_path('models',context['object'])}.mdl".lower()
- kvs['renderamt'] = 255
- kvs['rendercolor'] = [255, 255, 255]
- kvs['skin'] = 0
- kvs['solid'] = 6
- kvs['uniformscale'] = 1.0
-
+ kvs = {}
+ target = context['object']
pos = mathutils.Vector(context['origin'])
pos += mathutils.Vector(context['transform']['offset'])
kvs['origin'] = [pos[1],-pos[0],pos[2]]
+ kvs['angles'] = [0,180,0]
+ else:
+ kvs = cxr_baseclass([ent_origin],{})
+ target = context['object'].instance_collection
+
+ obj = context['object']
+ euler = [ a*57.295779513 for a in obj.rotation_euler ]
+ angle = [0,0,0]
+ angle[0] = euler[1]
+ angle[1] = euler[2] + 180.0 # Dunno...
+ angle[2] = euler[0]
+
+ kvs['angles'] = angle
+
+
+ kvs['enablelightbounce'] = 1
+ kvs['disableshadows'] = 0
+ kvs['fademindist'] = -1
+ kvs['fadescale'] = 1
+ kvs['model'] = F"{asset_path('models',target)}.mdl".lower()
+ kvs['renderamt'] = 255
+ kvs['rendercolor'] = [255, 255, 255]
+ kvs['skin'] = 0
+ kvs['solid'] = 6
+ kvs['uniformscale'] = 1.0
return kvs
print( F"Vertex shader {errmat} used on {errnam}")
return {'CANCELLED'}
+ a_models = set()
+ model_jobs = []
for ent in sceneinfo['entities']:
if ent['object'] == None: continue
- if isinstance(ent['object'],bpy.types.Collection): continue
- if ent['object'].type == 'MESH':
+ if ent['classname'] == 'prop_static':
+ obj = ent['object']
+ if isinstance(obj,bpy.types.Collection):
+ target = obj
+ a_models.add( target )
+ model_jobs += [(target, ent['origin'], asset_dir, \
+ settings.project_name, ent['transform'])]
+ else:
+ target = obj.instance_collection
+ if target in a_models:
+ continue
+ a_models.add( target )
+
+ # TODO: Should take into account collection instancing offset
+ model_jobs += [(target, [0,0,0], asset_dir, \
+ settings.project_name, ent['transform'])]
+
+ elif ent['object'].type == 'MESH':
for ms in ent['object'].material_slots:
a_materials.add( ms.material )
-
- # TODO.. this should just be in the entity loop
- for hero in sceneinfo['heros']:
- uid = asset_uid(hero['collection'])
+
+ for mdl in a_models:
+ uid = asset_uid(mdl)
qc_jobs += [F'{uid}.qc']
- for obj in hero['collection'].objects:
+
+ for obj in mdl.objects:
for ms in obj.material_slots:
a_materials.add( ms.material )
if ms.material.cxr_data.shader == 'LightMappedGeneric' or \
# FBX stage
if settings.comp_models:
- if len(sceneinfo['heros']) > 0:
+ if len(model_jobs) > 0:
static.JOBINFO += [{
"title": "Batches",
"w": 25,
"colour": (0.5,0.5,1.0,1.0),
"exec": cxr_export_modelsrc,
- "jobs": [(h['collection'], h['origin'], asset_dir, \
- settings.project_name, h['transform']) for h in \
- sceneinfo['heros']]
+ "jobs": model_jobs
}]
if len(qc_jobs) > 0: