+package de.cwde.freeshisen;
+
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
+import android.util.Log;
+
+public class Tileset {
+ public int tileWidth;
+ public int tileHeight;
+ public Bitmap[] tile;
+ private ShisenSho app;
+
+ public Tileset(ShisenSho shishenSho) {
+ this.app = shishenSho;
+ }
+
+ private void loadPNGTileset(int tilesetid, int screenWidth, int screenHeight) {
+ BitmapFactory.Options ops = new BitmapFactory.Options();
+ ops.inScaled = false;
+ Bitmap tileset = BitmapFactory.decodeResource(app.getResources(), tilesetid, ops);
+ tileset.setDensity(Bitmap.DENSITY_NONE);
+
+ // The tile set has 4 rows x 9 columns
+ int tilesetRows = 4;
+ int tilesetCols = 9;
+ int loadedtileWidth = tileset.getWidth()/tilesetCols;
+ int loadedtileHeight = tileset.getHeight()/tilesetRows;
+ tile = new Bitmap[tilesetRows*tilesetCols];
+
+ // align to screen:
+ // "large" is 16x6, and we want to have a nice border, so we use 17x7 and
+ // choose the lowest scale so everything fits
+ float scalex = ((float) (screenWidth - 2)/17) / loadedtileWidth;
+ float scaley = ((float) (screenHeight - 2)/7) / loadedtileHeight;
+ if (scaley < scalex) {
+ scalex = scaley;
+ } else {
+ scaley = scalex;
+ }
+ Matrix matrix = new Matrix();
+ matrix.setScale(scalex, scaley);
+
+ int k=0;
+ for (int i=0; i<tilesetRows; i++) {
+ for (int j=0; j<tilesetCols; j++) {
+ tile[k] = Bitmap.createBitmap(tileset, j*loadedtileWidth, i*loadedtileHeight,
+ loadedtileWidth, loadedtileHeight, matrix, false);
+ tile[k].setDensity(Bitmap.DENSITY_NONE);
+ k++;
+ }
+ }
+ tileWidth = tile[0].getWidth();
+ tileHeight = tile[0].getHeight();
+ }
+
+ private void loadSVGTileset(int tilesetid, int screenWidth, int screenHeight) {
+ // TODO
+ }
+
+ public void loadTileset(int screenWidth, int screenHeight) {
+ boolean isSVG =false;
+ int id;
+ String s = app.tilesetid;
+
+ if (s.equals("classic")) {
+ id = R.drawable.classic;
+ } else if (s.equals("jade")) {
+ id = R.drawable.jade;
+ } else if (s.equals("traditional")) {
+ id = R.drawable.traditional;
+ } else if (s.equals("pixel")) {
+ id = R.drawable.pixel;
+ } else if (s.equals("original")) {
+ id = R.drawable.original;
+ } else if (s.equals("veit")) {
+ id = R.drawable.veit;
+ } else {
+ // shouldn't be reached...
+ Log.e("ShisenSho", "somebody managed to set an invalid tileset string");
+ id = R.drawable.classic;
+ }
+
+ if (isSVG) {
+ loadSVGTileset(id, screenWidth, screenHeight);
+ } else {
+ loadPNGTileset(id, screenWidth, screenHeight);
+ }
+ }
+}