Example #1
0
 private static VrMode ValidateVrMode(VrMode mode)
 {
     if (mode == VrMode.Oculus && !VRDevice.isPresent)
     {
         Debug.LogError("Oculus mode selected, but Oculus Rift was not found.");
         mode = VrMode.None;
     }
     else if (mode == VrMode.OpenVr && !OpenVR.IsHmdPresent())
     {
         Debug.LogError("OpenVR mode selected, but HTC Vive was not found.");
         mode = VrMode.None;
     }
     return(mode);
 }
Example #2
0
    public ICameraRig CreateCameraRig(VrMode mode, DependencyContainer dependencyContainer)
    {
        _vrMode = mode;

        var prefab = _rigPrefabs[(int)mode];

        prefab.SetActive(false);
        var cameraRig = Instantiate(prefab, new Vector3(0f, 0f, -6f), Quaternion.identity);

        prefab.SetActive(true);

        _rig = cameraRig.GetComponent <ICameraRig>();
        _rig.Initialize();

        DependencyInjector.Default.Inject(cameraRig, dependencyContainer);
        cameraRig.SetActive(true);

        // VectorLine.SetCamera3D(_rig.GetMainCamera()); // Todo: Replace Vectrocity

        return(_rig);
    }
Example #3
0
    private static ICursor CreateCursor(VrMode mode, Camera camera)
    {
        ICursor cursor;

        switch (mode)
        {
        case VrMode.None:
            cursor = new MouseCursor(camera);
            break;

        case VrMode.Oculus:
            cursor = NoOpCursor.Default;
            break;

        case VrMode.OpenVr:
            cursor = NoOpCursor.Default;
            break;

        default:
            throw new ArgumentOutOfRangeException("mode", mode, null);
        }
        return(cursor);
    }
    // Todo: Why is this called *before* it is called the first time in VoloModule?
    public void ApplySettings(GameSettings settings, VrMode vrMode)
    {
        if (!_isRunOnce)
        {
            if (!QualitySettings.names[QualitySettings.GetQualityLevel()].Equals("Fantastic"))
            {
                for (int i = 0; i < QualitySettings.names.Length; i++)
                {
                    var qualityLevel = QualitySettings.names[i];
                    if (qualityLevel.Equals("Fantastic"))
                    {
                        QualitySettings.SetQualityLevel(i, applyExpensiveChanges: true);
                    }
                }
            }
            _configurableSystems.ActiveLanguage.SetLanguage(CultureCode.FromString(settings.Other.Language));

            _isRunOnce = true;
        }

        UpdateWhenChanged(settings,
                          s => new ScreenSettings(s.Graphics.ScreenResolution, s.Graphics.IsWindowed),
                          updatedScreenSettings => {
            var currentScreenSetting = new ScreenSettings(new Resolution(Screen.width, Screen.height),
                                                          isWindowed: !Screen.fullScreen);
            if (!currentScreenSetting.Equals(updatedScreenSettings))
            {
                Screen.SetResolution(
                    updatedScreenSettings.Resolution.Width,
                    updatedScreenSettings.Resolution.Height,
                    fullscreen: !updatedScreenSettings.IsWindowed);
            }
        });

        var challengeManager = _configurableSystems.CourseManager;

        // TODO Configure challenge manager
//	    if (courseManager != null) {
//	        courseManager.UpdateSettings(new CourseManager.CourseSettings {
//	            IsCoursesEnabled = settings.Gameplay.CoursesEnabled,
//                IsRingCollision = settings.Gameplay.IsRingCollisionOn
//	        });
//	    }

        UpdateWhenChanged(settings, s => s.Graphics.TargetFrameRate, fps => Application.targetFrameRate = fps);
        UpdateWhenChanged(settings, s => s.Graphics.AnisotropicFilteringMode,
                          mode => QualitySettings.anisotropicFiltering = AnisotropicFilteringMode2Unity(mode));
        UpdateWhenChanged(settings, s => s.Graphics.LodBias, lodBias => QualitySettings.lodBias = lodBias);
        UpdateWhenChanged(settings, s => s.Graphics.TextureQuality,
                          textureQuality => QualitySettings.masterTextureLimit = TextureQuality2MasterTextureLimit(settings.Graphics.TextureQuality));
        UpdateWhenChanged(settings, s => s.Graphics.VoloShadowQuality, quality => QualitySettings.shadowCascades     = ShadowQuality2Cascades(quality));
        UpdateWhenChanged(settings, s => s.Graphics.ShadowDistance, shadowDistance => QualitySettings.shadowDistance = shadowDistance);

        var cameraManager = _configurableSystems.CameraManager;

        if (cameraManager != null && cameraManager.Rig != null)
        {
            var rig = cameraManager.Rig;
            rig.ApplySettings(settings);
            if (rig.Shake != null)
            {
                rig.Shake.Amplitude = settings.Graphics.ScreenShakeIntensity;
            }
        }

        UpdateWhenChanged(settings, s => s.Other.Language, languageCode => {
            _configurableSystems.ActiveLanguage.SetLanguage(CultureCode.FromString(languageCode));
        });

        var terrainManager = _configurableSystems.TerrainManager;

        if (terrainManager != null)
        {
            var currentTerrainConfig = terrainManager.TerrainConfiguration;

            currentTerrainConfig.CastShadows          = settings.Graphics.TerrainCastShadows;
            currentTerrainConfig.DetailObjectDensity  = settings.Graphics.DetailObjectDensity;
            currentTerrainConfig.DetailObjectDistance = settings.Graphics.DetailObjectDistance;
            // The accuracy of the mapping between the terrain maps (heightmap, textures, etc) and the generated terrain;
            // higher values indicate lower accuracy but lower rendering overhead.
            // Pixel accuracy examples: 3:1, 50:1
            currentTerrainConfig.HeightmapPixelError = settings.Graphics.TerrainRenderingAccuracy;
            terrainManager.ApplyTerrainQualitySettings(currentTerrainConfig);
//	        currentTerrainConfig.TreeQuality = settings.Graphics.TreeQuality;
//          UpdateWhenChanged(settings, s => s.Graphics.TreeQuality, treeQuality => terrainManager.ApplyTreeQualitySettings(treeQuality));
        }

        // Todo: it would be great if we could initialize the grassmanager earlier
        var grassManager = _configurableSystems.GrassManager;

        if (grassManager != null)
        {
            grassManager.Config = new GrassManagerConfig(settings.Graphics.DetailObjectDistance != 0, settings.Graphics.DetailObjectDistance, settings.Graphics.DetailObjectDensity);
            grassManager.Initialize();
        }

        var vsyncCount = settings.Graphics.IsVSyncEnabled ? 1 : 0;

        if (vrMode == VrMode.None && QualitySettings.vSyncCount != vsyncCount)
        {
            QualitySettings.vSyncCount = vsyncCount;
        }

        _currentGameSettings = settings;
    }