public bool OpenGame(string path, bool editor)
        {
            CloseGame();

            SaveClass success = DataManager.OpenFile(path);

            if (success == null)
            {
                return(false);
            }
            else
            {
                game = success.Game;

                foreach (KeyValuePair <string, Texture> o in success.Textures)
                {
                    contentManager.AddTexture(o.Key, o.Value);
                }

                if (!editor)
                {
                    StartLoop();
                }

                return(true);
            }
        }
        public SaveClass OpenFile(string path)
        {
            SaveClass newgame = null;

            try
            {
                if (File.Exists(path))
                {
                    file      = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None);
                    newgame   = save.LoadGame(file);
                    this.path = path;

                    return(newgame);
                }
                else
                {
                    CloseFile();
                    return(null);
                }
            }
            catch (Exception e)
            {
                CloseFile();

                while (e.Message != null)
                {
                    MessageBox.Show(e.Message);
                    MessageBox.Show(e.StackTrace);

                    if (e.InnerException != null)
                    {
                        e = e.InnerException;
                    }
                }

                return(null);
            }
        }
Beispiel #3
0
        public void SaveGame(FileStream file, SaveClass game)
        {
            StreamWriter writer = new StreamWriter(file);

            try
            {
                // Write textures
                writer.WriteLine(Engine.ContentManager.Textures.Count);

                foreach (KeyValuePair <string, Texture> t in Engine.ContentManager.Textures)
                {
                    writer.WriteLine(t.Key);
                    writer.WriteLine(TextureToString(t.Value));
                }

                // Save Game
                writer.WriteLine(Engine.game.Rooms.Count);

                // Room
                foreach (Room r in Engine.game.Rooms)
                {
                    writer.WriteLine(r.Name);

                    int x = r.Tiles.GetLength(0);
                    int y = r.Tiles.GetLength(1);

                    writer.WriteLine(x);
                    writer.WriteLine(y);

                    for (int j = 0; j < y; j++)
                    {
                        for (int i = 0; i < x; i++)
                        {
                            // Tile
                            Tile tile = r.Tiles[i, j];

                            //writer.WriteLine(tile.Position.X);
                            //writer.WriteLine(tile.Position.Y);

                            // Tile Layers
                            TileLayer layer1 = tile.Layers[0];
                            TileLayer layer2 = tile.Layers[1];

                            // GameTexture
                            writer.WriteLine(layer1.GameTexture.SourceTexture);
                            writer.WriteLine(layer1.GameTexture.TextureType.ToString());
                            writer.WriteLine(layer1.GameTexture.AnimationType.ToString());
                            writer.WriteLine(layer1.GameTexture.StartX);
                            writer.WriteLine(layer1.GameTexture.StartY);
                            writer.WriteLine(layer1.GameTexture.SizeX);
                            writer.WriteLine(layer1.GameTexture.SizeY);

                            for (int q = 0; q < 4; q++)
                            {
                                writer.WriteLine(layer1.GameTexture.Rects[q].X);
                                writer.WriteLine(layer1.GameTexture.Rects[q].Y);
                                writer.WriteLine(layer1.GameTexture.Rects[q].Width);
                                writer.WriteLine(layer1.GameTexture.Rects[q].Height);
                            }

                            // GameTexture
                            writer.WriteLine(layer2.GameTexture.SourceTexture);
                            writer.WriteLine(layer2.GameTexture.TextureType.ToString());
                            writer.WriteLine(layer2.GameTexture.AnimationType.ToString());
                            writer.WriteLine(layer2.GameTexture.StartX);
                            writer.WriteLine(layer2.GameTexture.StartY);
                            writer.WriteLine(layer2.GameTexture.SizeX);
                            writer.WriteLine(layer2.GameTexture.SizeY);

                            for (int q = 0; q < 4; q++)
                            {
                                writer.WriteLine(layer2.GameTexture.Rects[q].X);
                                writer.WriteLine(layer2.GameTexture.Rects[q].Y);
                                writer.WriteLine(layer2.GameTexture.Rects[q].Width);
                                writer.WriteLine(layer2.GameTexture.Rects[q].Height);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
            }

            writer.Close();
            writer.Dispose();
        }
Beispiel #4
0
        public SaveClass LoadGame(FileStream file)
        {
            StreamReader reader = new StreamReader(file);

            try
            {
                Game g = new Game();
                Dictionary <string, Texture> textures = new Dictionary <string, Texture>();

                // Number of textures
                int num = int.Parse(reader.ReadLine());

                // For each texture
                for (int i = 0; i < num; i++)
                {
                    string  key   = reader.ReadLine();
                    Texture value = StringToTexture(reader.ReadLine());

                    textures.Add(key, value);
                }

                // Number of rooms
                num = int.Parse(reader.ReadLine());

                // For each room
                for (int q = 0; q < num; q++)
                {
                    string name = reader.ReadLine();

                    int tile_x = int.Parse(reader.ReadLine());
                    int tile_y = int.Parse(reader.ReadLine());

                    Room r = new Room(name, tile_x, tile_y);

                    // For each tile
                    for (int j = 0; j < tile_y; j++)
                    {
                        for (int i = 0; i < tile_x; i++)
                        {
                            // For each layer
                            for (int f = 0; f < 2; f++)
                            {
                                string      sourceTexture = reader.ReadLine();
                                string      textureTypeS  = reader.ReadLine();
                                TextureType textureType;

                                switch (textureTypeS)
                                {
                                case "None":
                                    textureType = TextureType.None;
                                    break;

                                case "Base":
                                    textureType = TextureType.Base;
                                    break;

                                case "AutoTile":
                                    textureType = TextureType.AutoTile;
                                    break;

                                case "Wall":
                                    textureType = TextureType.Wall;
                                    break;

                                default:
                                    textureType = TextureType.None;
                                    break;
                                }

                                string        animationTypeS = reader.ReadLine();
                                AnimationType animationType;

                                switch (animationTypeS)
                                {
                                case "None":
                                    animationType = AnimationType.None;
                                    break;

                                case "AutoTile":
                                    animationType = AnimationType.AutoTile;
                                    break;

                                case "Waterfall":
                                    animationType = AnimationType.Waterfall;
                                    break;

                                default:
                                    animationType = AnimationType.None;
                                    break;
                                }

                                int startX = int.Parse(reader.ReadLine());
                                int startY = int.Parse(reader.ReadLine());
                                int sizeX  = int.Parse(reader.ReadLine());
                                int sizeY  = int.Parse(reader.ReadLine());

                                Rectangle[] rects = new Rectangle[4];
                                for (int h = 0; h < 4; h++)
                                {
                                    int rect_x      = int.Parse(reader.ReadLine());
                                    int rect_y      = int.Parse(reader.ReadLine());
                                    int rect_size_x = int.Parse(reader.ReadLine());
                                    int rect_size_y = int.Parse(reader.ReadLine());

                                    rects[h] = new Rectangle(rect_x, rect_y, rect_size_x, rect_size_y);
                                }

                                GameTexture gameTexture = new GameTexture(sourceTexture, textureType, startX, startY, sizeX, sizeY, rects);
                                r.Tiles[i, j].SetLayer(f, (GameTexture)(gameTexture.Clone()));
                            }
                        }
                    }

                    g.AddRoom(r);
                }

                reader.Close();
                reader.Dispose();

                SaveClass save = new SaveClass(g, textures);
                return(save);
            }
            catch (Exception e)
            {
                reader.Close();
                reader.Dispose();

                return(null);
            }
        }