public NightshiftTicker(ImageDatabase newImageDatabase, SunriseSunset newSunriseSunset) { imageDatabase = newImageDatabase; sunriseSunset = newSunriseSunset; lastId = -1; }
static double GetNightIndex(LocalTime time, SunriseSunset sunriseSunset) { var transitionInterval = 1.0; var timeHours = TimeToHours(time); var sunriseHours = TimeToHours(sunriseSunset.Sunrise); var sunsetHours = TimeToHours(sunriseSunset.Sunset); var sunriseDelta = sunriseHours - timeHours; var sunsetDelta = timeHours - sunsetHours; var minAbsDelta = Min(Abs(sunriseDelta), Abs(sunsetDelta)); if (sunriseHours < sunsetHours) { if (sunriseDelta >= 0 || sunsetDelta >= 0) { var minDelta = minAbsDelta; if (minDelta >= transitionInterval / 2) { return(1); } return((minDelta + transitionInterval / 2) / transitionInterval); } else { var maxDelta = -minAbsDelta; if (maxDelta <= -transitionInterval / 2) { return(0); } return((transitionInterval / 2 + maxDelta) / transitionInterval); } } else { if (sunriseDelta >= 0 && sunsetDelta >= 0) { var minDelta = minAbsDelta; if (minDelta >= transitionInterval / 2) { return(1); } return((minDelta + transitionInterval / 2) / transitionInterval); } else { var maxDelta = -minAbsDelta; if (maxDelta <= -transitionInterval / 2) { return(0); } return((transitionInterval / 2 + maxDelta) / transitionInterval); } } }