package com.pclewis.mcpatcher.mod; import com.pclewis.mcpatcher.mod.TextureUtils; import com.pclewis.mcpatcher.mod.TileSize; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import net.minecraft.src.TextureFX; public class CustomAnimation extends TextureFX { private int frame; private int numFrames; private byte[] src; private byte[] temp; private int minScrollDelay = -1; private int maxScrollDelay = -1; private int timer = -1; private boolean isScrolling; private static Random rand = new Random(); public CustomAnimation(int var1, int var2, int var3, String var4, int var5, int var6) { super(var1); this.iconIndex = var1; this.tileImage = var2; this.tileSize = var3; this.minScrollDelay = var5; this.maxScrollDelay = var6; this.isScrolling = var5 >= 0; BufferedImage var7 = null; String var8 = "custom_" + var4 + ".png"; try { var7 = TextureUtils.getResourceAsBufferedImage("/" + var8); } catch (IOException var14) { ; } //MCPatcherUtils.log("new CustomAnimation %s, src=%s, buffer size=0x%x, tile=%d", new Object[]{var4, var7 == null?"terrain.png":var8, Integer.valueOf(this.imageData.length), Integer.valueOf(this.iconIndex)}); if(var7 == null) { BufferedImage var9; try { var9 = TextureUtils.getResourceAsBufferedImage("/terrain.png"); } catch (IOException var13) { var13.printStackTrace(); return; } int var10 = var1 % 16 * TileSize.int_size; int var11 = var1 / 16 * TileSize.int_size; int[] var12 = new int[TileSize.int_numPixels]; var9.getRGB(var10, var11, TileSize.int_size, TileSize.int_size, var12, 0, TileSize.int_size); ARGBtoRGBA(var12, this.imageData); if(this.isScrolling) { this.temp = new byte[TileSize.int_size * 4]; } } else { this.numFrames = var7.getHeight() / var7.getWidth(); int[] var15 = new int[var7.getWidth() * var7.getHeight()]; var7.getRGB(0, 0, var7.getWidth(), var7.getHeight(), var15, 0, TileSize.int_size); this.src = new byte[var15.length * 4]; ARGBtoRGBA(var15, this.src); } } private static void ARGBtoRGBA(int[] var0, byte[] var1) { for(int var2 = 0; var2 < var0.length; ++var2) { int var3 = var0[var2]; var1[var2 * 4 + 3] = (byte)(var3 >> 24 & 255); var1[var2 * 4 + 0] = (byte)(var3 >> 16 & 255); var1[var2 * 4 + 1] = (byte)(var3 >> 8 & 255); var1[var2 * 4 + 2] = (byte)(var3 >> 0 & 255); } } public void onTick() { if(this.src != null) { if(++this.frame >= this.numFrames) { this.frame = 0; } System.arraycopy(this.src, this.frame * TileSize.int_size * TileSize.int_size * 4, this.imageData, 0, TileSize.int_size * TileSize.int_size * 4); } else if(this.isScrolling && (this.maxScrollDelay <= 0 || --this.timer <= 0)) { if(this.maxScrollDelay > 0) { this.timer = rand.nextInt(this.maxScrollDelay - this.minScrollDelay + 1) + this.minScrollDelay; } System.arraycopy(this.imageData, (TileSize.int_size - 1) * TileSize.int_size * 4, this.temp, 0, TileSize.int_size * 4); System.arraycopy(this.imageData, 0, this.imageData, TileSize.int_size * 4, TileSize.int_size * (TileSize.int_size - 1) * 4); System.arraycopy(this.temp, 0, this.imageData, 0, TileSize.int_size * 4); } } }