protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) { this.Exit(); } updatesPerSecondMonitor.Frame(); // // Get Controls // KeyboardState keyboardState = Keyboard.GetState(); MouseState mouseState = Mouse.GetState(); // // Update Camera Controls // cameraXControl.Update(keyboardState, ref cameraX); cameraYControl.Update(keyboardState, ref cameraY); // // Update Grid // for (int updateCount = 0; updateCount < updatesPerFrame; updateCount++) { // // Update Velocities from gravity // for (int i = 0; i < dots.Count; i++) { Dot dot = dots[i]; for (int j = 0; j < dots.Count; j++) { if (j == i) { continue; } Dot compare = dots[j]; Int32 xDiff = compare.x - dot.x; Int32 yDiff = compare.y - dot.y; Int32 distanceSquared = xDiff * xDiff + yDiff * yDiff; Int32 force = 50 / distanceSquared; Int32 xForce = xDiff * force; Int32 yForce = yDiff * force; /* * if (xForce != 0) * { * Console.WriteLine("xForce = {0}", xForce); * compare.speedInverseX -= xForce; * dot.speedInverseX += xForce; * } * * compare.speedInverseY -= yForce; * dot.speedInverseY += yForce; */ } } // // Update Positions // for (int i = 0; i < dots.Count; i++) { Dot dot = dots[i]; dot.Update(); // // Fix Edge of Universe // if (dot.x < minX) { if (universeEdgeRule == UniverseEdgeRules.Reflect) { dot.x = 2 * minX - dot.x; dot.updatesPer8DotsX *= -1; } else { throw new InvalidOperationException(String.Format("Unhandled Universe Edge Rule '{0}'", universeEdgeRule)); } } else if (dot.x > maxX) { if (universeEdgeRule == UniverseEdgeRules.Reflect) { dot.x = 2 * maxX - dot.x; dot.updatesPer8DotsX *= -1; } else { throw new InvalidOperationException(String.Format("Unhandled Universe Edge Rule '{0}'", universeEdgeRule)); } } if (dot.y < minY) { if (universeEdgeRule == UniverseEdgeRules.Reflect) { dot.y = 2 * minY - dot.y; dot.updatesPer8DotsY *= -1; } else { throw new InvalidOperationException(String.Format("Unhandled Universe Edge Rule '{0}'", universeEdgeRule)); } } else if (dot.y > maxY) { if (universeEdgeRule == UniverseEdgeRules.Reflect) { dot.y = 2 * maxY - dot.y; dot.updatesPer8DotsY *= -1; } else { throw new InvalidOperationException(String.Format("Unhandled Universe Edge Rule '{0}'", universeEdgeRule)); } } } } // // Update animations // }
protected override void Draw(GameTime gameTime) { fpsMonitor.Frame(); GraphicsDevice.Clear(Color.CornflowerBlue); Viewport viewport = GraphicsDevice.Viewport; Int32 viewWidth = viewport.Width; Int32 viewHeight = viewport.Height; // // Draw edges of the universe // spriteBatch.Begin(); // left spriteBatch.FillRectangle( new Vector2((minX - 5 - cameraX) * pixelsPerDot, (minY - 5 - cameraY) * pixelsPerDot), new Vector2(5 * pixelsPerDot, (height + 10) * pixelsPerDot), Color.Gray); // right spriteBatch.FillRectangle( new Vector2((maxX - cameraX) * pixelsPerDot, (minY - 5 - cameraY) * pixelsPerDot), new Vector2(5 * pixelsPerDot, (height + 10) * pixelsPerDot), Color.Gray); // top spriteBatch.FillRectangle( new Vector2((minX - cameraX) * pixelsPerDot, (minY - 5 - cameraY) * pixelsPerDot), new Vector2(width * pixelsPerDot, 5 * pixelsPerDot), Color.Gray); // bottom spriteBatch.FillRectangle( new Vector2((minX - cameraX) * pixelsPerDot, (maxY - cameraY) * pixelsPerDot), new Vector2(width * pixelsPerDot, 5 * pixelsPerDot), Color.Gray); spriteBatch.End(); spriteBatch.Begin(); // draw grid Vector2 one, two; one.Y = (minY - cameraY) * pixelsPerDot; two.Y = (maxY - cameraY) * pixelsPerDot; for (int i = (int)minX; i <= (int)maxX; i += gridWidth) { one.X = (i - cameraX) * pixelsPerDot; two.X = (i - cameraX) * pixelsPerDot; spriteBatch.DrawLine(one, two, Color.Black); } one.X = (minX - cameraX) * pixelsPerDot; two.X = (maxX - cameraX) * pixelsPerDot; for (int i = (int)minY; i <= (int)maxY; i += gridHeight) { one.Y = (i - cameraY) * pixelsPerDot; two.Y = (i - cameraY) * pixelsPerDot; spriteBatch.DrawLine(one, two, Color.Black); } spriteBatch.End(); spriteBatch.Begin(); if (pixelsPerDot == 1) { Vector2 vector; for (int i = 0; i < dots.Count; i++) { Dot dot = dots[i]; vector.X = (dot.x - cameraX) * pixelsPerDot; vector.Y = (dot.y - cameraY) * pixelsPerDot; spriteBatch.Draw(Primitives2D.pixel, vector, Color.White); } } else if (pixelsPerDot > 1) { Rectangle rectangle; for (int i = 0; i < dots.Count; i++) { Dot dot = dots[i]; rectangle.X = ((Int32)dot.x - cameraX) * pixelsPerDot; rectangle.Y = ((Int32)dot.y - cameraY) * pixelsPerDot; rectangle.Width = pixelsPerDot; rectangle.Height = pixelsPerDot; spriteBatch.FillRectangle(rectangle, Color.White); } } spriteBatch.End(); spriteBatch.Begin(); spriteBatch.DrawString(miramonte18Font, String.Format("Camera {0}x{1} FPS {2} UPS {3}", cameraX, cameraY, fpsMonitor.CalculateFps(), updatesPerSecondMonitor.CalculateFps()), new Vector2(0, 0), Color.Black); spriteBatch.End(); base.Draw(gameTime); }
protected override void Draw(GameTime gameTime) { // // Create Center Translation Matrix // Int32 viewWidth = GraphicsDevice.Viewport.Width; Int32 viewWidthHalf = viewWidth / 2; Int32 viewHeight = GraphicsDevice.Viewport.Height; Int32 viewHeightHalf = viewHeight / 2; //Matrix centerTranslationMatrix = Matrix.CreateTranslation(viewWidthHalf, viewHeightHalf, 0); fpsMonitor.Frame(); GraphicsDevice.Clear(backgroundColor); // // Draw Lines // spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, gameWorldMatrix); spriteBatch.DrawLine(-maxWidthOrHeight, 0, maxWidthOrHeight, 0, Color.White); // Horizontal Line spriteBatch.DrawLine(0, -maxWidthOrHeight, 0, maxWidthOrHeight, Color.White); // Vertical Line spriteBatch.End(); // // Draw Obstacles // for (int i = 0; i < obstacles.Count; i++) { Obstacle obstacle = obstacles[i]; UInt32 stepDistanceToObstacle = obstacleDistances[i]; obstacle.Draw(spriteBatch, gameWorldMatrix, stepDistanceToObstacle); } // // Draw Player Position // // Get player angle float angle = (float)(playerPosition * 2 * Math.PI) / (float)PlayerPositionRange; spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, Matrix.CreateTranslation(-playerIconWidth / 2, -85, 0) * Matrix.CreateRotationZ(angle) * gameWorldMatrix); spriteBatch.FillRectangle(new Vector2(0, 0), new Vector2(playerIconWidth, 20), Color.White, 0); spriteBatch.End(); /* * spriteBatch.GraphicsDevice.FillQuad( * new Vector2(0, 0), * new Vector2(0, 10), * new Vector2(10, 10), * new Vector2(10, 0), * Color.White); */ spriteBatch.GraphicsDevice.FillQuad( new Vector2(-.2f, -.2f), new Vector2(-.2f, 0), new Vector2(0, 0), new Vector2(0, -.2f), Matrix.CreateRotationZ(angle), Color.White); // // Draw Debug Messages // spriteBatch.Begin(); spriteBatch.DrawString(miramonte18Font, String.Format("FPS {0} PlayerPosition {1,-3} Angle {2} BackColor {3}", fpsMonitor.CalculateFps(), playerPosition, angle, backgroundColor), new Vector2(10, 20), Color.Black); spriteBatch.End(); }