Exemple #1
0
        /*
         * 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);
        }