Beispiel #1
0
        // Init is called on startup.
        public override void Init()
        {
            // Set the clear color for the backbuffer to white (100% intensity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Load the model - Monkey.fus for flat shading, MonkeySmooth.fus for smooth shading
            _rocketScene = AssetStorage.Get <SceneContainer>("terrain.fus");

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_rocketScene);
            _scenePicker   = new ScenePicker(_rocketScene);

            _LookAtDefaultPosition   = float3.Zero;
            _LookFromDefaultPosition = new float3(0, 1, -4);
            _LookUpDefault           = float3.UnitY;

            _LookAtPositionLerpFrom   = _LookAtDefaultPosition;
            _LookAtPositionLerpTo     = _LookAtDefaultPosition;
            _LookFromPositionLerpFrom = _LookFromDefaultPosition;
            _LookFromPositionLerpTo   = _LookFromDefaultPosition;

            _LerpTimer = 0;
            _LerpSpeed = 3;

            _DistanceFactor = 1.5f;
        }
        /// <summary>
        /// Constructor of the <c>Enemy</c> class.
        /// </summary>
        /// <param name="scene">Reference to the scene where the enemy moves.</param>
        /// <param name="modelName">File that contains the model that represents the enemy.</param>
        /// <param name="position">Initial position of the enemy.</param>
        /// <param name="rotation">Initial rotation of the enemy.</param>
        /// <param name="scale">Initial scale of the enemy.</param>
        /// <param name="maxSpeed">Max speed of the enemy.</param>
        /// <param name="maxLife">Max life of the enemy.</param>
        /// <param name="attack">Attack of the enemy.</param>
        public Enemy(SceneRenderer scene, string modelName, Vector3 position, Vector3 rotation,
                     Vector3 scale, Vector2 maxSpeed, int maxLife, int attack)
            : base(scene, new AnimatedModel((GameModel)ModelManager.GetModel(modelName),
                                            position, rotation, scale, 0), maxSpeed, maxLife, maxLife, attack)
        {
            _lastEnemyState = State.Waiting;
            _enemyState     = State.Waiting;

            _lastPlayerXDirection = XDirection.Right;
            _playerXDirection     = XDirection.Right;

            ((AnimatedModel)this.DModel).TimeSpeed = 0.25f;
            ((AnimatedModel)this.DModel).Animation.StartClip("Waiting", true);

            _amount      = 0.0f;
            _dying       = false;
            _unconscious = false;
            _attacking   = false;
            _attackMade  = false;
            _endPoints   = false;

            _points = new PointParticle();
            _points.AutoInitialize(EngineManager.GameGraphicsDevice,
                                   EngineManager.ContentManager, null);//ScreenManager.SpriteBatch);
            _points.PointsReceived += new EventHandler(PointsHandler);
        }
Beispiel #3
0
        // Init is called on startup.
        public override void Init()
        {
            _initWindowWidth  = Width;
            _initWindowHeight = Height;

            _initCanvasWidth  = Width / 100f;
            _initCanvasHeight = Height / 100f;

            _canvasHeight = _initCanvasHeight;
            _canvasWidth  = _initCanvasWidth;

            _aspectRatio = Width / (float)Height;

            // Set the clear color for the back buffer to white (100% intensity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Create the robot model
            _scene = CreateScene();

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_scene);
            _scenePicker   = new ScenePicker(_scene);

            var projComp = _scene.Children[0].GetComponent <ProjectionComponent>();

            AddResizeDelegate(delegate { projComp.Resize(Width, Height); });

#if GUI_SIMPLE
            _gui = CreateGui();
            // Create the interaction handler
            _sih         = new SceneInteractionHandler(_gui);
            _guiRenderer = new SceneRenderer(_gui);
#endif
        }
Beispiel #4
0
        // Init is called on startup.
        public override void Init()
        {
            // Set the clear color for the backbuffer to white (100% intensity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Load the model
            _scene = AssetStorage.Get <SceneContainer>("roboter_arm.fus");

            //Set Transforms for the Axles
            _lowerAxleTransform  = _scene.Children.FindNodes(node => node.Name == "LowerAxle")?.FirstOrDefault()?.GetTransform();
            _middleAxleTransform = _scene.Children.FindNodes(node => node.Name == "MiddleAxle")?.FirstOrDefault()?.GetTransform();
            _upperAxleTransform  = _scene.Children.FindNodes(node => node.Name == "UpperAxle")?.FirstOrDefault()?.GetTransform();

            _footTransform = _scene.Children.FindNodes(node => node.Name == "Foot")?.FirstOrDefault()?.GetTransform();

            _rightPincerTransform   = _scene.Children.FindNodes(node => node.Name == "RightLowerAxle")?.FirstOrDefault()?.GetTransform();
            _leftPincerTransform    = _scene.Children.FindNodes(node => node.Name == "LeftLowerAxle")?.FirstOrDefault()?.GetTransform();
            _rightPincerTransformUp = _scene.Children.FindNodes(node => node.Name == "RightHigherAxle")?.FirstOrDefault()?.GetTransform();
            _leftPincerTransformUp  = _scene.Children.FindNodes(node => node.Name == "LeftHigherAxle")?.FirstOrDefault()?.GetTransform();

            _pointer = _scene.Children.FindNodes(node => node.Name == "Pointer")?.FirstOrDefault()?.GetTransform();

            _virtualPos = new float3(0, 5, 0); //at the position of the upper axle

            _open = false;

            AddResizeDelegate(delegate { _scene.Children[0].GetComponent <ProjectionComponent>().Resize(Width, Height); });

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_scene);
        }
Beispiel #5
0
 protected TankRenderer(SceneRenderer sceneRenderer, T tank)
 {
     fScene    = sceneRenderer;
     fTank     = tank;
     fAeration = new M3DAeration();
     fWater    = new M3DWaterSurface();
 }
Beispiel #6
0
        // Init is called on startup.
        public override void Init()
        {
            var green   = ColorUint.Green.Tofloat3();
            var blue    = ColorUint.Blue.Tofloat3();
            var cyan    = ColorUint.Cyan.Tofloat3();
            var magenta = ColorUint.Magenta.Tofloat3();
            var yellow  = ColorUint.Yellow.Tofloat3();
            var white   = ColorUint.White.Tofloat3();

            // var red = ColorUint.Red.Tofloat3();


            // Set the clear color for the backbuffer to white (100% intentsity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Load the rocket model
            _scene = CreateScene();

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_scene);

            // _upperArm = _scene.Children.FindNodes(node => node.Name == "Arm02Rot").First()?.GetTransform();
            // _foreArm = _scene.Children.FindNodes(node => node.Name == "Arm03Rot").First()?.GetTransform();
            _upperArm = FindNodeByName(_scene.Children, "Arm02Rot")?.GetTransform();
            _foreArm  = FindNodeByName(_scene.Children, "Arm03Rot")?.GetTransform();
        }
Beispiel #7
0
        static void BuildEngine(CommandLineOptions commandLine, EventExchange exchange)
        {
            PerfTracker.StartupEvent("Creating engine");
            var framebuffer   = new MainFramebuffer();
            var sceneRenderer = new SceneRenderer("MainRenderer", framebuffer);

            sceneRenderer // TODO: Populate from json so mods can add new render methods
            .AddRenderer(new SpriteRenderer(framebuffer), typeof(VeldridSpriteBatch))
            .AddRenderer(new EtmRenderer(framebuffer), typeof(EtmWindow))
            .AddRenderer(new SkyboxRenderer(framebuffer), typeof(Skybox))
            .AddRenderer(new DebugGuiRenderer(framebuffer), typeof(DebugGuiRenderable))
            ;

            var engine = new Engine(commandLine.Backend, commandLine.UseRenderDoc, commandLine.StartupOnly, true, sceneRenderer);

#pragma warning disable CA2000 // Dispose objects before losing scopes
            var config      = exchange.Resolve <IGeneralConfig>();
            var shaderCache = new ShaderCache(config.ResolvePath("$(CACHE)/ShaderCache"));

            foreach (var shaderPath in exchange.Resolve <IModApplier>().ShaderPaths)
            {
                shaderCache.AddShaderPath(shaderPath);
            }
#pragma warning restore CA2000 // Dispose objects before losing scopes

            exchange
            .Attach(shaderCache)
            .Attach(framebuffer)
            .Attach(sceneRenderer)
            .Attach(engine)
            .Attach(new ResourceLayoutSource())
            ;
        }
Beispiel #8
0
        // Init is called on startup.
        public override void Init()
        {
            // Set the clear color for the backbuffer to light green (intensities in R, G, B, A).
            RC.ClearColor = new float4(0.7f, 1.0f, 0.5f, 1.0f);

            // Create a scene with a cube
            // The three components: one XForm, one Material and the Mesh
            _cubeTransform = new TransformComponent {
                Scale = new float3(1, 1, 1), Translation = new float3(0, 0, 0)
            };
            var cubeShader = new ShaderEffectComponent
            {
                Effect = SimpleMeshes.MakeShaderEffect(new float3(0, 0, 1), new float3(1, 1, 1), 4)
            };
            var cubeMesh = SimpleMeshes.CreateCuboid(new float3(10, 10, 10));

            // Assemble the cube node containing the three components
            var cubeNode = new SceneNodeContainer();

            cubeNode.Components = new List <SceneComponentContainer>();
            cubeNode.Components.Add(_cubeTransform);
            cubeNode.Components.Add(cubeShader);
            cubeNode.Components.Add(cubeMesh);

            // Create the scene containing the cube as the only object
            _scene          = new SceneContainer();
            _scene.Children = new List <SceneNodeContainer>();
            _scene.Children.Add(cubeNode);

            // Create a scene renderer holding the scene above
            _sceneRenderer = new SceneRenderer(_scene);
        }
Beispiel #9
0
        // Init is called on startup.
        public override void Init()

        {
            // Set the clear color for the backbuffer to white (100% intensity in all color channels R, G, B, A).

            RC.ClearColor = new float4(0.7f, 0.9f, 0.5f, 1);



            // Load the drone model
            _droneScene = AssetStorage.Get <SceneContainer>("GroundNoMat.fus");
            var droneBody = _droneScene.Children.FindNodes(node => node.Name == "Body")?.FirstOrDefault();

            _drone = new Drone(droneBody);

            _camera = new Camera();

            //Add resize delegate
            var projComp = _droneScene.Children[0].GetComponent <ProjectionComponent>();

            AddResizeDelegate(delegate { projComp.Resize(Width, Height); });

            // Wrap a SceneRenderer around the model.

            _sceneRenderer = new SceneRenderer(_droneScene);
            //_guiRenderer = new SceneRenderer(_gui);

            DroneRoot = _droneScene.Children.FindNodes(node => node.Name == "Body")?.FirstOrDefault();
        }
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            Scene         scene    = new Scene();
            SceneRenderer renderer = new SceneRenderer();
            GameObject    go       = new GameObject('#', 0, 0, ConsoleColor.Red);
            GameObject    go1      = new GameObject('$', 1, 0, ConsoleColor.Green);

            scene.AddObject(go);
            scene.AddObject(go1);
            Input input = new Input();

            input.StartInput();
            MovementComponent movement = new MovementComponent(go, input);

            go.AddComponent(movement);

            while (true)
            {
                foreach (var item in go.GetAllComponents())
                {
                    item.Start();
                    item.Update();
                }

                renderer.DrawScene(scene);
                Thread.Sleep(100);
                Console.Clear();
            }
        }
Beispiel #11
0
        public void OnOpening(object enterInformation)
        {
            if (!_isLoaded)
            {
                ActiveWorld = enterInformation as World;
                if (ActiveWorld == null)
                {
                    throw new InvalidOperationException("Did not receive loaded data.");
                }

                _renderStatisticsOverlay = new UiOverlay();
                _renderStatisticsOverlay.AddElement(new RenderStatisticsView(ActiveWorld));

                GameInstance.LoadedSave = TestMock.CreateTempSave();
                GameInstance.LoadedSave.Load(GameInstance.GetService <GameModeManager>().ActiveGameMode);

                _isLoaded = true;
            }

            _inputSystem      = GameInstance.GetService <InputSystem>();
            _screenManager    = GameInstance.GetService <ScreenManager>();
            _sceneRenderer    = GameInstance.GetService <SceneRenderer>();
            _collisionManager = GameInstance.GetService <CollisionManager>();
            _spriteBatch      = GameInstance.GetService <SpriteBatch>();
            _shapeRenderer    = GameInstance.GetService <ShapeRenderer>();
        }
Beispiel #12
0
        // Init is called on startup.
        public override void Init()
        {
            #if GUI_SIMPLE
            _guiHandler = new GUIHandler();
            _guiHandler.AttachToContext(RC);

            _guiFuseeLink                   = new GUIButton(6, 6, 157, 87);
            _guiFuseeLink.ButtonColor       = new float4(0, 0, 0, 0);
            _guiFuseeLink.BorderColor       = new float4(0, 0.6f, 0.2f, 1);
            _guiFuseeLink.BorderWidth       = 0;
            _guiFuseeLink.OnGUIButtonDown  += _guiFuseeLink_OnGUIButtonDown;
            _guiFuseeLink.OnGUIButtonEnter += _guiFuseeLink_OnGUIButtonEnter;
            _guiFuseeLink.OnGUIButtonLeave += _guiFuseeLink_OnGUIButtonLeave;
            _guiHandler.Add(_guiFuseeLink);
            _guiFuseeLogo = new GUIImage(AssetStorage.Get <ImageData>("FuseeLogo150.png"), 10, 10, -5, 150, 80);
            _guiHandler.Add(_guiFuseeLogo);
            var fontLato = AssetStorage.Get <Font>("Lato-Black.ttf");
            fontLato.UseKerning   = true;
            _guiLatoBlack         = new FontMap(fontLato, 18);
            _guiSubText           = new GUIText("Simple FUSEE Example", _guiLatoBlack, 100, 100);
            _guiSubText.TextColor = new float4(0.05f, 0.25f, 0.15f, 0.8f);
            _guiHandler.Add(_guiSubText);
            _subtextWidth  = GUIText.GetTextWidth(_guiSubText.Text, _guiLatoBlack);
            _subtextHeight = GUIText.GetTextHeight(_guiSubText.Text, _guiLatoBlack);
            #endif

            // Set the clear color for the backbuffer to white (100% intentsity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Load the rocket model
            _rocketScene = AssetStorage.Get <SceneContainer>("RocketModel.fus");

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_rocketScene);
        }
        /// <summary>
        /// Constructor of the <c>Player</c> class.
        /// </summary>
        /// <param name="scene">Reference to the scene where the player moves.</param>
        /// <param name="modelName">File that contains the model that represents the player.</param>
        /// <param name="position">Initial position of the player.</param>
        /// <param name="rotation">Initial rotation of the player.</param>
        /// <param name="scale">Initial scale of the player.</param>
        /// <param name="maxSpeed">Max speed of the player.</param>
        /// <param name="maxLife">Max life of the player.</param>
        /// <param name="attack">Attack of the player.</param>
        public Player(SceneRenderer scene, string modelName, Vector3 position, Vector3 rotation,
                      Vector3 scale, Vector2 maxSpeed, int maxLife, int life, int attack)
            : base(scene, new AnimatedModel((GameModel)ModelManager.GetModel(modelName),
                                            position, rotation, scale, 0, true), maxSpeed, maxLife, life, attack)
        {
            _jump    = false;
            _endJump = true;

            _startJump  = false;
            _finishJump = false;

            _doorDetected  = false;
            _doorActivated = false;

            _startLadder  = false;
            _climbLadder  = false;
            _finishLadder = false;
            _stopLadder   = false;

            _lastPlayerState = State.Waiting;
            _playerState     = State.Waiting;

            _debolio     = 0;
            _aerogel     = 0;
            _fulereno    = 0;
            _totalPoints = 0;

            _objects = new List <Objects.Object>();

            _lifeBar = new HealthBar(_maxLife, _life);

            ((AnimatedModel)this.DModel).Animation.StartClip("Waiting", true);
            Console.WriteLine("ESTOY ENTRANDO TAMBIEN AQUI2: " + _life + " - " + _maxLife);
        }
Beispiel #14
0
        // Init is called on startup. 
        public override void Init()
        {
            // Set the clear color for the backbuffer to white (100% intentsity in all color channels R, G, B, A).
            RC.ClearColor = new float4(0.8f, 0.9f, 0.7f, 1);

            _scene = AssetStorage.Get<SceneContainer>("Traktor.fus");

            _bodyTransform = _scene.Children.FindNodes(Node => Node.Name == "Body")?.FirstOrDefault()?.GetTransform();

            _schaufelTransform = _scene.Children.FindNodes(Node => Node.Name == "Schaufel")?.FirstOrDefault()?.GetTransform();

            _oberarmTransform = _scene.Children.FindNodes(Node => Node.Name == "Oberarm")?.FirstOrDefault()?.GetTransform();

            _unterarmTransform = _scene.Children.FindNodes(Node => Node.Name == "Arm")?.FirstOrDefault()?.GetTransform();

            _leftFrontWheelTransform = _scene.Children.FindNodes(Node => Node.Name == "LeftFrontWheel")?.FirstOrDefault()?.GetTransform();
            _rightFrontWheelTransform = _scene.Children.FindNodes(Node => Node.Name == "RightFrontWheel")?.FirstOrDefault()?.GetTransform();
            _leftRearWheelTransform = _scene.Children.FindNodes(Node => Node.Name == "LeftRearWheel")?.FirstOrDefault()?.GetTransform();
            _rightRearWheelTransform = _scene.Children.FindNodes(Node => Node.Name == "RightRearWheel")?.FirstOrDefault()?.GetTransform();
           

            // Create a scene renderer holding the scene above
            _sceneRenderer = new SceneRenderer(_scene);
            _scenePicker = new ScenePicker(_scene);
        }
Beispiel #15
0
        /// <summary>
        /// Constructor of the <c>ThrownObjectManager</c> class.
        /// </summary>
        /// <param name="scene">Reference to the scene where the player moves.</param>
        /// <param name="player">Reference to the main player.</param>
        public ThrownObjectManager(SceneRenderer scene, Player player)
        {
            _thrownObjects = new List <MoveableObject>();

            _scene  = scene;
            _player = player;
        }
Beispiel #16
0
        // Init is called on startup.
        public override void Init()
        {
            _initWindowWidth  = Width;
            _initWindowHeight = Height;
            if (_canvasRenderMode == CanvasRenderMode.SCREEN)
            {
                _initCanvasWidth  = Width / 100f;
                _initCanvasHeight = Height / 100f;
            }
            else
            {
                _initCanvasWidth  = 16;
                _initCanvasHeight = 9;
            }
            _canvasHeight = _initCanvasHeight;
            _canvasWidth  = _initCanvasWidth;

            var fontLato = AssetStorage.Get <Font>("Lato-Black.ttf");

            _fontMap1 = new FontMap(fontLato, 8);
            _fontMap  = new FontMap(fontLato, 72);

            // Set the clear color for the back buffer to white (100% intensity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            _bltDestinationTex = new Texture(AssetStorage.Get <ImageData>("townmusicians.jpg"));
            var bltScrTex = new Texture(AssetStorage.Get <ImageData>("censored_79_16.png"));

            _bltDestinationTex.Blt(180, 225, bltScrTex);

            _btnCanvas = new GUIButton
            {
                Name = "Canvas_Button"
            };
            _btnCanvas.OnMouseUp    += OnBtnCanvasUp;
            _btnCanvas.OnMouseDown  += OnBtnCanvasDown;
            _btnCanvas.OnMouseEnter += OnBtnCanvasEnter;
            _btnCanvas.OnMouseExit  += OnBtnCanvasExit;
            _btnCanvas.OnMouseOver  += OnMouseOverBtnCanvas;

            _btnCat = new GUIButton
            {
                Name = "Cat_Button"
            };
            _btnCat.OnMouseUp    += OnBtnCatUp;
            _btnCat.OnMouseDown  += OnBtnCatDown;
            _btnCat.OnMouseEnter += OnBtnCatEnter;
            _btnCat.OnMouseExit  += OnBtnCatExit;
            _btnCat.OnMouseOver  += OnMouseOverBtnCat;

            // Set the scene by creating a scene graph
            _scene = CreateNineSliceScene();

            // Create the interaction handler
            _sih = new SceneInteractionHandler(_scene);

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_scene);
        }
Beispiel #17
0
        // Init is called on startup.
        public override void Init()
        {
            // Set the clear color for the backbuffer to light green (intensities in R, G, B, A).
            RC.ClearColor = new float4(0.2f, 0.2f, 0.2f, 1.0f);

            // Create a scene with a cube
            // The three components: one XForm, one Material and the Mesh
            _cubeTransform = new TransformComponent {
                Scale = new float3(1, 0.3f, 1), Translation = new float3(0, 0, 0)
            };
            _cube2 = new TransformComponent {
                Scale = new float3(1, 0.3f, 1), Translation = new float3(0, 10, 0)
            };
            _cube3 = new TransformComponent {
                Scale = new float3(1, 0.3f, 1), Translation = new float3(0, -10, 0)
            };

            var cubeMaterial = new MaterialComponent {
                Diffuse = new MatChannelContainer {
                    Color = new float3(1, 0.7f, 0.2f)
                },
                Specular = new SpecularChannelContainer {
                    Color = float3.One, Shininess = 4
                }
            };
            var cubeMesh = SimpleMeshes.CreateCuboid(new float3(10, 10, 10));

            // Assemble the cube nodes containing the three components
            var cubeNode = new SceneNodeContainer();

            cubeNode.Components = new List <SceneComponentContainer>();
            cubeNode.Components.Add(_cubeTransform);
            cubeNode.Components.Add(cubeMaterial);
            cubeNode.Components.Add(cubeMesh);

            var cubeNode2 = new SceneNodeContainer();

            cubeNode2.Components = new List <SceneComponentContainer>();
            cubeNode2.Components.Add(_cube2);
            cubeNode2.Components.Add(cubeMaterial);
            cubeNode2.Components.Add(cubeMesh);

            var cubeNode3 = new SceneNodeContainer();

            cubeNode3.Components = new List <SceneComponentContainer>();
            cubeNode3.Components.Add(_cube3);
            cubeNode3.Components.Add(cubeMaterial);
            cubeNode3.Components.Add(cubeMesh);

            // Create the scene containing the cube as the only object
            _scene          = new SceneContainer();
            _scene.Children = new List <SceneNodeContainer>();
            _scene.Children.Add(cubeNode);
            _scene.Children.Add(cubeNode2);
            _scene.Children.Add(cubeNode3);

            // Create a scene renderer holding the scene above
            _sceneRenderer = new SceneRenderer(_scene);
        }
Beispiel #18
0
        public void Render()
        {
            SceneRenderer.Clear(0.2f, 0.4f, 0.6f, 1.0f);
            SceneRenderer.ClearFrameBuffer(0.0f, 0.0f, 0.0f, 1.0f);

            if (m_CurrentViewedCamera == null)
            {
                return;
            }

            // Render objects
            int i       = -1;
            var genObjs = m_Objects.GetGenObjects().Values;
            var lights  = m_Objects.GetLights();

            foreach (var genObj in genObjs)
            {
                i++;

                if (genObj.Name == Settings.NameMainCamera ||
                    genObj.Name == m_CurrentViewedCamera.Name ||
                    genObj.Name == Settings.NameMainLight ||
                    !genObj.IsVisible)
                {
                    continue;
                }

                genObj.Render(SceneRenderer, m_CurrentViewedCamera, lights);
                if (select)
                {
                    genObj.DrawForSelection(SceneRenderer, m_CurrentViewedCamera, MathHelper.GetColorFromIndex(i, genObjs.Count));
                }
            }

            // Render Ground Plane
            m_GroundPlane.DrawWireframe(SceneRenderer, m_CurrentViewedCamera, 0.5f,
                                        new vec4(0.6f, 0.6f, 0.6f, 1.0f));

            // Render view origin
            mat4 axesModelMatrix = new mat4(1.0f);

            m_OriginAxes.Render(SceneRenderer, m_CurrentViewedCamera, ref axesModelMatrix);

            // Select object if needed
            if (select)
            {
                var buffer = SceneRenderer.FrameBuffer.GetPixelData(mousePos[0], mousePos[1], 1, 1);
                int index  = MathHelper.GetIndexFromColor(new vec4(buffer[0]), genObjs.Count);

                var iter = genObjs.GetEnumerator();
                for (int j = 0; j <= index; j++)
                {
                    iter.MoveNext();
                }

                SelectObject(iter.Current, addSelect);
                select = false;
            }
        }
Beispiel #19
0
        public void InitScene(Device device, DeviceContext deviceContext, IRenderSurface renderSurface)
        {
            SceneRenderer.Init(renderSurface, device);
            m_cameraBuffer.Init(device);
            m_cubeCameraBuffer.Init(device);

            LightManager.Init(device, deviceContext);
        }
Beispiel #20
0
 // Init is called on startup.
 public override void Init()
 {
     // Set the clear color for the backbuffer to white (100% intentsity in all color channels R, G, B, A).
     RC.ClearColor = new float4(0.8f, 0.9f, 0.7f, 1);
     _scene        = CreateScene();
     // Create a scene renderer holding the scene above
     _sceneRenderer = new SceneRenderer(_scene);
 }
Beispiel #21
0
        /// <summary>
        /// Constructor of the <c>ShotManager</c> class.
        /// </summary>
        /// <param name="scene">Reference to the scene where the shots move.</param>
        /// <param name="player">Reference to the player.</param>
        /// <param name="enemies">Reference to the enemies</param>
        public ShotManager(SceneRenderer scene, Player player, Enemy[] enemies)
        {
            _shots = new List <Shot>();

            _scene   = scene;
            _player  = player;
            _enemies = enemies;
        }
Beispiel #22
0
        // Init is called on startup.
        public override void Init()
        {
            #if GUI_SIMPLE
            _guiHandler = new GUIHandler();
            _guiHandler.AttachToContext(RC);

            _guiFuseeLink                   = new GUIButton(6, 6, 157, 87);
            _guiFuseeLink.ButtonColor       = new float4(0, 0, 0, 0);
            _guiFuseeLink.BorderColor       = new float4(0, 0.6f, 0.2f, 1);
            _guiFuseeLink.BorderWidth       = 0;
            _guiFuseeLink.OnGUIButtonDown  += _guiFuseeLink_OnGUIButtonDown;
            _guiFuseeLink.OnGUIButtonEnter += _guiFuseeLink_OnGUIButtonEnter;
            _guiFuseeLink.OnGUIButtonLeave += _guiFuseeLink_OnGUIButtonLeave;
            _guiHandler.Add(_guiFuseeLink);
            _guiFuseeLogo = new GUIImage(AssetStorage.Get <ImageData>("FuseeLogo150.png"), 10, 10, -5, 150, 80);
            _guiHandler.Add(_guiFuseeLogo);
            var fontLato = AssetStorage.Get <Font>("Lato-Black.ttf");
            fontLato.UseKerning   = true;
            _guiLatoBlack         = new FontMap(fontLato, 18);
            _guiSubText           = new GUIText("FUSEE Example", _guiLatoBlack, 100, 100);
            _guiSubText.TextColor = new float4(0.05f, 0.25f, 0.15f, 0.8f);
            _guiHandler.Add(_guiSubText);
            _subtextWidth  = GUIText.GetTextWidth(_guiSubText.Text, _guiLatoBlack);
            _subtextHeight = GUIText.GetTextHeight(_guiSubText.Text, _guiLatoBlack);
            #endif

            // Set the clear color for the backbuffer to white (100% intentsity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Load the rocket model
            _rocketScene = AssetStorage.Get <SceneContainer>("RocketModel.fus");

            //Create StereoCam for S3D rendering
            _stereoCam = new StereoCameraRig(Stereo3DMode.Anaglyph, Width, Height, 6.5f);
            _stereoCam.AttachToContext(RC);

            //Create ScreenS3DTextures object holding the 4 textures to be used with the ScreenS3D object
            ScreenS3DTextures screenTex = new ScreenS3DTextures();
            screenTex.Left       = RC.CreateTexture(AssetStorage.Get <ImageData>("left.png"));
            screenTex.LeftDepth  = RC.CreateTexture(AssetStorage.Get <ImageData>("depthLeft.png"));
            screenTex.Right      = RC.CreateTexture(AssetStorage.Get <ImageData>("right.png"));
            screenTex.RightDepth = RC.CreateTexture(AssetStorage.Get <ImageData>("depthRight.png"));
            //Create ScreenS3D Object using the ScreenS3Dtextures object from above
            _screen = new ScreenS3D(RC, screenTex);
            //Set the config fort the Screen objet. This can also be doene using a whole ScreenConfig object and assiging direktly to the ScreenS3D object
            _screen.Config.ScaleSize  = 1000;
            _screen.Config.ScaleDepth = 5;
            _screen.Config.Transform  = float4x4.CreateTranslation(0, 200, 0);
            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_rocketScene);


            // vl = AssetStorage.Get<VideoStream>("left.mkv");
            capL  = new Capture("Assets/left.mkv");
            capLD = new Capture("Assets/depthLeft.mkv");
            capR  = new Capture("Assets/right.mkv");
            capRD = new Capture("Assets/depthRight.mkv");
        }
        public Material(SceneRenderer scene, IDrawableModel model, Vector2 maxSpeed)
            : base(scene, model, maxSpeed, true, true)
        {
            _visible = true;

            _startStaircase  = false;
            _climbStaircase  = false;
            _finishStaircase = false;
        }
Beispiel #24
0
 public Scene(GameContext context, SceneEffect effect)
 {
     _device = context.GraphicsDevice;
     _sceneRenderer = new DefaultSceneRenderer(context, effect);
     _allNodes = new List<SceneNode>();
     _allCameras = new List<Camera>();
     LightDirection = new Vector3(1, -1, -1);
     _spriteBatch = new SpriteBatch(_device);
 }
        /// <inheritdoc/>
        protected override Task <ResultStatus> DoCommandOverride(ICommandContext commandContext)
        {
            var gameSettings = context.GetGameSettingsAsset();

            // Find default scene URL
            var defaultSceneUrl = gameSettings.DefaultScene != null?AttachedReferenceManager.GetUrl(gameSettings.DefaultScene) : null;

            if (defaultSceneUrl == null)
            {
                return(Task.FromResult(ResultStatus.Successful));
            }

            var baseUrl = new UFile(defaultSceneUrl).GetParent();

            try
            {
                commandContext.Logger.Info($"Trying to compile effects for scene '{defaultSceneUrl}'");

                using (var sceneRenderer = new SceneRenderer(gameSettings))
                {
                    // Effect can be compiled asynchronously (since we don't have any fallback, they will have to be compiled in the same frame anyway)
                    // Also set the file provider to the current transaction
                    ((EffectCompilerCache)sceneRenderer.EffectSystem.Compiler).CompileEffectAsynchronously = true;
                    ((EffectCompilerCache)sceneRenderer.EffectSystem.Compiler).FileProvider = MicrothreadLocalDatabases.DatabaseFileProvider;
                    ((EffectCompilerCache)sceneRenderer.EffectSystem.Compiler).CurrentCache = EffectBytecodeCacheLoadSource.StartupCache;
                    sceneRenderer.EffectSystem.EffectUsed += (effectCompileRequest, result) => compilerResult.BuildSteps.Add(EffectCompileCommand.FromRequest(context, package, baseUrl, effectCompileRequest));

                    sceneRenderer.GameSystems.LoadContent();

                    // Load the scene
                    var scene = sceneRenderer.ContentManager.Load <Scene>(defaultSceneUrl);
                    sceneRenderer.SceneSystem.SceneInstance = new SceneInstance(sceneRenderer.Services, scene, ExecutionMode.EffectCompile);

                    // Disable culling
                    sceneRenderer.SceneSystem.SceneInstance.VisibilityGroups.CollectionChanged += (sender, e) =>
                    {
                        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
                        {
                            ((VisibilityGroup)e.Item).DisableCulling = true;
                        }
                    };

                    // Update and draw
                    // This will force effects to be generated and saved in the object database
                    var time = new GameTime();
                    sceneRenderer.GameSystems.Update(time);
                    sceneRenderer.GraphicsContext.ResourceGroupAllocator.Reset(sceneRenderer.GraphicsContext.CommandList);
                    sceneRenderer.GameSystems.Draw(time);
                }
            }
            catch (Exception e)
            {
                commandContext.Logger.Warning($"Could not compile effects for scene '{defaultSceneUrl}': {e.Message + e.StackTrace}", e);
            }

            return(Task.FromResult(ResultStatus.Successful));
        }
Beispiel #26
0
        public App(int width, int height)
        {
            WorldSize              = new Vector3(200, 200, 200);
            lastTime               = 0;
            SceneRoot              = new GameObject("SceneRoot", this);
            Shaders                = new Dictionary <string, Shader>();
            Materials              = new Dictionary <string, Material>();
            destroyed              = new List <DestructableObject>();
            DefaultBlendFactorSrc  = BlendingFactorSrc.SrcAlpha;
            DefaultBlendFactorDest = BlendingFactorDest.OneMinusSrcAlpha;

            Window              = new GameWindow(width, height, new GraphicsMode(32, 24, 0, 0));
            Window.Load        += OnLoadInternal;
            Window.Resize      += OnResizeInternal;
            Window.Closing     += Window_Closing;
            Window.UpdateFrame += OnUpdateInternal;
            Window.RenderFrame += OnRenderInternal;
            SceneRenderer       = new SceneRenderer(this);
            SetupGL();

            var cameraContainer = CreateGameObject("Camera");

            ActiveCamera = cameraContainer.AddComponent <Camera>();
            stopWatch    = new System.Diagnostics.Stopwatch();
            stopWatch.Start();
            time = new System.Diagnostics.Stopwatch();
            time.Start();

            Shaders.Add("unlit", new Shader("Shaders/unlit.glsl", "vertex", null, "fragment"));
            Shaders.Add("screen", new Shader("Shaders/screen.glsl", "vertex", null, "fragment"));
            Shaders.Add("screenCA", new Shader("Shaders/chromaticAbberation.glsl", "vertex", null, "fragment"));
            Shaders.Add("text", new Shader("Shaders/text.glsl", "vertex", null, "fragment"));
            Shaders.Add("gol", new Shader("Shaders/gol.glsl", "vertex", null, "fragment"));
            Shaders.Add("lit", new Shader("Shaders/lit.glsl", "vertex", null, "fragment"));
            Materials.Add("unlit", new Material(Shaders["unlit"], RenderMode.Opaque));
            Materials.Add("lit", new Material(Shaders["lit"], RenderMode.Opaque));
            GameObjectFactory = new GameObjectFactory(this);
            PrimitiveFactory  = new PrimitiveFactory();
            //var cs = new Jitter.Collision.CollisionSystemPersistentSAP();

            //PhysicsWorld = new Jitter.World(cs);

            //PhysicsWorld.Gravity = new Jitter.LinearMath.JVector(0, -9.81f, 0);

            var collisionConfig = new BulletSharp.DefaultCollisionConfiguration();

            PhysicsWorld = new BulletSharp.DiscreteDynamicsWorld(
                new BulletSharp.CollisionDispatcher(collisionConfig),
                new BulletSharp.DbvtBroadphase(),
                new BulletSharp.SequentialImpulseConstraintSolver(),
                collisionConfig);

            Ray.Init(this);

            Window.Run(60.0);
        }
Beispiel #27
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // Create a new SceneRenderer, which can be used to draw 3D graphics.
            sceneRenderer = new SceneRenderer(GraphicsDevice);

            world.LoadContent();
        }
        public MainGameScreen(string name, string mapName, Dictionary <string, string> mapInformation,
                              Player player, Vector3 newPosition, SceneRenderer scene) :
            this(name, mapName, mapInformation)
        {
            //_scene = scene;
            _sceneLoaded = true;

            _player      = player;
            _newPosition = newPosition;
        }
        public ChangingGame2(string originalMapName, SceneRenderer originalScene, Player player, Vector3 newPosition, string mapName)
        {
            GameGraphicsDevice = EngineManager.GameGraphicsDevice;

            _originMapName  = originalMapName;
            _nextMapName    = mapName;
            _mapInformation = FileHelper.readMapInformation(mapName);

            _newPosition = newPosition;
            _player      = player;
        }
Beispiel #30
0
        // Init is called on startup.
        public override void Init()
        {
            // Set the clear color for the backbuffer to white (100% intensity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Load the rocket model
            _rocketScene = AssetStorage.Get <SceneContainer>("RocketModel.fus");

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_rocketScene);
        }
        // Init is called on startup.
        public override void Init()
        {
            // Set the clear color for the backbuffer to white (100% intentsity in all color channels R, G, B, A).
            RC.ClearColor = new float4(1, 1, 1, 1);

            // Load the rocket model
            _scene = CreateScene();

            // Wrap a SceneRenderer around the model.
            _sceneRenderer = new SceneRenderer(_scene);
        }
Beispiel #32
0
        public PhysicsWorld(World world, bool noDim = false)
        {
            this.world = world;
            renderer = new SceneRenderer(world);
            Bodies = new List<BodyEx>();
            ignoreDim = noDim;

            unitCircle = new CircleShape(5.0f, 32);
            unitRect = new RectangleShape(new Vector2f(10, 10));
            unitRect.Origin = new Vector2f(5, 5);
            unitCircle.Origin = new Vector2f(5, 5);
            unitCircle.FillColor = Color.White;
            unitRect.FillColor = Color.White;
        }
Beispiel #33
0
        //public DebugRenderer DebugRenderer { get; private set; }
        public GameScreen(IGraphicsService graphicsService)
            : base(graphicsService)
        {
            var content = ServiceLocator.Current.GetInstance<ContentManager>();

            var meshRenderer = new MeshRenderer();

            _opaqueSceneRenderer = new SceneRenderer();
            _opaqueSceneRenderer.Renderers.Add(meshRenderer);

            //DebugRenderer = ServiceLocator.Current.GetInstance<DebugRenderer>();

            Scene = new Scene();
        }
Beispiel #34
0
        public GameScene(RenderSystem rs)
        {
            renderSys = rs;

            Viewport vp = rs.Viewport;
            float aspectRatio = vp.Width / (float)vp.Height;
            camera = new RtsCamera(42.5f, aspectRatio);


            SceneRendererParameter sm = new SceneRendererParameter();
            sm.SceneManager = new OctplSceneManager(PlanetEarth.PlanetRadius);
            sm.UseShadow = true;
            sm.PostRenderer = new GamePostRenderer(renderSys, camera);




            renderer = new SceneRenderer(renderSys, sm);
            renderer.ClearColor = ColorValue.White;


            camera.NearPlane = 20;
            camera.FarPlane = 6000;
            camera.Mode = RenderMode.Final;
            camera.RenderTarget = renderSys.GetRenderTarget(0);

            renderer.RegisterCamera(camera);



            PlanetEarth earth = new PlanetEarth(renderSys);
            sm.SceneManager.AddObjectToScene(earth);

            OceanWater water = new OceanWater(renderSys);
            sm.SceneManager.AddObjectToScene(water);

            //Atmosphere atmos = new Atmosphere(renderSys);
            //sm.SceneManager.AddObjectToScene(atmos);

        }
Beispiel #35
0
        public void OnOpening(object enterInformation)
        {
            if (!_isLoaded)
            {
                ActiveWorld = enterInformation as World;
                if (ActiveWorld == null) throw new InvalidOperationException("Did not receive loaded data.");

                _renderStatisticsOverlay = new UiOverlay();
                _renderStatisticsOverlay.AddElement(new RenderStatisticsView(ActiveWorld));

                GameInstance.LoadedSave = TestMock.CreateTempSave();
                GameInstance.LoadedSave.Load(GameInstance.GetService<GameModeManager>().ActiveGameMode);

                _isLoaded = true;
            }

            _inputSystem = GameInstance.GetService<InputSystem>();
            _screenManager = GameInstance.GetService<ScreenManager>();
            _sceneRenderer = GameInstance.GetService<SceneRenderer>();
            _collisionManager = GameInstance.GetService<CollisionManager>();
            _spriteBatch = GameInstance.GetService<SpriteBatch>();
            _shapeRenderer = GameInstance.GetService<ShapeRenderer>();
        }
Beispiel #36
0
        public void Load()
        {
            Size clSize = Program.Window.ClientSize;
            camera = new ChaseCamera(clSize.Width / (float)clSize.Height);
            camera.ChaseDirection = new Vector3(0, 0, 1);
            camera.ChasePosition = new Vector3(0, 0, 0);
            camera.DesiredPositionOffset = new Vector3(0, 0, 40);
            camera.Mode = RenderMode.Final;
            camera.FarPlane = 10000;
            camera.NearPlane = 10f;
            camera.RenderTarget = renderSys.GetRenderTarget(0);

            distance = 40;
            yang = MathEx.Degree2Radian(30);
            xang = MathEx.Degree2Radian(45);

            sceneManager = new SceneManager();
            SceneRendererParameter sm = new SceneRendererParameter();
            sm.PostRenderer = new DefaultPostRenderer();
            sm.SceneManager = sceneManager;
            sm.UseShadow = false;


            renderer = new SceneRenderer(renderSys, sm);

            renderer.RegisterCamera(camera);

            obj = new ModelWrapper();

            sceneManager.AddObjectToScene(obj);

            //ModelData mdlData = PathBuilder.BuildModel(renderSys, null, new Point[]
            //{
            //    new Point(0,0), new Point(2,1), new Point(4,4), new Point(5,4), new Point(6,5), new Point(6,7), new Point(9,9)
            //});

            //CurrentModel = new Model(new ResourceHandle<ModelData>(mdlData, true));
        }
        /// <inheritdoc/>
        protected override Task<ResultStatus> DoCommandOverride(ICommandContext commandContext)
        {
            var gameSettings = context.GetGameSettingsAsset();

            // Find default scene URL
            var defaultSceneUrl = gameSettings.DefaultScene != null ? AttachedReferenceManager.GetUrl(gameSettings.DefaultScene) : null;
            if (defaultSceneUrl == null)
                return Task.FromResult(ResultStatus.Successful);

            var baseUrl = new UFile(defaultSceneUrl).GetParent();

            try
            {
                commandContext.Logger.Info($"Trying to compile effects for scene '{defaultSceneUrl}'");

                using (var sceneRenderer = new SceneRenderer(gameSettings))
                {
                    // Effect can be compiled asynchronously (since we don't have any fallback, they will have to be compiled in the same frame anyway)
                    // Also set the file provider to the current transaction
                    ((EffectCompilerCache)sceneRenderer.EffectSystem.Compiler).CompileEffectAsynchronously = true;
                    ((EffectCompilerCache)sceneRenderer.EffectSystem.Compiler).FileProvider = MicrothreadLocalDatabases.DatabaseFileProvider;
                    ((EffectCompilerCache)sceneRenderer.EffectSystem.Compiler).CurrentCache = EffectBytecodeCacheLoadSource.StartupCache;
                    sceneRenderer.EffectSystem.EffectUsed += (effectCompileRequest, result) => compilerResult.BuildSteps.Add(EffectCompileCommand.FromRequest(context, package, baseUrl, effectCompileRequest));

                    sceneRenderer.GameSystems.LoadContent();

                    // Load the scene
                    var scene = sceneRenderer.ContentManager.Load<Scene>(defaultSceneUrl);
                    sceneRenderer.SceneSystem.SceneInstance = new SceneInstance(sceneRenderer.Services, scene, ExecutionMode.EffectCompile);

                    // Disable culling
                    sceneRenderer.SceneSystem.SceneInstance.VisibilityGroups.CollectionChanged += (sender, e) =>
                    {
                        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
                        {
                            ((VisibilityGroup)e.Item).DisableCulling = true;
                        }
                    };

                    // Update and draw
                    // This will force effects to be generated and saved in the object database
                    var time = new GameTime();
                    sceneRenderer.GameSystems.Update(time);
                    sceneRenderer.GraphicsContext.ResourceGroupAllocator.Reset(sceneRenderer.GraphicsContext.CommandList);
                    sceneRenderer.GameSystems.Draw(time);
                }
            }
            catch (Exception e)
            {
                commandContext.Logger.Warning($"Could not compile effects for scene '{defaultSceneUrl}': {e.Message + e.StackTrace}", e);
            }

            return Task.FromResult(ResultStatus.Successful);
        }
Beispiel #38
0
        public void Load()
        {
            Size clSize = Program.Window.ClientSize;
            camera = new ChaseCamera(clSize.Width / (float)clSize.Height);
            camera.ChaseDirection = new Vector3(0, 0, 1);
            camera.ChasePosition = new Vector3(0, 0, 0);
            camera.DesiredPositionOffset = new Vector3(0, 0, 40);  
            camera.Mode = RenderMode.Final;
            camera.FarPlane = 1000;
            camera.NearPlane = 0.5f;
            camera.RenderTarget = renderSys.GetRenderTarget(0);

            distance = 40;
            yang = MathEx.Degree2Radian(30);
            xang = MathEx.Degree2Radian(45);

            sceneManager = new SceneManager();
            SceneRendererParameter sm = new SceneRendererParameter ();
            sm.PostRenderer = new DefaultPostRenderer();
            sm.SceneManager = sceneManager;
            sm.UseShadow = false;


            renderer = new SceneRenderer(renderSys, sm);

            renderer.RegisterCamera(camera);


            peff = new SmokeEffect(renderSys);
            peff.Emitter = new ParticleEmitter(1);
            peff.Modifier = new ParticleModifier();


            sceneManager.AddObjectToScene(peff);
        }
        public void LoadContent()
        {
            if (SceneConfigViewModel == null) return;
            if (contentLoaded) return;

            if (!SceneConfigViewModel.SceneConfigEdit.ContentLoaded)
            {
                try
                {
                    SceneConfigViewModel.SceneConfigEdit.SceneContext = this;
                    SceneConfigViewModel.SceneConfigEdit.LoadContent();
                    SceneConfigViewModel.SceneConfigEdit.ActiveCamera = activeCamera;
                }
                catch (ContentLoadException e)
                {
                    Tracer.TraceSource.TraceEvent(TraceEventType.Critical, 0, e.Message + "\n" + e.StackTrace);
                    contentLoadFailed = true;
                }
            }

            if (!contentLoadFailed && SceneConfigViewModel.SceneConfigEdit.ContentLoaded)
            {
                sceneRenderer = new SceneRenderer(SceneConfigViewModel.SceneConfigEdit);

                try
                {
                    sceneRenderer.LoadContent();
                }
                catch (ContentLoadException e)
                {
                    Tracer.TraceSource.TraceEvent(TraceEventType.Critical, 0, e.Message + "\n" + e.StackTrace);
                    contentLoadFailed = true;
                }
            }

            contentLoaded = true;
        }
Beispiel #40
0
        public override void LoadContent()
        {
            base.LoadContent();

            scene = new Scene(sceneContext, "Scenes/Test1Scene");

            sceneRenderer = new SceneRenderer(scene);

            #region Start-up mediators

            #region CameraMeditor [free]
            {
                var mediator = new CameraMediator();
                mediator.CameraName = "free";
                mediator.MoveVelocity = 30.0f;
                scene.StartupMediators.Add(mediator);
            }
            #endregion

            #region CameraMediator [satellite]
            {
                var mediator = new CameraMediator();
                mediator.CameraName = "satellite";
                mediator.MoveVelocity = 60.0f;
                scene.StartupMediators.Add(mediator);
            }
            #endregion

            #region CubeCharacterCameraMediator [char/Player]
            {
                var mediator = new CubeCharacterCameraMediator();
                mediator.CameraName = "char";
                mediator.CharacterActorName = "Player";
                mediator.DashVelocity = 20.0f;
                scene.StartupMediators.Add(mediator);
            }
            #endregion

            #region WorldTimeMediator
            {
                var mediator = new WorldTimeMediator();
                scene.StartupMediators.Add(mediator);
            }
            #endregion

            #region SunLightMediator
            {
                var mediator = new SunLightMediator();
                scene.StartupMediators.Add(mediator);
            }
            #endregion

            #endregion

            #region Player

            scene.Player.ControllingPlayer = ControllingPlayer.Value;

            #endregion

            scene.LoadContent();
            sceneRenderer.LoadContent();

            LoadDebugContent();

            // 読み込みが完了したら、ResetElapsedTime() を使用して、非常に長い
            // フレームを完了したことと、キャッチアップしようとする必要がないことを、
            // ゲームのタイミング メカニズムに指示します。
            ScreenContext.ResetElapsedTime();
        }
Beispiel #41
0
    //--------------------------------------------------------------
    #region Creation & Cleanup
    //--------------------------------------------------------------

    public DeferredGraphicsScreen(IServiceLocator services)
      : base(services.GetInstance<IGraphicsService>())
    {
      _sampleFramework = services.GetInstance<SampleFramework>();
      var contentManager = services.GetInstance<ContentManager>();

      SpriteBatch = GraphicsService.GetSpriteBatch();

      // Let's create the necessary scene node renderers:
#if !XBOX360
      TerrainRenderer = new TerrainRenderer(GraphicsService);
#endif
      MeshRenderer = new MeshRenderer();

      // The _opaqueMeshSceneRenderer combines all renderers for opaque
      // (= not alpha blended) meshes.
      _opaqueMeshSceneRenderer = new SceneRenderer();
#if !XBOX360
      _opaqueMeshSceneRenderer.Renderers.Add(TerrainRenderer);
#endif
      _opaqueMeshSceneRenderer.Renderers.Add(MeshRenderer);

      _decalRenderer = new DecalRenderer(GraphicsService);
      _billboardRenderer = new BillboardRenderer(GraphicsService, 2048)
      {
        EnableSoftParticles = true,

        // If you have an extreme amount of particles that cover the entire screen,
        // you can turn on offscreen rendering to improve performance.
        //EnableOffscreenRendering = true,
      };

      // The AlphaBlendSceneRenderer combines all renderers for transparent
      // (= alpha blended) objects.
      AlphaBlendSceneRenderer = new SceneRenderer();
      AlphaBlendSceneRenderer.Renderers.Add(MeshRenderer);
      AlphaBlendSceneRenderer.Renderers.Add(_billboardRenderer);
      AlphaBlendSceneRenderer.Renderers.Add(new WaterRenderer(GraphicsService));
      AlphaBlendSceneRenderer.Renderers.Add(new FogSphereRenderer(GraphicsService));
      AlphaBlendSceneRenderer.Renderers.Add(new VolumetricLightRenderer(GraphicsService));

#if !XBOX360
      // Update terrain clipmaps. (Only necessary if TerrainNodes are used.)
      _terrainClipmapRenderer = new TerrainClipmapRenderer(GraphicsService);
#endif

      // Renderer for cloud maps. (Only necessary if LayeredCloudMaps are used.)
      _cloudMapRenderer = new CloudMapRenderer(GraphicsService);

      // Renderer for SceneCaptureNodes. See also SceneCapture2DSample.
      // In the constructor we specify a method which is called in SceneCaptureRenderer.Render() 
      // when the scene must be rendered for the SceneCaptureNodes.
      SceneCaptureRenderer = new SceneCaptureRenderer(context =>
      {
        // Get scene nodes which are visible by the current camera.
        CustomSceneQuery sceneQuery = Scene.Query<CustomSceneQuery>(context.CameraNode, context);
        // Render scene (with post-processing, with lens flares, no debug rendering, no reticle).
        RenderScene(sceneQuery, context, true, true, false, false);
      });

      // Renderer for PlanarReflectionNodes. See also PlanarReflectionSample.
      // In the constructor we specify a method which is called in PlanarReflectionRenderer.Render() 
      // to create the reflection images.
      _planarReflectionRenderer = new PlanarReflectionRenderer(context =>
      {
        // Get scene nodes which are visible by the current camera.
        CustomSceneQuery sceneQuery = Scene.Query<CustomSceneQuery>(context.CameraNode, context);

        var planarReflectionNode = (PlanarReflectionNode)context.ReferenceNode;

        // Planar reflections are often for WaterNodes. These nodes should not be rendered 
        // into their own reflection map because when the water surface is displaced by waves, 
        // some waves could be visible in the reflection. 
        // --> Remove the water node from the renderable nodes. (In our samples, the water
        // node is the parent of the reflection node.)
        if (planarReflectionNode.Parent is WaterNode)
        {
          var index = sceneQuery.RenderableNodes.IndexOf(planarReflectionNode.Parent);
          if (index >= 0)
            sceneQuery.RenderableNodes[index] = null;
        }

        // Render scene (no post-processing, no lens flares, no debug rendering, no reticle).
        RenderScene(sceneQuery, context, false, false, false, false);
      });

      _waterWavesRenderer = new WaterWavesRenderer(GraphicsService);

      // The shadow map renderer renders a depth image from the viewpoint of the light and
      // stores it in LightNode.Shadow.ShadowMap.
      ShadowMapRenderer = new ShadowMapRenderer(context =>
      {
        var query = context.Scene.Query<ShadowCasterQuery>(context.CameraNode, context);
        if (query.ShadowCasters.Count == 0)
          return false;

        _opaqueMeshSceneRenderer.Render(query.ShadowCasters, context);
        return true;
      });

      // The shadow mask renderer evaluates the shadow maps, does shadow filtering 
      // and stores the resulting shadow factor in a screen space image 
      //(see LightNode.Shadow.ShadowMask/ShadowMaskChannel).
      ShadowMaskRenderer = new ShadowMaskRenderer(GraphicsService, 2);

      // Optionally, we can blur the shadow mask to make the shadows smoother.
      var blur = new Blur(GraphicsService)
      {
        IsAnisotropic = false,
        IsBilateral = true,
        EdgeSoftness = 0.05f,
        Scale = 1f,
        Enabled = false,  // Disable blur by default.
      };
      blur.InitializeGaussianBlur(11, 3, true);
      ShadowMaskRenderer.Filter = blur;

      // Renderers which create the intermediate render targets:
      // Those 2 renderers are implemented in this sample. Those functions could
      // be implemented directly in this class but we have created separate classes
      // to make the code more readable.
      _gBufferRenderer = new GBufferRenderer(GraphicsService, _opaqueMeshSceneRenderer, _decalRenderer);
      LightBufferRenderer = new LightBufferRenderer(GraphicsService);

      // Other specialized renderers:
      _lensFlareRenderer = new LensFlareRenderer(GraphicsService);
      _skyRenderer = new SkyRenderer(GraphicsService);
      _fogRenderer = new FogRenderer(GraphicsService);
      _internalDebugRenderer = new DebugRenderer(GraphicsService, null);
      _rebuildZBufferRenderer = new RebuildZBufferRenderer(GraphicsService);

      Scene = new Scene();

      // This screen needs a HDR filter to map high dynamic range values back to
      // low dynamic range (LDR).
      PostProcessors = new PostProcessorChain(GraphicsService);
      PostProcessors.Add(new HdrFilter(GraphicsService)
      {
        EnableBlueShift = true,
        BlueShiftCenter = 0.0004f,
        BlueShiftRange = 0.5f,
        //BlueShiftColor = new Vector3F(1.05f / 4f, 0.97f / 4f, 1.27f / 4f),  // Default physically-based blue-shift
        BlueShiftColor = new Vector3F(0.25f, 0.25f, 0.7f),  // More dramatic blue-shift
        MinExposure = 0,
        MaxExposure = 10,
        BloomIntensity = 1,
        BloomThreshold = 0.6f,
      });
      _underwaterPostProcessor = new UnderwaterPostProcessor(GraphicsService, contentManager);
      PostProcessors.Add(_underwaterPostProcessor);

      // Use 2D texture for reticle.
      _reticle = contentManager.Load<Texture2D>("Reticle");

      // Use the sprite font of the GUI.
      var uiContentManager = services.GetInstance<ContentManager>("UIContent");
      var spriteFont = uiContentManager.Load<SpriteFont>("UI Themes/BlendBlue/Default");
      DebugRenderer = new DebugRenderer(GraphicsService, spriteFont)
      {
        DefaultColor = new Color(0, 0, 0),
        DefaultTextPosition = new Vector2F(10),
      };

      EnableLod = true;
    }