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;
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;
}
}
-
- 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;
- }
- }
}
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;
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;
private long playTime;
private long baseTime;
private Timer timer;
+ private Tileset tileset;
static class hHandler extends Handler {
private final WeakReference<ShisenShoView> mTarget;
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) {
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;
}
}
+ public void loadTileset() {
+ tileset.loadTileset(screenWidth, screenHeight);
+ }
+
private void initializeGame() {
loadBackground();
screenWidth=getWidth();
// 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);
}
}
}
--- /dev/null
+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);
+ }
+ }
+}