using System.Diagnostics.Contracts; using System.Numerics; namespace Content.Server.Worldgen; /// /// Contains a few world-generation related constants and static functions. /// public static class WorldGen { /// /// The size of each chunk (isn't that self-explanatory.) /// Be careful about how small you make this. /// public const int ChunkSize = 128; /// /// Converts world coordinates to chunk coordinates. /// /// World coordinates /// Chunk coordinates [Pure] public static Vector2i WorldToChunkCoords(Vector2i inp) { return (inp * new Vector2(1.0f / ChunkSize, 1.0f / ChunkSize)).Floored(); } /// /// Converts world coordinates to chunk coordinates. /// /// World coordinates /// Chunk coordinates [Pure] public static Vector2 WorldToChunkCoords(Vector2 inp) { return inp * new Vector2(1.0f / ChunkSize, 1.0f / ChunkSize); } /// /// Converts chunk coordinates to world coordinates. /// /// Chunk coordinates /// World coordinates [Pure] public static Vector2 ChunkToWorldCoords(Vector2i inp) { return inp * ChunkSize; } /// /// Converts chunk coordinates to world coordinates. /// /// Chunk coordinates /// World coordinates [Pure] public static Vector2 ChunkToWorldCoords(Vector2 inp) { return inp * ChunkSize; } /// /// Converts chunk coordinates to world coordinates, getting the center of the chunk. /// /// Chunk coordinates /// World coordinates [Pure] public static Vector2 ChunkToWorldCoordsCentered(Vector2i inp) { return inp * ChunkSize + Vector2i.One * (ChunkSize / 2); } }