parent
d18ff99fa8
commit
7777a61e32
@ -1,26 +0,0 @@ |
|||||||
package mightypork.gamecore.render.textures; |
|
||||||
|
|
||||||
|
|
||||||
import org.newdawn.slick.opengl.Texture; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Texture with filter and wrap mode |
|
||||||
* |
|
||||||
* @author MightyPork |
|
||||||
*/ |
|
||||||
public interface FilteredTexture extends Texture { |
|
||||||
|
|
||||||
/** |
|
||||||
* Set filter for scaling |
|
||||||
* |
|
||||||
* @param filter filter |
|
||||||
*/ |
|
||||||
void setFilter(FilterMode filter); |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* @param wrapping wrap mode |
|
||||||
*/ |
|
||||||
void setWrap(WrapMode wrapping); |
|
||||||
} |
|
@ -0,0 +1,53 @@ |
|||||||
|
package mightypork.gamecore.render.textures; |
||||||
|
|
||||||
|
|
||||||
|
import org.newdawn.slick.opengl.Texture; |
||||||
|
|
||||||
|
import mightypork.util.constraints.rect.Rect; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Texture with filter and wrap mode |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public interface GLTexture extends Texture { |
||||||
|
|
||||||
|
/** |
||||||
|
* Set filter for scaling |
||||||
|
* |
||||||
|
* @param filter filter |
||||||
|
*/ |
||||||
|
void setFilter(FilterMode filter); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @param wrapping wrap mode |
||||||
|
*/ |
||||||
|
void setWrap(WrapMode wrapping); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Get a quad from this texture of given position/size |
||||||
|
* |
||||||
|
* @param uvs quad rect |
||||||
|
* @return the quad |
||||||
|
*/ |
||||||
|
TxQuad makeQuad(Rect uvs); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Bind without adjusting parameters |
||||||
|
*/ |
||||||
|
void bindRaw(); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Get a grid for given number of tiles |
||||||
|
* |
||||||
|
* @param x horizontal tile count |
||||||
|
* @param y vertical tile count |
||||||
|
* @return grid |
||||||
|
*/ |
||||||
|
QuadGrid grid(int x, int y); |
||||||
|
} |
@ -0,0 +1,92 @@ |
|||||||
|
package mightypork.gamecore.render.textures; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.util.constraints.rect.Rect; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* {@link TxQuad} and {@link TxSheet} building utility |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class QuadGrid { |
||||||
|
|
||||||
|
private final GLTexture tx; |
||||||
|
private int txHeight; |
||||||
|
private int txWidth; |
||||||
|
private double tileW; |
||||||
|
private double tileH; |
||||||
|
|
||||||
|
|
||||||
|
public QuadGrid(GLTexture tx, int tilesX, int tilesY) { |
||||||
|
this.tx = tx; |
||||||
|
this.txWidth = tilesX; |
||||||
|
this.txHeight = tilesY; |
||||||
|
this.tileW = 1D / tilesX; |
||||||
|
this.tileH = 1D / tilesY; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Make square quad at given coords (one grid cell) |
||||||
|
* |
||||||
|
* @param x x coordinate (cells) |
||||||
|
* @param y y coordinate (cells) |
||||||
|
* @return the quad |
||||||
|
*/ |
||||||
|
public TxQuad makeQuad(int x, int y) |
||||||
|
{ |
||||||
|
if (x < 0 || x >= txWidth || y < 0 || y >= txHeight) { |
||||||
|
throw new IndexOutOfBoundsException("Requested invalid txquad coordinates."); |
||||||
|
} |
||||||
|
|
||||||
|
return makeQuad(x, y, 1, 1); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Make square quad at given coords, with arbitrary size. Coordinates are |
||||||
|
* multiples of cell size. |
||||||
|
* |
||||||
|
* @param x x coordinate (cells) |
||||||
|
* @param y y coordinate (cells) |
||||||
|
* @param width width (cells) |
||||||
|
* @param height height (cells) |
||||||
|
* @return the quad |
||||||
|
*/ |
||||||
|
public TxQuad makeQuad(double x, double y, double width, double height) |
||||||
|
{ |
||||||
|
if (x < 0 || x >= txWidth || y < 0 || y >= txHeight) { |
||||||
|
throw new IndexOutOfBoundsException("Requested invalid txquad coordinates."); |
||||||
|
} |
||||||
|
|
||||||
|
if (x + width > txWidth || y + height > txHeight) { |
||||||
|
throw new IndexOutOfBoundsException("Requested invalid txquad size (would go beyond texture size)."); |
||||||
|
} |
||||||
|
|
||||||
|
return tx.makeQuad(Rect.make(tileW * x, tileH * y, tileW * width, tileH * height)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Make a sheet of given cells. |
||||||
|
* |
||||||
|
* @param x x origin coordinate (cells) |
||||||
|
* @param y y origin coordinate (cells) |
||||||
|
* @param width width (cells) |
||||||
|
* @param height height (cells) |
||||||
|
* @return the sheet |
||||||
|
*/ |
||||||
|
public TxSheet makeSheet(int x, int y, int width, int height) |
||||||
|
{ |
||||||
|
if (x < 0 || x >= txWidth || y < 0 || y >= txHeight) { |
||||||
|
throw new IndexOutOfBoundsException("Requested invalid txquad coordinates."); |
||||||
|
} |
||||||
|
|
||||||
|
if (x + width > txWidth || y + height > txHeight) { |
||||||
|
throw new IndexOutOfBoundsException("Requested invalid txsheet size (would go beyond texture size)."); |
||||||
|
} |
||||||
|
|
||||||
|
return makeQuad(x, y).makeSheet(width, height); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,90 @@ |
|||||||
|
package mightypork.gamecore.render.textures; |
||||||
|
|
||||||
|
|
||||||
|
import java.util.Random; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Basic sprite sheet |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class TxSheet { |
||||||
|
|
||||||
|
private final TxQuad original; |
||||||
|
private final TxQuad[] sprites; |
||||||
|
private final int width; |
||||||
|
|
||||||
|
private final Random rand = new Random(); |
||||||
|
private final Random randForSeed = new Random(); |
||||||
|
private int count; |
||||||
|
|
||||||
|
|
||||||
|
public TxSheet(TxQuad tx, int width, int height) { |
||||||
|
this.original = tx; |
||||||
|
this.width = width; |
||||||
|
this.count = width * height; |
||||||
|
|
||||||
|
this.sprites = new TxQuad[count]; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @return number of quads |
||||||
|
*/ |
||||||
|
public int getQuadCount() |
||||||
|
{ |
||||||
|
return count; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Get quad of index |
||||||
|
* |
||||||
|
* @param index index |
||||||
|
* @return the quad |
||||||
|
*/ |
||||||
|
public TxQuad getQuad(int index) |
||||||
|
{ |
||||||
|
if (index < 0 || index > count) { |
||||||
|
throw new IndexOutOfBoundsException("Index out of bounds: " + index + ", allowed: 0.." + count); |
||||||
|
} |
||||||
|
|
||||||
|
// lazy - init only when needed
|
||||||
|
if (sprites[index] == null) { |
||||||
|
final int x = index % width; |
||||||
|
final int y = index / width; |
||||||
|
|
||||||
|
final double origW = original.uvs.width().value(); |
||||||
|
final double origH = original.uvs.height().value(); |
||||||
|
|
||||||
|
sprites[index] = new TxQuad(original.tx, original.uvs.move(x * origW, y * origH)); |
||||||
|
} |
||||||
|
|
||||||
|
return sprites[index]; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Get entirely random TxQuad from this sheet |
||||||
|
* |
||||||
|
* @return the picked quad |
||||||
|
*/ |
||||||
|
public TxQuad getRandomQuad() |
||||||
|
{ |
||||||
|
return getQuad(rand.nextInt(count)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Get random TxQuad from this sheet |
||||||
|
* |
||||||
|
* @param seed random number generator seed |
||||||
|
* @return the picked quad |
||||||
|
*/ |
||||||
|
public TxQuad getRandomQuad(long seed) |
||||||
|
{ |
||||||
|
randForSeed.setSeed(seed); |
||||||
|
return getQuad(randForSeed.nextInt(count)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package mightypork.test; |
||||||
|
|
||||||
|
|
||||||
|
import java.util.Random; |
||||||
|
|
||||||
|
|
||||||
|
public class TestRandomSeed { |
||||||
|
|
||||||
|
public static void main(String[] args) |
||||||
|
{ |
||||||
|
|
||||||
|
{ |
||||||
|
Random rand = new Random(); |
||||||
|
long begin = System.currentTimeMillis(); |
||||||
|
|
||||||
|
for (int i = 0; i < 1000000; i++) { |
||||||
|
rand.setSeed(1000); |
||||||
|
} |
||||||
|
|
||||||
|
System.out.println((System.currentTimeMillis() - begin) / 1000D); |
||||||
|
} |
||||||
|
|
||||||
|
{ |
||||||
|
long begin = System.currentTimeMillis(); |
||||||
|
|
||||||
|
for (int i = 0; i < 1000000; i++) { |
||||||
|
Random rand = new Random(); |
||||||
|
rand.setSeed(1000); |
||||||
|
} |
||||||
|
|
||||||
|
System.out.println((System.currentTimeMillis() - begin) / 1000D); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package mightypork.util.error; |
||||||
|
|
||||||
|
|
||||||
|
public class KeyAlreadyExistsException extends RuntimeException { |
||||||
|
|
||||||
|
public KeyAlreadyExistsException() { |
||||||
|
super(); |
||||||
|
} |
||||||
|
|
||||||
|
public KeyAlreadyExistsException(String message, Throwable cause) { |
||||||
|
super(message, cause); |
||||||
|
} |
||||||
|
|
||||||
|
public KeyAlreadyExistsException(String message) { |
||||||
|
super(message); |
||||||
|
} |
||||||
|
|
||||||
|
public KeyAlreadyExistsException(Throwable cause) { |
||||||
|
super(cause); |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue