A stealth-based 2D platformer where you don't have to kill anyone unless you want to. https://www.semicolin.games
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
1.1 KiB

  1. using Microsoft.Xna.Framework;
  2. using System;
  3. // Good background reading, eventually:
  4. // https://gamasutra.com/blogs/ItayKeren/20150511/243083/Scroll_Back_The_Theory_and_Practice_of_Cameras_in_SideScrollers.php
  5. namespace SemiColinGames {
  6. class Camera {
  7. // Screen size in pixels is 1920x1080 divided by 4.
  8. private Rectangle bbox = new Rectangle(0, 0, 480, 270);
  9. public int Width { get => bbox.Width; }
  10. public int Height { get => bbox.Height; }
  11. public int Left { get => bbox.Left; }
  12. public int Top { get => bbox.Top; }
  13. public Matrix Projection {
  14. get => Matrix.CreateOrthographicOffCenter(Left, Left + Width, Height, 0, -1, 1);
  15. }
  16. public void Update(Point player, int worldWidth) {
  17. int diff = player.X - bbox.Center.X;
  18. if (Math.Abs(diff) > 16) {
  19. bbox.Offset((int) (diff * 0.1), 0);
  20. }
  21. if (bbox.Left < 0) {
  22. bbox.Offset(-bbox.Left, 0);
  23. }
  24. if (bbox.Right > worldWidth) {
  25. bbox.Offset(worldWidth - bbox.Right, 0);
  26. }
  27. Debug.AddToast($"p: {player.X}, {player.Y} c: {bbox.Center.X}");
  28. }
  29. }
  30. }