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

Revision 1822, 4.2 KB checked in by tekrjant, 8 years ago (diff)

Generates random map on startup.
Saving works and loading added
Minor "optimization" done

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                {
34                    int tileT = r.Next(1, 5);
35                    Tile newTile = new Tile(
36                        (TileType)tileT, new Rectangle(x * 32, y * 32, tileSize, tileSize));
37                    if (tileT != 2)
38                        newTile.Passable = true;
39                    else
40                        newTile.Passable = false;
41                    this.Tiles.Add(newTile);
42                }
43        }
44
45        private void LoadTextures()
46        {
47            textureType = new Dictionary<TileType, Texture2D>();
48            textureType.Add(TileType.Grass, tileTextures[0]);
49            textureType.Add(TileType.DarkGrass, tileTextures[1]);
50            textureType.Add(TileType.Sand, tileTextures[2]);
51            textureType.Add(TileType.Water, tileTextures[3]);
52        }
53
54        public void UnSelectAll()
55        {
56            for (int i = 0; i < this.Tiles.Count; i++)
57                Tiles[i].Selected = false;
58        }
59
60        public void SelectTile(Tile tile)
61        {
62            tile.Selected = true;
63            SelectedTile = tile;
64        }
65
66        public void ChangeTileTo(Tile tile, TileType tileType)
67        {
68            tile.TileType = tileType;
69        }
70
71        public void ChangeTileTo(TileType tileType)
72        {
73            SelectedTile.TileType = tileType;
74        }
75
76        public void Draw(SpriteBatch sb, Camera gamecam)
77        {
78            foreach (Tile tile in Tiles)
79            {
80                if (tile.Boundaries.Intersects(gamecam.Bounds))
81                {
82                    sb.Draw(this.textureType[tile.TileType], tile.Boundaries, Color.White);
83                    if (tile.Selected)
84                        sb.Draw(AdventureGame.selectionBox, tile.Boundaries, Color.White);
85                }
86            }
87        }
88
89        public static List<Texture2D> TilesFromImage(GraphicsDevice gDevice, Texture2D image, int size)
90        {
91            List<Texture2D> tiles = new List<Texture2D>();
92            Texture2D imageFrom = image;
93            Color[] imageColors = new Color[imageFrom.Width * imageFrom.Height];
94            imageFrom.GetData(imageColors);
95            Color[,] imageColors2D = new Color[imageFrom.Width, imageFrom.Height];
96            for (int x = 0; x < imageFrom.Width; x++)
97                for (int y = 0; y < imageFrom.Height; y++)
98                    imageColors2D[x, y] = imageColors[x + y * imageFrom.Width];
99            int tilesPerLine = imageFrom.Width / size;
100            int tilesPerColumn = imageFrom.Height / size;
101            for (int x = 0; x < 4; x++)
102                        {
103                for (int y = 0; y < 1; y++)
104                            {
105                    Color[] rColor = new Color[size * size];
106                    for (int xx = 0; xx < size; xx++)
107                        for (int yy = 0; yy < size; yy++)
108                            rColor[xx + yy * size] = imageColors2D[xx + size*x + x+1, yy + size*y + y+1];
109                    Texture2D newTile = new Texture2D(gDevice, size, size);
110                    newTile.SetData(rColor);
111                    tiles.Add(newTile);
112                            }
113                        }
114           
115            return tiles;
116        }
117    }
118}
Note: See TracBrowser for help on using the repository browser.