From e1331c9ca833e2bcb07e8b3ad26c8c2394d279de Mon Sep 17 00:00:00 2001 From: gitknilch Date: Thu, 4 Apr 2013 10:46:59 +0200 Subject: [PATCH 1/1] factor out Tileset stuff. no, this isn't what correct OOA/OOD should look like, but who cares? --- src/de/cwde/freeshisen/ShisenSho.java | 25 +------ src/de/cwde/freeshisen/ShisenShoView.java | 57 +++----------- src/de/cwde/freeshisen/Tileset.java | 90 +++++++++++++++++++++++ 3 files changed, 102 insertions(+), 70 deletions(-) create mode 100644 src/de/cwde/freeshisen/Tileset.java diff --git a/src/de/cwde/freeshisen/ShisenSho.java b/src/de/cwde/freeshisen/ShisenSho.java index 99327bd..f32fa70 100644 --- a/src/de/cwde/freeshisen/ShisenSho.java +++ b/src/de/cwde/freeshisen/ShisenSho.java @@ -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; - } - } } diff --git a/src/de/cwde/freeshisen/ShisenShoView.java b/src/de/cwde/freeshisen/ShisenShoView.java index 9207d3d..a326fa6 100644 --- a/src/de/cwde/freeshisen/ShisenShoView.java +++ b/src/de/cwde/freeshisen/ShisenShoView.java @@ -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 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 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