Esempio n. 1
0
        private void animatedTIlesetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormNewAnimatedTileset frm = new FormNewAnimatedTileset();

            frm.ShowDialog();

            if (frm.Tileset == null)
            {
                return;
            }

            animatedSetData = frm.Tileset;

            try
            {
                GDIImage image = (GDIImage)GDIBitmap.FromFile(animatedSetData.TilesetImageName);

                pbAnimatedSet.Image = image;

                Stream stream = new FileStream(animatedSetData.TilesetImageName, FileMode.Open,
                                               FileAccess.Read);

                Texture2D texture = Texture2D.FromStream(GraphicsDevice, stream);
                animatedSet = new AnimatedTileset(
                    texture,
                    animatedSetData.FramesAcross,
                    animatedSetData.TilesHigh,
                    animatedSetData.TileWidthInPixels,
                    animatedSetData.TileHeightInPixels);

                if (map != null)
                {
                    map.AddAnimatedTileset(animatedSet);
                }
                sbAnimatedTile.Maximum   = 0;
                chkPaintAnimated.Enabled = true;

                stream.Close();
                stream.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error reading file.\n" + ex.Message, "Error reading image");
                return;
            }
        }
        void btnOK_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbTilesetImage.Text))
            {
                MessageBox.Show("You must select an image for the tileset in order to proceed.");
                return;
            }

            int tileWidth  = 0;
            int tileHeight = 0;
            int frames     = 0;
            int rows       = 0;

            if (!int.TryParse(tbTileWidth.Text, out tileWidth))
            {
                MessageBox.Show("Tile width must be an integer value.");
                return;
            }
            else if (tileWidth < 1)
            {
                MessageBox.Show("Tile width must me greater than zero.");
                return;
            }

            if (!int.TryParse(tbTileHeight.Text, out tileHeight))
            {
                MessageBox.Show("Tile height must be an integer value.");
                return;
            }
            else if (tileHeight < 1)
            {
                MessageBox.Show("Tile height must be greater than zero.");
                return;
            }

            if (!int.TryParse(tbFrames.Text, out frames))
            {
                MessageBox.Show("Frames must be an integer value.");
                return;
            }
            else if (frames < 1)
            {
                MessageBox.Show("Frames must me greater than zero.");
                return;
            }

            if (!int.TryParse(tbRows.Text, out rows))
            {
                MessageBox.Show("Rows must be an integer value.");
                return;
            }
            else if (rows < 1)
            {
                MessageBox.Show("Rows must be greater than zero.");
                return;
            }

            Tileset = new AnimatedTilesetData
            {
                TilesetName        = tbTilesetImage.Text,
                TilesetImageName   = tbTilesetImage.Text,
                FramesAcross       = frames,
                TilesHigh          = rows,
                TileWidthInPixels  = tileWidth,
                TileHeightInPixels = tileHeight
            };

            this.Close();
        }
 void btnCancel_Click(object sender, EventArgs e)
 {
     Tileset = null;
     this.Close();
 }
Esempio n. 4
0
        void openLevelToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofDialog = new OpenFileDialog();

            ofDialog.Filter          = "Level Files (*.xml)|*.xml";
            ofDialog.CheckFileExists = true;
            ofDialog.CheckPathExists = true;

            DialogResult result = ofDialog.ShowDialog();

            if (result != DialogResult.OK)
            {
                return;
            }

            string path = Path.GetDirectoryName(ofDialog.FileName);

            LevelData          newLevel = null;
            MapData            mapData  = null;
            CharacterLayerData charData = null;

            try
            {
                newLevel = XnaSerializer.Deserialize <LevelData>(ofDialog.FileName);
                mapData  = XnaSerializer.Deserialize <MapData>(path + @"\Maps\" + newLevel.MapName +
                                                               ".xml");
                charData = XnaSerializer.Deserialize <CharacterLayerData>(path + @"\Chars\" + newLevel.LevelName + ".xml");
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Error reading level");
                return;
            }

            tileSetImages.Clear();
            tileSetData.Clear();
            tileSets.Clear();

            layers.Clear();

            lbTileset.Items.Clear();
            clbLayers.Items.Clear();

            collisionLayer.Collisions.Clear();
            animatedLayer.AnimatedTiles.Clear();
            characters.Characters.Clear();

            levelData = newLevel;

            foreach (TilesetData data in mapData.Tilesets)
            {
                Texture2D texture = null;

                tileSetData.Add(data);
                lbTileset.Items.Add(data.TilesetName);

                GDIImage image = (GDIImage)GDIBitmap.FromFile(data.TilesetImageName);
                tileSetImages.Add(image);
                using (Stream stream = new FileStream(data.TilesetImageName, FileMode.Open,
                                                      FileAccess.Read))
                {
                    texture = Texture2D.FromStream(GraphicsDevice, stream);

                    tileSets.Add(
                        new Tileset(
                            texture,
                            data.TilesWide,
                            data.TilesHigh,
                            data.TileWidthInPixels,
                            data.TileHeightInPixels));
                }
            }

            using (Stream textureStream = new FileStream(mapData.AnimatedTileset.TilesetImageName,
                                                         FileMode.Open, FileAccess.Read))
            {
                Texture2D aniamtedTexture = Texture2D.FromStream(GraphicsDevice, textureStream);

                animatedSet = new AnimatedTileset(
                    aniamtedTexture,
                    mapData.AnimatedTileset.FramesAcross,
                    mapData.AnimatedTileset.TilesHigh,
                    mapData.AnimatedTileset.TileWidthInPixels,
                    mapData.AnimatedTileset.TileHeightInPixels);
                animatedSetData = mapData.AnimatedTileset;
            }

            foreach (MapLayerData data in mapData.Layers)
            {
                clbLayers.Items.Add(data.MapLayerName, true);
                layers.Add(MapLayer.FromMapLayerData(data));
            }

            lbTileset.SelectedIndex = 0;
            clbLayers.SelectedIndex = 0;
            nudCurrentTile.Value    = 0;
            sbAnimatedTile.Maximum  = 0;

            map = new TileMap(tileSets[0], animatedSet, (MapLayer)layers[0]);

            for (int i = 1; i < tileSets.Count; i++)
            {
                map.AddTileset(tileSets[i]);
            }

            for (int i = 1; i < layers.Count; i++)
            {
                map.AddLayer(layers[i]);
            }

            foreach (var collision in mapData.Collisions.Collisions)
            {
                collisionLayer.Collisions.Add(collision.Key, collision.Value);
            }

            foreach (var tile in mapData.AnimatedTiles.AnimatedTiles)
            {
                animatedLayer.AnimatedTiles.Add(tile.Key, tile.Value);
            }

            foreach (var c in charData.Characters)
            {
                Character character;

                if (c.Value is NonPlayerCharacterData)
                {
                    Entity entity = new Entity(c.Value.Name, c.Value.EntityData, c.Value.Gender, EntityType.NPC);

                    using (Stream stream = new FileStream(c.Value.TextureName, FileMode.Open, FileAccess.Read))
                    {
                        Texture2D      texture = Texture2D.FromStream(GraphicsDevice, stream);
                        AnimatedSprite sprite  = new AnimatedSprite(texture, Animations);
                        sprite.Position = new Vector2(c.Key.X * Engine.TileWidth, c.Key.Y * Engine.TileHeight);
                        character       = new NonPlayerCharacter(entity, sprite);

                        ((NonPlayerCharacter)character).SetConversation(
                            ((NonPlayerCharacterData)c.Value).CurrentConversation);

                        characters.Characters.Add(c.Key, character);
                    }
                }
            }
            tilesetToolStripMenuItem.Enabled    = true;
            mapLayerToolStripMenuItem.Enabled   = true;
            charactersToolStripMenuItem.Enabled = true;
            chestsToolStripMenuItem.Enabled     = true;
            keysToolStripMenuItem.Enabled       = true;
        }