private void SceneGameRunThread() { // Create the form from this thread GameForm = new EmbeddedGameForm { TopLevel = false, Visible = false, }; windowHandle = GameForm.Handle; var context = new GameContextWinforms(GameForm) { InitializeDatabase = false }; RegisterToDragDropEvents(); // Wait for shaders to be loaded Asset.ServiceProvider.Get <GameStudioBuilderService>().WaitForShaders(); // Create and register services serviceRegistry = new EditorGameServiceRegistry(); InitializeServices(serviceRegistry); Game.RegisterServices(serviceRegistry); // Notify game start gameStartedTaskSource.SetResult(true); Game.Run(context); Game.Dispose(); }
/// <inheritdoc/> protected override void InitializeServices(EditorGameServiceRegistry services) { base.InitializeServices(services); services.Add(new UIEditorGameCameraService(this)); services.Add(AdornerService = new UIEditorGameAdornerService(this)); }
internal void RegisterMouseServices([NotNull] EditorGameServiceRegistry serviceRegistry) { foreach (var service in serviceRegistry.Services.OfType <IEditorGameMouseService>()) { mouseServices.Add(service); } }
protected virtual void InitializeServices([NotNull] EditorGameServiceRegistry services) { services.Add(new EditorGameDebugService()); services.Add(RecoveryService = new EditorGameRecoveryService(Editor) { IsActive = true }); }
/// <inheritdoc/> protected override void InitializeServices(EditorGameServiceRegistry services) { base.InitializeServices(services); services.Add(new EditorGameGraphicsCompositorService(this, Editor)); services.Add(new EditorGameEntityCameraService(Editor, this)); services.Add(new EditorGameRenderModeService()); services.Add(new EditorGameGridService <ViewportGridGizmo>()); services.Add(new PhysicsDebugShapeService()); services.Add(new EditorGameLightProbeGizmoService(Editor)); services.Add(new EditorGameCubemapService(Editor)); services.Add(new EditorGameSpaceMarkerService()); services.Add(new EditorGameCameraOrientationService()); services.Add(new EditorGameComponentGizmoService(this)); services.Add(new EditorGameEntitySelectionService(Editor)); services.Add(new EditorGameEntityTransformService(Editor, this)); services.Add(new EditorGameModelSelectionService(Editor)); services.Add(new EditorGameMaterialHighlightService(Editor)); services.Add(new EditorGameAssetHighlighterService(this, Editor.Session.DependencyManager)); services.Add(new EditorGameParticleComponentChangeWatcherService(this)); }
/// <inheritdoc/> protected override void InitializeServices(EditorGameServiceRegistry serviceRegistry) { base.InitializeServices(serviceRegistry); serviceRegistry.Add(new PrefabEditorLightService()); }
/// <inheritdoc/> protected override void InitializeServices(EditorGameServiceRegistry serviceRegistry) { base.InitializeServices(serviceRegistry); serviceRegistry.Add(new EditorGameCameraPreviewService(this)); serviceRegistry.Add(new EditorGameNavigationMeshService(Editor)); }
/// <summary> /// Recursively sorts the dependencies of the provided <paramref name="service"/> in deepest order first. /// </summary> /// <param name="service"></param> /// <param name="visited"></param> /// <param name="serviceRegistry"></param> /// <returns></returns> private static IEnumerable <IEditorGameService> OrderByDependency(IEditorGameService service, ISet <IEditorGameService> visited, EditorGameServiceRegistry serviceRegistry) { if (!visited.Add(service)) { yield break; } foreach (var dependencyType in service.Dependencies) { var dependency = serviceRegistry.Get(dependencyType); if (dependency == null) { throw new InvalidOperationException($"The service [{service.GetType().Name}] requires a service of type [{dependencyType.Name}]."); } foreach (var item in OrderByDependency(dependency, visited, serviceRegistry)) { yield return(item); } } yield return(service); }
/// <summary> /// Sorts the services of this <see cref="EditorGameServiceRegistry"/> by dependency order. /// </summary> /// <param name="serviceRegistry">The service registry.</param> /// <returns></returns> public static IEnumerable <IEditorGameService> OrderByDependency(this EditorGameServiceRegistry serviceRegistry) { var visited = new HashSet <IEditorGameService>(); return(serviceRegistry.Services.SelectMany(s => OrderByDependency(s, visited, serviceRegistry))); }