Exemple #1
0
        public void Render(PerspectiveCamera camera, Viewport viewport, GameTime gameTime)
        {
            if (this.setCamera)
            {
                camera.Move(this.State.EditorState.CameraPosition, this.State.EditorState.CameraLookAt);
                this.setCamera = false;
            }

            // Do not handle input if game window is not activated
            if (!this.GameLoop.IsActive)
            {
                return;
            }

            var elapsed = (Seconds)gameTime.ElapsedGameTime;

            this.KeyboardInput.Update();
            this.MouseInput.Update();

            this.CameraController.Update(camera, elapsed);

            if (this.KeyboardInput.Click(Keys.F12))
            {
                this.State.EditorState.ShowGui = !this.State.EditorState.ShowGui;
            }

            if (this.KeyboardInput.Click(Keys.Escape))
            {
                this.GameLoop.Exit();
            }

            this.RenderOverlay(viewport);
            this.RenderUI(camera, gameTime);
        }
Exemple #2
0
        public void Update(PerspectiveCamera camera, Seconds elapsed)
        {
            var position = camera.Position;

            this.forward = Vector3.Normalize(camera.LookAt - camera.Position);

            var translate = TranslateSpeed * elapsed;

            if (this.Mouse.Hold(MouseButtons.Right))
            {
                var rotation = new Vector2(this.Mouse.Movement.X, this.Mouse.Movement.Y) * RotateFactor;
                var matrix   = Matrix.CreateFromAxisAngle(this.up, rotation.X) * Matrix.CreateFromAxisAngle(this.left, -rotation.Y);

                this.forward = Vector3.Transform(this.forward, matrix);
                this.left    = Vector3.Cross(this.up, this.forward);
            }

            if (this.Keyboard.Hold(Keys.A))
            {
                position += this.left * translate;
            }
            else if (this.Keyboard.Hold(Keys.D))
            {
                position -= this.left * translate;
            }

            if (this.Keyboard.Hold(Keys.W))
            {
                position += this.forward * translate;
            }
            else if (this.Keyboard.Hold(Keys.S))
            {
                position -= this.forward * translate;
            }

            if (this.Keyboard.Hold(Keys.C))
            {
                position -= this.up * translate;
            }
            else if (this.Keyboard.Hold(Keys.Space))
            {
                position += this.up * translate;
            }

            if (this.Keyboard.Click(Keys.R))
            {
                position = Vector3.Backward * 10;

                this.forward = Vector3.Forward;
                this.left    = Vector3.Left;
                this.up      = Vector3.Up;
            }

            camera.Move(position, position + this.forward);
        }
Exemple #3
0
        public ShadowCastingLight Construct(Entity entity, Vector3 position, Vector3 lookAt, Color color, int resolution = DefaultResolution)
        {
            var viewPoint = new PerspectiveCamera(new Viewport(0, 0, resolution, resolution));

            viewPoint.Move(position, lookAt);

            var shadowMap = this.ShadowMapFactory.Construct(entity, viewPoint, resolution);
            var light     = new ShadowCastingLight(entity, viewPoint, shadowMap, color);

            this.Container.Add(light);

            return(light);
        }
        public DynamicTexture Construct(Entity entity, Vector3 position, Vector3 lookAt, int width, int height, string label, PassType type = PassType.Opaque)
        {
            var pipeline = new RenderPipeline(this.Device, new NullMeterRegistry());

            var gBuffer   = new GBuffer(this.Device, width, height);
            var viewPoint = new PerspectiveCamera(gBuffer.AspectRatio);

            viewPoint.Move(position, lookAt);
            var pass = new Pass(type, 0);

            var dynamicTexture = new DynamicTexture(entity, pipeline, viewPoint, gBuffer, pass, label);

            this.Container.Add(dynamicTexture);

            return(dynamicTexture);
        }
Exemple #5
0
        private void DoStart(PerspectiveCamera camera)
        {
            this.distanceCovered = 0.0f;

            this.beforeIndex = 0;
            this.targetIndex = 1;

            var before = this.Waypoints[this.beforeIndex];
            var target = this.Waypoints[this.targetIndex];

            this.CameraSpring.Reset(before.Position);
            this.LookAtSpring.Reset(before.LookAt);

            camera.Move(before.Position, before.LookAt);

            this.state = CutsceneState.Running;
        }
Exemple #6
0
        public void Render(IScene currentScene, PerspectiveCamera camera, Viewport viewport, GameTime gameTime)
        {
            if (this.setCamera)
            {
                camera.Move(this.State.EditorState.CameraPosition, this.State.EditorState.CameraLookAt);
                this.CameraController.TranslateSpeed = this.State.EditorState.CameraSpeed;
                this.setCamera = false;
            }

            // Do not handle input if game window is not activated
            if (!this.GameLoop.IsActive)
            {
                return;
            }

            var elapsed = (Seconds)gameTime.ElapsedGameTime;

            this.KeyboardInput.Update();
            this.MouseInput.Update();

            if (this.KeyboardInput.Click(Keys.F12))
            {
                this.State.EditorState.ShowGui = !this.State.EditorState.ShowGui;
            }

            if (this.KeyboardInput.Click(Keys.Escape))
            {
                this.GameLoop.Exit();
            }

            this.RenderOverlay(viewport);
            this.RenderUI(currentScene, camera, gameTime);

            var io = ImGui.GetIO();

            if (!io.WantCaptureKeyboard)
            {
                this.CameraController.Update(camera, elapsed);
                if (!io.WantCaptureMouse)
                {
                    currentScene.HandleInput(camera, this.KeyboardInput, this.MouseInput);
                }
            }
        }
Exemple #7
0
        private void DoRun(PerspectiveCamera camera, Seconds elapsed)
        {
            var before = this.Waypoints[this.beforeIndex];
            var target = this.Waypoints[this.targetIndex];

            var speed = before.Speed;

            var distance = Vector3.Distance(before.Position, target.Position);

            if (distance <= this.distanceCovered)
            {
                this.Next();
                if (this.beforeIndex == 0)
                {
                    this.state = CutsceneState.Stopped;
                    return;
                }

                this.distanceCovered -= distance;

                before = this.Waypoints[this.beforeIndex];
                target = this.Waypoints[this.targetIndex];

                speed = before.Speed;

                distance = Vector3.Distance(before.Position, target.Position);
            }

            var direction = Vector3.Normalize(target.Position - before.Position);

            var step = elapsed * speed;

            this.distanceCovered += step;

            var position        = before.Position + (this.distanceCovered * direction);
            var desiredPosition = position + (direction * step);

            this.CameraSpring.Update(elapsed, desiredPosition);
            this.LookAtSpring.Update(elapsed, before.LookAt);

            camera.Move(this.CameraSpring.Position, this.LookAtSpring.Position);
        }