]> git.zerfleddert.de Git - FreeShisen/blobdiff - src/de/cwde/freeshisen/Tileset.java
factor out Tileset stuff. no, this isn't what correct OOA/OOD should look like, but...
[FreeShisen] / src / de / cwde / freeshisen / Tileset.java
diff --git a/src/de/cwde/freeshisen/Tileset.java b/src/de/cwde/freeshisen/Tileset.java
new file mode 100644 (file)
index 0000000..6462e51
--- /dev/null
@@ -0,0 +1,90 @@
+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);
+               }
+       }
+}
Impressum, Datenschutz