content: package com.grapeshot.halfnes.ui;
  
  import com.grapeshot.halfnes.CPURAM;
  import com.grapeshot.halfnes.NES;
  import com.grapeshot.halfnes.video.RGBRenderer;
  import com.grapeshot.halfnes.video.Renderer;
  
  import java.awt.image.BufferedImage;
  
  /**
   * @author Mitchell Skaggs
   */
  public class HeadlessUI implements GUIInterface {
  
      private NES nes;
      private Renderer renderer;
      private boolean renderFrames;
      private BufferedImage lastFrame = null;
      private boolean updateImage;
      private PuppetController controller1, controller2;
  
      public HeadlessUI(String romToLoad, boolean renderFrames) {
          nes = new NES(this);
          this.loadROM(romToLoad);
          this.renderer = new RGBRenderer();
          this.controller1 = new PuppetController();
          this.controller2 = new PuppetController();
          nes.setControllers(this.controller1, this.controller2);
          this.renderFrames = renderFrames;
      }
  
      public void loadROM(String romToLoad) {
          this.nes.loadROM(romToLoad);
      }
  
      public BufferedImage getLastFrame() {
          return lastFrame;
      }
  
      public PuppetController getController1() {
          return controller1;
      }
  
      public PuppetController getController2() {
          return controller2;
      }
  
      public synchronized void runFrame() {
          nes.frameAdvance();
      }
  
      public CPURAM getNESCPURAM() {
          return nes.getCPURAM();
      }
  
      @Override
      public NES getNes() {
          return nes;
      }
  
      @Override
      public void setNES(NES nes) {
          this.nes = nes;
      }
  
      @Override
      public void setFrame(int[] frame, int[] bgcolor, boolean dotcrawl) {
          if (renderFrames) {
              this.lastFrame = renderer.render(frame, bgcolor, dotcrawl);
          }
      }
  
      @Override
      public void messageBox(String message) {
          System.err.println(message); // Shouldn't get any messages except errors
      }
  
      @Override
      public void run() {
          // Null-op
      }
  
      @Override
      public void render() {
      }
  
      @Override
      public void loadROMs(String path) {
      }
  }
  