예제 #1
0
        public Chomper(RoomNew room, ContentManager Content, Enumeration.TileType tileType, Enumeration.StateTile state, Enumeration.TileType NextTileType__1)
        {
            base.room = room;

            nextTileType = NextTileType__1;
            System.Xml.Serialization.XmlSerializer ax = new System.Xml.Serialization.XmlSerializer(tileSequence.GetType());

            Stream txtReader = Microsoft.Xna.Framework.TitleContainer.OpenStream(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString().ToUpper() + "_sequence.xml");

            tileSequence = (List <Sequence>)ax.Deserialize(txtReader);

            foreach (Sequence s in tileSequence)
            {
                s.Initialize(Content);
            }

            //Search in the sequence the right type
            //Sequence result = tileSequence.Find((Sequence s) => s.name.ToUpper() == state.ToString().ToUpper());
            Sequence result = tileSequence.Find((Sequence s) => s.name == state.ToString().ToUpper());

            if (result != null)
            {
                result.frames[0].SetTexture(Content.Load <Texture2D>(PrinceOfPersiaGame.CONFIG_TILES[0] + result.frames[0].value));

                collision = result.collision;
                Texture   = result.frames[0].texture;
            }
            Type = tileType;


            //change statetile element
            tileState.Value().state = state;
            tileAnimation.PlayAnimation(tileSequence, tileState.Value());
        }
예제 #2
0
        public Tile(Room room, Enumeration.TileType tileType, Enumeration.StateTile state, Enumeration.Items eitem, Enumeration.TileType NextTileType)
        {
            tileAnimation = new AnimationSequence(this);
            this.room     = room;
            nextTileType  = NextTileType;

            System.Xml.Serialization.XmlSerializer ax = new System.Xml.Serialization.XmlSerializer(tileSequence.GetType());

            Stream txtReader = Microsoft.Xna.Framework.TitleContainer.OpenStream(PoP.CONFIG_PATH_CONTENT + PoP.CONFIG_PATH_SEQUENCES + tileType.ToString() + "_sequence.xml");

            //TextReader txtReader = File.OpenText(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString() + "_sequence.xml");


            tileSequence = (List <Sequence>)ax.Deserialize(txtReader);

            foreach (Sequence s in tileSequence)
            {
                s.Initialize();
            }

            //Search in the sequence the right type
            Sequence result = tileSequence.Find(delegate(Sequence s)
            {
                return(s.name.ToUpper() == state.ToString().ToUpper());
            });

            if (result != null)
            {
                //AMF to be adjust....
                result.frames[0].SetTexture((Texture2D)Maze.Content[PoP.CONFIG_TILES + result.frames[0].value]);
                //result.frames[0].SetTexture(Content.Load<Texture2D>(PrinceOfPersiaGame.CONFIG_TILES + result.frames[0].value));

                collision = result.collision;
                Texture   = result.frames[0].texture;
            }
            Type = tileType;


            //change statetile element
            StateTileElement stateTileElement = new StateTileElement();

            stateTileElement.state = state;
            tileState.Add(stateTileElement);
            tileAnimation.PlayAnimation(tileSequence, tileState);

            //load item
            switch (eitem)
            {
            case Enumeration.Items.flask:
                item = new Flask();
                break;

            case Enumeration.Items.sword:
                item = new Sword();
                break;
            }
        }
예제 #3
0
        public Tile(RoomNew room, ContentManager Content, Enumeration.TileType tileType, Enumeration.StateTile state, Enumeration.Items eitem, Enumeration.TileType NextTileType__1)
        {
            this.room    = room;
            nextTileType = NextTileType__1;

            System.Xml.Serialization.XmlSerializer ax = new System.Xml.Serialization.XmlSerializer(m_tileSequence.GetType());

            Stream txtReader = Microsoft.Xna.Framework.TitleContainer.OpenStream(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString().ToUpper() + "_sequence.xml");

            //TextReader txtReader = File.OpenText(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString().ToUpper() + "_sequence.xml");


            m_tileSequence = (List <Sequence>)ax.Deserialize(txtReader);

            foreach (Sequence s in m_tileSequence)
            {
                s.Initialize(Content);
            }

            //Search in the sequence the right type
            Sequence result = m_tileSequence.Find((Sequence s) => s.name == state.ToString().ToUpper());

            if (result != null)
            {
                //AMF to be adjust....
                result.frames[0].SetTexture(Content.Load <Texture2D>(PrinceOfPersiaGame.CONFIG_TILES[0] + result.frames[0].value));

                collision = result.collision;
                Texture   = result.frames[0].texture;
            }
            Type = tileType;


            //change statetile element
            StateTileElement stateTileElement = new StateTileElement();

            stateTileElement.state = state;
            tileState.Add(stateTileElement);
            tileAnimation.PlayAnimation(m_tileSequence, tileState.Value());

            //load item
            switch (eitem)
            {
            case Enumeration.Items.flask:
                item = new Flask(Content);
                break;     // TODO: might not be correct. Was : Exit Select

            case Enumeration.Items.flaskbig:
                item = new FlaskBig(Content);
                break;     // TODO: might not be correct. Was : Exit Select

            case Enumeration.Items.sword:
                item = new Sword(Content);
                break;     // TODO: might not be correct. Was : Exit Select
            }
        }
예제 #4
0
        public static int ParseSwitchButton(Enumeration.TileType tileType, string modifier)
        {
            int iModifier = int.Parse(modifier);

            if (tileType == (Enumeration.TileType.pressplate & Enumeration.TileType.upressplate))
            {
                return(iModifier + 1);
            }

            return(0);
        }
예제 #5
0
        private Tile LoadTile(Enumeration.TileType tiletype, Enumeration.StateTile state, int switchButton, Enumeration.Items item, Enumeration.TileType nextTileType, float timeOpen)
        {
            switch (tiletype)
            {
            case Enumeration.TileType.spikes:
                return(new Spikes(this, content, tiletype, state, nextTileType));



            case Enumeration.TileType.lava:
                return(new Lava(this, content, tiletype, state, nextTileType));



            case Enumeration.TileType.pressplate:
                return(new PressPlate(this, content, tiletype, state, switchButton, nextTileType));


            case Enumeration.TileType.closeplate:
                return(new ClosePlate(this, content, tiletype, state, switchButton, nextTileType));

            case Enumeration.TileType.gate:
                return(new Gate(this, content, tiletype, state, switchButton, nextTileType, timeOpen));

            case Enumeration.TileType.mirror:
                return(new Mirror(this, content, tiletype, state, switchButton, nextTileType, timeOpen));

            case Enumeration.TileType.loose:
                return(new Loose(this, content, tiletype, state, nextTileType));



            case Enumeration.TileType.block:
                return(new Block(this, content, tiletype, state, nextTileType));



            case Enumeration.TileType.chomper:
                return(new Chomper(this, content, tiletype, state, nextTileType));

            case Enumeration.TileType.exit:
                return(new Exit(this, content, tiletype, state, 0, nextTileType));



            default:

                return(new Tile(this, content, tiletype, state, item, nextTileType));
            }
        }
예제 #6
0
        public List <Tile> GetTiles(Enumeration.TileType tileType)
        {
            List <Tile> list = new List <Tile>();

            foreach (Room r in rooms)
            {
                foreach (Tile t in r.GetTiles(tileType))
                {
                    list.Add(t);
                }
                //list.Concat(r.GetTiles(tileType));
            }
            return(list);
        }
예제 #7
0
        public void SubsTile(Vector2 coordinate, Enumeration.TileType tileType)
        {
            int x = (int)coordinate.X; // (int)Math.Floor((float)position.X / Tile.WIDTH);
            int y = (int)coordinate.Y; //(int)Math.Ceiling(((float)(position.Y - RoomNew.BOTTOM_BORDER) / Tile.HEIGHT));

            Tile     t = new Tile(this, tileType, Enumeration.StateTile.normal, Enumeration.Items.none, Enumeration.TileType.space);
            Position p = new Position(tiles[x, y].Position._screenRealSize, tiles[x, y].Position._spriteRealSize);

            p.X         = tiles[x, y].Position.X;
            p.Y         = tiles[x, y].Position.Y;
            t.Position  = p;
            tiles[x, y] = t;
            tiles[x, y].tileAnimation.PlayAnimation(t.TileSequence, t.tileState);
        }
예제 #8
0
        public List <Tile> GetTiles(Enumeration.TileType tileType)
        {
            List <Tile> list = new List <Tile>();

            for (int y = Height - 1; y >= 0; y += -1)
            {
                for (int x = 0; x <= Width - 1; x++)
                {
                    if (tileType == tiles[x, y].Type)
                    {
                        list.Add(tiles[x, y]);
                    }
                }
            }
            return(list);
        }
예제 #9
0
        public Gate(Room room, Enumeration.TileType tileType, Enumeration.StateTile state, int switchButton, Enumeration.TileType NextTileType)
        {
            collision    = Enumeration.TileCollision.Platform;
            base.room    = room;
            nextTileType = NextTileType;


            switchButtons.Add(switchButton);
            System.Xml.Serialization.XmlSerializer ax = new System.Xml.Serialization.XmlSerializer(tileSequence.GetType());
            Stream txtReader = Microsoft.Xna.Framework.TitleContainer.OpenStream(PoP.CONFIG_PATH_CONTENT + PoP.CONFIG_PATH_SEQUENCES + tileType.ToString() + "_sequence.xml");

            //TextReader txtReader = File.OpenText(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString() + "_sequence.xml");

            tileSequence = (List <Sequence>)ax.Deserialize(txtReader);

            foreach (Sequence s in tileSequence)
            {
                s.Initialize();
            }

            if (state == Enumeration.StateTile.normal)
            {
                state = Enumeration.StateTile.closed;
            }

            //Search in the sequence the right type
            Sequence result = tileSequence.Find(delegate(Sequence s)
            {
                return(s.name.ToUpper() == state.ToString().ToUpper());
            });

            if (result != null)
            {
                //AMF to be adjust....
                result.frames[0].SetTexture((Texture2D)Maze.Content[PoP.CONFIG_TILES + result.frames[0].value]);
                //result.frames[0].SetTexture(Content.Load<Texture2D>(PrinceOfPersiaGame.CONFIG_TILES + result.frames[0].value));

                collision = result.collision;
                Texture   = result.frames[0].texture;
            }
            Type = tileType;


            //change statetile element
            tileState.Value().state = state;
            tileAnimation.PlayAnimation(tileSequence, tileState);
        }
예제 #10
0
        public Mirror(RoomNew room, ContentManager Content, Enumeration.TileType tileType, Enumeration.StateTile state, int switchButton, Enumeration.TileType NextTileType__1, float TimeOpen__2)
        {
            collision    = Enumeration.TileCollision.Platform;
            base.room    = room;
            nextTileType = NextTileType__1;
            timeOpen     = TimeOpen__2;

            this.switchButton = switchButton;
            System.Xml.Serialization.XmlSerializer ax = new System.Xml.Serialization.XmlSerializer(tileSequence.GetType());
            Stream txtReader = Microsoft.Xna.Framework.TitleContainer.OpenStream(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString().ToUpper() + "_sequence.xml");

            //TextReader txtReader = File.OpenText(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString().ToUpper() + "_sequence.xml");

            tileSequence = (List <Sequence>)ax.Deserialize(txtReader);

            foreach (Sequence s in tileSequence)
            {
                s.Initialize(Content);
            }

            if (state == Enumeration.StateTile.normal)
            {
                state = Enumeration.StateTile.closed;
            }

            //Search in the sequence the right type
            Sequence result = tileSequence.Find((Sequence s) => s.name == state.ToString().ToUpper());

            if (result != null)
            {
                //AMF to be adjust....
                result.frames[0].SetTexture(Content.Load <Texture2D>(PrinceOfPersiaGame.CONFIG_TILES[0] + result.frames[0].value));

                collision = result.collision;
                Texture   = result.frames[0].texture;
            }
            Type = tileType;


            //change statetile element
            tileState.Value().state = state;
            tileAnimation.PlayAnimation(tileSequence, tileState.Value());
        }
예제 #11
0
        private Tile LoadTile(Enumeration.TileType tiletype, Enumeration.StateTile state, int switchButton, Enumeration.Items item, Enumeration.TileType nextTileType)
        {
            switch (tiletype)
            {
            case Enumeration.TileType.spikes:
                return(new Spikes(this, tiletype, state, nextTileType));

                break;

            case Enumeration.TileType.pressplate:
                return(new PressPlate(this, tiletype, state, switchButton, nextTileType));

                break;

            case Enumeration.TileType.gate:
                return(new Gate(this, tiletype, state, switchButton, nextTileType));

                break;

            case Enumeration.TileType.loose:
                return(new Loose(this, tiletype, state, nextTileType));

                break;

            case Enumeration.TileType.block:
                return(new Block(this, tiletype, state, nextTileType));

                break;

            case Enumeration.TileType.exit:
                return(new Exit(this, tiletype, state, switchButton, nextTileType));

                break;

            case Enumeration.TileType.chomper:
                return(new Chomper(this, tiletype, state, nextTileType));

                break;

            default:
                return(new Tile(this, tiletype, state, item, nextTileType));
            }
        }
예제 #12
0
        public Chomper(Room room, Enumeration.TileType tileType, Enumeration.StateTile state, Enumeration.TileType NextTileType)
        {
            base.room = room;

            nextTileType = NextTileType;
            System.Xml.Serialization.XmlSerializer ax = new System.Xml.Serialization.XmlSerializer(tileSequence.GetType());

            Stream txtReader = Microsoft.Xna.Framework.TitleContainer.OpenStream(PoP.CONFIG_PATH_CONTENT + PoP.CONFIG_PATH_SEQUENCES + tileType.ToString() + "_sequence.xml");

            tileSequence = (List <Sequence>)ax.Deserialize(txtReader);

            foreach (Sequence s in tileSequence)
            {
                s.Initialize();
            }

            //Search in the sequence the right type
            Sequence result = tileSequence.Find(delegate(Sequence s)
            {
                return(s.name.ToUpper() == state.ToString().ToUpper());
            });

            if (result != null)
            {
                result.frames[0].SetTexture((Texture2D)Maze.Content[PoP.CONFIG_TILES + result.frames[0].value]);

                collision = result.collision;
                Texture   = result.frames[0].texture;
            }
            Type = tileType;


            //change statetile element
            tileState.Value().state = state;
            tileAnimation.PlayAnimation(tileSequence, tileState);
        }
예제 #13
0
 /// <summary>
 /// Creates a new Tile. The other Tile loading methods typically chain to this
 /// method after performing their special logic.
 /// </summary>
 /// <param name="name">
 /// Path to a Tile texture relative to the Content/Tiles directory.
 /// </param>
 /// <param name="collision">
 /// The Tile collision type for the new Tile.
 /// </param>
 /// <returns>The new Tile.</returns>
 private Tile LoadTile(Enumeration.TileType tiletype)
 {
     return(new Tile(this, content, tiletype, Enumeration.StateTile.normal, Enumeration.Items.nothing, Enumeration.TileType.space));
 }
예제 #14
0
        private void LoadTiles()
        {
            // Allocate the Tile grid.
            tiles = new Tile[map.rows[0].columns.Length, map.rows.Length];
            int x    = 0;
            int y    = 0;
            int newX = 0;

            foreach (Row r in map.rows)
            {
                for (int ix = 0; ix <= r.columns.Length - 1; ix++)
                {
                    Enumeration.TileType nextTileType = Enumeration.TileType.space;
                    if (ix + 1 < r.columns.Length)
                    {
                        nextTileType = r.columns[ix + 1].tileType;
                    }

                    tiles[x, y] = LoadTile(r.columns[ix].tileType, r.columns[ix].state, r.columns[ix].switchButton, r.columns[ix].item, nextTileType, r.columns[ix].timeOpen);
                    //tiles[x, y].tileAnimation.fra = maze.player.sprite.frameRate_background;


                    Rectangle rect = new Rectangle(x * Convert.ToInt32(Math.Truncate(Tile.Size.X)), y * Convert.ToInt32(Math.Truncate(Tile.Size.Y)) - BOTTOM_BORDER, Convert.ToInt32(tiles[x, y].Texture.Width), Convert.ToInt32(tiles[x, y].Texture.Height));
                    Vector2   v    = new Vector2(rect.X, rect.Y);

                    tiles[x, y].Position   = new Position(v, v);
                    tiles[x, y].Position.X = v.X;
                    tiles[x, y].Position.Y = v.Y;



                    //x+1 for avoid base zero x array, WALL POSITION 0-29
                    tiles[x, y].panelInfo = newX + roomIndex;

                    switch (r.columns[ix].spriteType)
                    {
                    case Enumeration.SpriteType.kid:
                        int xPlayer = (x - 1) * Tile.WIDTH + Player.SPRITE_SIZE_X;
                        int yPlayer = ((y + 1) * (Tile.HEIGHT)) - Sprite.SPRITE_SIZE_Y + RoomNew.TOP_BORDER;
                        maze.player = new Player(this, new Vector2(xPlayer, yPlayer), new Point(x, y), maze.graphicsDevice, r.columns[ix].spriteEffect);
                        break;

                    case Enumeration.SpriteType.guard:
                        int xGuard = (x - 1) * Tile.WIDTH + Player.SPRITE_SIZE_X;
                        //int yGuard = (y + 1) * (Tile.HEIGHT - Sprite.PLAYER_STAND_FLOOR_PEN - RoomNew.BOTTOM_BORDER + RoomNew.TOP_BORDER);
                        int   yGuard = ((y + 1) * (Tile.HEIGHT)) - Sprite.SPRITE_SIZE_Y + RoomNew.TOP_BORDER;
                        Guard g      = new Guard(this, new Vector2(xGuard, yGuard), maze.graphicsDevice, r.columns[ix].spriteEffect);
                        maze.sprites.Add(g);
                        break;

                    case Enumeration.SpriteType.skeleton:
                        int xSkel = (x - 1) * Tile.WIDTH + Player.SPRITE_SIZE_X;
                        //int yGuard = (y + 1) * (Tile.HEIGHT - Sprite.PLAYER_STAND_FLOOR_PEN - RoomNew.BOTTOM_BORDER + RoomNew.TOP_BORDER);
                        int      ySkel = ((y + 1) * (Tile.HEIGHT)) - Sprite.SPRITE_SIZE_Y + RoomNew.TOP_BORDER;
                        Skeleton h     = new Skeleton(this, new Vector2(xSkel, ySkel), maze.graphicsDevice, r.columns[ix].spriteEffect);
                        maze.sprites.Add(h);
                        break;


                    case Enumeration.SpriteType.serpent:
                        int xSerp = (x - 1) * Tile.WIDTH + Player.SPRITE_SIZE_X;
                        //int yGuard = (y + 1) * (Tile.HEIGHT - Sprite.PLAYER_STAND_FLOOR_PEN - RoomNew.BOTTOM_BORDER + RoomNew.TOP_BORDER);
                        int     ySerp = ((y + 1) * (Tile.HEIGHT)) - Sprite.SPRITE_SIZE_Y + RoomNew.TOP_BORDER;
                        Serpent s     = new Serpent(this, new Vector2(xSerp, ySerp), maze.graphicsDevice, r.columns[ix].spriteEffect);
                        maze.sprites.Add(s);
                        break;

                    default:


                        break;
                    }


                    x    += 1;
                    newX += 1;
                }
                x  = 0;
                y += 1;
            }
        }
예제 #15
0
        private void DrawDebug(Room room)
        {
            if (CONFIG_DEBUG == false)
            {
                return;
            }

            Rectangle titleSafeArea = GraphicsDevice.Viewport.TitleSafeArea;
            Vector2   hudLocation   = new Vector2(titleSafeArea.X, titleSafeArea.Y);

            DrawShadowedString(fontPrinceOfPersia_bigger, "LEVEL NAME=" + maze.player.MyLevel.levelName, hudLocation, Color.White);
            hudLocation.Y = hudLocation.Y + 10;

            DrawShadowedString(fontPrinceOfPersia_bigger, "ROOM NAME=" + maze.player.MyRoom.roomName, hudLocation, Color.White);
            hudLocation.Y = hudLocation.Y + 10;

            DrawShadowedString(fontPrinceOfPersia_bigger, "POSTION X=" + maze.player.Position.X.ToString() + " Y=" + maze.player.Position.Y.ToString(), hudLocation, Color.White);
            hudLocation.Y = hudLocation.Y + 10;
            DrawShadowedString(fontPrinceOfPersia_bigger, "FRAME RATE=" + AnimationSequence.frameRate.ToString(), hudLocation, Color.White);

            hudLocation.Y = hudLocation.Y + 10;
            DrawShadowedString(fontPrinceOfPersia_bigger, "PLAYER STATE=" + maze.player.spriteState.Value().state + " SEQUENCE CountOffset=" + maze.player.sprite.sequence.CountOffSet, hudLocation, Color.White);

            hudLocation.Y = hudLocation.Y + 10;
            DrawShadowedString(fontPrinceOfPersia_bigger, "PLAYER FRAME=" + maze.player.spriteState.Value().Frame + " NAME=" + maze.player.spriteState.Value().Name, hudLocation, Color.White);

            hudLocation.Y = hudLocation.Y + 10;
            DrawShadowedString(fontPrinceOfPersia_bigger, "PLAYER SWORD=" + maze.player.Sword.ToString(), hudLocation, Color.White);

            TouchCollection touchState = TouchPanel.GetState();

            for (int x = 0; x < touchState.Count; x++)
            {
                hudLocation.Y = hudLocation.Y + 10;
                DrawShadowedString(fontPrinceOfPersia_bigger, "TOUCH_STATE=" + touchState[x].State.ToString(), hudLocation, Color.White);
                hudLocation.Y = hudLocation.Y + 10;
                DrawShadowedString(fontPrinceOfPersia_bigger, "TOUCH_LOCATION=" + touchState[x].Position.ToString(), hudLocation, Color.White);
            }

            hudLocation.Y = hudLocation.Y + 10;
            DrawShadowedString(fontPrinceOfPersia_bigger, "-SHIFTZONE=" + CntShiftZone.ToString(), hudLocation, Color.White);



            // Get the player's bounding rectangle and find neighboring tiles.
            Rectangle playerBounds = maze.player.Position.Bounding;
            Vector4   v4           = room.getBoundTiles(playerBounds);

            // For each potentially colliding Tile, warning the for check only the player row ground..W
            for (int y = (int)v4.Z; y <= (int)v4.W; ++y)
            {
                for (int x = (int)v4.X; x <= (int)v4.Y; ++x)
                {
                    //Rectangle tileBounds = room.GetBounds(x, y);
                    Tile    myTile = room.GetTile(x, y);
                    Vector2 depth  = RectangleExtensions.GetIntersectionDepth(playerBounds, myTile.Position.Bounding);
                    Enumeration.TileCollision tileCollision = room.GetCollision(x, y);
                    Enumeration.TileType      tileType      = room.GetType(x, y);

                    hudLocation.Y = hudLocation.Y + 10;
                    DrawShadowedString(fontPrinceOfPersia_bigger, "GRID X=" + x + " Y=" + y + " TILETYPE=" + tileType.ToString() + " BOUND X=" + myTile.Position.Bounding.X + " Y=" + myTile.Position.Bounding.Y + " DEPTH X=" + depth.X + " Y=" + depth.Y, hudLocation, Color.White);
                }
            }
        }
예제 #16
0
        public void HandleCollisionsNew()
        {
            isGround();



            Rectangle playerBounds = _position.Bounding;
            //Find how many tiles are near on the left
            Vector4 v4 = SpriteRoom.getBoundTiles(playerBounds);

            // For each potentially colliding Tile, warning the for check only the player row ground..W
            for (int y = Convert.ToInt32(Math.Truncate(v4.Z)); y <= Convert.ToInt32(Math.Truncate(v4.W)); y++)
            {
                for (int x = Convert.ToInt32(Math.Truncate(v4.X)); x <= Convert.ToInt32(Math.Truncate(v4.Y)); x++)
                {
                    Rectangle tileBounds = SpriteRoom.GetBounds(x, y);
                    Vector2   depth      = RectangleExtensions.GetIntersectionDepth(playerBounds, tileBounds);
                    Enumeration.TileCollision tileCollision = SpriteRoom.GetCollision(x, y);
                    Enumeration.TileType      tileType      = SpriteRoom.GetType(x, y);

                    switch (tileType)
                    {
                    case Enumeration.TileType.spikes:
                        if (IsAlive == false)
                        {
                            ((Spikes)SpriteRoom.GetTile(x, y)).Open();
                            return;
                        }

                        if (flip == SpriteEffects.FlipHorizontally)
                        {
                            if (depth.X < 10 & depth.Y >= Player.SPRITE_SIZE_Y)
                            {
                                ((Spikes)SpriteRoom.GetTile(x, y)).Open();

                                // if (depth.X <= -30 & depth.Y >= Player.SPRITE_SIZE_Y & ((Spikes)SpriteRoom.GetTile(x, y)).State == Enumeration.StateTile.open)
                                //   Impale();
                            }
                        }
                        else
                        {
                            if (depth.X > -10 & depth.Y >= Player.SPRITE_SIZE_Y)
                            {
                                ((Spikes)SpriteRoom.GetTile(x, y)).Open();

                                //if (depth.X >= 60 & depth.Y >= Player.SPRITE_SIZE_Y & ((Spikes)SpriteRoom.GetTile(x, y)).State == Enumeration.StateTile.open)
                                //  Impale();
                            }
                        }

                        break; // TODO: might not be correct. Was : Exit Select


                    case Enumeration.TileType.lava:
                        if (IsAlive == false)
                        {
                            ((Lava)SpriteRoom.GetTile(x, y)).Open();
                            return;
                        }

                        if (flip == SpriteEffects.FlipHorizontally)
                        {
                            if (depth.X < 10 & depth.Y >= Skeleton.SPRITE_SIZE_Y)
                            {
                                ((Lava)SpriteRoom.GetTile(x, y)).Open();

                                // if (depth.X <= -30 & depth.Y >= Player.SPRITE_SIZE_Y & ((Spikes)SpriteRoom.GetTile(x, y)).State == Enumeration.StateTile.open)
                                //   Impale();
                            }
                        }
                        else
                        {
                            if (depth.X > -10 & depth.Y >= Skeleton.SPRITE_SIZE_Y)
                            {
                                ((Lava)SpriteRoom.GetTile(x, y)).Open();

                                //if (depth.X >= 60 & depth.Y >= Player.SPRITE_SIZE_Y & ((Spikes)SpriteRoom.GetTile(x, y)).State == Enumeration.StateTile.open)
                                //  Impale();
                            }
                        }

                        break; // TODO: might not be correct. Was : Exit Select



                    case Enumeration.TileType.loose:
                        if (flip == SpriteEffects.FlipHorizontally)
                        {
                            if (depth.X < (-Tile.PERSPECTIVE - PLAYER_R_PENETRATION))
                            {
                                ((Loose)SpriteRoom.GetTile(x, y)).Press();
                                //else
                                //isLoosable();
                            }
                        }
                        else
                        {
                            if (depth.X > (Tile.PERSPECTIVE + PLAYER_L_PENETRATION))
                            {
                                //45
                                ((Loose)SpriteRoom.GetTile(x, y)).Press();
                                //else
                                //isLoosable();
                            }
                        }
                        break; // TODO: might not be correct. Was : Exit Select



                    case Enumeration.TileType.pressplate:
                        ((PressPlate)SpriteRoom.GetTile(x, y)).Press();
                        break; // TODO: might not be correct. Was : Exit Select

                    case Enumeration.TileType.gate:
                    case Enumeration.TileType.block:
                        if (tileType == Enumeration.TileType.gate)
                        {
                            if (((Gate)SpriteRoom.GetTile(x, y)).State == Enumeration.StateTile.opened)
                            {
                                break; // TODO: might not be correct. Was : Exit Select
                            }
                        }
                        //if player are raised then not collide..


                        //if sx wall i will penetrate..for perspective design
                        if (flip == SpriteEffects.FlipHorizontally)
                        {
                            //only for x pixel
                            if (depth.X < (-Tile.PERSPECTIVE - PLAYER_R_PENETRATION))
                            {
                                if (spriteState.Value().state != Enumeration.State.freefall & spriteState.Value().state != Enumeration.State.highjump & spriteState.Value().state != Enumeration.State.hang & spriteState.Value().state != Enumeration.State.hangstraight & spriteState.Value().state != Enumeration.State.hangdrop & spriteState.Value().state != Enumeration.State.hangfall & spriteState.Value().state != Enumeration.State.jumphangMed & spriteState.Value().state != Enumeration.State.jumphangLong & spriteState.Value().state != Enumeration.State.climbup & spriteState.Value().state != Enumeration.State.climbdown)
                                {
                                    //if (sprite.sequence.raised == false)
                                    //    Bump(Enumeration.PriorityState.Force);
                                    //else
                                    //    RJumpFall(Enumeration.PriorityState.Force);
                                    //return;
                                    _position.Value = new Vector2(_position.X + (depth.X - (-Tile.PERSPECTIVE - PLAYER_R_PENETRATION)), _position.Y);
                                }
                            }
                            else
                            {
                                if (sprite.sequence.raised == true)
                                {
                                    _position.Value = new Vector2(_position.X, _position.Y);
                                }
                                else
                                {
                                    _position.Value = new Vector2(_position.X, _position.Y);
                                }
                            }
                        }
                        else
                        {
                            if (depth.X > (Tile.PERSPECTIVE + PLAYER_L_PENETRATION))
                            {
                                //45
                                //if(sprite.sequence.raised == false)

                                if (spriteState.Value().state != Enumeration.State.freefall & spriteState.Value().state != Enumeration.State.highjump & spriteState.Value().state != Enumeration.State.hang & spriteState.Value().state != Enumeration.State.hangstraight & spriteState.Value().state != Enumeration.State.hangdrop & spriteState.Value().state != Enumeration.State.hangfall & spriteState.Value().state != Enumeration.State.jumphangMed & spriteState.Value().state != Enumeration.State.jumphangLong & spriteState.Value().state != Enumeration.State.climbup & spriteState.Value().state != Enumeration.State.climbdown)
                                {
                                    _position.Value = new Vector2(_position.X + (depth.X - (Tile.PERSPECTIVE + PLAYER_L_PENETRATION)), _position.Y);
                                    //Bump(Enumeration.PriorityState.Force);
                                    return;
                                }
                            }
                            else if (sprite.sequence.raised == true)
                            {
                                _position.Value = new Vector2(_position.X, _position.Y);
                            }
                            else
                            {
                                _position.Value = new Vector2(_position.X, _position.Y);
                            }
                        }
                        playerBounds = BoundingRectangle;
                        break; // TODO: might not be correct. Was : Exit Select



                    default:
                        _position.Value = new Vector2(_position.X, tileBounds.Bottom);
                        playerBounds    = BoundingRectangle;
                        break;
                    }
                }
            }
            //???
            //previousBottom = playerBounds.Bottom;
            //check if out room
            if (_position.Y > RoomNew.BOTTOM_LIMIT + 10)
            {
                RoomNew room = Maze.DownRoom(SpriteRoom);
                SpriteRoom  = room;
                _position.Y = RoomNew.TOP_LIMIT + 27;
                // Y=77
                //For calculate height fall from damage points calculations..


                PositionFall = new Vector2(Position.X, (PrinceOfPersiaGame.CONFIG_SCREEN_HEIGHT - RoomNew.BOTTOM_LIMIT - PositionFall.Y));
            }
            else if (_position.X >= RoomNew.RIGHT_LIMIT)
            {
                RoomNew room = Maze.RightRoom(SpriteRoom);
                SpriteRoom  = room;
                _position.X = RoomNew.LEFT_LIMIT + 10;
            }
            else if (_position.X <= RoomNew.LEFT_LIMIT)
            {
                RoomNew room = Maze.LeftRoom(SpriteRoom);
                SpriteRoom  = room;
                _position.X = RoomNew.RIGHT_LIMIT - 10;
            }
            else if (_position.Y < RoomNew.TOP_LIMIT - 10)
            {
                RoomNew room = Maze.UpRoom(SpriteRoom);
                SpriteRoom = room;
                //Y=270
                _position.Y = RoomNew.BOTTOM_LIMIT - 24;
            }
        }
예제 #17
0
        public void HandleCollision()
        {
            if (this.Type == Enumeration.TileType.loose)
            {
                if (this.tileState.Value().state != Enumeration.StateTile.loosefall)
                {
                    return;
                }

                Rectangle r      = new Rectangle((int)Position.X, (int)Position.Y, Tile.WIDTH, Tile.HEIGHT);
                Vector4   v      = room.getBoundTiles(r);
                Tile      myTile = room.GetTile((int)v.X, (int)v.W);
                //Rectangle tileBounds = room.GetBounds((int)v.X, (int)v.W);

                Vector2 depth = RectangleExtensions.GetIntersectionDepth(myTile.Position.Bounding, r);
                Enumeration.TileType      tileType      = room.GetType((int)v.X, (int)v.W);
                Enumeration.TileCollision tileCollision = room.GetCollision((int)v.X, (int)v.W);
                //Tile tile = room.GetTile(new Vector2((int)v.X, (int)v.W));
                if (tileCollision == Enumeration.TileCollision.Platform)
                //if (tileType == Enumeration.TileType.floor)
                {
                    if (depth.Y >= Tile.HEIGHT - Tile.PERSPECTIVE)
                    {
                        lock (room.tilesTemporaney)
                        {
                            room.tilesTemporaney.Remove(this);
                        }
                        //THE LOOSE FALL INTO FLOOR
                        if (tileType == Enumeration.TileType.loose)
                        {
                            Loose l = (Loose)room.GetTile((int)v.X, (int)v.W);
                            l.Fall(true);
                        }
                        else if (tileType == Enumeration.TileType.pressplate)
                        {
                            ((SoundEffect)Maze.Content[PoP.CONFIG_SOUNDS + "tile crashing into the floor"]).Play();
                            PressPlate pressPlate = (PressPlate)room.GetTile((int)v.X, (int)v.Y);
                            pressPlate.Press();
                        }
                        else
                        {
                            ((SoundEffect)Maze.Content[PoP.CONFIG_SOUNDS + "tile crashing into the floor"]).Play();
                            room.SubsTile(Coordinates, Enumeration.TileType.rubble);
                        }
                    }
                }


                //if (_position.Y >= RoomNew.BOTTOM_LIMIT - Tile.HEIGHT - Tile.PERSPECTIVE)
                if (_position.Y >= Room.BOTTOM_LIMIT - Tile.PERSPECTIVE)
                {
                    //remove tiles from tilesTemporaney
                    lock (room.tilesTemporaney)
                    {
                        room.tilesTemporaney.Remove(this);
                    }
                    //exit from DOWN room
                    room        = room.Down;
                    _position.Y = Room.TOP_LIMIT - 10;

                    lock (room.tilesTemporaney)
                    {
                        room.tilesTemporaney.Add(this);
                    }
                }
            }
        }
예제 #18
0
        public Tile(RoomNew room, ContentManager Content, Enumeration.TileType tileType, Enumeration.StateTile state, Enumeration.Items eitem, Enumeration.TileType NextTileType__1)
        {
            this.room = room;
            nextTileType = NextTileType__1;

            System.Xml.Serialization.XmlSerializer ax = new System.Xml.Serialization.XmlSerializer(m_tileSequence.GetType());

            Stream txtReader = Microsoft.Xna.Framework.TitleContainer.OpenStream(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString().ToUpper() + "_sequence.xml");
            //TextReader txtReader = File.OpenText(PrinceOfPersiaGame.CONFIG_PATH_CONTENT + PrinceOfPersiaGame.CONFIG_PATH_SEQUENCES + tileType.ToString().ToUpper() + "_sequence.xml");

            m_tileSequence = (List<Sequence>)ax.Deserialize(txtReader);

            foreach (Sequence s in m_tileSequence)
            {
                s.Initialize(Content);
            }

            //Search in the sequence the right type
            Sequence result = m_tileSequence.Find((Sequence s) => s.name == state.ToString().ToUpper());

            if (result != null)
            {
                //AMF to be adjust....
                result.frames[0].SetTexture(Content.Load<Texture2D>(PrinceOfPersiaGame.CONFIG_TILES[0] + result.frames[0].value));

                collision = result.collision;
                Texture = result.frames[0].texture;
            }
            Type = tileType;

            //change statetile element
            StateTileElement stateTileElement = new StateTileElement();
            stateTileElement.state = state;
            tileState.Add(stateTileElement);
            tileAnimation.PlayAnimation(m_tileSequence, tileState.Value());

            //load item
            switch (eitem)
            {
                case Enumeration.Items.flask:
                    item = new Flask(Content);
                    break; // TODO: might not be correct. Was : Exit Select

                case Enumeration.Items.flaskbig:
                    item = new FlaskBig(Content);
                    break; // TODO: might not be correct. Was : Exit Select

                case Enumeration.Items.sword:
                    item = new Sword(Content);
                    break; // TODO: might not be correct. Was : Exit Select

            }
        }
예제 #19
0
        private void LoadTilesPoPnet()
        {
            // Allocate the Tile grid.
            tiles = new Tile[map.rows[0].columns.Length, map.rows.Length];
            int x = 0; int y = 0; int newX = 0;

            foreach (PopNet.Row r in map.rows)
            {
                for (int ix = 0; ix < r.columns.Length; ix++)
                {
                    Enumeration.TileType nextTileType = Enumeration.TileType.space;
                    if (ix + 1 < r.columns.Length)
                    {
                        nextTileType = r.columns[ix + 1].tileType;
                    }

                    tiles[x, y] = LoadTile(r.columns[ix].tileType, r.columns[ix].state, r.columns[ix].switchButton, r.columns[ix].item, nextTileType);
                    Rectangle rect = new Rectangle(x * (int)Tile.Size.X, y * (int)Tile.Size.Y - BOTTOM_BORDER, (int)tiles[x, y].Texture.Width, (int)tiles[x, y].Texture.Height);
                    //Vector2 v = new Vector2(rect.X, rect.Y);

                    Vector2 v = new Vector2(x * Tile.WIDTH, (y * Tile.HEIGHT) - Tile.HEIGHT_VISIBLE);

                    tiles[x, y].Position   = new Position(Vector2.Zero, new Vector2(Tile.WIDTH, Tile.REALHEIGHT));
                    tiles[x, y].Position.X = v.X;
                    tiles[x, y].Position.Y = v.Y;

                    //tiles[x, y].Position = new Position(v, v);
                    //tiles[x, y].Position.X = v.X;
                    //tiles[x, y].Position.Y = v.Y;

                    //x+1 for avoid base zero x array, WALL POSITION 0-29
                    tiles[x, y].panelInfo = newX + roomNumber;

                    switch (r.columns[ix].spriteType)
                    {
                    case Enumeration.SpriteType.kid:
                        int xPlayer = (x - 1) * Tile.WIDTH + Player.SPRITE_SIZE_X;
                        int yPlayer = ((y + 1) * (Tile.HEIGHT)) - Sprite.SPRITE_SIZE_Y + Room.TOP_BORDER;
                        maze.player = new Player(maze.graphicsDevice, this);
                        break;

                    case Enumeration.SpriteType.guard:
                    case Enumeration.SpriteType.guard2:
                        int xGuard = (x - 1) * Tile.WIDTH + Player.SPRITE_SIZE_X;
                        //int yGuard = (y + 1) * (Tile.HEIGHT - Sprite.PLAYER_STAND_FLOOR_PEN - RoomNew.BOTTOM_BORDER + RoomNew.TOP_BORDER);
                        int   yGuard = ((y + 1) * (Tile.HEIGHT)) - Sprite.SPRITE_SIZE_Y + Room.TOP_BORDER;
                        Guard g      = new Guard(this, new Vector2(xGuard, yGuard), maze.graphicsDevice, r.columns[ix].spriteEffect);
                        level.sprites.Add(g);
                        break;

                    default:
                        break;
                    }


                    x++;
                    newX++;
                }
                x = 0;
                y++;
            }
        }
예제 #20
0
        public void LoadTilesApoplexy(Apoplexy.level Apoplexylevel, Apoplexy.tile[] ApoplexyTiles, Apoplexy.guard[] Apoplexyguards, Apoplexy.@event[] Apoplexyevents)
        {
            int ix           = 0;
            int switchButton = 0;

            tiles = new Tile[10, 3]; //30 fix...sorry
            Enumeration.Items item = Enumeration.Items.none;
            for (int x = 0; x < 10; x++)
            {
                for (int y = 0; y < 3; y++)
                {
                    ix = 10 * y + x;

                    Enumeration.TileType  nextTileType = Enumeration.TileType.space;
                    Enumeration.TileType  myTileType   = Enumeration.TileType.space;
                    Enumeration.StateTile myStateTile  = Enumeration.StateTile.normal;
                    //convert TileType to
                    myTileType   = Utils.ParseTileType(ApoplexyTiles[ix].element);
                    myStateTile  = Utils.ParseStateType(ref myTileType, ApoplexyTiles[ix].modifier);
                    switchButton = Utils.ParseSwitchButton(myTileType, ApoplexyTiles[ix].modifier);


                    if (myTileType == Enumeration.TileType.flask)
                    {
                        myTileType  = Enumeration.TileType.floor;
                        myStateTile = Enumeration.StateTile.normal;
                        item        = Enumeration.Items.flask;
                    }
                    else if (myTileType == Enumeration.TileType.sword)
                    {
                        myTileType  = Enumeration.TileType.floor;
                        myStateTile = Enumeration.StateTile.normal;
                        item        = Enumeration.Items.sword;
                    }
                    else
                    {
                        item = Enumeration.Items.none;
                    }


                    tiles[x, y] = LoadTile(myTileType, myStateTile, switchButton, item, nextTileType);

                    Vector2 v = new Vector2(x * Tile.WIDTH, (y * Tile.HEIGHT) - Tile.HEIGHT_VISIBLE);

                    tiles[x, y].Position   = new Position(Vector2.Zero, new Vector2(Tile.WIDTH, Tile.REALHEIGHT));
                    tiles[x, y].Position.X = v.X;
                    tiles[x, y].Position.Y = v.Y;
                }
            }
            //LOAD GUARD
            foreach (Apoplexy.guard g in Apoplexyguards)
            {
                if (g.location != "0")
                {
                    int iLocation = int.Parse(g.location);
                    int xGuard    = iLocation % 10 - 1;
                    int yGuard    = iLocation / 10 + 1;

                    xGuard = xGuard * Tile.WIDTH + Player.SPRITE_SIZE_X;
                    yGuard = (yGuard * (Tile.HEIGHT)) - Sprite.SPRITE_SIZE_Y + Room.TOP_BORDER;
                    Guard guardSprite = new Guard(this, new Vector2(xGuard, yGuard), maze.graphicsDevice, SpriteEffects.None); //to be fixed direction
                    level.sprites.Add(guardSprite);
                }
            }
        }
예제 #21
0
        public void HandleCollision()
        {
            if (this.Type == Enumeration.TileType.loose)
            {
                if (this.tileState.Value().state != Enumeration.StateTile.loosefall)
                {
                    return;
                }

                Rectangle r          = new Rectangle(Convert.ToInt32(Math.Truncate(Position.X)), Convert.ToInt32(Math.Truncate(Position.Y)), Tile.WIDTH, Tile.HEIGHT);
                Vector4   v          = room.getBoundTiles(r);
                Rectangle tileBounds = room.GetBounds(Convert.ToInt32(Math.Truncate(v.X)), Convert.ToInt32(Math.Truncate(v.W)));

                Vector2 depth = RectangleExtensions.GetIntersectionDepth(tileBounds, r);
                Enumeration.TileType      tileType      = room.GetType(Convert.ToInt32(Math.Truncate(v.X)), Convert.ToInt32(Math.Truncate(v.W)));
                Enumeration.TileCollision tileCollision = room.GetCollision(Convert.ToInt32(Math.Truncate(v.X)), Convert.ToInt32(Math.Truncate(v.W)));
                //Tile tile = room.GetTile(new Vector2((int)v.X, (int)v.W));
                if (tileCollision == Enumeration.TileCollision.Platform)
                {
                    //if (tileType == Enumeration.TileType.floor)
                    if (depth.Y >= Tile.HEIGHT - Tile.PERSPECTIVE)
                    {
                        lock (room.tilesTemporaney)
                        {
                            room.tilesTemporaney.Remove(this);
                        }
                        //Vector2 vs = new Vector2(this.Position.X, this.Position.Y);
                        if (tileType == Enumeration.TileType.loose)
                        {
                            Loose l = (Loose)room.GetTile(Convert.ToInt32(Math.Truncate(v.X)), Convert.ToInt32(Math.Truncate(v.W)));
                            l.Fall(true);
                        }
                        else
                        {
                            ((SoundEffect)Maze.dContentRes[PrinceOfPersiaGame.CONFIG_SOUNDS + "tile crashing into the floor".ToUpper()]).Play();
                            room.SubsTile(Coordinates, Enumeration.TileType.rubble);
                        }
                    }
                }


                //if (_position.Y >= RoomNew.BOTTOM_LIMIT - Tile.HEIGHT - Tile.PERSPECTIVE)
                if (_position.Y >= RoomNew.BOTTOM_LIMIT - Tile.PERSPECTIVE)
                {
                    //remove tiles from tilesTemporaney
                    lock (room.tilesTemporaney)
                    {
                        room.tilesTemporaney.Remove(this);
                    }
                    //exit from DOWN room
                    RoomNew roomDown = room.maze.DownRoom(room);
                    room        = roomDown;
                    _position.Y = RoomNew.TOP_LIMIT - 10;

                    lock (room.tilesTemporaney)
                    {
                        room.tilesTemporaney.Add(this);
                    }
                }
            }
        }
예제 #22
0
        public static Enumeration.StateTile ParseStateType(ref Enumeration.TileType tileType, string modifier)
        {
            int iModifier = int.Parse(modifier);

            Enumeration.StateTile stateTile = Enumeration.StateTile.normal;

            switch (tileType)
            {
            case Enumeration.TileType.space:
                if (iModifier == 0 | iModifier == 255)
                {
                    stateTile = Enumeration.StateTile.normal;
                }
                if (iModifier >= 1 & iModifier <= 2)
                {
                    //stateTile = Enumeration.StateTile.back_wall; //to be implement TEXTURE...
                    stateTile = Enumeration.StateTile.normal;
                }
                if (iModifier == 3)
                {
                    //stateTile = Enumeration.StateTile.window;
                    stateTile = Enumeration.StateTile.normal;     //to be implement TEXTURE...
                }
                break;

            case Enumeration.TileType.floor:
                if (iModifier == 0 | iModifier == 255)
                {
                    stateTile = Enumeration.StateTile.normal;
                }
                if (iModifier >= 1 & iModifier <= 3)
                {
                    //stateTile = Enumeration.StateTile.back_wall;
                    stateTile = Enumeration.StateTile.normal;
                }
                break;

            case Enumeration.TileType.spikes:
                if (iModifier == 0 | iModifier == 255)
                {
                    stateTile = Enumeration.StateTile.normal;
                }
                if (iModifier == 9)
                {
                    stateTile = Enumeration.StateTile.stuck;
                }
                break;

            case Enumeration.TileType.block:
                if (iModifier == 0 | iModifier == 255)
                {
                    stateTile = Enumeration.StateTile.normal;
                }
                if (iModifier == 1)
                {
                    //stateTile = Enumeration.StateTile.palace_pattern;//to be implement TEXTURE...
                    stateTile = Enumeration.StateTile.normal;
                }

                break;

            case Enumeration.TileType.flask:
                if (iModifier == 0 | iModifier == 255)
                {
                    stateTile = Enumeration.StateTile.empty;
                }

                break;

            case Enumeration.TileType.exit:
                if (iModifier == 0 | iModifier == 255)
                {
                    stateTile = Enumeration.StateTile.exit;
                }
                break;

            case Enumeration.TileType.exit2:
                if (iModifier == 0 | iModifier == 255)
                {
                    tileType = Enumeration.TileType.exit;
                }
                stateTile = Enumeration.StateTile.exit2;
                break;

            case Enumeration.TileType.pressplate:
                stateTile = Enumeration.StateTile.normal;
                break;

            case Enumeration.TileType.upressplate:
                stateTile = Enumeration.StateTile.dpressplate;

                break;

            default:
                break;
            }

            return(stateTile);
        }