示例#1
0
 public void SetSettings(RoomLightingSettings start, RoomLightingSettings end)
 {
     blendTimer = 0f;
     RoomLightingSettings.Set(start, blendMaterial);
     currentSettings = start;
     goalSettings    = end;
 }
示例#2
0
 void Update()
 {
     if (blendTimer >= 0)
     {
         blendTimer += Time.deltaTime / blendTime;
         float amount = Mathf.SmoothStep(0, 1, blendTimer);
         RoomLightingSettings lerpedSettings = RoomLightingSettings.Lerp(currentSettings, goalSettings, amount);
         RoomLightingSettings.Set(lerpedSettings, blendMaterial);
         if (blendTimer > 1)
         {
             blendTimer = -1;
         }
     }
 }
示例#3
0
    //Create a new RoomLightingSettings which is lerped between the two specified RoomLightingSettings, by a 0-1 factor
    public static RoomLightingSettings Lerp(RoomLightingSettings start, RoomLightingSettings end, float lerp)
    {
        lerp = Mathf.Clamp(lerp, 0f, 1f);

        return(new RoomLightingSettings()
        {
            //no way to lerp this value, just snap when we're half-way
            fogEnabled = lerp < 0.5f ? start.fogEnabled : end.fogEnabled,
            //no way to lerp this value, just snap when we're half-way
            fogMode = lerp < 0.5f ? start.fogMode : end.fogMode,
            fogColor = Color.Lerp(start.fogColor, end.fogColor, lerp),
            cameraClearColor = Color.Lerp(start.cameraClearColor, end.cameraClearColor, lerp),
            fogDensity = Mathf.Lerp(start.fogDensity, end.fogDensity, lerp),
            fogStartDistance = Mathf.Lerp(start.fogDensity, end.fogDensity, lerp),
            fogEndDistance = Mathf.Lerp(start.fogEndDistance, end.fogEndDistance, lerp),
            pedestalBlend = lerp
        });
    }
示例#4
0
    //Hand off a RoomLightingSettings to set all of the corresponding RenderSettings fields with
    public static void Set(RoomLightingSettings settings, Material blendMaterial = null)
    {
        RenderSettings.fog              = settings.fogEnabled;
        RenderSettings.fogMode          = settings.fogMode;
        RenderSettings.fogColor         = settings.fogColor;
        RenderSettings.fogDensity       = settings.fogDensity;
        RenderSettings.fogStartDistance = settings.fogStartDistance;
        RenderSettings.fogEndDistance   = settings.fogEndDistance;

        if (Camera.main != null)
        {
            Camera.main.backgroundColor = settings.cameraClearColor;
        }

        if (blendMaterial != null)
        {
            blendMaterial.SetFloat("_TexBlend", settings.pedestalBlend);
        }
    }
示例#5
0
 void Start()
 {
     currentSettings       = RoomLightingSettings.CreateFromCurrentRoom();
     goalSettings          = currentSettings;
     originalBlendMaterial = new Material(blendMaterial);
 }
示例#6
0
    IEnumerator _LoadRoom_Inner(RoomDefinition room)
    {
        var previousScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();

        //get the lighting settings for the current scene
        _previousLightingSettings = RoomLightingSettings.CreateFromCurrentRoom();

        var loadOperation = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(room.scenePath, UnityEngine.SceneManagement.LoadSceneMode.Additive);

        while (!loadOperation.isDone)
        {
            yield return(new WaitForEndOfFrame());
        }

        //HACK-ish: do not break the "Assets/.../*.unity" convention for scenes
        //  For whatever reason, the naming is very particular for GetSceneByPath()
        var nextScene = UnityEngine.SceneManagement.SceneManager.GetSceneByPath("Assets/" + room.scenePath + ".unity");

        if (nextScene.IsValid())
        {
            _hasTransitionedLightingForCurrentRoom = false;
            UnityEngine.SceneManagement.SceneManager.SetActiveScene(nextScene);
            //get the lighting settings for the current room
            _currentLightingSettings = RoomLightingSettings.CreateFromCurrentRoom();
            RoomLightingSettings.Set(_previousLightingSettings, null);
        }
        else
        {
            _currentLightingSettings = _previousLightingSettings;
        }

        var allRoomManagers = FindObjectsOfType(typeof(BaseRoomManager));

        foreach (var obj in allRoomManagers)
        {
            if (obj != null && (obj is BaseRoomManager))
            {
                var man = (obj as BaseRoomManager);
                if (man != null && man.gameObject.scene.IsValid())
                {
                    if (man.gameObject.scene == nextScene)
                    {
                        _currentRoomManager = man;
                    }
                    else if (man.gameObject.scene == previousScene)
                    {
                        _previousRoomManager = man;
                    }
                }
            }
        }

        _currentRoom = room;

        if (_previousRoomManager != null && _currentRoomManager != null)
        {
            float originalRoomYPosition = _currentRoomManager.transform.position.y;
            _currentRoomManager.transform.position = Vector3.up * (_previousRoomManager.topPlane.transform.position.y + (_currentRoomManager.transform.position.y - _currentRoomManager.bottomPlane.transform.position.y));

            if (originalRoomYPosition != _currentRoomManager.transform.position.y)
            {
                UnityEngine.Debug.LogWarning("The Y-position for (" + _currentRoomManager.GetType().Name + ") does not correspond to its position as saved in the scene asset. The scene-manager will be moved, but objects marked as static may break.");
            }
        }
    }