/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { InputDing.PreUpdate(); if (InputDing.CurKey.IsKeyDown(Keys.Escape)) { Exit(); } if (InputDing.KeyDownUp(Keys.OemPlus) || InputDing.KeyDownUp(Keys.Add)) { speedFactor *= 2; numbertje = (numbertje - 1f) / 2f + 1f; if (speedFactor <= 0) { numbertje = 0; speedFactor = 1; } } if (InputDing.KeyDownUp(Keys.OemMinus)) { if (speedFactor >= 2) { speedFactor /= 2; numbertje = (numbertje - 1f) * 2f + 1f; } } //Line of sight stuff //Should happen when player runs out of range if (InputDing.KeyDownUp(Keys.C)) { if (chaseCamera == false) { fromAboveCamera = false; followCamera = false; } chaseCamera = !chaseCamera; } if (InputDing.KeyDownUp(Keys.B)) { chaseCameraShowDebugBlocks = !chaseCameraShowDebugBlocks; } if (chaseCamera || chaseCameraShowDebugBlocks) { if (curChaseCameraPoint == null) { curChaseCameraPoint = determiner.GetNextLosObject(); } if (curChaseCameraPoint != null) { var curmazepoint = GetPosAtThisNumerMazePoint(numbertje); var curposnumber = currentPath.IndexOf(curmazepoint); while (true) { if (!curChaseCameraPoint.LosPoints.Any(t => currentPath.Skip(curposnumber).Any(z => t.X == z.X && t.Y == z.Y))) { curChaseCameraPoint = determiner.GetNextLosObject(); if (curChaseCameraPoint == null) { break; } } else { break; } } } if (InputDing.KeyDownUp(Keys.Enter)) { curChaseCameraPoint = determiner.GetNextLosObject(); } } if (chaseCamera && curChaseCameraPoint != null) { camera.cameraPosition = new Vector3(curChaseCameraPoint.CameraPoint.X * 10.0f, 7.5f, curChaseCameraPoint.CameraPoint.Y * 10.0f); var playerPos = GetPosAtThisNumer(numbertje); var newRot = (float)Math.Atan2(playerPos.Y - curChaseCameraPoint.CameraPoint.Y, playerPos.X - curChaseCameraPoint.CameraPoint.X) * -1f - (MathHelper.Pi / 2.0f); camera.updownRot = 0; camera.leftrightRot = newRot; } if (InputDing.KeyDownUp(Keys.T)) { if (!fromAboveCamera) { chaseCamera = false; followCamera = false; drawRoof = false; camera.leftrightRot = 0.15f; camera.updownRot = -0.72f; } fromAboveCamera = !fromAboveCamera; } if (fromAboveCamera) { //float prenumbertje = numbertje - (float)gameTime.ElapsedGameTime.TotalSeconds; //var pre = GetPosAtThisNumer(prenumbertje); var now = GetPosAtThisNumer(numbertje); camera.cameraPosition = new Vector3((now.X + 1.9f) * 10.0f, (7.0f) * 10.0f, (now.Y + 7.0f) * 10.0f); } if (InputDing.KeyDownUp(Keys.O)) { if (!followCamera) { fromAboveCamera = false; chaseCamera = false; } followCamera = !followCamera; } if (followCamera) { var pospos = GetPosAtThisNumer(numbertje); var posposbefore = GetPosAtThisNumer(numbertje - (0.5f / (float)speedFactor)); var posposnext = GetPosAtThisNumer(Math.Max(numbertje + (0.5f / (float)speedFactor), 1.1f)); var pospos3d = new Vector3(pospos.X * 10.0f, 7.5f, pospos.Y * 10.0f); camera.cameraPosition = pospos3d; camera.updownRot = 0; var oldRot = camera.leftrightRot; var newRot = (float)Math.Atan2(posposnext.Y - posposbefore.Y, posposnext.X - posposbefore.X) * -1f - (MathHelper.Pi / 2.0f); //camera.leftrightRot = (9.0f * oldRot + 1.0f * newRot) / 10.0f; camera.leftrightRot = newRot; } //Reset when done if ((numbertje * speedFactor) > pathCount + speedFactor) { numbertje = 0; GenerateMaze(); } camera.Update(gameTime); if (InputDing.KeyDownUp(Keys.Up)) { numbertje = 0; curMazeWidth *= 2; curMazeHeight *= 2; GenerateMaze(); } if (InputDing.KeyDownUp(Keys.Down)) { if (curMazeWidth > 4 && curMazeHeight > 4) { numbertje = 0; curMazeWidth /= 2; curMazeHeight /= 2; if (curMazeWidth < 1) { curMazeWidth = 1; } if (curMazeHeight < 1) { curMazeHeight = 1; } GenerateMaze(); } } if (InputDing.CurKey.IsKeyDown(Keys.D0)) { GenerateMaze(); } if (InputDing.KeyDownUp(Keys.H)) { drawRoof = !drawRoof; } if (InputDing.KeyDownUp(Keys.L)) { lighting = !lighting; } if (InputDing.KeyDownUp(Keys.P)) { drawPath = !drawPath; } numbertje += (float)gameTime.ElapsedGameTime.TotalSeconds; if (InputDing.CurKey.IsKeyDown(Keys.G)) { numbertje = 0; } if (InputDing.KeyDownUp(Keys.R)) { numbertje = 0; GenerateMaze(); } InputDing.AfterUpdate(); base.Update(gameTime); }
/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { InputDing.PreUpdate(); if (InputDing.CurKey.IsKeyDown(Keys.Escape) || shouldShutdown) { Exit(); } if (InputDing.KeyDownUp(Keys.OemPlus)) { speedFactor *= 2; numbertje = (numbertje - 1f) / 2f + 1f; } if (InputDing.KeyDownUp(Keys.OemMinus)) { if (speedFactor >= 2) { speedFactor /= 2; numbertje = (numbertje - 1f) * 2f + 1f; } } if (!freeMove) { var pospos = GetPosAtThisNumer(numbertje); var posposnext = GetPosAtThisNumer(Math.Max(numbertje + (1.0f / (float)speedFactor), 1.1f)); var pospos3d = new Vector3(pospos.X * 10.0f, 7.5f, pospos.Y * 10.0f); camera.cameraPosition = pospos3d; camera.updownRot = 0; var oldRot = camera.leftrightRot; var newRot = (float)Math.Atan2(posposnext.Y - pospos.Y, posposnext.X - pospos.X) * -1f - (MathHelper.Pi / 2.0f); //camera.leftrightRot = (9.0f * oldRot + 1.0f * newRot) / 10.0f; camera.leftrightRot = newRot; } //Reset when done if ((numbertje * speedFactor) > pathCount + speedFactor) { numbertje = 0; GenerateMaze(); } camera.Update(gameTime); if (InputDing.KeyDownUp(Keys.Up)) { numbertje = 0; curMazeWidth *= 2; curMazeHeight *= 2; GenerateMaze(); } if (InputDing.KeyDownUp(Keys.Down)) { numbertje = 0; curMazeWidth /= 2; curMazeHeight /= 2; if (curMazeWidth < 1) { curMazeWidth = 1; } if (curMazeHeight < 1) { curMazeHeight = 1; } GenerateMaze(); } if (InputDing.CurKey.IsKeyDown(Keys.R)) { GenerateMaze(); } if (InputDing.KeyDownUp(Keys.H)) { drawRoof = !drawRoof; } if (InputDing.KeyDownUp(Keys.L)) { lighting = !lighting; } numbertje += (float)gameTime.ElapsedGameTime.TotalSeconds; if (InputDing.CurKey.IsKeyDown(Keys.G)) { numbertje = 0; } if (InputDing.KeyDownUp(Keys.P)) { numbertje = 0; GenerateMaze(); } if (InputDing.KeyDownUp(Keys.O)) { freeMove = !freeMove; } InputDing.AfterUpdate(); base.Update(gameTime); }