示例#1
0
        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;
        }
示例#2
0
 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);
         }
     }
 }
示例#3
0
 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;
 }
示例#4
0
        /// <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);
        }