//Blasting public void BlockBreaker(Vector3i Pos, Vector3 Dir) // consider making this a bool to facilitate feedback? { //get collar position and facing direction Vector3i rung = Pos; Vector3i facing = StyleSet(this.style, Dir); //determine blast radius and depth if (this.Explosive.Fuel < 5) { //ChatManager.ServerMessageToAll("Column Mode", false); //step to next block until reach bottom - may want to invert this so that it blasts from the bottom up for (int a = 0; a < this.blastingDepth; a = a + 1) { rung = rung + facing; //break if mineable and replace with rubble Block block = World.GetBlock(rung); if (block.Is <Minable>()) { World.DeleteBlock(rung); RubbleObject.TrySpawnFromBlock(block.GetType(), rung); } } } else if (this.Explosive.Fuel > 5) { //ChatManager.ServerMessageToAll("cylinder Mode", false); DirectionAxis dir = LookupDirectionAxis(facing); for (int a = 0; a < this.blastingDepth; a = a + 1) { rung = rung + facing; Vector3i[] ring = DirectionExtensions.Get8Edges(dir); //break if mineable and replace with rubble Block block = World.GetBlock(rung); if (block.Is <Minable>()) { World.DeleteBlock(rung); RubbleObject.TrySpawnFromBlock(block.GetType(), rung); } foreach (Vector3i neighbour in ring) { // ChatManager.ServerMessageToAll("neighbour mode", false); Vector3i tar = rung + neighbour; block = World.GetBlock(tar); if (block.Is <Minable>()) { World.DeleteBlock(tar); RubbleObject.TrySpawnFromBlock(block.GetType(), tar); } } } } else { return; } }