Nighticus

URW_CharDesignerSource1.0.0

Oct 19th, 2020
89
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace URWCharacterDesigner
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.         }
  20.  
  21.         //public List<string> cLayers = new List<string>(new []{ "Head", "Face", "Hands", "Arms", "Chest", "Waist", "Legs", "Feet", "Hair", "Beard"});
  22.         //public List<string> cMaterials = new List<string>(new[] { "Birch", "Bark", "Linen", "Nettle", "Woolen", "Leather", "Fur", "Lamellar", "Mail", "Iron" });
  23.         //public List<string> cType = new List<string>(new[] { "Apron", "Belt", "Cap", "Cloak", "Coudes", "Cowl", "Cowl, long", "Cuirass", "Dress", "Footrags", "Footwear", "Forearm guards", "Gauntlets", "Habergeon", "Hauberk", "Hauberk, long", "Helm", "Helm /w spectacle", "Hood", "Kneecops", "Leggings", "Mittens", "Mittens (+ forearm)", "Necklace", "Overcoat", "Rerebraces", "Shirt", "Shirt, long sleeves", "Shin guards", "Shoes", "Shoes, laced", "Socks", "Trousers", "Tunic", "Undergarment", "Undershirt", "Veil", "Beard" });
  24.         //public List<string> cVarient = new List<string>(new[] { "Sheep (wool)", "Bear", "Badger", "Glutton", "Beaver", "Reindeer", "(Artic) Fox", "Elk", "Wolf", "Lynx", "Polecat", "Weasel", "Pine-marten", "Hare", "Ermine", "Squirrel", "Black grouse", "Capercaillie", "Pig", "Snake", "Boar", "Cow", "Dog", "Sow", "Swan" });
  25.         public List<Sprite> LoadedSprites = new List<Sprite>();
  26.         public Sprite SelectedSprite = null;
  27.         public int[] IndexMath = new int[] { 0, 8, 11, 19 };
  28.  
  29.         public int ImageIndex
  30.         {
  31.             get
  32.             {
  33.                 if (cbState.SelectedIndex == 1)
  34.                 {
  35.                     return IndexMath[1];
  36.                 }
  37.                 else if (chb8Directional.Checked)
  38.                 {
  39.                     return IndexMath[cbState.SelectedIndex] + cbDirection.SelectedIndex;
  40.                 }
  41.                 else
  42.                 {
  43.                     if (cbDirection.SelectedIndex < 2 || cbDirection.SelectedIndex > 5)
  44.                     {
  45.                         return IndexMath[cbState.SelectedIndex] + 5;
  46.                     }
  47.                     else
  48.                     {
  49.                         return IndexMath[cbState.SelectedIndex] + 7;
  50.                     }
  51.                 }
  52.             }
  53.         }
  54.  
  55.         public List<Sprite> SpriteLayers = new List<Sprite>();
  56.  
  57.         private void Form1_Load(object sender, EventArgs e)
  58.         {
  59.             ReadConfig();
  60.         }
  61.  
  62.  
  63.         public bool HasSpriteL(string Name)
  64.         {
  65.             foreach (Sprite s in SpriteLayers)
  66.             {
  67.                 if (s.Name == Name)
  68.                 {
  69.                     return true;
  70.                 }
  71.             }
  72.             return false;
  73.         }
  74.  
  75.         public Sprite GetSpriteL(string Name)
  76.         {
  77.             foreach (Sprite s in SpriteLayers)
  78.             {
  79.                 if (s.Name == Name)
  80.                 {
  81.                     return s;
  82.                 }
  83.             }
  84.             return null;
  85.         }
  86.  
  87.         public Sprite GetSprite(string Name)
  88.         {
  89.             foreach (Sprite s in LoadedSprites)
  90.             {
  91.                 if (s.Name == Name)
  92.                 {
  93.                     return s;
  94.                 }
  95.             }
  96.             return null;
  97.         }
  98.  
  99.         public Sprite GetSprite(string Layer, string Material, string Type, string Variant)
  100.         {
  101.             foreach (Sprite s in LoadedSprites)
  102.             {
  103.                 if (s.Layer == Layer && s.Material == Material && s.Type == Type && s.Variant == Variant)
  104.                 {
  105.                     // LoadSpritePreview
  106.                     pbItemPreview.Image = GetSpriteImages(s.FilePath)[ImageIndex];
  107.                     return s;
  108.                 }
  109.             }
  110.             return null;
  111.         }
  112.  
  113.         public void ValidateSpriteFiles()
  114.         {
  115.             foreach (Sprite s in LoadedSprites)
  116.             {
  117.                 //MessageBox.Show(ImagePaths[0]);
  118.                 if (!File.Exists(s.FilePath))
  119.                 {
  120.                     LoadedSprites.Remove(s);
  121.                     if (MessageBox.Show(string.Format("Sprite image file does not exist in sprites folder: {0}", s.FilePath), "File not found", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
  122.                     {
  123.                         Environment.Exit(0);
  124.                     }
  125.                 }
  126.             }
  127.         }
  128.  
  129.         public List<Bitmap> GetSpriteImages(string Path) // PC model
  130.         {
  131.             List<Bitmap> Return = new List<Bitmap>();
  132.             using (Bitmap bmpSprite = new Bitmap(Path))
  133.             {
  134.                 bmpSprite.MakeTransparent(bmpSprite.GetPixel(0, 0));
  135.                 for (int i = 0; i < 27; i++)
  136.                 {
  137.                     Return.Add(bmpSprite.Clone(new Rectangle(1 + (i * 65), 1, 64, 64), System.Drawing.Imaging.PixelFormat.DontCare));
  138.                 }
  139.             }
  140.             return Return;
  141.         }
  142.  
  143.         public Bitmap GetCompiledLayers()
  144.         {
  145.             int[] DirectionRight = { 0, 1, 6, 7, 11, 12, 17, 18, 19, 20, 25, 26 }; // 7
  146.             int[] DirectionLeft = { 2, 3, 4, 5, 13, 14, 15, 16, 21, 22, 23, 24 }; // 5
  147.             Bitmap Return = new Bitmap(1800, 66);
  148.             {
  149.                 using (Graphics g = Graphics.FromImage(Return))
  150.                 {
  151.                     g.FillRectangle(Brushes.DarkMagenta, 0, 0, 1800, 66);
  152.                     for (int i = lbLayers.Items.Count - 1; i > -1; i--)
  153.                     {
  154.                         if (HasSpriteL(lbLayers.Items[i].ToString()))
  155.                         {
  156.                             using (Bitmap bmpLoaded = new Bitmap(GetSpriteL(lbLayers.Items[i].ToString()).FilePath))
  157.                             {
  158.                                 bmpLoaded.MakeTransparent(bmpLoaded.GetPixel(0, 0));
  159.  
  160.                                 if (chbAddAll.Checked) // Generate all from 1 image 2dir
  161.                                 {
  162.                                     if (!chb8Directional.Checked)
  163.                                     {
  164.                                         Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle(1, 1, 64, 64), System.Drawing.Imaging.PixelFormat.DontCare);
  165.  
  166.                                         for (int x = 0; x < 28; x++)
  167.                                         {
  168.                                             g.DrawImage(BmpHolder, new Rectangle((x * 65) + 1, 1, 64, 64));
  169.                                             g.FillRectangle(Brushes.White, new Rectangle((65 * 27) + 1, 0, 66, 66));
  170.                                         }
  171.                                     }
  172.                                 }
  173.  
  174.                                 if (chb8Directional.Checked)
  175.                                 {
  176.                                     g.DrawImage(bmpLoaded, new Rectangle(0, 0, 1800, 66));
  177.                                     g.FillRectangle(Brushes.White, new Rectangle((65 * 27) + 1, 0, 66, 66));
  178.                                 }
  179.                                 else // generates 2dir from 8dir
  180.                                 {
  181.                                     int LR = 0;
  182.                                     int State = 0;
  183.                                     for (int x = 0; x < 28; x++)
  184.                                     {
  185.                                         if (DirectionRight.Contains(x))
  186.                                         {
  187.                                             LR = 7;
  188.                                         }
  189.                                         else if (DirectionLeft.Contains(x))
  190.                                         {
  191.                                             LR = 5;
  192.                                         }
  193.  
  194.                                         if (x == 11)
  195.                                         {
  196.                                             State = 11;
  197.                                         }
  198.                                         else if (x == 19)
  199.                                         {
  200.                                             State = 19;
  201.                                         }
  202.                                         else if (x > 7 && x < 11)
  203.                                         {
  204.                                             LR = x; State = 0;
  205.                                         }
  206.  
  207.                                         g.DrawImage(bmpLoaded.Clone(new Rectangle(((LR + State) * 65), 0, 65, 66), System.Drawing.Imaging.PixelFormat.DontCare), new Rectangle((x * 65), 0, 65, 66));
  208.                                         g.FillRectangle(Brushes.White, new Rectangle((65 * 27) + 1, 0, 66, 66));
  209.                                     }
  210.                                 }
  211.  
  212.                                 if (chbAddFallen.Checked) // rotate & center
  213.                                 {
  214.                                     Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle((5 * 65) + 1, 1, 64, 64), System.Drawing.Imaging.PixelFormat.DontCare);
  215.                                     BmpHolder.RotateFlip(RotateFlipType.Rotate90FlipNone);
  216.                                     g.DrawImage(BmpHolder, new Rectangle((8 * 65) -9, -2, 64, 64));
  217.                                     BmpHolder = bmpLoaded.Clone(new Rectangle((7 * 65) + 1, 1, 64, 64), System.Drawing.Imaging.PixelFormat.DontCare);
  218.                                     BmpHolder.RotateFlip(RotateFlipType.Rotate270FlipNone);
  219.                                     g.DrawImage(BmpHolder, new Rectangle((9 * 65) +11, -2, 64, 64));
  220.                                 }
  221.  
  222.                                 if (chbAddWading.Checked) // lower & crop
  223.                                 {
  224.                                     if (chb8Directional.Checked)
  225.                                     {
  226.                                         for (int x = 11; x < 27; x++)
  227.                                         {
  228.                                             if (x >= 19) // shallow
  229.                                             {
  230.                                                 Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle(((x-19) * 65) + 1, 1, 64, 22), System.Drawing.Imaging.PixelFormat.DontCare);
  231.                                                 g.DrawImage(BmpHolder, new Rectangle((x * 65) + 1, 12, 64, 22));
  232.                                             }
  233.                                             else // deep
  234.                                             {
  235.                                                 Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle(((x-11) * 65) + 1, 1, 64, 14), System.Drawing.Imaging.PixelFormat.DontCare);
  236.                                                 g.DrawImage(BmpHolder, new Rectangle((x * 65) + 1, 19, 64, 14));
  237.                                             }
  238.                                         }
  239.                                         g.FillRectangle(Brushes.White, new Rectangle((65 * 27) + 1, 0, 66, 66));
  240.                                     }
  241.                                     else // 2dir
  242.                                     {
  243.                                         for (int x = 12; x < 28; x++)
  244.                                         {
  245.  
  246.                                             if (x >= 20) // shallow
  247.                                             {
  248.                                                 if (DirectionLeft.Contains(x))
  249.                                                 {
  250.                                                     Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle((5 * 65) + 1, 1, 64, 22), System.Drawing.Imaging.PixelFormat.DontCare);
  251.                                                     g.DrawImage(BmpHolder, new Rectangle((x * 65) + 1, 12, 64, 22));
  252.                                                 }
  253.                                                 else if (DirectionRight.Contains(x))
  254.                                                 {
  255.                                                     Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle((7 * 65) + 1, 1, 64, 22), System.Drawing.Imaging.PixelFormat.DontCare);
  256.                                                     g.DrawImage(BmpHolder, new Rectangle((x * 65) + 1, 12, 64, 22));
  257.                                                 }
  258.                                             }
  259.                                             else
  260.                                             {
  261.                                                 if (DirectionLeft.Contains(x))
  262.                                                 {
  263.                                                     Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle((5 * 65) + 1, 1, 64, 14), System.Drawing.Imaging.PixelFormat.DontCare);
  264.                                                     g.DrawImage(BmpHolder, new Rectangle((x * 65) + 1, 19, 64, 14));
  265.                                                 }
  266.                                                 else if (DirectionRight.Contains(x))
  267.                                                 {
  268.                                                     Bitmap BmpHolder = bmpLoaded.Clone(new Rectangle((7 * 65) + 1, 1, 64, 14), System.Drawing.Imaging.PixelFormat.DontCare);
  269.                                                     g.DrawImage(BmpHolder, new Rectangle((x * 65) + 1, 19, 64, 14));
  270.                                                 }
  271.                                             }
  272.                                         }
  273.                                     }
  274.                                 }
  275.                             }
  276.                         }
  277.                     }
  278.                 }
  279.             }
  280.             return Return;
  281.         }
  282.  
  283.         public void ReadConfig()
  284.         {
  285.             String[] Lines = File.ReadAllLines("Config.txt");  // sprite.png=(Name,Layer,Type,Material,Variant)
  286.             LoadedSprites.Clear();
  287.             foreach (string s in Lines)
  288.             {
  289.                 if (s.Contains("="))
  290.                 {
  291.                     string Path = s.Split('=')[0];
  292.                     String[] Data = s.Split('=')[1].Substring(1).TrimEnd(")".ToCharArray()).Split(',');
  293.                     if (Data.Length >= 4)
  294.                     {
  295.                         Sprite CurrentSprite = new Sprite() { FilePath = Environment.CurrentDirectory + "\\Sprites\\" + Path, Name = Data[0], Layer = Data[1], Type = Data[2], Material = Data[3] };
  296.                         if (Data.Length > 4) { CurrentSprite.Variant = Data[4]; }
  297.                         LoadedSprites.Add(CurrentSprite);
  298.                     }
  299.                 }
  300.             }
  301.             ValidateSpriteFiles();
  302.         }
  303.  
  304.         private void btn_Click(object sender, EventArgs e)
  305.         {
  306.             switch (((Button)sender).Name)
  307.             {
  308.                 case "btnLayerUp":
  309.                     if (lbLayers.SelectedIndex > 0 && lbLayers.Items.Count > 1)
  310.                     {
  311.                         int OldIndex = lbLayers.SelectedIndex;
  312.                         lbLayers.Items.Insert(lbLayers.SelectedIndex - 1, lbLayers.SelectedItem);
  313.                         lbLayers.Items.RemoveAt(OldIndex + 1);
  314.                         lbLayers.SelectedIndex = OldIndex - 1;
  315.                     }
  316.                     break;
  317.                 case "btnLayerDown":
  318.                     if ((lbLayers.SelectedIndex != -1) && (lbLayers.SelectedIndex < lbLayers.Items.Count - 1) && lbLayers.Items.Count > 1)
  319.                     {
  320.                         int OldIndex = lbLayers.SelectedIndex;
  321.                         lbLayers.Items.Insert(lbLayers.SelectedIndex + 2, lbLayers.SelectedItem);
  322.                         lbLayers.Items.RemoveAt(OldIndex);
  323.                         lbLayers.SelectedIndex = OldIndex + 1;
  324.                     }
  325.                     break;
  326.                 case "btnLayerDelete":
  327.                     int oIndex = lbLayers.SelectedIndex;
  328.                     if (oIndex > -1)
  329.                     {
  330.                         SpriteLayers.Remove(GetSpriteL(lbLayers.Text));
  331.                         if (oIndex - 1 > 0) { lbLayers.SelectedIndex = oIndex - 1; } else { lbLayers.SelectedIndex = 0; }
  332.                         lbLayers.Items.RemoveAt(oIndex);
  333.                         UpdateFullSheet();
  334.                         UpdateFullPreview();
  335.                     }
  336.                     break;
  337.                 case "btnLayerDeleteAll":
  338.                     SpriteLayers.Clear();
  339.                     lbLayers.Items.Clear();
  340.                     UpdateFullSheet();
  341.                     UpdateFullPreview();
  342.                     break;
  343.                 case "btnLayerLoad":
  344.                     break;
  345.                 case "btnLayerSave":
  346.                     break;
  347.                 case "btnLayerSaveAs":
  348.                     break;
  349.                 case "btnAddItem":
  350.                     if (!SpriteLayers.Contains(SelectedSprite) && SelectedSprite != null)
  351.                     {
  352.                         SpriteLayers.Add(SelectedSprite);
  353.                         lbLayers.Items.Insert(0, SelectedSprite.Name);
  354.                         UpdateFullSheet();
  355.                         UpdateFullPreview();
  356.                         lbLayers.SelectedIndex = 0;
  357.                     }
  358.                     break;
  359.                 case "btnSaveChar":
  360.                     break;
  361.                 case "btnSaveCharAs":
  362.                     break;
  363.                 case "btnBrowseItem":
  364.                     OpenFileDialog ofdBrowse = new OpenFileDialog() { InitialDirectory = Environment.CurrentDirectory + "\\Sprites" };
  365.                     if (ofdBrowse.ShowDialog() == DialogResult.OK)
  366.                     {
  367.                         foreach (Sprite s in LoadedSprites)
  368.                         {
  369.                             if (s.FilePath.Contains(ofdBrowse.FileName))
  370.                             {
  371.                                 SelectedSprite = s;
  372.                                 cbLayer.Text = s.Layer;
  373.                                 cbType.Text = s.Type;
  374.                                 cbMaterial.Text = s.Material;
  375.                                 cbVariant.Text = s.Variant;
  376.                             }
  377.                         }
  378.                     }
  379.                     break;
  380.                 default:
  381.                     break;
  382.             }
  383.         }
  384.  
  385.         private void cbLayer_SelectedIndexChanged(object sender, EventArgs e) // Select Layer
  386.         {
  387.             cbType.Items.Clear();
  388.             cbType.Text = "";
  389.             cbMaterial.Text = "";
  390.             cbVariant.Text = "";
  391.             cbType.Enabled = false;
  392.             cbMaterial.Enabled = false;
  393.             cbVariant.Enabled = false;
  394.  
  395.             foreach (Sprite s in LoadedSprites)
  396.             {
  397.                 if (s.Layer == cbLayer.Items[cbLayer.SelectedIndex].ToString()) // Detect sprites of layer
  398.                 {
  399.                     if (!cbType.Items.Contains(s.Type))
  400.                     {
  401.                         cbType.Items.Add(s.Type); // Add sprites of layer to type filter
  402.                     }
  403.                 }
  404.             }
  405.             if (cbType.Items.Count > 0) { cbType.Enabled = true; } else { cbType.Enabled = false; cbMaterial.Enabled = false; cbVariant.Enabled = false; }
  406.             if (cbMaterial.Text == "") { pbItemPreview.Image = null; }
  407.         }
  408.  
  409.         private void cbType_SelectedIndexChanged(object sender, EventArgs e) // Select Type
  410.         {
  411.             cbMaterial.Items.Clear();
  412.             cbMaterial.Text = "";
  413.             cbMaterial.Enabled = false;
  414.             cbVariant.Text = "";
  415.             cbVariant.Enabled = false;
  416.             if (cbType.Items.Count > 0)
  417.             {
  418.                 foreach (Sprite s in LoadedSprites)
  419.                 {
  420.                     if (s.Type == cbType.Items[cbType.SelectedIndex].ToString() && s.Layer == cbLayer.Items[cbLayer.SelectedIndex].ToString()) // Detect sprite of type
  421.                     {
  422.                         if (!cbMaterial.Items.Contains(s.Material))
  423.                         {
  424.                             cbMaterial.Items.Add(s.Material); // Add sprites of type to material filter
  425.                         }
  426.                     }
  427.                 }
  428.             }
  429.             if (cbMaterial.Items.Count > 0) { cbMaterial.Enabled = true; } else { cbMaterial.Enabled = false; cbVariant.Enabled = false; }
  430.             if (cbMaterial.Text == "") { pbItemPreview.Image = null; }
  431.         }
  432.  
  433.         private void cbMaterial_SelectedIndexChanged(object sender, EventArgs e) // Select Material
  434.         {
  435.             cbVariant.Items.Clear();
  436.             cbVariant.Text = "";
  437.             cbVariant.Enabled = false;
  438.             if (cbMaterial.Items.Count > 0)
  439.             {
  440.                 foreach (Sprite s in LoadedSprites)
  441.                 {
  442.                     if (s.Material == cbMaterial.Items[cbMaterial.SelectedIndex].ToString() && s.Type == cbType.Items[cbType.SelectedIndex].ToString() && s.Layer == cbLayer.Items[cbLayer.SelectedIndex].ToString()) // Detect sprite of Material
  443.                     {
  444.                         if (!cbVariant.Items.Contains(s.Variant) && s.Variant != string.Empty)
  445.                         {
  446.                             cbVariant.Items.Add(s.Variant); // Add sprites of material to varient list
  447.                         }
  448.                     }
  449.                 }
  450.             }
  451.             if (cbVariant.Items.Count > 0) { cbVariant.Enabled = true; }
  452.             else
  453.             {
  454.                 cbVariant.Enabled = false;
  455.                 SelectedSprite = GetSprite(cbLayer.Text, cbMaterial.Text, cbType.Text, string.Empty);
  456.             }
  457.             if (cbMaterial.Text == "") { pbItemPreview.Image = null; }
  458.         }
  459.  
  460.         private void cbVariant_SelectedIndexChanged(object sender, EventArgs e)
  461.         {
  462.             SelectedSprite = GetSprite(cbLayer.Text, cbMaterial.Text, cbType.Text, cbVariant.Text);
  463.             //UpdatePreview
  464.         }
  465.  
  466.         public void UpdateFullSheet()
  467.         {
  468.             if (lbLayers.Items.Count > 0)
  469.             {
  470.                 using (Bitmap SpriteSheet = GetCompiledLayers())
  471.                 {
  472.                     SpriteSheet.Save("TempSpriteSheet.png");
  473.                 }
  474.             }
  475.         }
  476.  
  477.         public void UpdateFullPreview()
  478.         {
  479.             if (lbLayers.Items.Count > 0)
  480.             {
  481.                 pbCharPreview.BackgroundImage = ResizeBitmap(GetSpriteImages("TempSpriteSheet.png")[ImageIndex], 128,128);
  482.             }
  483.             else
  484.             {
  485.                 pbCharPreview.BackgroundImage = new Bitmap(128,128);
  486.             }
  487.         }
  488.  
  489.         public Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height)
  490.         {
  491.             Bitmap result = new Bitmap(width, height);
  492.             using (Graphics g = Graphics.FromImage(result))
  493.             {
  494.                 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
  495.                 g.DrawImage(sourceBMP, 0, 0, width, height);
  496.             }
  497.             return result;
  498.         }
  499.  
  500.         private void lbLayers_SelectedIndexChanged(object sender, EventArgs e) // Rerender on order change
  501.         {
  502.             UpdateFullSheet();
  503.             UpdateFullPreview();
  504.         }
  505.  
  506.         private void cbDirection_SelectedIndexChanged(object sender, EventArgs e)
  507.         {
  508.             if (!string.IsNullOrEmpty(cbMaterial.Text))
  509.             {
  510.                 pbItemPreview.Image = GetSpriteImages(SelectedSprite.FilePath)[ImageIndex];
  511.             }
  512.             UpdateFullSheet();
  513.             UpdateFullPreview();
  514.         }
  515.  
  516.         private void cbState_SelectedIndexChanged(object sender, EventArgs e)
  517.         {
  518.             if (!string.IsNullOrEmpty(cbMaterial.Text))
  519.             {
  520.                 pbItemPreview.Image = GetSpriteImages(SelectedSprite.FilePath)[ImageIndex];
  521.             }
  522.             UpdateFullSheet();
  523.             UpdateFullPreview();
  524.         }
  525.  
  526.         private void chb8Directional_CheckedChanged(object sender, EventArgs e)
  527.         {
  528.             UpdateFullSheet();
  529.             UpdateFullPreview();
  530.             if (!string.IsNullOrEmpty(cbMaterial.Text))
  531.             {
  532.                 pbItemPreview.Image = GetSpriteImages(SelectedSprite.FilePath)[ImageIndex];
  533.             }
  534.         }
  535.  
  536.         private void chbAddWading_CheckedChanged(object sender, EventArgs e)
  537.         {
  538.             UpdateFullSheet();
  539.             UpdateFullPreview();
  540.             if (!string.IsNullOrEmpty(cbMaterial.Text))
  541.             {
  542.                 pbItemPreview.Image = GetSpriteImages(SelectedSprite.FilePath)[ImageIndex];
  543.             }
  544.         }
  545.  
  546.         private void chbAddAll_CheckedChanged(object sender, EventArgs e)
  547.         {
  548.             UpdateFullSheet();
  549.             UpdateFullPreview();
  550.             if (!string.IsNullOrEmpty(cbMaterial.Text))
  551.             {
  552.                 pbItemPreview.Image = GetSpriteImages(SelectedSprite.FilePath)[ImageIndex];
  553.             }
  554.         }
  555.  
  556.         private void chbAddFallen_CheckedChanged(object sender, EventArgs e)
  557.         {
  558.             UpdateFullSheet();
  559.             UpdateFullPreview();
  560.             if (!string.IsNullOrEmpty(cbMaterial.Text))
  561.             {
  562.                 pbItemPreview.Image = GetSpriteImages(SelectedSprite.FilePath)[ImageIndex];
  563.             }
  564.         }
  565.     }
  566.  
  567.     public class Sprite
  568.     {
  569.         public string FilePath, Layer, Name, Type, Material, Variant = "";
  570.     }
  571. }
  572.  
RAW Paste Data