public static void Postfix(BuildingInfoSub __instance) { if (__instance.m_lodMesh != null) { var lodTogglerFactor = TrueLodTogglerMod.ActiveConfig.BuildingLodDistance / 1000f; __instance.m_minLodDistance *= lodTogglerFactor; __instance.m_maxLodDistance *= lodTogglerFactor; } }
public static bool Prefix(BuildingAI __instance, RenderManager.CameraInfo cameraInfo, ushort buildingID, ref Building data, int layerMask, ref RenderManager.Instance instance) { __instance.m_info.m_rendered = true; if (__instance.m_info.m_mesh != null) { BuildingAI.RenderMesh(cameraInfo, buildingID, ref data, __instance.m_info, ref instance); } if (__instance.m_info.m_subMeshes != null) { for (int i = 0; i < __instance.m_info.m_subMeshes.Length; i++) { BuildingInfo.MeshInfo meshInfo = __instance.m_info.m_subMeshes[i]; if (((meshInfo.m_flagsRequired | meshInfo.m_flagsForbidden) & data.m_flags) == meshInfo.m_flagsRequired) { BuildingInfoSub buildingInfoSub = meshInfo.m_subInfo as BuildingInfoSub; buildingInfoSub.m_rendered = true; if (buildingInfoSub.m_subMeshes != null && buildingInfoSub.m_subMeshes.Length != 0) { for (int j = 0; j < buildingInfoSub.m_subMeshes.Length; j++) { BuildingInfo.MeshInfo meshInfo2 = buildingInfoSub.m_subMeshes[j]; if (((meshInfo2.m_flagsRequired | meshInfo2.m_flagsForbidden) & data.m_flags) == meshInfo2.m_flagsRequired) { BuildingInfoSub buildingInfoSub2 = meshInfo2.m_subInfo as BuildingInfoSub; buildingInfoSub2.m_rendered = true; BuildingAI.RenderMesh(cameraInfo, __instance.m_info, buildingInfoSub2, meshInfo.m_matrix, ref instance); } } } else { BuildingAI.RenderMesh(cameraInfo, __instance.m_info, buildingInfoSub, meshInfo.m_matrix, ref instance); } } } } return(false); }
internal ManagedAsset(BuildingInfoSub asset) { TypeOfAsset = AssetType.SubBuilding; SubBuilding = asset; Info = new ShaderInfo(asset.m_mesh.name, nameof(BuildingInfoSub), asset.name); backup_lodHasDifferentShader = asset.m_lodHasDifferentShader; backup_InvFade = asset.m_material.GetFloat("_InvFade"); backup_meshColors = asset.m_mesh.colors; backup_maxLodDistance = asset.m_maxLodDistance; backup_minLodDistance = asset.m_minLodDistance; asset.m_lodHasDifferentShader = false; asset.m_material.SetFloat("_InvFade", Info.Fade); asset.m_mesh.colors = GetMeshColors(asset.m_mesh.vertexCount); CachedRenderDistance = GetRenderDistance(asset.m_generatedInfo.m_size); ApplyCachedRenderDistance(); SetVisible(Info.IsAlwaysOn, FORCE_UPDATE); }
/// <summary> /// Initializes a new instance of the <see cref="SubMeshInfo"/> class. /// </summary> /// <param name="prefab">The prefab.</param> public SubMeshInfo(BuildingInfoSub prefab) : base(prefab) { }