// Trigger Event: BeginShake, Break Apart, Reform public override bool TriggerEvent(RoomScene room, short gridX, short gridY, short triggerType = 0, short val2 = 0) { // Break Apart Event if (triggerType == (byte)LeafTriggerEvent.BreakApart) { byte subType = room.tilemap.GetMainSubType(gridX, gridY); // Display Leaf Breaking ExplodeEmitter.BoxExplosion(room, "Particles/Leaf", gridX * (byte)TilemapEnum.TileWidth + (byte)TilemapEnum.HalfWidth, gridY * (byte)TilemapEnum.TileHeight + (byte)TilemapEnum.HalfHeight); // Reforming Leafs will be reformed. if (subType == (byte)LeafSubType.InvisibleReform || subType == (byte)LeafSubType.Reform || subType == (byte)LeafSubType.UntouchableReform) { room.tilemap.SetTileSubType(gridX, gridY, (byte)LeafSubType.UntouchableReform); room.queueEvents.AddEvent(Systems.timer.Frame + 60, this.tileId, gridX, gridY, (byte)LeafTriggerEvent.Reform); } // Basic Leaf gets destroyed. else { room.tilemap.SetMainTile(gridX, gridY, 0, 0); } room.PlaySound(Systems.sounds.thudTap, 1f, gridX * (byte)TilemapEnum.TileWidth, gridY * (byte)TilemapEnum.TileHeight); } // Reform Event else if (triggerType == (byte)LeafTriggerEvent.Reform) { room.tilemap.SetTileSubType(gridX, gridY, (byte)LeafSubType.Reform); } return(true); }
public void DestroyBox(RoomScene room, short gridX, short gridY) { // Display Particle Effect ExplodeEmitter.BoxExplosion(room, "Particles/WoodFrag", gridX * (byte)TilemapEnum.TileWidth + (byte)TilemapEnum.HalfWidth, gridY * (byte)TilemapEnum.TileHeight + (byte)TilemapEnum.HalfHeight); room.PlaySound(Systems.sounds.brickBreak, 1f, gridX * (byte)TilemapEnum.TileWidth, gridY * (byte)TilemapEnum.TileHeight); // Destroy Brick Tile room.tilemap.SetMainTile(gridX, gridY, 0, 0); }
public void DestroyBrick(RoomScene room, short gridX, short gridY) { // Display Particle Effect byte subType = room.tilemap.GetMainSubType(gridX, gridY); ExplodeEmitter.BoxExplosion(room, "Particles/Brick" + (subType == (byte)BrickSubType.Gray ? "Gray" : ""), gridX * (byte)TilemapEnum.TileWidth + (byte)TilemapEnum.HalfWidth, gridY * (byte)TilemapEnum.TileHeight + (byte)TilemapEnum.HalfHeight); room.PlaySound(Systems.sounds.brickBreak, 1f, gridX * (byte)TilemapEnum.TileWidth, gridY * (byte)TilemapEnum.TileHeight); // Destroy Brick Tile room.tilemap.SetMainTile(gridX, gridY, 0, 0); }
public override bool ReceiveWound() { this.room.PlaySound(Systems.sounds.crack, 1f, this.posX + 16, this.posY + 16); this.Destroy(); // Can automatically destroy Bones, since it just disappears while bones are left behind. //this.Die(DeathResult.Special); // Particle Effect (bones exploding) ExplodeEmitter.BoxExplosion(this.room, "Particles/Bone", this.posX + (byte)TilemapEnum.HalfWidth, this.posY + (byte)TilemapEnum.HalfHeight); return(true); }
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); }