--- /dev/null
+\r
+package com.badlogic.gdx.tests;\r
+\r
+import java.util.Random;\r
+\r
+import com.badlogic.gdx.Gdx;\r
+import com.badlogic.gdx.graphics.Color;\r
+import com.badlogic.gdx.graphics.GL10;\r
+import com.badlogic.gdx.graphics.ImmediateModeRenderer;\r
+import com.badlogic.gdx.graphics.OrthographicCamera;\r
+import com.badlogic.gdx.graphics.SpriteCache;\r
+import com.badlogic.gdx.graphics.Texture;\r
+import com.badlogic.gdx.graphics.Texture.TextureFilter;\r
+import com.badlogic.gdx.graphics.Texture.TextureWrap;\r
+import com.badlogic.gdx.tests.utils.GdxTest;\r
+import com.badlogic.gdx.tests.utils.OrthoCamController;\r
+\r
+public class IsometricTileTest extends GdxTest {\r
+ static final int LAYERS = 1;\r
+ static final int WIDTH = 4;\r
+ static final int HEIGHT = 5;\r
+ static final int TILES_PER_LAYER = WIDTH * HEIGHT;\r
+ static final int TILE_WIDTH = 54;\r
+ static final int TILE_HEIGHT = 54;\r
+ static final int TILE_HEIGHT_DIAMOND = 28;\r
+ static final int BOUND_X = HEIGHT * TILE_WIDTH / 2 + WIDTH * TILE_WIDTH / 2;\r
+ static final int BOUND_Y = HEIGHT * TILE_HEIGHT_DIAMOND / 2 + WIDTH * TILE_HEIGHT_DIAMOND / 2;\r
+\r
+ Texture texture;\r
+ SpriteCache[] caches = new SpriteCache[LAYERS]; \r
+ int[] layers = new int[LAYERS];\r
+ OrthographicCamera cam;\r
+ OrthoCamController camController;\r
+ ImmediateModeRenderer renderer;\r
+ long startTime = System.nanoTime();\r
+\r
+ @Override public void create () {\r
+ cam = new OrthographicCamera();\r
+ cam.setViewport(480, 320);\r
+ camController = new OrthoCamController(cam);\r
+ Gdx.input.setInputProcessor(camController);\r
+\r
+ renderer = new ImmediateModeRenderer();\r
+ texture = Gdx.graphics.newTexture(Gdx.files.internal("data/isotile.png"), \r
+ TextureFilter.Nearest, TextureFilter.Nearest,\r
+ TextureWrap.ClampToEdge, TextureWrap.ClampToEdge);\r
+\r
+ Random rand = new Random();\r
+ for (int i = 0; i < LAYERS; i++) {\r
+ caches[i] = new SpriteCache();\r
+ SpriteCache cache = caches[i];\r
+ cache.beginCache();\r
+ \r
+ int colX = HEIGHT * TILE_WIDTH / 2 - TILE_WIDTH / 2;\r
+ int colY = BOUND_Y - TILE_HEIGHT_DIAMOND;\r
+ for(int x=0; x < WIDTH; x++) { \r
+ for(int y=0; y < HEIGHT; y++) { \r
+ int tileX = colX - y * TILE_WIDTH / 2;\r
+ int tileY = colY - y * TILE_HEIGHT_DIAMOND / 2;\r
+ cache.add(texture, tileX, tileY, rand.nextInt(2) * 54, 0,TILE_WIDTH, TILE_HEIGHT, Color.WHITE); \r
+ }\r
+ colX += TILE_WIDTH / 2;\r
+ colY -= TILE_HEIGHT_DIAMOND / 2;\r
+ }\r
+\r
+ layers[i] = cache.endCache();\r
+ }\r
+ }\r
+\r
+ @Override public void render () {\r
+ GL10 gl = Gdx.gl10;\r
+ gl.glClearColor(0.7f, 0.7f, 0.7f, 1);\r
+ gl.glClear(GL10.GL_COLOR_BUFFER_BIT);\r
+ cam.update();\r
+\r
+ gl.glEnable(GL10.GL_BLEND);\r
+ gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);\r
+ for (int i = 0; i < LAYERS; i++) {\r
+ SpriteCache cache = caches[i];\r
+ cache.setProjectionMatrix(cam.getCombinedMatrix());\r
+ cache.begin();\r
+ cache.draw(layers[i]);\r
+ cache.end();\r
+ }\r
+ \r
+ renderer.begin(GL10.GL_LINES);\r
+ renderer.color(1, 0, 0, 1);\r
+ renderer.vertex(0,0,0);\r
+ renderer.color(1, 0, 0, 1);\r
+ renderer.vertex(500,0,0);\r
+ renderer.color(0, 1, 0, 1);\r
+ renderer.vertex(0,0,0);\r
+ renderer.color(0, 1, 0, 1);\r
+ renderer.vertex(0,500,0);\r
+ \r
+ renderer.color(0, 0, 1, 1);\r
+ renderer.vertex(0,BOUND_Y,0);\r
+ renderer.color(0, 0, 1, 1);\r
+ renderer.vertex(BOUND_X,BOUND_Y,0);\r
+ \r
+ renderer.color(0, 0, 1, 1);\r
+ renderer.vertex(BOUND_X,0,0);\r
+ renderer.color(0, 0, 1, 1);\r
+ renderer.vertex(BOUND_X,BOUND_Y,0);\r
+ \r
+ renderer.end();\r
+ }\r
+\r
+ @Override public boolean needsGL20 () {\r
+ return false;\r
+ }\r
+}\r
import com.badlogic.gdx.graphics.Texture.TextureFilter;\r
import com.badlogic.gdx.graphics.Texture.TextureWrap;\r
import com.badlogic.gdx.tests.utils.GdxTest;\r
+import com.badlogic.gdx.tests.utils.OrthoCamController;\r
\r
public class TileTest extends GdxTest {\r
static final int LAYERS = 5;\r
static final int WIDTH = 15;\r
static final int HEIGHT = 10;\r
static final int TILES_PER_LAYER = WIDTH * HEIGHT;\r
+ \r
SpriteCache[] caches = new SpriteCache[LAYERS];\r
Texture texture;\r
int[] layers = new int[LAYERS];\r
OrthographicCamera cam;\r
+ OrthoCamController camController;\r
long startTime = System.nanoTime();\r
\r
@Override\r
public void create() {\r
cam = new OrthographicCamera();\r
cam.setViewport(480, 320);\r
- cam.getPosition().set(WIDTH*32/2, HEIGHT*32/2,0); \r
+ cam.getPosition().set(WIDTH*32/2, HEIGHT*32/2,0);\r
+ camController = new OrthoCamController(cam);\r
+ Gdx.input.setInputProcessor(camController);\r
+ \r
texture = Gdx.graphics.newTexture(Gdx.files.internal("data/tiles.png"), TextureFilter.Nearest, TextureFilter.Nearest, TextureWrap.ClampToEdge, TextureWrap.ClampToEdge);\r
\r
Random rand = new Random();\r
cam.update();\r
\r
gl.glEnable(GL10.GL_BLEND);\r
+ gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);\r
for(int i=0; i < LAYERS; i++) {\r
SpriteCache cache = caches[i]; \r
cache.setProjectionMatrix(cam.getCombinedMatrix());\r
--- /dev/null
+package com.badlogic.gdx.tests.utils;\r
+\r
+import com.badlogic.gdx.Gdx;\r
+import com.badlogic.gdx.InputAdapter;\r
+import com.badlogic.gdx.graphics.OrthographicCamera;\r
+import com.badlogic.gdx.math.Vector2;\r
+\r
+public class OrthoCamController extends InputAdapter {\r
+ final OrthographicCamera camera;\r
+ final Vector2 curr = new Vector2();\r
+ final Vector2 last = new Vector2(-1, -1); \r
+ final Vector2 delta = new Vector2();\r
+ \r
+ public OrthoCamController(OrthographicCamera camera) {\r
+ this.camera = camera;\r
+ }\r
+\r
+ @Override public boolean touchDragged (int x, int y, int pointer) {\r
+ camera.getScreenToWorld(x, y, curr);\r
+ if(!(last.x == -1 && last.y == -1)) {\r
+ camera.getScreenToWorld(last.x, last.y, delta);\r
+ delta.sub(curr);\r
+ camera.getPosition().add(delta.x, delta.y, 0);\r
+ }\r
+ last.set(x, y);\r
+ return false;\r
+ }\r
+ \r
+ @Override public boolean touchUp(int x, int y, int pointer) {\r
+ last.set(-1, -1);\r
+ return false;\r
+ }\r
+}\r