/* * public static GameObject FromJson(JObject data) * { * Guid id = Guid.Parse(data["Id"].ToString()); * SolidPlatform platform = (SolidPlatform)SerializeService.Instance.LocateObject(id); * if (platform == null) * { * var (coords, halfsize, origin) = PositionJson.FromJson(data); * platform = new SolidPlatform(coords, halfsize, origin); * SerializeService.Instance.RegisterObject(platform); * } * return platform; * } */ public static GameObject FromJson(Deserializer deserializer) { var(coords, halfsize, origin) = PositionJson.FromJson(deserializer.getData()); coords.X = (float)Math.Round(coords.X); coords.Y = (float)Math.Round(coords.Y); var platform = new SolidPlatform(coords, halfsize, origin, true); // SerializeService.Instance.RegisterObject(platform); return(platform); }
public static List <GameObject> LoadFromBitmap(string path) { System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(path); System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter(); int[,] array = ImageTo2DByteArray(bitmap); int scale = 1; var list = new List <GameObject>(); int tile_size = PhysicsSystem.TileSize; var sectors = new string[bitmap.Width / scale, bitmap.Height / scale]; LegacyTileHelper tile_helper = new LegacyTileHelper(sectors); for (int i = 0; i < bitmap.Width; i++) { for (int j = 0; j < bitmap.Height; j++) { var color = System.Drawing.Color.FromArgb(array[j, i]); // Color order is reversed here for some reason, i.e. R is swapped with B switch (color) { case var c when(c.B == 0 && c.G == 0 && c.R == 0): { sectors[i / scale, j / scale] = "solid"; break; } case var c when(c.B == 128 && c.G == 128 && c.R == 128): { sectors[i / scale, j / scale] = "background"; break; } case var c when(c.B < c.R && false): { sectors[i / scale, j / scale] = "liquid"; break; } case var c when(c.B == 0 && c.G == 127 && c.R == 14): { sectors[i / scale, j / scale] = "goblin"; break; } case var c when(c.B == 255 && c.G == 106 && c.R == 0): { sectors[i / scale, j / scale] = "goblin shaman"; break; } } } } for (int i = 0; i < bitmap.Width / scale; i++) { for (int j = 0; j < bitmap.Height / scale; j++) { switch (sectors[i, j]) { case "solid": { var obj = new SolidPlatform( new Vector2(i * tile_size, (5000 - j - 1) * tile_size), new Vector2(tile_size / 2, tile_size / 2), Vector2.Zero, true ); var drawable = (RenderComponent)obj; tile_helper.SetTileTexBounds(drawable, i, j, "solid"); list.Add(obj); break; } case "background": { var obj = new BackgroundQuad( new Vector2(i * tile_size, (5000 - j - 1) * tile_size), new Vector2(tile_size / 2, tile_size / 2), Vector2.Zero, true ); var drawable = (RenderComponent)obj; tile_helper.SetTileTexBounds(drawable, i, j, "background"); list.Add(obj); break; } case "liquid": { list.Add(new Liquid( new Vector2(i * tile_size, (5000 - j - 1) * tile_size), new Vector2(tile_size / 2, tile_size / 2), Vector2.Zero, true )); break; } case "goblin": { list.Add(new Goblin( new Vector2(i * tile_size, (5000 - j - 1) * tile_size) )); break; } case "goblin shaman": { list.Add(new GoblinShaman( new Vector2(i * tile_size, (5000 - j - 1) * tile_size) )); break; } } } } return(list); }