5: Scripts
This tutorial shows the work of Scripts inside eEngine.

WebStart eEngine Tutorial 5 - Scripts
package de.esw.eengine.test.t6_scripts;
  import java.awt.Color;
  import java.awt.DisplayMode;
  import java.awt.event.KeyEvent;
  import java.util.logging.Level;
  import de.esw.eengine.EEngineException;
  import de.esw.eengine.core.Core;
  import de.esw.eengine.core.IInputDevice;
  import de.esw.eengine.core.IRenderDevice;
  import de.esw.eengine.core.Timer;
  import de.esw.eengine.core.Core.RenderPipeline;
  import de.esw.eengine.device.input.AbstractKeyboardListener;
  import de.esw.eengine.device.input.KeyboardInputDevice;
  import de.esw.eengine.device.input.SystemInputDevice;
  import de.esw.eengine.device.render.WindowRenderDevice;
  import de.esw.eengine.renderable.HierarchyNode;
  import de.esw.eengine.renderable.Sprite;
  import de.esw.eengine.renderable.Text;
  import de.esw.eengine.resource.codec.GifCodec;
  import de.esw.eengine.resource.codec.JpegCodec;
  import de.esw.eengine.resource.codec.PngCodec;
  /**
   * Tutorial 6 showing the work of scripts.
   *
   * @author markusw
   * @version $Id: Main.java 168 2005-07-07 18:43:57Z markusw $
   * @since 1.0
   */
  public final class Main {
      /** Comment for renderDevice */
      IRenderDevice renderDevice;
      /** Comment for keyboardDevice */
      private IInputDevice keyboardDevice;
      /** Comment for timer */
      private Timer timer;
      /** Comment for fpsTimer */
      private Timer fpsTimer;
      /** Comment for fps */
      private int fps;
      /** Comment for numFrames */
      private float numFrames;
      /** Comment for figher */
      private Sprite figher;
      /**
       * @return True on successfull init, false otherwise
       */
      private boolean init() {
          Core.getInstance().initialize(RenderPipeline.DIRECT3D);
          Core.getInstance().getResourceManager().registerCodec(new JpegCodec());
          Core.getInstance().getResourceManager().registerCodec(new GifCodec());
          Core.getInstance().getResourceManager().registerCodec(new PngCodec());
          this.timer = new Timer();
          this.fpsTimer = new Timer();
          this.fps = 0;
          this.numFrames = 0;
          try {
              this.renderDevice = Core.getInstance().createRenderDevice(
                      WindowRenderDevice.class);
              this.renderDevice.open(new DisplayMode(800, 600, 16,
                      DisplayMode.REFRESH_RATE_UNKNOWN));
              // Add system input device
              new SystemInputDevice(this.renderDevice);
              // Add keyboard input
              this.keyboardDevice = Core.getInstance().createInputDevice(
                      KeyboardInputDevice.class);
              this.keyboardDevice
                      .addInputListener(new AbstractKeyboardListener() {
                          @Override
                          public void keyTyped(KeyEvent e) {
                              if (e.getKeyChar() == KeyEvent.VK_ESCAPE) {
                                  Main.this.renderDevice.close();
                              }
                          }
                      });
              this.renderDevice.attachInputDevice(this.keyboardDevice);
              // Creating sprite
              int spriteImage = Core.getInstance().getResourceManager()
                      .loadResource("data/spacefighter.png");
              this.figher = new Sprite("fighter", spriteImage);
              this.figher.addScript(new DemoScript());
          } catch (EEngineException e) {
              Core.getLogger().log(Level.WARNING, e.getMessage(), e);
              return false;
          }
          return true;
      }
      /**
       * Tutorials main loop
       */
      private void run() {
          try {
              Text fpsText = new Text("FPSText", "FPS: " + this.fps, 10, 580);
              fpsText.setColor(Color.GREEN);
              while (this.renderDevice.isOpen()) {
                  // Update sprites
                  long updateTime = this.timer.getDeltaTime();
                  this.figher.update(updateTime);
                  // Render sprites
                  if (this.renderDevice.begin()) {
                      this.renderDevice.clear(Color.BLACK);
                      this.figher.render();
                      fpsText.render();
                  }
                  this.renderDevice.end();
                  this.renderDevice.flip();
                  // Calculate FPS
                  this.numFrames++;
                  if (this.fpsTimer.getDeltaTime(false) > 1000) {
                      this.fps = Math.round(this.numFrames
                              / this.fpsTimer.getDeltaTime() * 1000);
                      this.numFrames = 0;
                      fpsText.setText("FPS: " + this.fps);
                  }
              }
          } catch (EEngineException e) {
              Core.getLogger().log(Level.WARNING, e.getMessage(), e);
          }
      }
      /**
       *
       */
      private void shutdown() {
          this.renderDevice.close();
          Core.getInstance().shutdown();
      }
      /**
       * @param args
       */
      public static void main(String[] args) {
          Main app = new Main();
          try {
              if (app.init()) {
                  app.run();
              }
          } finally {
              app.shutdown();
          }
          System.exit(0);
      }
  }
package de.esw.eengine.test.t6_scripts;
 import de.esw.eengine.core.IScript;
 import de.esw.eengine.renderable.AbstractScript;
 import de.esw.eengine.renderable.HierarchyNode;
 /**
  * @author markusw
  * @version $Id: DemoScript.java 142 2005-06-29 11:31:02Z markusw $
  * @param 
  *            DemoScript extending type
  * @since 1.0
  */
 public class DemoScript extends
         AbstractScript implements IScript {
     /**
      *
      */
     public DemoScript() {
         super("DemoScript");
     }
     /**
      * @see de.esw.eengine.renderable.AbstractScript#update(float)
      */
     @Override
     public void update(float delta) {
         this.target.move(1, 1);
         this.target.scale(-0.0015f, -0.0015f);
     }
 }