public static WeatherObject NextDay(WeatherObject lastDay) { int averageTemp = 0; int season = 0; switch (lastDay.Date.Month) { case 1: case 2: case 12: averageTemp = (int)RandomBiasedPow(lastDay.High - 7, lastDay.High + 4, 3, lastDay.High); if (averageTemp < -3) { averageTemp = -3; } if (averageTemp > 8) { averageTemp = 8; } season = 0; break; case 3: case 4: case 5: averageTemp = (int)RandomBiasedPow(lastDay.High - 7, lastDay.High + 7, 3, lastDay.High); if (averageTemp < 5) { averageTemp = 5; } if (averageTemp > 12) { averageTemp = 12; } season = 1; break; case 6: case 7: case 8: averageTemp = (int)RandomBiasedPow(lastDay.High - 4, lastDay.High + 7, 3, lastDay.High); if (averageTemp < 7) { averageTemp = 7; } if (averageTemp > 18) { averageTemp = 18; } season = 2; break; case 9: case 10: case 11: averageTemp = (int)RandomBiasedPow(lastDay.High - 7, lastDay.High + 7, 3, lastDay.High); if (averageTemp < 5) { averageTemp = 5; } if (averageTemp > 12) { averageTemp = 12; } season = 3; break; default: break; } int maxTemp = averageTemp + r.Next(1, 5); int minTemp = averageTemp - r.Next(1, 5); return(new WeatherObject(lastDay.Date.AddDays(1), maxTemp, minTemp, ChooseWeatherType(maxTemp, minTemp, season, (int)lastDay.Type), (int)RandomBiasedPow(1, 70, 4, 10), ChooseWindDirection(), (int)RandomBiasedPow(20, 100, 5, 70))); }
public static string GenerateOneDay(WeatherObject day, string output) { string border = "Weather/one.png"; var fontCollection = new FontCollection(); var parentFont = fontCollection.Install("Weather/main.ttf").CreateFont(70, FontStyle.Bold); var childFont = new Font(parentFont, 90); var subFont = new Font(parentFont, 35); using (Image <Rgba32> backgroundImage = Image.Load(border)) { int imageX = 105; string maxTemp = day.High + "°C"; string minTemp = day.Low + "°C"; var maxSize = TextMeasurer.Measure(maxTemp, new RendererOptions(parentFont)); var maxOffset = 180 - maxSize.Width / 2; var minSize = TextMeasurer.Measure(minTemp, new RendererOptions(parentFont)); var minOffset = 405 - minSize.Width / 2; string dayString = DateTime.Today.ToString($"ddd, dd MMM"); var dateSize = TextMeasurer.Measure(dayString, new RendererOptions(parentFont)); var dateOffset = 307 - dateSize.Width / 2; string windDescriptor = ""; if (day.WindSpeed < 15) { windDescriptor = "Light"; } if (day.WindSpeed >= 15 && day.WindSpeed < 30) { windDescriptor = "Moderate"; } if (day.WindSpeed >= 30 && day.WindSpeed < 60) { windDescriptor = "Strong"; } if (day.WindSpeed >= 60) { windDescriptor = "Gale Force"; } string wind = $"{windDescriptor}, {day.WindSpeed} km/h {day.WindDirection}"; var windSize = TextMeasurer.Measure(wind, new RendererOptions(subFont)); var windOffset = 307 - windSize.Width / 2; Coords.GeoDate = day.Date; string sunrise = "Sunrise: " + Coords.CelestialInfo.SunRise.GetValueOrDefault().ToString("hh:mm tt"); string sunset = "Sunset: " + Coords.CelestialInfo.SunSet.GetValueOrDefault().ToString("hh:mm tt"); var sunriseSize = TextMeasurer.Measure(sunrise, new RendererOptions(subFont)); var sunriseOffset = 307 - sunriseSize.Width / 2; var sunsetSize = TextMeasurer.Measure(sunset, new RendererOptions(subFont)); var sunsetOffset = 307 - sunsetSize.Width / 2; string humidity = "Humidity: " + day.Humidity + "%"; var humiditySize = TextMeasurer.Measure(humidity, new RendererOptions(subFont)); var humidityOffset = 307 - humiditySize.Width / 2; var image1 = Image.Load($"Weather/{day.Type.ToString()}.png"); backgroundImage.Mutate(x => x.DrawImage(image1, 1, new Point(imageX, 825)).DrawText(dayString, parentFont, Rgba32.Black, new PointF(dateOffset, 370)).DrawText(maxTemp, childFont, Rgba32.Black, new PointF(maxOffset, 445)).DrawText(minTemp, childFont, Rgba32.FromHex("#4E4E4E"), new PointF(minOffset, 445)).DrawText(wind, subFont, Rgba32.Black, new PointF(windOffset, 570)).DrawText(sunrise, subFont, Rgba32.Black, new PointF(sunriseOffset, 620)).DrawText(sunset, subFont, Rgba32.Black, new PointF(sunsetOffset, 670)).DrawText(humidity, subFont, Rgba32.Black, new PointF(humidityOffset, 720))); backgroundImage.Save($"Weather/{output}.png"); return($"Weather/{output}.png"); } }