package com.andlabs.gd.map;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.Log;
import com.andlabs.gd.base.Point;
import com.andlabs.gd.rendering.RenderingInitializer;
/**
* @author johannes
*/
public class GameMap implements RenderingInitializer{
public static final int GRAS = 0;
public static final int TREE = GRAS + 1;
public static final int ROCK = TREE + 1;
public static final int GOLD = ROCK + 1;
private GameMap mEast;
private GameMap mWest;
private GameMap mSouth;
private GameMap mNorth;
private GameMap mSouthEast;
private GameMap mSouthWest;
private GameMap mNorthEast;
private GameMap mNorthWest;
private Bitmap mGras, mRock, mTree, mGold;
private int mCellSize;
private int mHeight, mWidth;
private int type;
public int mId;
private int mX, mY;
//======================
// Fields
//======================
public List<List<Integer>> map = new ArrayList<List<Integer>>();
private List<Integer> row;
//======================
// Constructors
//======================
public GameMap(){
for(int i = 0; i < 5; i++){
row = new ArrayList<Integer>();
for(int c = 0; c < 5; c++){
double prob = Math.random();
if(prob < 0.6){
row.add(GRAS);
} else if(prob >= 0.6 && prob < 0.825){
row.add(TREE);
} else if(prob >= 0.825 && prob < 0.95){
row.add(ROCK);
} else {
row.add(GOLD);
}
}
map.add(row);
}
}
//======================
// Overridden Methods
//======================
//======================
// Public Methods
//======================
public void render(Canvas canvas, Point heroPosition){
int offsetX = (int) (heroPosition.x - canvas.getWidth());
int offsetY = (int) (heroPosition.y - canvas.getHeight());
// int numberOfCells = mWidth / mCellSize + 2;
// int numberOfRows = mHeight / mCellSize + 2;
// int startCell = (int) (heroPosition.x / mCellSize) - numberOfCells / 2;
// int endCell = (int) (heroPosition.x / mCellSize) + numberOfCells / 2;
// int startRow = (int) (heroPosition.y / mCellSize) - numberOfRows / 2;
// int endRow = (int) (heroPosition.y / mCellSize) + numberOfRows / 2;
// int startRowLeft = (int) (heroPosition.y % mCellSize);
// int startCellLeft = (int) (heroPosition.x % mCellSize);
for(int i = 0; i < map.size(); i++){
mY = i * mCellSize - offsetY;
row = map.get(i);
for(int e = 0; e < row.size(); e++){
mX = e * mCellSize - offsetX;
type = row.get(e);
switch(type){
case GRAS:
canvas.drawBitmap(mGras, mX, mY , null);
break;
case GOLD:
canvas.drawBitmap(mGold, mX, mY, null);
break;
case ROCK:
canvas.drawBitmap(mRock, mX, mY , null);
break;
case TREE:
canvas.drawBitmap(mTree, mX, mY, null);
break;
}
}
}
}
@Override
public void initializeRendering(Context context) {
AssetManager manager = context.getAssets();
try {
mGold = BitmapFactory.decodeStream(manager.open("map/gold.png"));
mGras = BitmapFactory.decodeStream(manager.open("map/gras.png"));
mTree = BitmapFactory.decodeStream(manager.open("map/tree.png"));
mRock = BitmapFactory.decodeStream(manager.open("map/rock.png"));
} catch (IOException e) {
Log.e("GameMap", "error while loading map images", e);
throw new RuntimeException(e);
}
mCellSize = mGras.getHeight();
}
}
|