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); }
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); }
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; }