package okj.easy.graphics.graphics2d; import org.ege.utils.exception.EasyGEngineRuntimeException; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Polygon; import com.badlogic.gdx.utils.Disposable; /** * * NSpriteDef.java * * Created on: Oct 6, 2012 * Author: Trung */ public class NSpriteDef implements Disposable { public final String name; final long address; int mSpriteCount = 0; private boolean isDisposed = false; private final NWorld world; // ======================================== NSpriteDef(String name, long address, NWorld world) { this.name = name; this.address = address; this.world = world; } public int getSpriteCount () { return mSpriteCount; } /****************************************************** * ******************************************************/ /** * add new polygon to sprite def, this polygon won't added to list if it * local vertices are the same with existed polygon in list */ public void addPolygon (Polygon polygon) { if (isDisposed) return; final float[] vertices = polygon.getVertices(); final int[] noIndex = polygon.getNoIndex(); addBounding(address, vertices, vertices.length, noIndex, noIndex.length); } /** * add new polygon to sprite def, this polygon won't added to list if it * local vertices are the same with existed polygon in list */ public void addPolygon (float[] vertices) { if (isDisposed) return; if (vertices.length < 6 || vertices.length % 2 != 0) throw new EasyGEngineRuntimeException("Vertices of your polygon have wrong length"); addBounding(address, vertices, vertices.length, null, 0); } /** * add new polygon to sprite def, this polygon won't added to list if it * local vertices are the same with existed polygon in list */ public void addPolygon (float[] vertices, int noIndex[]) { if (vertices.length < 6 || vertices.length % 2 != 0) throw new EasyGEngineRuntimeException("Vertices of your polygon have wrong length"); addBounding(address, vertices, vertices.length, noIndex, noIndex.length); } /** remove the given polygon with specify index position in polygon list */ public void removePolygon (int index) { removeBounding(address, index); } /** * Clear all polygon in this sprite def ,for reuse sprite def with given * name */ public void clearBounding () { clearBounding(address); } /** Returns the number of polygon in this sprite def */ public int size () { return size(address); } /** Compare two spritedef */ public boolean equal (NSpriteDef def) { return equal(address, def.address); } public void dispose () { if (mSpriteCount == 0) { world.deleteSpriteDef(name); isDisposed = true; } else Gdx.app.log("EasyGameEngine ", "You can't delete NSpriteDef with name : " + name + " because still have NSprite associate with it"); } // ===================================== // native method private final native boolean equal (long thisAddress, long spriteDefAddress); private final native void addBounding (long address, float vertices[], int verticesSize, int noIndex[], int noIndexSize); private final native void removeBounding (long address, int indexOfBounding); private final native int size (long address); private final native void clearBounding (long address); }