factor out Tileset stuff. no, this isn't what correct OOA/OOD should look like, but...
authorgitknilch <gitknilch@cwde.de>
Thu, 4 Apr 2013 08:46:59 +0000 (10:46 +0200)
committergitknilch <gitknilch@cwde.de>
Thu, 4 Apr 2013 08:46:59 +0000 (10:46 +0200)
src/de/cwde/freeshisen/ShisenSho.java
src/de/cwde/freeshisen/ShisenShoView.java
src/de/cwde/freeshisen/Tileset.java [new file with mode: 0644]

index 99327bde5241e4d5c55798d3278893729c107feb..f32fa7025cfd22412f2b4872a866753df60cc89f 100644 (file)
@@ -14,7 +14,7 @@ public class ShisenSho extends Application {
        public int[] boardSize=new int[2];
        public int difficulty=1; // 1=Easy, 2=Hard
        public int size=3; // 1=Small, 2=Medium, 3=Big
-       public int tilesetid = R.drawable.classic;
+       public String tilesetid = "classic";
        public boolean gravity=true;
        public boolean timeCounter=true;
 
@@ -84,7 +84,7 @@ public class ShisenSho extends Application {
                int difficulty = Integer.parseInt(sharedPref.getString("pref_diff", "1"));
                boolean gravity = sharedPref.getBoolean("pref_grav", true);
                boolean timeCounter = sharedPref.getBoolean("pref_time", true);
-               int tilesetid = tilesetStringToRes(sharedPref.getString("pref_tile", ""));
+               String tilesetid = sharedPref.getString("pref_tile", "");
 
                boolean needsReset = false;
 
@@ -118,25 +118,4 @@ public class ShisenSho extends Application {
                }
 
        }
-
-       private int tilesetStringToRes(String s)
-       {
-               if (s.equals("classic")) {
-                       return R.drawable.classic;
-               } else if (s.equals("jade")) {
-                       return R.drawable.jade;
-               } else if (s.equals("traditional")) {
-                       return R.drawable.traditional;
-               } else if (s.equals("pixel")) {
-                       return R.drawable.pixel;
-               } else if (s.equals("original")) {
-                       return R.drawable.original;
-               } else if (s.equals("veit")) {
-                       return R.drawable.veit;
-               } else {
-                       // shouldn't be reached...
-                       Log.e("ShisenSho", "somebody managed to set an invalid tileset string");
-                       return R.drawable.classic;
-               }
-       }
 }
index 9207d3d5358f0187b6cc004b488de870957d6ee6..a326fa6c9a57387e7f88342cf051dc425fa49a3f 100644 (file)
@@ -14,7 +14,6 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.Color;
-import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.Paint.Align;
 import android.graphics.Paint.Cap;
@@ -43,12 +42,9 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
 
        private int screenWidth;
        private int screenHeight;
-       private int tilesetRows;
-       private int tilesetCols;
        private int tileHeight;
        private int tileWidth;
        private Bitmap bg;
-       private Bitmap tile[];
        private Point selection1 = new Point(0, 0);
        private Point selection2 = new Point(0, 0);
        private List<Point> path = null;
@@ -57,6 +53,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
        private long playTime;
        private long baseTime;
        private Timer timer;
+       private Tileset tileset;
 
        static class hHandler extends Handler {
                private final WeakReference<ShisenShoView> mTarget;
@@ -83,12 +80,13 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
        private SurfaceHolder surfaceHolder = null;
        private String time = INVALID_TIME;
 
-       public ShisenShoView(ShisenSho shishenSho) {
-               super((Context) shishenSho);
-               this.app = shishenSho;
+       public ShisenShoView(ShisenSho shisenSho) {
+               super((Context) shisenSho);
+               this.app = shisenSho;
                cstate = StatePlay.UNINITIALIZED;
                surfaceHolder = getHolder();
                surfaceHolder.addCallback(this);
+               tileset = new Tileset(shisenSho);
        }
 
        public ShisenShoView(Context ctx) {
@@ -108,45 +106,6 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                this.cstate=cstate;
        }
 
-       public void loadTileset() {
-               BitmapFactory.Options ops = new BitmapFactory.Options();
-               ops.inScaled = false;
-               Bitmap tileset = BitmapFactory.decodeResource(getResources(), app.tilesetid, ops);
-               tileset.setDensity(Bitmap.DENSITY_NONE);
-
-               // The tile set has 4 rows x 9 columns
-               tilesetRows = 4;
-               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 loadBackground() {
                BitmapFactory.Options ops = new BitmapFactory.Options();
                ops.inScaled = false;
@@ -192,6 +151,10 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                }
        }
 
+       public void loadTileset() {
+               tileset.loadTileset(screenWidth, screenHeight);
+       }
+       
        private void initializeGame() {
                loadBackground();
                screenWidth=getWidth();
@@ -351,7 +314,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                                                        // Tiles are 56px height, 40px width each
                                                        char piece=app.board.board[i][j];
                                                        if (piece!=0) {
-                                                               canvas.drawBitmap(tile[piece], x0+j*tileWidth, y0+i*tileHeight, null);
+                                                               canvas.drawBitmap(tileset.tile[piece], x0+j*tileWidth, y0+i*tileHeight, null);
                                                        }
                                                }
                                        }
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