]> cvs.zerfleddert.de Git - FreeShisen/blobdiff - src/de/cwde/freeshisen/ShisenShoView.java
scale down veit tileset to reduce size of package
[FreeShisen] / src / de / cwde / freeshisen / ShisenShoView.java
index 6f567ce21e92bf57302e0ea426f0fd1fb35bbb27..6a38ffc4201e061773333fa10e4909979b82f265 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,7 @@ 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 +51,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 +78,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 +104,6 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                this.cstate=cstate;
        }
 
-       private void loadTileset() {
-               BitmapFactory.Options ops = new BitmapFactory.Options();
-               ops.inScaled = false;
-               Bitmap tileset = BitmapFactory.decodeResource(getResources(), R.drawable.tileset, 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/17) / loadedtileWidth;
-               float scaley = ((float) screenHeight/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 +149,10 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                }
        }
 
+       public void loadTileset() {
+               tileset.loadTileset(screenWidth, screenHeight);
+       }
+       
        private void initializeGame() {
                loadBackground();
                screenWidth=getWidth();
@@ -296,7 +257,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                try {
                        if (canvas == null) canvas = surfaceHolder.lockCanvas(null);
                        if (canvas == null) return;
-                       if (cstate==StatePlay.UNINITIALIZED) initializeGame();
+                       if (cstate == StatePlay.UNINITIALIZED) initializeGame();
                        synchronized (surfaceHolder) {
                                doDraw(canvas);
                        }
@@ -317,8 +278,8 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                        int y0=0;
 
                        if (app!=null && app.board!=null) {
-                               x0=(screenWidth-app.board.boardSize[1]*tileWidth)/2;
-                               y0=(screenHeight-app.board.boardSize[0]*tileHeight)/2;
+                               x0=(screenWidth-app.board.boardSize[1]*tileset.tileWidth)/2;
+                               y0=(screenHeight-app.board.boardSize[0]*tileset.tileHeight)/2;
                        }
 
                        int selectcolor = Color.parseColor(COLOR_SELECTED);
@@ -351,7 +312,11 @@ 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*tileset.tileWidth,
+                                                                               y0+i*tileset.tileHeight,
+                                                                               null);
                                                        }
                                                }
                                        }
@@ -474,10 +439,10 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                paint.setStrokeJoin(Join.ROUND);
                paint.setStrokeWidth(3);
                canvas.drawLine(
-                               x0 + p0.j * tileWidth - 2 + (tileWidth / 2),
-                               y0 + p0.i * tileHeight - 2 + (tileHeight / 2),
-                               x0 + p1.j * tileWidth - 2 + (tileWidth / 2),
-                               y0 + p1.i * tileHeight - 2 + (tileHeight / 2), paint);
+                               x0 + p0.j * tileset.tileWidth - 2 + (tileset.tileWidth / 2),
+                               y0 + p0.i * tileset.tileHeight - 2 + (tileset.tileHeight / 2),
+                               x0 + p1.j * tileset.tileWidth - 2 + (tileset.tileWidth / 2),
+                               y0 + p1.i * tileset.tileHeight - 2 + (tileset.tileHeight / 2), paint);
        }
 
        private void highlightTile(Canvas canvas, int x0, int y0, Point p, int color) {
@@ -489,10 +454,10 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                paint.setStrokeJoin(Join.ROUND);
                paint.setStrokeWidth(3);
                Rect r = new Rect(
-                               x0 + p.j * tileWidth - 2,
-                               y0 + p.i * tileHeight - 2,
-                               x0 + p.j * tileWidth + tileWidth + 2,
-                               y0 + p.i * tileHeight + tileHeight + 2);
+                               x0 + p.j * tileset.tileWidth - 2,
+                               y0 + p.i * tileset.tileHeight - 2,
+                               x0 + p.j * tileset.tileWidth + tileset.tileWidth + 2,
+                               y0 + p.i * tileset.tileHeight + tileset.tileHeight + 2);
                canvas.drawRect(r, paint);
        }
 
@@ -506,8 +471,8 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
 
        private void onClick(int x, int y) {
                try {
-                       int i=(y-(screenHeight-app.board.boardSize[0]*tileHeight)/2)/tileHeight;
-                       int j=(x-(screenWidth-app.board.boardSize[1]*tileWidth)/2)/tileWidth;
+                       int i=(y-(screenHeight-app.board.boardSize[0]*tileset.tileHeight)/2)/tileset.tileHeight;
+                       int j=(x-(screenWidth-app.board.boardSize[1]*tileset.tileWidth)/2)/tileset.tileWidth;
 
                        switch (cstate) {
                        case IDLE:
@@ -584,11 +549,12 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                if (time.compareTo(besttime2) < 0) {
                        // score!
                        new AlertDialog.Builder(app.activity)
-                               .setTitle("Hiscore!")
+                               .setTitle(R.string.hiscore_title)
                                .setCancelable(true)
                                .setIcon(R.drawable.icon)
-                               .setPositiveButton(app.getString(android.R.string.ok), null)
-                               .setMessage("You've made the highscore list!").create() // FIXME: hardcoded string
+                               .setPositiveButton(android.R.string.ok, null)
+                               .setMessage(R.string.hiscore_text)
+                               .create()
                                .show();
 
                        SharedPreferences.Editor editor = sp.edit();
Impressum, Datenschutz