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()); }
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; } }
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 } }
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); }
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)); } }
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); }
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); }
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); }
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); }
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()); }
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)); } }
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); }
/// <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)); }
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; } }
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); } } }
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; } }
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); } } } }
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 } }
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++; } }
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); } } }
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); } } } }
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); }