Package com.googlecode.klenwell.playndev.core

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

package com.googlecode.klenwell.playndev.core;

import static playn.core.PlayN.graphics;

import org.jbox2d.common.Vec2;

import com.googlecode.klenwell.playndev.core.event.EventListener;
import com.googlecode.klenwell.playndev.core.event.GameEvent;

import playn.core.Canvas;
import playn.core.CanvasImage;
import playn.core.Color;
import playn.core.ImageLayer;

public class Circle implements EventListener {

  Vec2 pt = new Vec2(0, 0);
  int radius = 0;
  int color = 0;
  float alpha = 1.0f;
    public boolean isBeingDragged = false;

  public Circle(int x, int y, int radius, int color, float alpha) {
    pt = new Vec2(x, y);
    this.radius = radius;
    this.color = color;
    this.alpha = alpha;
  }

  public CanvasImage asCanvasImage() {
    int diameter = radius * 2;
    CanvasImage circleImage = graphics().createImage(diameter, diameter);
    Canvas canvas = circleImage.canvas();
    canvas.setFillColor(color);
    canvas.fillCircle((float) radius, (float) radius, (float) radius);
    canvas.setAlpha(alpha);
   
    float strokeWidth = 16.0f;
    canvas.setStrokeColor(Color.rgb(255, 255, 255));
        canvas.setStrokeWidth(strokeWidth);
        canvas.strokeCircle((float) radius, (float) radius, (float) radius - (strokeWidth / 2.0f));
       
    return circleImage;
  }

  public ImageLayer asImageLayer() {
      // NOTE: use this for transparent images
    CanvasImage image = asCanvasImage();
    ImageLayer imageLayer = graphics().createImageLayer(image);
    imageLayer.setAlpha(alpha);
    imageLayer.transform().translate(getScreenX(), getScreenY());
    return imageLayer;
  }

  public float getScreenX() {
    int screenX = GraphicsApi.worldToScreenX((int) Math.round(pt.x));
    return screenX - radius;
  }

  public float getScreenY() {
    int screenY = GraphicsApi.worldToScreenY((int) Math.round(pt.y));
    return screenY - radius;
  }

    @Override
    public void processBoundEvent(GameEvent event) {
        if (event.binding.key == "hitCheck") {
            hitCheck(event);
        } else if (event.binding.key == "pointerEnd") {
            pointerEnd(event);
        } else if (event.binding.key == "beingDragged") {
            beingDragged(event);
        }
       
    }

    private void beingDragged(GameEvent event) {
        if ( isBeingDragged ) {
            pt = event.pt;
        }
    }

    private void pointerEnd(GameEvent event) {
        if ( isBeingDragged ) {
            isBeingDragged = false;
            System.out.println("stop dragging " + toString());
        }
    }

    private void hitCheck(GameEvent event) {
        if ( contains(event.pt) ) {
            System.out.println("now dragging " + toString() + " hit at pt " + event.pt);
            isBeingDragged = true;
        }
        else {
            System.out.println(toString() + " miss at pt: " + event.pt);
            isBeingDragged = false;
        }
       
    }

    private boolean contains(Vec2 pt2) {
        Float cx = pt.x;
        Float cy = pt.y;
        Float px = pt2.x;
        Float py = pt2.y;
        Double squareDist = Math.pow(cx - px, 2) + Math.pow(cy - py, 2);
        return squareDist <= Math.pow(radius, 2);
    }

}
TOP

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

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.