1
0

WorldGen.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System.Diagnostics.Contracts;
  2. using System.Numerics;
  3. namespace Content.Server.Worldgen;
  4. /// <summary>
  5. /// Contains a few world-generation related constants and static functions.
  6. /// </summary>
  7. public static class WorldGen
  8. {
  9. /// <summary>
  10. /// The size of each chunk (isn't that self-explanatory.)
  11. /// Be careful about how small you make this.
  12. /// </summary>
  13. public const int ChunkSize = 128;
  14. /// <summary>
  15. /// Converts world coordinates to chunk coordinates.
  16. /// </summary>
  17. /// <param name="inp">World coordinates</param>
  18. /// <returns>Chunk coordinates</returns>
  19. [Pure]
  20. public static Vector2i WorldToChunkCoords(Vector2i inp)
  21. {
  22. return (inp * new Vector2(1.0f / ChunkSize, 1.0f / ChunkSize)).Floored();
  23. }
  24. /// <summary>
  25. /// Converts world coordinates to chunk coordinates.
  26. /// </summary>
  27. /// <param name="inp">World coordinates</param>
  28. /// <returns>Chunk coordinates</returns>
  29. [Pure]
  30. public static Vector2 WorldToChunkCoords(Vector2 inp)
  31. {
  32. return inp * new Vector2(1.0f / ChunkSize, 1.0f / ChunkSize);
  33. }
  34. /// <summary>
  35. /// Converts chunk coordinates to world coordinates.
  36. /// </summary>
  37. /// <param name="inp">Chunk coordinates</param>
  38. /// <returns>World coordinates</returns>
  39. [Pure]
  40. public static Vector2 ChunkToWorldCoords(Vector2i inp)
  41. {
  42. return inp * ChunkSize;
  43. }
  44. /// <summary>
  45. /// Converts chunk coordinates to world coordinates.
  46. /// </summary>
  47. /// <param name="inp">Chunk coordinates</param>
  48. /// <returns>World coordinates</returns>
  49. [Pure]
  50. public static Vector2 ChunkToWorldCoords(Vector2 inp)
  51. {
  52. return inp * ChunkSize;
  53. }
  54. /// <summary>
  55. /// Converts chunk coordinates to world coordinates, getting the center of the chunk.
  56. /// </summary>
  57. /// <param name="inp">Chunk coordinates</param>
  58. /// <returns>World coordinates</returns>
  59. [Pure]
  60. public static Vector2 ChunkToWorldCoordsCentered(Vector2i inp)
  61. {
  62. return inp * ChunkSize + Vector2i.One * (ChunkSize / 2);
  63. }
  64. }