Example #1
0
 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);
     }
 }
Example #2
0
 public WeatherService(ILocationGetter locationGetter, IWeatherGetter weatherGetter)
 {
     _locationGetter = locationGetter;
     _weatherGetter  = weatherGetter;
 }
Example #3
0
            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);
                }
            }
Example #4
0
 public static partial void WriteBinaryCloudXSpeedsCustom(MutagenWriter writer, IWeatherGetter item)
 {
 }
Example #5
0
            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);
                            }
                        }
                    }
                }
            }
Example #6
0
            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);
                    }
                }
            }
Example #7
0
            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);
                    }
                }
            }