public Map( int backG, MapSquare[,] mapC, int[,] foreG, int w, int h, int v) { mapSquares = mapC; background = backG; foreground = foreG; version = v; width = w; height = h; }
public MapSquare this[int tileX, int tileY] { get{ if (tileX >= 0 && tileX < MapWidth && tileY >= 0 && tileY < MapHeight) { if (TileMap.EditorMode && squares [tileX, tileY] == null) squares [tileX, tileY] = new MapSquare (); return squares [tileX, tileY]; } else return null; } set{ if (!TileMap.EditorMode) throw new EditModeException (); if (tileX >= 0 && tileX < MapWidth && tileY >= 0 && tileY < MapHeight) { if(value == null){ squares [tileX, tileY] = null; return; } if (squares [tileX, tileY] == null) squares [tileX, tileY] = new MapSquare (); squares [tileX, tileY].Copy (value); } } }
public void Copy(MapSquare a) { if (a == this) return; if(a.layerTiles != null){ layerTiles = new int[a.layerTiles.Length]; for (int i=0; i<a.layerTiles.Length; ++i) layerTiles [i] = a.layerTiles [i]; } codeValue = a.codeValue; passable = a.passable; }
/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { KeyboardState keyState = Keyboard.GetState (); if (keyState.IsKeyDown (Keys.LeftControl) || keyState.IsKeyDown (Keys.RightControl)) { prevtile = TileMap.MapSquares [cursor]; prevground = TileMap.Foreground [cursor]; } // For Mobile devices, this logic will close the Game when the Back button is pressed if (keyState.IsKeyDown (Keys.Enter) && keyState.IsKeyDown (Keys.LeftAlt) && lastState.IsKeyUp (Keys.Enter)) { graphics.IsFullScreen = !graphics.IsFullScreen; graphics.ApplyChanges (); lastState = keyState; return; } switch(editorState){ case EditorState.Background: if (keyState.IsKeyDown (Keys.PageUp) && lastState.IsKeyUp (Keys.PageUp)) { ++TileMap.Background.Index; } else if (keyState.IsKeyDown (Keys.PageDown) && lastState.IsKeyUp (Keys.PageDown)) { --TileMap.Background.Index; } else if (keyState.IsKeyDown (Keys.C) && lastState.IsKeyUp (Keys.C)) { editorState = EditorState.Foreground; } else if (keyState.IsKeyDown (Keys.X) && lastState.IsKeyUp (Keys.X)) { editorState = EditorState.Clean; } else if (keyState.IsKeyDown (Keys.Escape) && lastState.IsKeyUp (Keys.Escape)) { editorState = EditorState.Options; } repositionCamera (); break; case EditorState.Foreground: if (keyState.IsKeyDown (Keys.Up) && lastState.IsKeyUp (Keys.Up)) { if (cursor.Y > 0) --cursor.Y; } else if (keyState.IsKeyDown (Keys.Down) && lastState.IsKeyUp (Keys.Down)) { if (cursor.Y < TileMap.MapHeight - 1) ++cursor.Y; } else if (keyState.IsKeyDown (Keys.Left) && lastState.IsKeyUp (Keys.Left)) { if (cursor.X > 0) --cursor.X; } else if (keyState.IsKeyDown (Keys.Right) && lastState.IsKeyUp (Keys.Right)) { if (cursor.X < TileMap.MapWidth - 1) ++cursor.X; } else if (keyState.IsKeyDown (Keys.PageUp) && lastState.IsKeyUp (Keys.PageUp)) { ++TileMap.Foreground [cursor]; } else if (keyState.IsKeyDown (Keys.PageDown) && lastState.IsKeyUp (Keys.PageDown)) { --TileMap.Foreground [cursor]; } else if (keyState.IsKeyDown (Keys.Delete) && lastState.IsKeyUp (Keys.Delete)) { TileMap.Foreground [cursor] = 0; } else if (keyState.IsKeyDown (Keys.Z) && lastState.IsKeyUp (Keys.Z)) { editorState = EditorState.Background; }else if (keyState.IsKeyDown (Keys.X) && lastState.IsKeyUp (Keys.X)) { editorState = EditorState.Clean; }else if (keyState.IsKeyDown (Keys.Escape) && lastState.IsKeyUp (Keys.Escape)) { editorState = EditorState.Options; }else if (keyState.IsKeyDown (Keys.I) && lastState.IsKeyUp (Keys.I)) { --TileMap.MapHeight; }else if (keyState.IsKeyDown (Keys.K) && lastState.IsKeyUp (Keys.K)) { ++TileMap.MapHeight; }else if (keyState.IsKeyDown (Keys.J) && lastState.IsKeyUp (Keys.J)) { --TileMap.MapWidth; }else if (keyState.IsKeyDown (Keys.L) && lastState.IsKeyUp (Keys.L)) { ++TileMap.MapWidth; } if (keyState.IsKeyDown (Keys.LeftControl) || keyState.IsKeyDown (Keys.RightControl)) { TileMap.Foreground[cursor] = prevground; } repositionCamera (); break; //case EditorState.Map: case EditorState.Clean: case EditorState.Drugged: if (keyState.IsKeyDown (Keys.Up) && lastState.IsKeyUp (Keys.Up)) { if (cursor.Y > 0) --cursor.Y; } else if (keyState.IsKeyDown (Keys.Down) && lastState.IsKeyUp (Keys.Down)) { if (cursor.Y < TileMap.MapHeight -1) ++cursor.Y; } else if (keyState.IsKeyDown (Keys.Left) && lastState.IsKeyUp (Keys.Left)) { if (cursor.X > 0) --cursor.X; } else if (keyState.IsKeyDown (Keys.Right) && lastState.IsKeyUp (Keys.Right)) { if (cursor.X < TileMap.MapWidth -1) ++cursor.X; } else if (keyState.IsKeyDown (Keys.PageUp) && lastState.IsKeyUp (Keys.PageUp)) { ++TileMap.MapSquares[cursor][(int)editorState-1, 2]; } else if (keyState.IsKeyDown (Keys.PageDown) && lastState.IsKeyUp (Keys.PageDown)) { --TileMap.MapSquares[cursor][(int)editorState-1, 2]; } else if (keyState.IsKeyDown (Keys.Enter) && lastState.IsKeyUp (Keys.Enter)) { editorState = EditorState.CellCode; currentString = TileMap.MapSquares[cursor].CodeValue; TileMap.MapSquares[cursor].CodeValue = ""; //currentLayer = -1; }else if (keyState.IsKeyDown (Keys.Space) && lastState.IsKeyUp (Keys.Space)) { TileMap.MapSquares[cursor].TogglePassable ((int)editorState-1); }else if (keyState.IsKeyDown (Keys.Delete) && lastState.IsKeyUp (Keys.Delete)) { TileMap.MapSquares[cursor] = null; }else if (keyState.IsKeyDown (Keys.Escape) && lastState.IsKeyUp (Keys.Escape)) { editorState = EditorState.Options; }else if (keyState.IsKeyDown (Keys.Z) && lastState.IsKeyUp (Keys.Z)) { editorState = EditorState.Background; }else if (keyState.IsKeyDown (Keys.C) && lastState.IsKeyUp (Keys.C)) { editorState = EditorState.Foreground; }else if (keyState.IsKeyDown (Keys.A) && lastState.IsKeyUp (Keys.A)) { editorState = EditorState.Both; }else if (keyState.IsKeyDown (Keys.S) && lastState.IsKeyUp (Keys.S)) { editorState = EditorState.Clean; }else if (keyState.IsKeyDown (Keys.D) && lastState.IsKeyUp (Keys.D)) { editorState = EditorState.Drugged; }else if( keyState.IsKeyDown (Keys.D1) && lastState.IsKeyUp(Keys.D1)){ TileMap.MapSquares[cursor].Copy ( predefined [0]); }else if( keyState.IsKeyDown (Keys.D2) && lastState.IsKeyUp(Keys.D2)){ TileMap.MapSquares[cursor].Copy ( predefined [1]); }else if( keyState.IsKeyDown (Keys.D3) && lastState.IsKeyUp(Keys.D3)){ TileMap.MapSquares[cursor].Copy ( predefined [2]); }else if (keyState.IsKeyDown (Keys.I) && lastState.IsKeyUp (Keys.I)) { --TileMap.MapHeight; }else if (keyState.IsKeyDown (Keys.K) && lastState.IsKeyUp (Keys.K)) { ++TileMap.MapHeight; }else if (keyState.IsKeyDown (Keys.J) && lastState.IsKeyUp (Keys.J)) { --TileMap.MapWidth; }else if (keyState.IsKeyDown (Keys.L) && lastState.IsKeyUp (Keys.L)) { ++TileMap.MapWidth; } if (keyState.IsKeyDown (Keys.LeftControl) || keyState.IsKeyDown (Keys.RightControl)) { TileMap.MapSquares[cursor] = prevtile; } repositionCamera (); break; case EditorState.Both: if (keyState.IsKeyDown (Keys.Up) && lastState.IsKeyUp (Keys.Up)) { if (cursor.Y > 0) --cursor.Y; } else if (keyState.IsKeyDown (Keys.Down) && lastState.IsKeyUp (Keys.Down)) { if (cursor.Y < TileMap.MapHeight -1) ++cursor.Y; } else if (keyState.IsKeyDown (Keys.Left) && lastState.IsKeyUp (Keys.Left)) { if (cursor.X > 0) --cursor.X; } else if (keyState.IsKeyDown (Keys.Right) && lastState.IsKeyUp (Keys.Right)) { if (cursor.X < TileMap.MapWidth -1) ++cursor.X; } else if (keyState.IsKeyDown (Keys.PageUp) && lastState.IsKeyUp (Keys.PageUp)) { ++TileMap.MapSquares[cursor][0, 1]; } else if (keyState.IsKeyDown (Keys.PageDown) && lastState.IsKeyUp (Keys.PageDown)) { --TileMap.MapSquares[cursor][0, 1]; } else if (keyState.IsKeyDown (Keys.Enter) && lastState.IsKeyUp (Keys.Enter)) { editorState = EditorState.CellCode; currentString = TileMap.MapSquares[cursor].CodeValue; TileMap.MapSquares[cursor].CodeValue = ""; //currentLayer = -1; }else if (keyState.IsKeyDown (Keys.Space) && lastState.IsKeyUp (Keys.Space)) { TileMap.MapSquares[cursor].TogglePassable (2); }else if (keyState.IsKeyDown (Keys.Delete) && lastState.IsKeyUp (Keys.Delete)) { TileMap.MapSquares[cursor] = null; }else if (keyState.IsKeyDown (Keys.Escape) && lastState.IsKeyUp (Keys.Escape)) { editorState = EditorState.Options; }else if (keyState.IsKeyDown (Keys.Z) && lastState.IsKeyUp (Keys.Z)) { editorState = EditorState.Background; }else if (keyState.IsKeyDown (Keys.C) && lastState.IsKeyUp (Keys.C)) { editorState = EditorState.Foreground; }else if (keyState.IsKeyDown (Keys.S) && lastState.IsKeyUp (Keys.S)) { editorState = EditorState.Clean; }else if (keyState.IsKeyDown (Keys.D) && lastState.IsKeyUp (Keys.D)) { editorState = EditorState.Drugged; }else if( keyState.IsKeyDown (Keys.D1) && lastState.IsKeyUp(Keys.D1)){ TileMap.MapSquares[cursor] = predefined [0]; }else if( keyState.IsKeyDown (Keys.D2) && lastState.IsKeyUp(Keys.D2)){ TileMap.MapSquares[cursor] = predefined [1]; }else if( keyState.IsKeyDown (Keys.D3) && lastState.IsKeyUp(Keys.D3)){ TileMap.MapSquares[cursor] = predefined [2]; }else if (keyState.IsKeyDown (Keys.I) && lastState.IsKeyUp (Keys.I)) { --TileMap.MapHeight; }else if (keyState.IsKeyDown (Keys.K) && lastState.IsKeyUp (Keys.K)) { ++TileMap.MapHeight; }else if (keyState.IsKeyDown (Keys.J) && lastState.IsKeyUp (Keys.J)) { --TileMap.MapWidth; }else if (keyState.IsKeyDown (Keys.L) && lastState.IsKeyUp (Keys.L)) { ++TileMap.MapWidth; } if (keyState.IsKeyDown (Keys.LeftControl) || keyState.IsKeyDown (Keys.RightControl)) { TileMap.MapSquares[cursor] = prevtile; } repositionCamera (); break; case EditorState.CellCode: if(keyState.IsKeyDown (Keys.Enter) && lastState.IsKeyUp (Keys.Enter)){ editorState = EditorState.Clean; TileMap.MapSquares[cursor].CodeValue = currentString; }if(keyState.IsKeyDown (Keys.Back) && lastState.IsKeyUp (Keys.Back)){ if(currentString.Length > 0) currentString = currentString.Substring (0, currentString.Length - 1); break; } foreach (Keys key in keyState.GetPressedKeys ()){ bool repeated = false; foreach (Keys kay in lastState.GetPressedKeys ()){ if (key == kay){ repeated = true; break; } } if (!repeated && key.ToString ().Length == 1) currentString += key.ToString (); } break; case EditorState.Options: if (keyState.IsKeyDown (Keys.Escape) && lastState.IsKeyUp (Keys.Escape)) { editorState = EditorState.Clean; } else if (keyState.IsKeyDown (Keys.Enter) && lastState.IsKeyUp (Keys.Enter)) { switch (currentOption) { case 0: LoadMap (currentMap); editorState = EditorState.Clean; break; case 1: SaveMap (currentMap); editorState = EditorState.Clean; break; case 2: Exit (); break; } } else if (keyState.IsKeyDown (Keys.Down) && lastState.IsKeyUp (Keys.Down)) { if (currentOption < 2) ++currentOption; } else if (keyState.IsKeyDown (Keys.Up) && lastState.IsKeyUp (Keys.Up)) { if (currentOption > 0) --currentOption; } else if (keyState.IsKeyDown (Keys.PageUp) && lastState.IsKeyUp (Keys.PageUp)) { if (currentMap < 999) ++currentMap; else currentMap = 0; } else if (keyState.IsKeyDown (Keys.PageDown) && lastState.IsKeyUp (Keys.PageDown)) { if (currentMap > 0) --currentMap; else currentMap = 999; } break; } lastState = keyState; base.Update(gameTime); }