Пример #1
0
        private void DefineScene()
        {
            var device = Services.GetService <IGraphicsDeviceService>().DirectXDevice;

            scene = new Scene(Services);

            var cube = CubeMesh.New(device, modelOperations: ModelAnalyzer.DetectModelRequirements(vsFlags));

            Content.Store(cube.Name, cube);

            var modelSystem     = new ContentLoadingSystem();
            var sInitialization = new InitializationSystem();
            var cameraSystem    = new PerspectiveCameraSystem();
            var lightSystem     = new PointLightSystem();
            var positionSystem  = new TransformSystem();
            var sOptimization   = new OptimizationSystem();
            var sRendering      = new RenderSystem();
            var sUI             = new UserInterfaceSystem();

            scene.BeginDesign();

            scene.AddSystem(modelSystem);
            scene.AddSystem(cameraSystem);
            scene.AddSystem(lightSystem);
            scene.AddSystem(sInitialization);
            scene.AddSystem(positionSystem);
            scene.AddSystem(sOptimization);
            scene.AddSystem(sRendering);
            scene.AddSystem(sUI);

            Entity root = scene.CreateEntity("Root");

            root.RegisterComponent(new TransformComponent());
            root.RegisterComponent(new PositionComponent());

            Entity camera = scene.CreateEntity("Camera");

            camera.RegisterComponent(new CameraComponent {
            });
            camera.RegisterComponent(new PositionComponent {
                Position = new Vector3(0, 0f, 3f)
            });
            camera.RegisterComponent(new UpdateComponent {
                UpdateFrequency = UpdateFrequency.RealTime
            });

            Entity pointLight = scene.CreateEntity("PointLight");

            pointLight.RegisterComponent(new PointLightComponent {
            });
            pointLight.RegisterComponent(new PositionComponent {
                Position = new Vector3(0, 0f, 3f)
            });
            pointLight.RegisterComponent(new UpdateComponent {
                UpdateFrequency = UpdateFrequency.RealTime
            });
            pointLight.RegisterComponent(new ParentComponent()
            {
                Parent = root
            });
            pointLight.RegisterComponent(new TransformComponent());

            previewModel = scene.CreateEntity("PreviewModel");
            previewModel.RegisterComponent(new PositionComponent());
            previewModel.RegisterComponent(new TransformComponent());
            previewModel.RegisterComponent(new ModelComponent()
            {
                AssetName = cube.Name
            });
            previewModel.RegisterComponent(new UpdateComponent()
            {
                UpdateFrequency = UpdateFrequency.RealTime
            });
            previewModel.RegisterComponent(new MaterialComponent()
            {
                Diffuse = Color.Blue
            });
            previewModel.RegisterComponent(cShader);

            Entity ui = scene.CreateEntity("UI");

            ui.RegisterComponent(new UserInterfaceComponent {
                Overlay = Viewer.CreateOverlay(Services, this)
            });
            ui.RegisterComponent(new UpdateComponent()
            {
                UpdateFrequency = UpdateFrequency.RealTime
            });

            scene.EndDesign();
        }