create_ponder_wonder

Exports Create ponders to disk.
git clone git://git.oshgnacknak.de/create_ponder_wonder.git
Log | Files | Refs | README

PonderRenderer.java (1866B)


      1 package de.oshgnacknak.create_ponder_wonder;
      2 
      3 import com.simibubi.create.foundation.ponder.PonderScene;
      4 import com.simibubi.create.foundation.ponder.PonderWonderUI;
      5 import io.netty.util.concurrent.GlobalEventExecutor;
      6 import io.netty.util.concurrent.Promise;
      7 import net.minecraft.client.Minecraft;
      8 import net.minecraft.client.renderer.texture.NativeImage;
      9 
     10 import java.util.Iterator;
     11 import java.util.concurrent.ExecutionException;
     12 
     13 public class PonderRenderer implements Iterable<PonderRenderer.RenderResult>, Iterator<PonderRenderer.RenderResult> {
     14 
     15 	private static final int FPS = 60;
     16 	private static final int MAX_FRAMES = Integer.MAX_VALUE;
     17 
     18 	private final PonderWonderUI ponder;
     19 	private int frame;
     20 
     21 	public PonderRenderer(PonderScene ponder) {
     22 		this.ponder = new PonderWonderUI(ponder);
     23 		this.frame = 0;
     24 	}
     25 
     26 	@Override
     27 	public Iterator<RenderResult> iterator() {
     28 		return this;
     29 	}
     30 
     31 	@Override
     32 	public boolean hasNext() {
     33 		return !ponder.isFinished() && frame < MAX_FRAMES;
     34 	}
     35 
     36 	@Override
     37 	public RenderResult next() {
     38 		Promise<RenderResult> promise = GlobalEventExecutor.INSTANCE.newPromise();
     39 
     40 		Minecraft.getInstance().field_213275_aU.add(() -> {
     41 		    try {
     42 				float pt = (frame % PonderRenderer.FPS) / (PonderRenderer.FPS / 3.0f);
     43 				NativeImage img = RenderUtils.render(ms ->
     44 					ponder.ponderWonderRenderWindow(ms, pt));
     45 				promise.setSuccess(new RenderResult(img, frame));
     46 
     47 				if (frame % 3 == 2) {
     48 					ponder.tick();
     49 				}
     50 				frame++;
     51 			} catch (Throwable e) {
     52 				promise.setFailure(e);
     53 			}
     54 		});
     55 
     56 		try {
     57 			return promise.get();
     58 		} catch (InterruptedException | ExecutionException e) {
     59 			throw new RuntimeException(e);
     60 		}
     61 	}
     62 
     63 	public static class RenderResult {
     64 		public final NativeImage image;
     65 		public final int frame;
     66 
     67 		public RenderResult(NativeImage image, int frame) {
     68 			this.image = image;
     69 			this.frame = frame;
     70 		}
     71 	}
     72 }