private void InitializeProperties()
 {
     BrownDroprate  = new Droprate(WeaponType.Dissolved);
     SilverDroprate = new Droprate(WeaponType.Melded);
     GoldDroprate   = new Droprate(WeaponType.Sublimated);
     BlueDroprate   = new Droprate(WeaponType.Incandescent);
 }
        private void Render(Droprate droprate, DecimalUpDown r6Pre, DecimalUpDown r6Post, DecimalUpDown r7, DecimalUpDown r8, DecimalUpDown kjarr, TextBlock total)
        {
            r6Pre.Value  = droprate.R6GoldPrefix;
            r6Post.Value = droprate.R6GoldPostfix;
            r7.Value     = droprate.R7;
            r8.Value     = droprate.R8;
            kjarr.Value  = droprate.Kjarr;

            RenderTotal(droprate, total);
        }
        private void PresetDroprate(string file)
        {
            var asm = Assembly.GetExecutingAssembly();

            using (var stream = asm.GetManifestResourceStream($"MhwKtDroprateEditor.Presets.{file}"))
                using (var reader = new StreamReader(stream))
                {
                    var jsonFile  = reader.ReadToEnd();
                    var droprates = JsonConvert.DeserializeObject <Droprate[]>(jsonFile);

                    BrownDroprate  = droprates.FirstOrDefault(d => d.Type == WeaponType.Dissolved);
                    SilverDroprate = droprates.FirstOrDefault(d => d.Type == WeaponType.Melded);
                    GoldDroprate   = droprates.FirstOrDefault(d => d.Type == WeaponType.Sublimated);
                    BlueDroprate   = droprates.FirstOrDefault(d => d.Type == WeaponType.Incandescent);
                }
            Render();
        }
        private void OpenFile(object sender, RoutedEventArgs e)
        {
            var dlg = new Microsoft.Win32.OpenFileDialog
            {
                FileName         = "em117_ex_grade_lot",
                DefaultExt       = ".em117glt",
                Filter           = "KL Droprate table | *.em117glt",
                InitialDirectory = AppDomain.CurrentDomain.BaseDirectory
            };

            if (dlg.ShowDialog() == true)
            {
                var filename = dlg.FileName;
                var input    = File.ReadAllBytes(filename);
                var buffer   = new byte[1];
                for (var i = 6; i < input.Length - 1; i += 28)
                {
                    buffer[0] = input[i + 8];
                    var r6Pre  = (decimal)(BitConverter.ToInt32(input, i + 8) / 100.0);
                    var r6Post = (decimal)(BitConverter.ToInt32(input, i + 12) / 100.0);
                    var r7     = (decimal)(BitConverter.ToInt32(input, i + 16) / 100.0);
                    var r8     = (decimal)(BitConverter.ToInt32(input, i + 20) / 100.0);
                    var kjarr  = (decimal)(BitConverter.ToInt32(input, i + 24) / 100.0);
                    if (i == 6)
                    {
                        BrownDroprate = new Droprate(WeaponType.Dissolved, r6Pre, r6Post, r7, r8, kjarr);
                    }
                    else if (i == 34)
                    {
                        SilverDroprate = new Droprate(WeaponType.Melded, r6Pre, r6Post, r7, r8, kjarr);
                    }
                    else if (i == 62)
                    {
                        GoldDroprate = new Droprate(WeaponType.Sublimated, r6Pre, r6Post, r7, r8, kjarr);
                    }
                    else if (i == 90)
                    {
                        BlueDroprate = new Droprate(WeaponType.Incandescent, r6Pre, r6Post, r7, r8, kjarr);
                    }
                }

                Render();
            }
        }
 private void RenderTotal(Droprate droprate, TextBlock total)
 {
     total.Text       = $"{droprate.TotalPercentage}%";
     total.Foreground = !droprate.Valid ? Brushes.Red : Brushes.Black;
 }