internal static void PatchSceneDecals() { GameObject[] rObjs = RCUtils.GetRootObjects().ToArray(); foreach (GameObject rootObj in rObjs) { MeshRenderer childRenderer = rootObj.GetComponent <MeshRenderer>(); MeshRenderer[] allRenderers = rootObj.GetComponentsInChildren <MeshRenderer>(); allRenderers.Add(childRenderer); foreach (MeshRenderer renderer in allRenderers) { if (renderer.gameObject.name.ToLower().Contains("decal-")) { renderer.receiveShadows = true; qd_Decal decal = renderer.GetComponent <qd_Decal>(); if (decal != null && (decal.texture.name.StartsWith("FX_DebrisPaper") || decal.texture.name.StartsWith("FX_DebrisMail") || decal.texture.name.StartsWith("FX_DebriPaper"))) { BreakDownDefinition bdDef = new BreakDownDefinition { filter = "Paper", minutesToHarvest = 1f, sound = "Paper" }; PrepareGameObject(renderer.gameObject, bdDef); } continue; } } } //BreakDown.DeserializeAllAdditive(sceneBreakDownData); }
//Item preparation - searches every object that appears on the config file internal static void PatchSceneObjects() { if (objList == null) { return; } //Get list of all root objects List <GameObject> rObjs = RCUtils.GetRootObjects(); //Results container List <GameObject> result = new List <GameObject>(); //Clear object list itemList.Clear(); int setupObjects = 0; //Iterate over obj config list foreach (BreakDownDefinition obj in objList) { if (obj.filter.Trim() == "" || obj.filter == null) { continue; } foreach (GameObject rootObj in rObjs) { RCUtils.GetChildrenWithName(rootObj, "OBJ_" + obj.filter, result); if (result.Count > 0) { foreach (GameObject child in result) { if (child != null && !child.name.Contains("xpzclutter") && child.GetComponent("RepairableContainer") == null) { child.name += "_xpzclutter"; PrepareGameObject(child, obj); setupObjects++; if (verbose) { Debug.Log("[remove-clutter] Added: " + child.name); } } } } } } Debug.Log("[remove-clutter] " + setupObjects + " objects setup for removal."); //BreakDown.DeserializeAllAdditive(sceneBreakDownData); }