Beispiel #1
0
    void CheckCameraInWater()
    {
        if (m_Player != null && m_Player.m_Room != null && m_Player.m_SwimState != SwimmingState.None)
        {
            float    water_level = m_Player.m_Room.GetCenterPoint().y;
            Bounds   b           = m_Player.m_Room.GetBound();
            Material room_mat    = LevelManager.GetSharedMaterial();

            if (b.Contains(m_CameraTransform.position) && !m_bCameraInWater)
            {
                //Debug.Log("Camera In Water");
                //if(room_mat.color != water_color)
                //{
                //room_mat.color = water_color;
                //}

                DayNightSystem.SetAmbientTint(1);
                //do following shader update on entering water

                room_mat.SetFloat("_InSideWater", 1);
                room_mat.SetFloat("_WaterPlaneY", water_level);

                LevelManager.UpdateWaterHolderMaterials(1);
                m_bCameraInWater = true;
                if (m_SoundManager != null)
                {
                    m_SoundManager.PlayUnderWaterAmbient(m_bCameraInWater);
                }
            }

            if (m_CameraTransform.position.y > water_level && m_bCameraInWater)
            {
                //if(room_mat.color != Color.white)
                //{
                //room_mat.color = Color.white;
                //}

                DayNightSystem.SetAmbientTint(0);

                //do following shader update on exiting water
                room_mat.SetFloat("_InSideWater", 0);
                LevelManager.UpdateWaterHolderMaterials(0);

                m_bCameraInWater = false;
                if (m_SoundManager != null)
                {
                    m_SoundManager.PlayUnderWaterAmbient(m_bCameraInWater);
                }
            }
        }
    }