namespace VoxelEngine.Core; public sealed class Configuration { public int RenderDistanceHorizontal { get; set; } = 8; public int RenderDistanceVertical { get; set; } = 2; public int SpawnReadyRadiusHorizontal { get; set; } = 1; public int MaxGenerateJobsInFlight { get; set; } = 8; public int MaxMeshUploadsPerFrame { get; set; } = 4; public int WorkerThreadCount { get; set; } = Math.Max(1, Environment.ProcessorCount / 2); // Multiplier applied to (dy)^2 in chunk-load priority. >1 prioritizes // chunks at the player's Y over equally-distant chunks above/below, so the // visible surface fills in before far-underground / overhead chunks. public int VerticalPriorityWeight { get; set; } = 4; public float MoveSpeed { get; set; } = 8f; public float MouseSensitivity { get; set; } = 0.15f; public float Fov { get; set; } = 60f; public int WindowWidth { get; set; } = 1280; public int WindowHeight { get; set; } = 720; public int? Seed { get; set; } = null; // -- Cave generation tuning -- public float CaveNoiseFrequency { get; set; } = 0.03f; public float CaveNoiseThreshold { get; set; } = -0.3f; public int WormCellSize { get; set; } = 64; public int WormSpawnProbabilityPermille { get; set; } = 300; public int WormMaxLength { get; set; } = 80; public float WormMinRadius { get; set; } = 1.5f; public float WormMaxRadius { get; set; } = 3.5f; // -- Cave lighting (fog-distance darkness) -- public float CaveDarkStartY { get; set; } = 72f; // WorldConstants.SeaLevel + 8 public float CaveDarkEndY { get; set; } = 32f; // WorldConstants.SeaLevel - 32 public float CaveMinBrightness { get; set; } = 0.15f; }