Files
ReplayModCinematic/src/main/java/eu/crushedpixel/replaymod/assets/ReplayImageAsset.java
johni0702 f925d56ca2 Split mod into core, recording, replay, render[todo], paths[todo] and extras[wip] modules
Move everything to com.replaymod package
Add KeyBindingRegistry and SettingsRegistry
Recreate settings GUI with new GUI API and dynamically from SettingsRegistry
Use ReplayFile from ReplayStudio
ReplayHandler is now object oriented
Add GuiOverlay, GuiSlider and GuiTexturedButton to GUI API
Rewrite both overlays to use new GUI API
Fix size capping in vertical and horizontal layout
Allow CustomLayouts to have parents
Fix tooltip rendering when close to screen border
Allow changing of columns in GridLayout
2015-10-03 17:36:04 +02:00

112 lines
3.4 KiB
Java

package eu.crushedpixel.replaymod.assets;
import eu.crushedpixel.replaymod.registry.ResourceHelper;
import eu.crushedpixel.replaymod.utils.BoundingUtils;
import eu.crushedpixel.replaymod.utils.BufferedImageUtils;
import lombok.EqualsAndHashCode;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.texture.DynamicTexture;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.util.Dimension;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
@EqualsAndHashCode(of={"name", "bufferedImageHashCode"})
public class ReplayImageAsset implements ReplayAsset<BufferedImage> {
private final Minecraft mc = Minecraft.getMinecraft();
private BufferedImage object;
private int bufferedImageHashCode;
private String name;
@Override
public ReplayImageAsset copy() {
ReplayImageAsset newReplay = new ReplayImageAsset(name);
newReplay.object = object;
newReplay.bufferedImageHashCode = bufferedImageHashCode;
return newReplay;
}
public ReplayImageAsset(String name) {
this.name = name;
}
@Override
public String getAssetName() {
return name;
}
@Override
public void setAssetName(String name) {
this.name = name;
}
@Override
public String getDisplayString() {
return name;
}
@Override
public String getSavedFileExtension() {
return "png";
}
@Override
public void loadFromStream(InputStream inputStream) throws IOException {
this.object = ImageIO.read(inputStream);
this.bufferedImageHashCode = BufferedImageUtils.hashCode(object);
ResourceHelper.freeResource(previewResource);
// TODO
// for(CustomImageObject object : ReplayHandler.getCustomImageObjects()) {
// if(object.getLinkedAsset() != null && object.getLinkedAsset().equals(ReplayHandler.getAssetRepository().getUUIDForAsset(this))) {
// object.setImage(this.object);
// }
// }
}
@Override
public void writeToStream(OutputStream outputStream) throws IOException {
ImageIO.write(object, "png", outputStream);
}
@Override
public BufferedImage getObject() {
return object;
}
private ResourceLocation previewResource = new ResourceLocation("/asset/"+ UUID.randomUUID().toString());
private DynamicTexture dynamicTexture;
@Override
public void drawToScreen(int x, int y, int maxWidth, int maxHeight) {
if(object == null) return;
if(!ResourceHelper.isRegistered(previewResource) || dynamicTexture == null) {
dynamicTexture = new DynamicTexture(object);
mc.getTextureManager().loadTexture(previewResource, dynamicTexture);
ResourceHelper.registerResource(previewResource);
}
mc.renderEngine.bindTexture(previewResource);
Dimension dimension = BoundingUtils.fitIntoBounds(new Dimension(object.getWidth(), object.getHeight()), new Dimension(maxWidth, maxHeight));
Gui.drawScaledCustomSizeModalRect(x, y, 0, 0, object.getWidth(), object.getHeight(), dimension.getWidth(), dimension.getHeight(), object.getWidth(), object.getHeight());
}
@Override
protected void finalize() throws Throwable {
ResourceHelper.freeResource(previewResource);
super.finalize();
}
}