source: 2011/23/sijoseha/AdventureGame/AdventureGame/Map.cs @ 1749

Revision 1749, 3.7 KB checked in by tekrjant, 8 years ago (diff)

Phew..
Changes:

  • We now have a minimap
  • Camera has been modified
  • Lot of minor stuff
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Microsoft.Xna.Framework;
6using Microsoft.Xna.Framework.Graphics;
7
8namespace AdventureGame
9{
10    public class Map
11    {
12
13        private AdventureGame Game;
14        private List<Texture2D> tileTextures;
15        public Dictionary<TileType, Texture2D> textureType;
16        public List<Tile> Tiles;
17        public Tile SelectedTile;
18
19        public Rectangle Shownrectangle { get; set; }
20
21        public Vector2 Size { get; set; }
22
23        public Map(AdventureGame game, Texture2D tileTextures, int tileSize, int mapWidth, int mapHeight)
24        {
25            this.Size = new Vector2(mapWidth, mapHeight);
26            this.Tiles = new List<Tile>();
27            this.Game = game;
28            this.tileTextures = TilesFromImage(Game.GraphicsDevice, tileTextures, tileSize);
29            LoadTextures();
30            Random r = new Random();
31            for (int x = 0; x < mapWidth; x++)
32                for (int y = 0; y < mapHeight; y++)
33                    this.Tiles.Add(new Tile(TileType.Grass, new Rectangle(x * 32, y * 32, tileSize, tileSize))); 
34        }
35
36        private void LoadTextures()
37        {
38            textureType = new Dictionary<TileType, Texture2D>();
39            textureType.Add(TileType.Grass, tileTextures[0]);
40            textureType.Add(TileType.DarkGrass, tileTextures[1]);
41            textureType.Add(TileType.Sand, tileTextures[2]);
42            textureType.Add(TileType.Water, tileTextures[3]);
43        }
44
45        public void UnSelectAll()
46        {
47            for (int i = 0; i < this.Tiles.Count; i++)
48                Tiles[i].Selected = false;
49        }
50
51        public void SelectTile(Tile tile)
52        {
53            tile.Selected = true;
54            SelectedTile = tile;
55        }
56
57        public void ChangeTileTo(TileType tileType)
58        {
59            SelectedTile.TileType = tileType;
60        }
61
62        public void Draw(SpriteBatch sb, Camera gamecam)
63        {
64            foreach (Tile tile in Tiles)
65            {
66                if (tile.Boundaries.Intersects(gamecam.Bounds))
67                {
68                    sb.Draw(this.textureType[tile.TileType], tile.Boundaries, Color.White);
69                    if (tile.Selected)
70                        sb.Draw(AdventureGame.selectionBox, tile.Boundaries, Color.White);
71                }
72            }
73        }
74
75        public static List<Texture2D> TilesFromImage(GraphicsDevice gDevice, Texture2D image, int size)
76        {
77            List<Texture2D> tiles = new List<Texture2D>();
78            Texture2D imageFrom = image;
79            Color[] imageColors = new Color[imageFrom.Width * imageFrom.Height];
80            imageFrom.GetData(imageColors);
81            Color[,] imageColors2D = new Color[imageFrom.Width, imageFrom.Height];
82            for (int x = 0; x < imageFrom.Width; x++)
83                for (int y = 0; y < imageFrom.Height; y++)
84                    imageColors2D[x, y] = imageColors[x + y * imageFrom.Width];
85            int tilesPerLine = imageFrom.Width / size;
86            int tilesPerColumn = imageFrom.Height / size;
87            for (int x = 0; x < 4; x++)
88                        {
89                for (int y = 0; y < 1; y++)
90                            {
91                    Color[] rColor = new Color[size * size];
92                    for (int xx = 0; xx < size; xx++)
93                        for (int yy = 0; yy < size; yy++)
94                            rColor[xx + yy * size] = imageColors2D[xx + size*x + x+1, yy + size*y + y+1];
95                    Texture2D newTile = new Texture2D(gDevice, size, size);
96                    newTile.SetData(rColor);
97                    tiles.Add(newTile);
98                            }
99                        }
100           
101            return tiles;
102        }
103    }
104}
Note: See TracBrowser for help on using the repository browser.