Package com.googlecode.klenwell.playndev.core

Source Code of com.googlecode.klenwell.playndev.core.PlaynDev

package com.googlecode.klenwell.playndev.core;

import static playn.core.PlayN.graphics;
import static playn.core.PlayN.pointer;

import java.util.Date;

import org.jbox2d.common.Vec2;

import playn.core.Canvas;
import playn.core.CanvasImage;
import playn.core.Color;
import playn.core.Game;
import playn.core.GroupLayer;
import playn.core.ImageLayer;
import playn.core.ImmediateLayer;
import playn.core.Pointer;
import playn.core.Surface;

import com.googlecode.klenwell.playndev.core.event.EventApi;
import com.googlecode.klenwell.playndev.core.event.EventType;
import com.googlecode.klenwell.playndev.core.event.GameEvent;

public class PlaynDev implements Game {
   
    public static Integer frameNum = 0;
    public static Long startTime = System.currentTimeMillis();

  CanvasImage bgImage;
  ImageLayer bgLayer;
  private GroupLayer rootLayer = graphics().rootLayer();
  Circle redCircle = new Circle(-25, 0, 50, Color.rgb(255, 0, 0), 0.5f);
  Circle whiteCircle = new Circle(0, 0, 50, Color.rgb(255, 255, 255), 0.5f);
  Circle blueCircle = new Circle(25, 0, 50, Color.rgb(0, 0, 255), 0.5f);

  /*
   * Core PlayN Methods
   */
  @Override
  public void init() {
    bgImage = graphics().createImage(graphics().width(),
        graphics().height());
    Canvas canvas = bgImage.canvas();
    canvas.setFillColor(Color.rgb(0, 0, 0));
    canvas.fillRect(0, 0, graphics().width(), graphics().height());
    bgLayer = graphics().createImageLayer(bgImage);
    bgLayer.setAlpha(0.50f);
   
    initEventHandling();
   
    // test http://stackoverflow.com/a/10161338/1093087
    GraphicsApi.log("Min,Max Int: " + Integer.MIN_VALUE + " / " + Integer.MAX_VALUE);
  }

  private void initEventHandling() {
      /*
       * For event-handling example, see Playn-Sample code:
       * http://goo.gl/Oy6RJ
       *
       * This creates a central handler for events
       */
      pointer().setListener(new Pointer.Listener() {
          @Override
            public void onPointerStart(Pointer.Event event) {
              GameEvent gameEvent = EventApi.normalizeEvent(EventType.POINTERSTART, event);
              EventApi.enqueue(gameEvent);
            }
         
            @Override
            public void onPointerEnd(Pointer.Event event) {
                GameEvent gameEvent = EventApi.normalizeEvent(EventType.POINTEREND, event);
                EventApi.enqueue(gameEvent);
            }

            @Override
            public void onPointerDrag(Pointer.Event event) {
                GameEvent gameEvent = EventApi.normalizeEvent(EventType.POINTERDRAG, event);
                EventApi.enqueue(gameEvent);
            }
        });
     
      // bind listeners to targets (circles)
      EventApi.bind(EventType.POINTERSTART, redCircle, "hitCheck");
      EventApi.bind(EventType.POINTEREND, redCircle, "pointerEnd");
      EventApi.bind(EventType.POINTERDRAG, redCircle, "beingDragged");
      EventApi.bind(EventType.POINTERSTART, blueCircle, "hitCheck");
      EventApi.bind(EventType.POINTEREND, blueCircle, "pointerEnd");
        EventApi.bind(EventType.POINTERDRAG, blueCircle, "beingDragged");
    }

    @Override
  public void paint(float alpha) {
    trimRootLayer();
    drawTransparentImageLayers();
    GraphicsApi.displayLog();
  }

  @Override
  public void update(float delta) {
      EventApi.processQueue();
    randomlyMoveCircles();
   
    frameNum++;
    if ( frameNum % 25 == 0 ) {
        Integer secElapsed = (int) (System.currentTimeMillis() - startTime) / 1000;
        float fps = frameNum.floatValue() / secElapsed.floatValue();
        GraphicsApi.log("FPS: " + fps);
    }
  }

  @Override
  public int updateRate() {
    return 25;
  }

  /*
   * Additional Methods
   */
  public void randomlyMoveCircles() {
    redCircle.pt.addLocal(new Vec2(randomInt(-1, 1), randomInt(-1, 1)));
    whiteCircle.pt.addLocal(new Vec2(randomInt(-1, 1), randomInt(-1, 1)));
    blueCircle.pt.addLocal(new Vec2(randomInt(-1, 1), randomInt(-1, 1)));
  }

  private Integer randomInt(int min, int max) {
    return min + (int) (Math.random() * ((max - min) + 1));
  }

  public void drawTransparentImageLayers() {
      // THIS WORKS
    GroupLayer groupLayer = graphics().createGroupLayer();
    groupLayer.add(bgLayer);
    groupLayer.add(redCircle.asImageLayer());
    groupLayer.add(whiteCircle.asImageLayer());
    groupLayer.add(blueCircle.asImageLayer());
    rootLayer.add(groupLayer);
  }

  public void drawTransparentCanvasImages() {
      // DOES NOT WORK FOR TRANSPARENCY
    // create an immediate layer and add to root layer
    ImmediateLayer circleLayer = graphics().createImmediateLayer(
        new ImmediateLayer.Renderer() {
          public void render(Surface surf) {
            Circle redCircle = new Circle(-25, 0, 50, Color.rgb(
                255, 0, 0), 0.5f);
            Circle whiteCircle = new Circle(0, 0, 50, Color.rgb(
                255, 255, 255), 0.5f);
            Circle blueCircle = new Circle(25, 0, 50, Color.rgb(0,
                0, 255), 0.5f);
            surf.drawImage(redCircle.asCanvasImage(),
                redCircle.getScreenX(), redCircle.getScreenY());
            surf.drawImage(whiteCircle.asCanvasImage(),
                whiteCircle.getScreenX(),
                whiteCircle.getScreenY());
            surf.drawImage(blueCircle.asCanvasImage(),
                blueCircle.getScreenX(),
                blueCircle.getScreenY());
          }
        });

    // rootLayer.setAlpha(0.5f);
    rootLayer.add(circleLayer);
  }

  private void trimRootLayer() {
    int rootLayerMaxSize = 20;
    while (rootLayer.size() > rootLayerMaxSize) {
      rootLayer.remove(rootLayer.get(0));
    }
  }
}
TOP

Related Classes of com.googlecode.klenwell.playndev.core.PlaynDev

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.