public Level(Game currentGame, ILevelRenderer renderer) : base(currentGame) { GameHandler = currentGame; this.renderer = renderer; Manager = new LevelManager(currentGame); FloorSize = 8; Floor = new Tile[FloorSize, FloorSize]; for (int i = 0; i < FloorSize; i++) { for (int j = 0; j < FloorSize; j++) { Floor[i, j] = new Tile(); } } }
public Tile[,] Load(string inputPath) { inputPath = inputPath + levelFileExtension; Tile[,] floor = null; using (StreamReader reader = new StreamReader(inputPath)) { string levelHeader = reader.ReadLine(); int floorSize = parseLevelHeader(levelHeader); gameHandler.Level.StartDirection = (Turn)int.Parse(reader.ReadLine(), CultureInfo.InvariantCulture); floor = new Tile[floorSize, floorSize]; for (int row = 0; row < floorSize; row++) { for (int column = 0; column < floorSize; column++) { Tile parsedTile = parseTileLine(reader, row, column); floor[row, column] = parsedTile; } } } return floor; }
private void renderTile(Tile tile) { GL.Material(MaterialFace.Front, MaterialParameter.AmbientAndDiffuse, new float[] { 0.0f, 0.0f, 0.0f, 1.0f }); GL.PushMatrix(); { //GL.Translate(TileSize * row, -0.5, -TileSize * column); GL.Enable(EnableCap.ColorMaterial); GL.ColorMaterial(MaterialFace.Front, ColorMaterialParameter.Ambient); drawBox(tile); getTileDrawColor(tile); GL.Disable(EnableCap.ColorMaterial); GL.Scale(TileSize - 0.05f, 0.25f, TileSize - 0.05f); Glut.glutSolidCube(TileSize); } GL.PopMatrix(); }
private void getTileDrawColor(Tile tile) { GL.Material(MaterialFace.Front, MaterialParameter.Emission, new float[] { 0.0f, 0.0f, 0.0f, 1.0f }); GL.Material(MaterialFace.Front, MaterialParameter.Specular, new float[] { 0.0f, 0.0f, 0.0f, 1.0f }); switch (tile.Type) { case TileType.NoLight: GL.Material(MaterialFace.Front, MaterialParameter.Specular, new float[] { 1.0f, 1.0f, 1.0f, 1.0f }); GL.Color3(0.5f, 0.5f, 0.5); break; case TileType.LightOn: GL.Material(MaterialFace.Front, MaterialParameter.Emission, new float[] { 1.0f, 1.0f, 0.0f, 1.0f }); GL.Color3(1f, 1f, 0); break; case TileType.LightOff: // GL.Material(MaterialFace.Front, MaterialParameter.Specular, new float[] { 0.5f, 0.5f, 0.5f, 1.0f }); GL.Material(MaterialFace.Front, MaterialParameter.Emission, new float[] { 0.1f, 0.1f, 0.1f, 1.0f }); GL.Material(MaterialFace.Front, MaterialParameter.Shininess, new float[] { 20.0f }); GL.Color3(1.0f, 1.0f, 1.0f); break; case TileType.StartPosition: GL.Color3(0, 1f, 0); break; } }
private void drawBox(Tile tile) { GL.Material(MaterialFace.Front, MaterialParameter.Emission, new float[] { 0.0f, 0.0f, 0.0f, 1.0f }); GL.Material(MaterialFace.Front, MaterialParameter.Specular, new float[] { 0.0f, 0.0f, 0.0f, 1.0f }); GL.Material(MaterialFace.Front, MaterialParameter.AmbientAndDiffuse, new float[] { 0.0f, 0.0f, 0.0f, 1.0f }); switch (tile.Height) { case TileHeight.Ground: break; case TileHeight.BoxOne: GL.Scale(1, 1.5, 1); Glut.glutSolidCube(1.0); GL.Translate(0, 0.5, 0); break; case TileHeight.BoxTwo: GL.Translate(0, 0.5, 0); GL.Scale(1, 1.8, 1); Glut.glutSolidCube(1.0); GL.Translate(0, 0.5, 0); break; case TileHeight.BoxThree: break; default: break; } }
public void Save(string outputPath, Tile[,] floor, int floorSize) { outputPath = outputPath + levelFileExtension; using (StreamWriter writer = new StreamWriter(outputPath)) { writer.WriteLine("{0}x{1}", floorSize, floorSize); writer.WriteLine((int)gameHandler.Position.Direction); for (int row = 0; row < floorSize; row++) { for (int column = 0; column < floorSize; column++) { writer.WriteLine("{0};{1};{2};{3}", row, column, (int)floor[row, column].Type, (int)floor[row, column].Height); } } } }
private Tile parseTileLine(StreamReader reader, int row, int column) { string floorTile = reader.ReadLine(); string[] tokens = splitTileInfoLine(row, column, floorTile); int tileRow; int tileColumn; TileType tileType; TileHeight tileHeight; parseTileLine(tokens, out tileRow, out tileColumn, out tileType, out tileHeight); Tile newTile = new Tile(); newTile.Type = tileType; newTile.Height = tileHeight; return newTile; }