public bool IsObjectLighted(LightInfo.ObjectLightedFlag type) { if (li != null) { return(li.IsObjectLighted(type)); } else if (liROM != null) { return(true); } else { return(true); } }
public void ApplySectorLighting(SectorComponent sector, GameObject gao, LightInfo.ObjectLightedFlag objectType) { if (objectType == LightInfo.ObjectLightedFlag.None) { if (gao) { List <Renderer> rs = gao.GetComponents <Renderer>().ToList(); foreach (Renderer r in rs) { if (r.sharedMaterial.shader.name.Contains("Gouraud") || r.sharedMaterial.shader.name.Contains("Texture Blend")) { r.material.SetFloat("_DisableLightingLocal", 1); } } rs = gao.GetComponentsInChildren <Renderer>(true).ToList(); foreach (Renderer r in rs) { if (r.sharedMaterial.shader.name.Contains("Gouraud") || r.sharedMaterial.shader.name.Contains("Texture Blend")) { r.material.SetFloat("_DisableLightingLocal", 1); } } } } else { if (sector == null) { return; } /*Sector s = sector.sector; * if (s == null) return;*/ if (sector.lights != null) { Vector4? fogColor = null; Vector4? fogParams = null; Vector4 ambientLight = Vector4.zero; List <Vector4> staticLightPos = new List <Vector4>(); List <Vector4> staticLightDir = new List <Vector4>(); List <Vector4> staticLightCol = new List <Vector4>(); List <Vector4> staticLightParams = new List <Vector4>(); for (int i = 0; i < sector.lights.Length; i++) { LightBehaviour lb = sector.lights[i]; //LightInfo li = lb.li; //if (li == null) continue; //if (!li.IsObjectLighted(objectType)) continue; //if (li.turnedOn == 0x0) continue; switch (lb.Type) { case 4: ambientLight += lb.Color; staticLightPos.Add(new Vector4(lb.transform.position.x, lb.transform.position.y, lb.transform.position.z, lb.Type)); staticLightDir.Add(lb.transform.TransformVector(Vector3.back)); staticLightCol.Add(lb.Color); staticLightParams.Add(new Vector4(lb.Near, lb.Far, lb.PaintingLightFlag, lb.AlphaLightFlag)); break; case 6: if (!fogColor.HasValue) { fogColor = lb.Color; fogParams = new Vector4(lb.FogBlendNear / 255f, lb.FogBlendFar / 255f, lb.Near, lb.Far); } break; default: staticLightPos.Add(new Vector4(lb.transform.position.x, lb.transform.position.y, lb.transform.position.z, lb.Type)); staticLightDir.Add(lb.transform.TransformVector(Vector3.back)); staticLightCol.Add(lb.Color); Vector3 scale = lb.transform.localScale; float maxScale = Mathf.Max(scale.x, scale.y, scale.z); staticLightParams.Add(new Vector4(lb.Near * maxScale, lb.Far * maxScale, lb.PaintingLightFlag, lb.AlphaLightFlag)); break; } } Vector4[] staticLightPosArray = staticLightPos.ToArray(); Vector4[] staticLightDirArray = staticLightDir.ToArray(); Vector4[] staticLightColArray = staticLightCol.ToArray(); Vector4[] staticLightParamsArray = staticLightParams.ToArray(); //print(staticLightPosArray.Length + " - " + objectType); if (gao) { List <Renderer> rs = gao.GetComponents <Renderer>().ToList(); foreach (Renderer r in rs) { if (r.sharedMaterial.shader.name.Contains("Gouraud") || r.sharedMaterial.shader.name.Contains("Texture Blend")) { MaterialPropertyBlock props = new MaterialPropertyBlock(); r.GetPropertyBlock(props); if (fogColor.HasValue) { props.SetVector("_SectorFog", fogColor.Value); } if (fogParams.HasValue) { props.SetVector("_SectorFogParams", fogParams.Value); } //r.material.SetVector("_SectorAmbient", ambientLight); props.SetFloat("_StaticLightCount", staticLightPosArray.Length); if (staticLightPosArray.Length > 0) { props.SetVectorArray("_StaticLightPos", staticLightPosArray); props.SetVectorArray("_StaticLightDir", staticLightDirArray); props.SetVectorArray("_StaticLightCol", staticLightColArray); props.SetVectorArray("_StaticLightParams", staticLightParamsArray); } r.SetPropertyBlock(props); } } rs = gao.GetComponentsInChildren <Renderer>(true).ToList(); foreach (Renderer r in rs) { if (r.sharedMaterial != null && (r.sharedMaterial.shader.name.Contains("Gouraud") || r.sharedMaterial.shader.name.Contains("Texture Blend"))) { MaterialPropertyBlock props = new MaterialPropertyBlock(); r.GetPropertyBlock(props); if (fogColor.HasValue) { props.SetVector("_SectorFog", fogColor.Value); } if (fogParams.HasValue) { props.SetVector("_SectorFogParams", fogParams.Value); } //r.material.SetVector("_SectorAmbient", ambientLight); props.SetFloat("_StaticLightCount", staticLightPosArray.Length); if (staticLightPosArray.Length > 0) { props.SetVectorArray("_StaticLightPos", staticLightPosArray); props.SetVectorArray("_StaticLightDir", staticLightDirArray); props.SetVectorArray("_StaticLightCol", staticLightColArray); props.SetVectorArray("_StaticLightParams", staticLightParamsArray); } r.SetPropertyBlock(props); } } } } } }