Jypeli 10
The simple game programming library
TileMap.cs
Siirry tämän tiedoston dokumentaatioon.
1using System;
2using System.IO;
3using System.Collections.Generic;
4using System.Linq;
5
6namespace Jypeli
7{
13 public class TileMap : AbstractTileMap<char>
14 {
15 private Dictionary<char, Func<GameObject>> oldLegend = new Dictionary<char, Func<GameObject>>();
16 private static string[] textExtensions = { ".txt", ".dat" };
17
19 protected override char Null
20 {
21 get { return ' '; }
22 }
23
28 public Func<GameObject> this[char c]
29 {
30 get { return oldLegend[c]; }
31 set { oldLegend[c] = value; }
32 }
33
38 public TileMap( char[,] tiles )
39 : base(tiles)
40 {
41 }
42
43#if !WINDOWS_STOREAPP
44
49 public static TileMap FromFile( string path )
50 {
51 char[,] tiles = ReadFromFile( path );
52 return new TileMap( tiles );
53 }
54
55#endif
56
61 public static TileMap FromStringArray(string[] lines)
62 {
63 char[,] tiles = ReadFromStringArray(lines);
64 return new TileMap(tiles);
65 }
66
71 public static TileMap FromLevelAsset(string assetName)
72 {
73 assetName = "Content/" + assetName;
74 assetName = Game.FileExtensionCheck(assetName, textExtensions);
75 char[,] tiles = ReadFromFile(assetName);
76 return new TileMap(tiles);
77 }
78
82 public void Insert()
83 {
84 double h = Game.Instance.Level.Height / tiles.GetLength(0);
85 double w = Game.Instance.Level.Width / tiles.GetLength(1);
86 Insert(w, h);
87 }
88
98 public void Insert( double tileWidth, double tileHeight )
99 {
100 Game game = Game.Instance;
101 int width = tiles.GetLength( 1 );
102 int height = tiles.GetLength( 0 );
103
104 game.Level.Width = width * tileWidth;
105 game.Level.Height = height * tileHeight;
106
107 for ( int y = height - 1; y >= 0; y-- )
108 {
109 for ( int x = 0; x < width; x++ )
110 {
111 char symbol = tiles[y, x];
112 if ( oldLegend.ContainsKey( symbol ) )
113 {
114 Func<GameObject> create = oldLegend[symbol];
115 GameObject o = create();
116 o.X = game.Level.Left + ( x * tileWidth ) + ( tileWidth / 2 );
117 o.Y = game.Level.Top - ( y * tileHeight ) - ( tileHeight / 2 );
118 game.Add( o );
119 }
120 }
121 }
122 }
123
124#if !WINDOWS_STOREAPP
125
131 internal static char[,] ReadFromFile( string path )
132 {
133 var tileBuffer = new List<char[]>();
134
135 using (StreamReader input = File.OpenText(path))
136 {
137 string line;
138 while ( ( line = input.ReadLine() ) != null )
139 {
140 tileBuffer.Add( line.ToCharArray() );
141 }
142 }
143
144 return ListToArray(tileBuffer);
145 }
146
147#endif
148
149 internal static char[,] ReadFromStringArray(string[] lines)
150 {
151 var tileBuffer = new List<char[]>();
152
153 for (int i = 0; i < lines.Length; i++ )
154 {
155
156 tileBuffer.Add(lines[i].ToCharArray());
157
158 }
159
160 return ListToArray(tileBuffer);
161 }
162
163 private static char[,] ListToArray(List<char[]> list)
164 {
165 int finalWidth = list.Max(cs => cs.Length);
166
167 char[,] tiles = new char[list.Count, finalWidth];
168
169 for (int y = 0; y < list.Count; y++)
170 {
171 char[] row = list.ElementAt(y);
172
173 for (int x = 0; x < row.Length; x++)
174 {
175 tiles[y, x] = row[x];
176 }
177 }
178
179 return tiles;
180 }
181 }
182}
Abstrakti ruutukartta. Tätä luokkaa et voi muodostaa. Katso ColorTileMap ja TileMap
Level Level
Aktiivinen kenttä.
Definition: Game.cs:145
static string FileExtensionCheck(string file, string[] extensions)
Etsii millä päätteellä annettu tiedosto löytyy
Definition: Content.cs:200
void Add(Light light)
Lisää valon peliin. Nykyisellään valoja voi olla ainoastaan yksi kappale. Toistaiseksi ei tuettu Wind...
Definition: Effects.cs:27
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:96
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
Definition: Appearance.cs:34
double X
Olion paikan X-koordinaatti.
double Y
Olion paikan Y-koordinaatti.
double Top
Kentän yläreunan y-koordinaatti.
Definition: Level.cs:152
double Left
Kentän vasemman reunan x-koordinaatti.
Definition: Level.cs:136
double Width
Kentän leveys.
Definition: Level.cs:109
double Height
Kentän korkeus.
Definition: Level.cs:118
Ruutukartta, jonka avulla olioita voidaan helposti asettaa tasavälein ruudukkoon. Ruutukartta koostuu...
Definition: TileMap.cs:14
TileMap(char[,] tiles)
Luo uuden ruutukartan.
Definition: TileMap.cs:38
Dictionary< char, Func< GameObject > > oldLegend
Definition: TileMap.cs:15
void Insert(double tileWidth, double tileHeight)
Asettaa oliot kenttään aiemmin annettujen merkkien perusteella.
Definition: TileMap.cs:98
static TileMap FromStringArray(string[] lines)
Lukee ruutukentän merkkijonotaulukosta.
Definition: TileMap.cs:61
static char[,] ReadFromFile(string path)
Lukee kentän ruudut tiedostosta.
Definition: TileMap.cs:131
override char Null
Definition: TileMap.cs:20
static char[,] ReadFromStringArray(string[] lines)
Definition: TileMap.cs:149
void Insert()
Asettaa oliot kenttään aiemmin annettujen merkkien perusteella.
Definition: TileMap.cs:82
static string[] textExtensions
Definition: TileMap.cs:16
static TileMap FromFile(string path)
Lukee ruutukentän tiedostosta.
Definition: TileMap.cs:49
static TileMap FromLevelAsset(string assetName)
Lukee ruutukentän Content-projektin tekstitiedostosta.
Definition: TileMap.cs:71
static char[,] ListToArray(List< char[]> list)
Definition: TileMap.cs:163