non-hero props
authorhgn <hgodden00@gmail.com>
Sat, 16 Apr 2022 07:56:21 +0000 (08:56 +0100)
committerhgn <hgodden00@gmail.com>
Sat, 16 Apr 2022 07:56:21 +0000 (08:56 +0100)
__init__.py
config.py

index 06abec08bd453a79936d117129a203d42d6e153f..f8747467157eb627bba10d62dffc6d63fcc32a66 100644 (file)
@@ -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:
index 9ac6b9f323cc01c08b1a063c6d023053076599e6..51a4ca8969a4eeced464bd8a0e32c2afc78c01ac 100644 (file)
--- 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":
    {