| package mekanism.client; |
| |
| import java.util.HashSet; |
| import java.util.Random; |
| import java.util.Set; |
| |
| import mekanism.api.Coord4D; |
| import mekanism.api.MekanismConfig.general; |
| import net.minecraft.tileentity.TileEntity; |
| import net.minecraft.world.World; |
| import net.minecraftforge.common.util.ForgeDirection; |
| import cpw.mods.fml.relauncher.Side; |
| import cpw.mods.fml.relauncher.SideOnly; |
| |
| @SideOnly(Side.CLIENT) |
| public class SparkleAnimation |
| { |
| public TileEntity pointer; |
| |
| public Random random = new Random(); |
| |
| public Set<TileEntity> iteratedNodes = new HashSet<TileEntity>(); |
| |
| public INodeChecker nodeChecker; |
| |
| public SparkleAnimation(TileEntity tileEntity, INodeChecker checker) |
| { |
| pointer = tileEntity; |
| nodeChecker = checker; |
| } |
| |
| public void run() |
| { |
| try { |
| if(general.dynamicTankEasterEgg) |
| { |
| pointer.getWorldObj().playSound(pointer.xCoord, pointer.yCoord, pointer.zCoord, "mekanism:etc.cj", 1F, 1F, false); |
| } |
| |
| loop(pointer); |
| } catch(Exception e) {} |
| } |
| |
| public void loop(TileEntity tileEntity) |
| { |
| World world = pointer.getWorldObj(); |
| |
| for(int i = 0; i < 6; i++) |
| { |
| if(Coord4D.get(tileEntity).sideVisible(ForgeDirection.DOWN, world)) |
| { |
| world.spawnParticle("reddust", tileEntity.xCoord + random.nextDouble(), tileEntity.yCoord + -.01, tileEntity.zCoord + random.nextDouble(), 0, 0, 0); |
| } |
| |
| if(Coord4D.get(tileEntity).sideVisible(ForgeDirection.UP, world)) |
| { |
| world.spawnParticle("reddust", tileEntity.xCoord + random.nextDouble(), tileEntity.yCoord + 1.01, tileEntity.zCoord + random.nextDouble(), 0, 0, 0); |
| } |
| |
| if(Coord4D.get(tileEntity).sideVisible(ForgeDirection.NORTH, world)) |
| { |
| world.spawnParticle("reddust", tileEntity.xCoord + random.nextDouble(), tileEntity.yCoord + random.nextDouble(), tileEntity.zCoord + -.01, 0, 0, 0); |
| } |
| |
| if(Coord4D.get(tileEntity).sideVisible(ForgeDirection.SOUTH, world)) |
| { |
| world.spawnParticle("reddust", tileEntity.xCoord + random.nextDouble(), tileEntity.yCoord + random.nextDouble(), tileEntity.zCoord + 1.01, 0, 0, 0); |
| } |
| |
| if(Coord4D.get(tileEntity).sideVisible(ForgeDirection.WEST, world)) |
| { |
| world.spawnParticle("reddust", tileEntity.xCoord + -.01, tileEntity.yCoord + random.nextDouble(), tileEntity.zCoord + random.nextDouble(), 0, 0, 0); |
| } |
| |
| if(Coord4D.get(tileEntity).sideVisible(ForgeDirection.EAST, world)) |
| { |
| world.spawnParticle("reddust", tileEntity.xCoord + 1.01, tileEntity.yCoord + random.nextDouble(), tileEntity.zCoord + random.nextDouble(), 0, 0, 0); |
| } |
| } |
| |
| iteratedNodes.add(tileEntity); |
| |
| for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) |
| { |
| Coord4D coord = Coord4D.get(tileEntity).getFromSide(side); |
| |
| if(coord.exists(pointer.getWorldObj())) |
| { |
| TileEntity tile = coord.getTileEntity(pointer.getWorldObj()); |
| |
| if(tile != null && isNode(tile) && !iteratedNodes.contains(tile)) |
| { |
| loop(tile); |
| } |
| } |
| } |
| } |
| |
| public boolean isNode(TileEntity tile) |
| { |
| return nodeChecker.isNode(tile); |
| } |
| |
| public static interface INodeChecker |
| { |
| public boolean isNode(TileEntity tile); |
| } |
| } |