Advertisement
TKGP

meme

Oct 15th, 2018
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.77 KB | None | 0 0
  1. const float OBJ_SIZE = 1.965f;
  2.             const float PIXEL_SIZE = 0.1f;
  3.             float scale = PIXEL_SIZE / OBJ_SIZE;
  4.  
  5.             var colors = new Dictionary<string, Color>
  6.             {
  7.                 ["o972020"] = Color.Yellow,
  8.                 ["o972021"] = Color.Red,
  9.                 ["o972022"] = Color.Blue,
  10.                 ["o972023"] = Color.Green,
  11.                 ["o972024"] = Color.Purple,
  12.                 ["o972025"] = Color.Black,
  13.                 ["o972026"] = Color.White,
  14.             };
  15.  
  16.             Bitmap bmp = new Bitmap(@"C:\Users\Joseph\Desktop\test.png");
  17.  
  18.             MSB64 msbh = MSB64.Read($"{ds3}\\map\\mapstudio\\m30_00_00_00.msb.dcx.bak");
  19.             var crate = msbh.Parts.Objects.Where(obj => obj.ModelName == "o001080").First();
  20.             var model = msbh.Models.Objects.Where(mod => mod.Name == "o001080").First();
  21.  
  22.             MSB64 msb = MSB64.Read($"{ds3}\\map\\mapstudio\\m54_00_00_00.msb.dcx.bak");
  23.  
  24.             foreach (string color in colors.Keys)
  25.             {
  26.                 var mod = new MSB64.Model.Object(model);
  27.                 mod.Name = color;
  28.                 mod.ID = msb.Models.Objects.Count;
  29.                 msb.Models.Objects.Add(mod);
  30.             }
  31.  
  32.             string[,] objs = new string[bmp.Width, bmp.Height];
  33.  
  34.             for (int x = 0; x < bmp.Width; x++)
  35.             {
  36.                 for (int y = 0; y < bmp.Height; y++)
  37.                 {
  38.                     Color c = bmp.GetPixel(x, y);
  39.                     if (c.A > 32)
  40.                     {
  41.                         string bestObj = null;
  42.                         float bestDist = 1000;
  43.  
  44.                         foreach (string color in colors.Keys)
  45.                         {
  46.                             Vector3 dist = new Vector3(c.R, c.G, c.B) - new Vector3(colors[color].R, colors[color].G, colors[color].B);
  47.                             if (dist.Length() < bestDist)
  48.                             {
  49.                                 bestObj = color;
  50.                                 bestDist = dist.Length();
  51.                             }
  52.                         }
  53.  
  54.                         objs[x, y] = bestObj;
  55.                     }
  56.                     else
  57.                     {
  58.                         objs[x, y] = null;
  59.                     }
  60.                 }
  61.             }
  62.  
  63.             for (int y = 0; y < bmp.Height; y++)
  64.             {
  65.                 for (int x = 0; x < bmp.Width; x++)
  66.                 {
  67.                     if (objs[x, y] == null)
  68.                         continue;
  69.  
  70.                     int width = 1;
  71.                     for (int w = 1; w < bmp.Width - x; w++)
  72.                     {
  73.                         if (objs[x + w, y] != objs[x, y])
  74.                             break;
  75.                         else
  76.                             width++;
  77.                     }
  78.  
  79.                     var obj = new MSB64.Part.Object(crate);
  80.                     obj.DrawGroup1 = 0xFFFFFFFF;
  81.                     obj.DrawGroup2 = 0xFFFFFFFF;
  82.                     obj.DrawGroup3 = 0xFFFFFFFF;
  83.                     obj.DrawGroup4 = 0xFFFFFFFF;
  84.                     obj.CollisionName = "h000100";
  85.                     obj.ID = msb.Parts.Objects.Count;
  86.                     obj.Name = objs[x, y] + "_" + obj.ID;
  87.                     obj.ModelName = objs[x, y];
  88.                     obj.Position = new Vector3(0 + bmp.Width / 2f * PIXEL_SIZE - x * PIXEL_SIZE - (width * PIXEL_SIZE / 2f), bmp.Height * PIXEL_SIZE + 0 - y * PIXEL_SIZE, 0);
  89.                     obj.Rotation = new Vector3(0);
  90.                     obj.Scale = new Vector3(scale * width, scale, scale);
  91.                     msb.Parts.Objects.Add(obj);
  92.  
  93.                     x += width - 1;
  94.                 }
  95.             }
  96.  
  97.             msb.Write($"{ds3}\\map\\mapstudio\\m54_00_00_00.msb.dcx");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement