using MrGameEng.Core; using MrGameEng.Lighting; using Xunit; namespace MrGameEng.Lighting.Tests; public class DayNightTests { private static (GameClock Clock, DayNight DayNight) Make() { var clock = new GameClock(); var calendar = new Calendar(clock, secondsPerDay: 24f); // 1 second = 1 in-game hour return (clock, new DayNight(calendar, DayNightSettings.Default)); } [Fact] public void Daylight_ZeroAtMidnight_OneAtNoon() { var (clock, dayNight) = Make(); Assert.Equal(0f, dayNight.Daylight, 3); // 00:00 clock.Advance(12f); // 12:00 Assert.Equal(1f, dayNight.Daylight, 3); } [Fact] public void Daylight_RisesFromDawnToNoon() { var (clock, dayNight) = Make(); clock.Advance(6f); // 06:00 var dawn = dayNight.Daylight; clock.Advance(3f); // 09:00 var mid = dayNight.Daylight; clock.Advance(3f); // 12:00 var noon = dayNight.Daylight; Assert.True(dawn < mid && mid < noon, "daylight should rise from dawn to noon"); } [Fact] public void Ambient_DarkerAtNightThanAtNoon() { var (clock, dayNight) = Make(); var night = dayNight.Ambient; // 00:00 clock.Advance(12f); // 12:00 var noon = dayNight.Ambient; Assert.True(night.R < noon.R && night.G < noon.G && night.B < noon.B); Assert.Equal(255, noon.R); // day color is white at noon } }