Example #1
0
    private void UpdateBackground()
    {
        // Update background color or material
        Color?          backgroundColor        = null;
        VisualMaterial  skyMaterial            = null;
        SectorComponent activeBackgroundSector = null;

        if (MapLoader.Loader.globals != null && MapLoader.Loader.globals.backgroundGameMaterial != null && MapLoader.Loader.globals.backgroundGameMaterial.visualMaterial != null)
        {
            skyMaterial = MapLoader.Loader.globals.backgroundGameMaterial.visualMaterial;
        }
        else
        {
            if (sectorManager != null && sectorManager.sectors != null && sectorManager.sectors.Count > 0)
            {
                foreach (SectorComponent s in sectorManager.sectors)
                {
                    if (!s.Loaded)
                    {
                        continue;
                    }
                    if (s.sector == null)
                    {
                        continue;
                    }
                    if (s.sector.skyMaterial != null && s.sector.skyMaterial.textures.Count > 0 && s.sector.skyMaterial.textures.Where(t => t.texture != null).Count() > 0)
                    {
                        skyMaterial            = s.sector.skyMaterial;
                        activeBackgroundSector = s;
                        break;
                    }
                    else
                    {
                        if (!s.Active)
                        {
                            continue;
                        }
                        foreach (LightInfo li in s.sector.staticLights)
                        {
                            if (li.type == 6)
                            {
                                backgroundColor = li.background_color;
                                break;
                            }
                        }
                    }
                }
            }
        }
        if (skyMaterial != null && !controller.viewCollision)
        {
            backgroundPanel.gameObject.SetActive(true);
            if (backgroundMaterial != skyMaterial)
            {
                backgroundMaterial = skyMaterial;
                Material skyboxMat = skyMaterial.GetMaterial();
                backgroundPanel.sharedMaterial = skyboxMat;
            }
            //skyboxMat.SetFloat("_DisableLighting", 1f);
            backgroundPanel.sharedMaterial.SetFloat("_DisableLightingLocal", 1f);
            if (activeBackgroundSector != null)
            {
                if (activeBackgroundSector != previousActiveBackgroundSector)
                {
                    //backgroundPanel.material.SetFloat("_DisableLightingLocal", 0f);
                    sectorManager.ApplySectorLighting(activeBackgroundSector, backgroundPanel.gameObject, LightInfo.ObjectLightedFlag.Environment);
                    previousActiveBackgroundSector = activeBackgroundSector;
                }
            }
            else
            {
                //backgroundPanel.material.SetFloat("_DisableLighting", 1f);
            }
            //RenderSettings.skybox = skyboxMat;
            //Camera.main.clearFlags = CameraClearFlags.Skybox;
        }
        else
        {
            backgroundPanel.gameObject.SetActive(false);
            //RenderSettings.skybox = null;
            //Camera.main.clearFlags = CameraClearFlags.SolidColor;
        }
        if (backgroundColor.HasValue && !controller.viewCollision)
        {
            Camera.main.backgroundColor = backgroundColor.Value;
            //Camera.main.backgroundColor = Color.Lerp(Camera.main.backgroundColor, backgroundColor.Value, 0.5f * Time.deltaTime);
        }
        else
        {
            Camera.main.backgroundColor = Color.black;
            //Camera.main.backgroundColor = Color.Lerp(Camera.main.backgroundColor, Color.black, 0.5f * Time.deltaTime);
        }
    }