public static void DetonateTNT(RoomScene room, int posX, int posY, short width, short height) { Systems.camera.BeginCameraShake(13, 7); room.PlaySound(Systems.sounds.explosion, 1f, posX + (int)Math.Round(width * 0.5), posY + (int)Math.Round(height * 0.5)); List <GameObject> objects = CollideRect.FindAllObjectsTouchingArea( room.objects[(byte)LoadOrder.Enemy], posX, posY, width, height ); // Loop through Enemies and destroy any that can be destroyed by TNT. foreach (GameObject obj in objects) { Enemy enemy = (Enemy)obj; enemy.DamageByTNT(); } ; TilemapLevel tilemap = room.tilemap; // Destroy Chompers Within Area of Effect short startX = Math.Max((short)0, (short)Math.Floor((double)(posX / (byte)TilemapEnum.TileWidth))); short startY = Math.Max((short)0, (short)Math.Floor((double)(posY / (byte)TilemapEnum.TileHeight))); short endX = Math.Min(tilemap.XCount, (short)Math.Floor((double)((posX + width) / (byte)TilemapEnum.TileWidth))); short endY = Math.Min((short)(tilemap.YCount + TilemapEnum.GapUp), (short)Math.Floor((double)((posY + height) / (byte)TilemapEnum.TileHeight))); // Locate Chompers var tilesFound = tilemap.GetTilesByMainIDsWithinArea(new byte[7] { (byte)TileEnum.ChomperFire, (byte)TileEnum.ChomperGrass, (byte)TileEnum.ChomperMetal, (byte)TileEnum.Plant, (byte)TileEnum.Box, (byte)TileEnum.Brick, (byte)TileEnum.Leaf }, startX, startY, endX, endY); var TileDict = Systems.mapper.TileDict; foreach (var tileInfo in tilesFound) { TileObject tile = TileDict[tileInfo.tileId]; if (tile is Chomper) { ((Chomper)tile).DestroyChomper(room, tileInfo.gridX, tileInfo.gridY); } } }
public static void Detonate(RoomScene room, int midX, int midY) { TilemapLevel tilemap = room.tilemap; int gridX = (int)Math.Floor((double)(midX / (byte)TilemapEnum.TileWidth)); int gridY = (int)Math.Floor((double)(midY / (byte)TilemapEnum.TileHeight)); // Destroy Enemies Within Area of Effect List <GameObject> enemiesFound = CollideRect.FindAllObjectsTouchingArea(room.objects[(byte)LoadOrder.Enemy], midX - 144, midY - 96, 288, 192); foreach (GameObject enemy in enemiesFound) { ((Enemy)enemy).Die(DeathResult.Knockout); } // Heavily Damage Characters Within Area of Effect List <GameObject> charsFound = CollideRect.FindAllObjectsTouchingArea(room.objects[(byte)LoadOrder.Character], midX - 144, midY - 96, 288, 192); foreach (GameObject character in charsFound) { ((Character)character).wounds.ReceiveWoundDamage(DamageStrength.Major, true); ((Character)character).wounds.ReceiveWoundDamage(DamageStrength.Major, true); ((Character)character).wounds.ReceiveWoundDamage(DamageStrength.Major, true); } // Destroy Certain Tiles Within Area of Effect short startX = (short)Math.Max(0, gridX - 3); short startY = (short)Math.Max(0, gridY - 2); short endX = (short)Math.Min(tilemap.XCount + (byte)TilemapEnum.GapLeft - 1, gridX + 3); short endY = (short)Math.Min(tilemap.YCount + (byte)TilemapEnum.GapUp - 1, gridY + 2); // Locate Tiles: Chompers, Boxes, Bricks, Leafs, etc. var tilesFound = tilemap.GetTilesByMainIDsWithinArea(new byte[7] { (byte)TileEnum.ChomperFire, (byte)TileEnum.ChomperGrass, (byte)TileEnum.ChomperMetal, (byte)TileEnum.Plant, (byte)TileEnum.Box, (byte)TileEnum.Brick, (byte)TileEnum.Leaf }, startX, startY, endX, endY); var TileDict = Systems.mapper.TileDict; foreach (var tileInfo in tilesFound) { TileObject tile = TileDict[tileInfo.tileId]; if (tile is Chomper) { ((Chomper)tile).DestroyChomper(room, tileInfo.gridX, tileInfo.gridY); } else if (tile is Brick) { ((Brick)tile).DestroyBrick(room, tileInfo.gridX, tileInfo.gridY); } else if (tile is Box) { ((Box)tile).DestroyBox(room, tileInfo.gridX, tileInfo.gridY); } else if (tile is Leaf) { ((Leaf)tile).TriggerEvent(room, tileInfo.gridX, tileInfo.gridY, 0); } } // Display Particle Effect ExplodeEmitter.BoxExplosion(room, "Particles/GrenadeFrag", midX, midY, 20, 15); ExplodeEmitter.BoxExplosion(room, "Particles/GrenadeFrag", midX, midY, 70, 50); room.PlaySound(Systems.sounds.explosion, 0.4f, midX, midY); // Camera Shake Systems.camera.BeginCameraShake(35, 6); }