From d2457a5d45ca4ae6a56a35f9bc99061846eb61d8 Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 16 Apr 2022 08:56:21 +0100 Subject: [PATCH] non-hero props --- __init__.py | 78 ++++++++++++++++++++++++++++++++++++----------------- config.py | 4 +-- 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/__init__.py b/__init__.py index 06abec0..f874746 100644 --- a/__init__.py +++ b/__init__.py @@ -614,24 +614,38 @@ def ent_lights(context): 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 @@ -1636,19 +1650,37 @@ class CXR_COMPILER_CHAIN(bpy.types.Operator): 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 \ @@ -1703,15 +1735,13 @@ class CXR_COMPILER_CHAIN(bpy.types.Operator): # 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: diff --git a/config.py b/config.py index 9ac6b9f..51a4ca8 100644 --- a/config.py +++ b/config.py @@ -107,14 +107,14 @@ cxr_shader_params = \ "name": "Color", "type": "intrinsic", "default": None, - "exponent": 2.2 + "exponent": 1.0 }, "$color2": { "name": "Color2", "type": "intrinsic", "default": None, - "exponent": 2.2 + "exponent": 1.0 }, "Lighting": { -- 2.25.1