public static partial void WriteBinaryDirectionalAmbientLightingColorsCustom(MutagenWriter writer, IWeatherGetter item) { if (item.DirectionalAmbientLightingColors is not { } colors) { return; } using (HeaderExport.Subrecord(writer, RecordTypes.DALC)) { colors.Sunrise.WriteToBinary(writer); } using (HeaderExport.Subrecord(writer, RecordTypes.DALC)) { colors.Day.WriteToBinary(writer); } using (HeaderExport.Subrecord(writer, RecordTypes.DALC)) { colors.Sunset.WriteToBinary(writer); } using (HeaderExport.Subrecord(writer, RecordTypes.DALC)) { colors.Night.WriteToBinary(writer); } }
public WeatherService(ILocationGetter locationGetter, IWeatherGetter weatherGetter) { _locationGetter = locationGetter; _weatherGetter = weatherGetter; }
public static partial void WriteBinaryDisabledCloudLayersCustom(MutagenWriter writer, IWeatherGetter item) { var clouds = item.Clouds; Span <bool?> enabled = stackalloc bool?[WeatherBinaryCreateTranslation.NumLayers]; bool any = false; for (int i = 0; i < WeatherBinaryCreateTranslation.NumLayers; i++) { enabled[i] = clouds[i].Enabled; any |= enabled[i].HasValue; } if (!any) { return; } using (HeaderExport.Subrecord(writer, RecordTypes.NAM1)) { uint raw = 0; uint index = 1; for (int i = 0; i < WeatherBinaryCreateTranslation.NumLayers; i++) { var enable = enabled[i] ?? true; // Inverse because we're exposing as enabled raw = EnumExt.SetFlag(raw, index, !enable); index <<= 1; } writer.Write(raw); } }
public static partial void WriteBinaryCloudXSpeedsCustom(MutagenWriter writer, IWeatherGetter item) { }
public static partial void WriteBinaryCloudsCustom(MutagenWriter writer, IWeatherGetter item) { bool HasAny(Span <float?> span) { for (int i = 0; i < span.Length; i++) { if (span[i].HasValue) { return(true); } } return(false); } var version = item.FormVersion; Span <float?> xSpeeds = stackalloc float?[WeatherBinaryCreateTranslation.NumLayers]; Span <float?> ySpeeds = stackalloc float?[WeatherBinaryCreateTranslation.NumLayers]; var alphas = new IWeatherAlphaGetter?[WeatherBinaryCreateTranslation.NumLayers]; var colors = new IWeatherColorGetter?[WeatherBinaryCreateTranslation.NumLayers]; foreach (var cloud in item.Clouds.WithIndex()) { xSpeeds[cloud.Index] = cloud.Item.XSpeed; ySpeeds[cloud.Index] = cloud.Item.YSpeed; alphas[cloud.Index] = cloud.Item.Alphas; colors[cloud.Index] = cloud.Item.Colors; } if (HasAny(ySpeeds) || HasAny(xSpeeds)) { // Write YSpeeds using (HeaderExport.Subrecord(writer, RecordTypes.RNAM)) { for (int i = 0; i < ySpeeds.Length; i++) { writer.Write(ConvertFromSpeed(ySpeeds[i] ?? default(byte))); } } // Write XSpeeds using (HeaderExport.Subrecord(writer, RecordTypes.QNAM)) { for (int i = 0; i < xSpeeds.Length; i++) { writer.Write(ConvertFromSpeed(xSpeeds[i] ?? default(byte))); } } } // Write colors if (colors.Any(a => a != null)) { using (HeaderExport.Subrecord(writer, RecordTypes.PNAM)) { for (int i = 0; i < colors.Length; i++) { var color = colors[i]; if (color == null) { writer.WriteZeros(16); } else { ColorBinaryTranslation.Instance.Write(writer, color.Sunrise); ColorBinaryTranslation.Instance.Write(writer, color.Day); ColorBinaryTranslation.Instance.Write(writer, color.Sunset); ColorBinaryTranslation.Instance.Write(writer, color.Night); } // Special case for older version if (version == 31 && i == 3) { break; } } } } // Write alphas if (alphas.Any(a => a != null)) { using (HeaderExport.Subrecord(writer, RecordTypes.JNAM)) { for (int i = 0; i < alphas.Length; i++) { var alpha = alphas[i]; if (alpha == null) { writer.WriteZeros(16); } else { writer.Write(alpha.Sunrise); writer.Write(alpha.Day); writer.Write(alpha.Sunset); writer.Write(alpha.Night); } } } } }
public static partial void WriteBinaryCloudTexturesParseCustom(MutagenWriter writer, IWeatherGetter item) { var cloudTex = item.CloudTextures; for (int i = 0; i < cloudTex.Length; i++) { if (cloudTex[i] is not { } tex) { continue; } using (HeaderExport.Subrecord(writer, new RecordType(WeatherBinaryCreateTranslation.TextureIntBase + i))) { writer.Write(tex, StringBinaryType.NullTerminate, writer.MetaData.Encodings.NonTranslated); } } }
static partial void WriteBinaryCloudTexturesParseCustom(MutagenWriter writer, IWeatherGetter item) { var cloudTex = item.CloudTextures; for (int i = 0; i < cloudTex.Length; i++) { if (!cloudTex[i].TryGet(out var tex)) { continue; } using (HeaderExport.Subrecord(writer, new RecordType(WeatherBinaryCreateTranslation.TextureIntBase + i))) { writer.Write(tex, StringBinaryType.NullTerminate); } } }