diff --git a/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java b/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java
index b027630ae..2eda2c34d 100644
--- a/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java
+++ b/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java
@@ -13,6 +13,8 @@ public final class R {
public static final int preferences_attackspeed_values=0x7f070004;
public static final int preferences_display_loot=0x7f070001;
public static final int preferences_display_loot_values=0x7f070002;
+ public static final int preferences_display_scaling_factor=0x7f070007;
+ public static final int preferences_display_scaling_factor_values=0x7f070008;
public static final int preferences_movementmethod_values=0x7f070006;
public static final int preferences_movementmethods=0x7f070005;
public static final int questlog_includecompleted=0x7f070000;
@@ -297,7 +299,7 @@ public final class R {
public static final int about_contents1=0x7f0500f3;
public static final int about_contents2=0x7f0500f4;
public static final int about_contents3=0x7f0500f5;
- /** affliction / statuseffect / temporary effect
+ /** Translated as: affliction / statuseffect / temporary effect
*/
public static final int actorcondition_info_removes_all=0x7f05010e;
public static final int actorinfo_attack=0x7f0500ae;
@@ -353,7 +355,7 @@ public final class R {
public static final int conversation_rewardgold=0x7f0500d4;
public static final int conversation_rewarditem=0x7f0500d6;
public static final int conversation_rewarditems=0x7f0500d7;
- public static final int conversation_title=0x7f050122;
+ public static final int conversation_title=0x7f050124;
public static final int conversationlist_alynndir=0x7f050024;
public static final int conversationlist_ambelie=0x7f050028;
public static final int conversationlist_crossglen=0x7f050003;
@@ -506,7 +508,7 @@ public final class R {
public static final int itemlist_rings=0x7f050038;
public static final int itemlist_v068=0x7f050040;
public static final int itemlist_weapons=0x7f050037;
- public static final int key_required=0x7f050121;
+ public static final int key_required=0x7f050123;
public static final int levelup_add_attackchance=0x7f0500e7;
public static final int levelup_add_attackchance_description=0x7f0500e8;
public static final int levelup_add_attackdamage=0x7f0500e9;
@@ -554,6 +556,8 @@ public final class R {
public static final int preferences_display_category=0x7f0500fd;
public static final int preferences_display_fullscreen=0x7f0500ff;
public static final int preferences_display_fullscreen_title=0x7f0500fe;
+ public static final int preferences_display_scaling_factor=0x7f050122;
+ public static final int preferences_display_scaling_factor_title=0x7f050121;
public static final int preferences_movement_category=0x7f05010a;
public static final int preferences_movementmethod=0x7f05010c;
public static final int preferences_movementmethod_title=0x7f05010b;
diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml
index 77435cf82..6a7dffdb9 100644
--- a/AndorsTrail/res/values/strings.xml
+++ b/AndorsTrail/res/values/strings.xml
@@ -302,7 +302,7 @@
- Active conditions
+ Active conditions
Removes all %1$s
%1$s chance of %2$s
(%1$d rounds)
@@ -326,4 +326,17 @@
Move cost penalty +%1$d AP
Lowers move cost %1$d AP
+ Scaling factor
+ Makes the game view display everything larger.
+
+ - Normal size
+ - 1.5x size
+ - Double size
+
+
+ - 1.0f
+ - 1.5f
+ - 2.0f
+
+
diff --git a/AndorsTrail/res/xml/preferences.xml b/AndorsTrail/res/xml/preferences.xml
index 22ed24300..72715fc9b 100644
--- a/AndorsTrail/res/xml/preferences.xml
+++ b/AndorsTrail/res/xml/preferences.xml
@@ -7,6 +7,13 @@
android:defaultValue="true"
android:summary="@string/preferences_display_fullscreen"
android:key="fullscreen" />
+
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java
index d89706280..5225ebd09 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java
@@ -14,7 +14,7 @@ import android.view.WindowManager;
public final class AndorsTrailApplication extends Application {
public static final boolean DEVELOPMENT_DEBUGRESOURCES = false;
- public static final boolean DEVELOPMENT_FORCE_STARTNEWGAME = false;
+ public static final boolean DEVELOPMENT_FORCE_STARTNEWGAME = true;
public static final boolean DEVELOPMENT_FORCE_CONTINUEGAME = false;
public static final boolean DEVELOPMENT_DEBUGBUTTONS = false;
public static final boolean DEVELOPMENT_VALIDATEDATA = true;
@@ -23,7 +23,7 @@ public final class AndorsTrailApplication extends Application {
public static final String CURRENT_VERSION_DISPLAY = "0.6.9dev";
public final WorldContext world = new WorldContext();
- public WorldSetup setup = new WorldSetup(world, this);
+ public final WorldSetup setup = new WorldSetup(world, this);
public WeakReference currentView;
public final AndorsTrailPreferences preferences = new AndorsTrailPreferences();
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailPreferences.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailPreferences.java
index 95b49d704..fa6639e54 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailPreferences.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailPreferences.java
@@ -16,6 +16,7 @@ public class AndorsTrailPreferences {
public int movementMethod = MOVEMENTMETHOD_STRAIGHT;
public static final int MOVEMENTMETHOD_STRAIGHT = 0;
public static final int MOVEMENTMETHOD_DIRECTIONAL = 1;
+ public float scalingFactor = 1.0f;
public static void read(final Context androidContext, AndorsTrailPreferences dest) {
try {
@@ -26,6 +27,7 @@ public class AndorsTrailPreferences {
dest.fullscreen = prefs.getBoolean("fullscreen", true);
dest.attackspeed_milliseconds = Integer.parseInt(prefs.getString("attackspeed", "1000"));
dest.movementMethod = Integer.parseInt(prefs.getString("movementmethod", Integer.toString(MOVEMENTMETHOD_STRAIGHT)));
+ dest.scalingFactor = Float.parseFloat(prefs.getString("scaling_factor", "1.0f"));
} catch (Exception e) {
dest.confirmRest = true;
dest.confirmAttack = true;
@@ -33,6 +35,7 @@ public class AndorsTrailPreferences {
dest.fullscreen = true;
dest.attackspeed_milliseconds = 1000;
dest.movementMethod = MOVEMENTMETHOD_STRAIGHT;
+ dest.scalingFactor = 1.0f;
}
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
index f21dc1883..41880842a 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
@@ -163,7 +163,7 @@ public final class Dialogs {
AlertDialog.Builder db = new AlertDialog.Builder(mainActivity)
.setTitle(title)
.setMessage(msg)
- .setIcon(new BitmapDrawable(context.tileStore.bitmaps[TileStore.iconID_groundbag]))
+ .setIcon(new BitmapDrawable(context.tileStore.getBitmap(TileStore.iconID_groundbag)))
.setNegativeButton(R.string.dialog_close, null)
.setView(itemList);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java
index 161284aec..2d7f8f05d 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/WorldSetup.java
@@ -31,7 +31,7 @@ public final class WorldSetup {
this.androidContext = new WeakReference(androidContext);
}
- public void startResourceLoader(final Resources r) {
+ public void startResourceLoader(final Resources r, final AndorsTrailPreferences preferences) {
if (isResourcesInitialized) return;
synchronized (this) {
@@ -42,7 +42,7 @@ public final class WorldSetup {
(new AsyncTask() {
@Override
protected Void doInBackground(Void... arg0) {
- ResourceLoader.loadResources(world, r);
+ ResourceLoader.loadResources(world, r);
return null;
}
@@ -87,9 +87,12 @@ public final class WorldSetup {
protected void onPostExecute(Void result) {
super.onPostExecute(result);
isSceneReady = true;
- assert(listener != null);
- OnSceneLoadedListener o = listener.get();
- listener = null;
+ OnSceneLoadedListener o;
+ synchronized (WorldSetup.this) {
+ if (listener == null) return;
+ o = listener.get();
+ listener = null;
+ }
if (o == null) return;
if (loadResult == Savegames.LOAD_RESULT_SUCCESS) {
o.onSceneLoaded();
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java
index 38f88673e..175eff4b3 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java
@@ -319,7 +319,7 @@ public final class ConversationActivity extends Activity {
final ImageView iv = (ImageView) result.findViewById(R.id.conversation_image);
final TextView tv = (TextView) result.findViewById(R.id.conversation_text);
if (statement.hasActor()) {
- iv.setImageBitmap(tileStore.bitmaps[statement.iconID]);
+ iv.setImageBitmap(tileStore.getBitmap(statement.iconID));
iv.setVisibility(View.VISIBLE);
tv.setText(statement.actorName + ": " + statement.text, BufferType.SPANNABLE);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java
index 9459161cf..4163e42e6 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java
@@ -105,7 +105,7 @@ public final class HeroinfoActivity extends TabActivity {
container = player.inventory;
ImageView iv = (ImageView) findViewById(R.id.heroinfo_image);
- iv.setImageBitmap(world.tileStore.bitmaps[player.traits.iconID]);
+ iv.setImageBitmap(world.tileStore.getBitmap(player.traits.iconID));
((TextView) findViewById(R.id.heroinfo_title)).setText(player.traits.name);
heroinfo_ap = (TextView) findViewById(R.id.heroinfo_ap);
@@ -248,7 +248,7 @@ public final class HeroinfoActivity extends TabActivity {
private void updateWornImage(ImageView view, int resourceIDEmptyImage, ItemType type) {
if (type != null) {
- view.setImageBitmap(world.tileStore.bitmaps[type.iconID]);
+ view.setImageBitmap(world.tileStore.getBitmap(type.iconID));
} else {
view.setImageResource(resourceIDEmptyImage);
}
@@ -270,7 +270,7 @@ public final class HeroinfoActivity extends TabActivity {
Resources res = getResources();
for (ActorCondition c : player.conditions) {
View v = View.inflate(this, R.layout.inventoryitemview, null);
- ((ImageView) v.findViewById(R.id.inv_image)).setImageBitmap(world.tileStore.bitmaps[c.conditionType.iconID]);
+ ((ImageView) v.findViewById(R.id.inv_image)).setImageBitmap(world.tileStore.getBitmap(c.conditionType.iconID));
((TextView) v.findViewById(R.id.inv_text)).setText(describeEffect(res, c));
heroinfo_currentconditions.addView(v);
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java
index 53cbbff2c..df45158ea 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java
@@ -47,7 +47,7 @@ public final class ItemInfoActivity extends Activity {
setContentView(R.layout.iteminfo);
ImageView img = (ImageView) findViewById(R.id.iteminfo_image);
- img.setImageBitmap(world.tileStore.bitmaps[itemType.iconID]);
+ img.setImageBitmap(world.tileStore.getBitmap(itemType.iconID));
TextView tv = (TextView) findViewById(R.id.iteminfo_title);
tv.setText(itemType.name);
tv = (TextView) findViewById(R.id.iteminfo_category);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java
index bb7ce9e8f..b25450ecb 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java
@@ -35,7 +35,7 @@ public final class LevelUpActivity extends Activity {
final Resources res = getResources();
ImageView img = (ImageView) findViewById(R.id.levelup_image);
- img.setImageBitmap(world.tileStore.bitmaps[player.traits.iconID]);
+ img.setImageBitmap(world.tileStore.getBitmap(player.traits.iconID));
TextView tv = (TextView) findViewById(R.id.levelup_description);
tv.setText(res.getString(R.string.levelup_description, player.level+1));
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java
index 3e1b9e99d..065b0cc82 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java
@@ -162,6 +162,7 @@ public final class MainActivity extends Activity {
case INTENTREQUEST_PREFERENCES:
AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this);
AndorsTrailPreferences.read(this, app.preferences);
+ world.tileStore.updatePreferences(app.preferences);
break;
case INTENTREQUEST_SAVEGAME:
if (resultCode != Activity.RESULT_OK) break;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterEncounterActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterEncounterActivity.java
index b00c02032..5aa7dcc1a 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterEncounterActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterEncounterActivity.java
@@ -42,7 +42,7 @@ public final class MonsterEncounterActivity extends Activity {
tv.setText(getString(R.string.dialog_monsterencounter_message, difficulty));
ImageView iw = (ImageView) findViewById(R.id.monsterencounter_image);
- iw.setImageBitmap(world.tileStore.bitmaps[monsterType.iconID]);
+ iw.setImageBitmap(world.tileStore.getBitmap(monsterType.iconID));
Button b = (Button) findViewById(R.id.monsterencounter_attack);
b.setOnClickListener(new OnClickListener() {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java
index 81ccaaf0b..cf7df1d55 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java
@@ -38,7 +38,7 @@ public final class MonsterInfoActivity extends Activity {
setContentView(R.layout.monsterinfo);
ImageView img = (ImageView) findViewById(R.id.monsterinfo_image);
- img.setImageBitmap(world.tileStore.bitmaps[monsterType.iconID]);
+ img.setImageBitmap(world.tileStore.getBitmap(monsterType.iconID));
TextView tv = (TextView) findViewById(R.id.monsterinfo_title);
tv.setText(monsterType.name);
tv = (TextView) findViewById(R.id.monsterinfo_difficulty);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java
index 8c9143567..4b6666426 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java
@@ -15,6 +15,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
+import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
@@ -95,7 +96,10 @@ public final class StartScreenActivity extends Activity {
}
});
- app.setup.startResourceLoader(getResources());
+ final Resources res = getResources();
+ app.world.tileStore.setDensity(res);
+ app.world.tileStore.updatePreferences(app.preferences);
+ app.setup.startResourceLoader(res, app.preferences);
if (AndorsTrailApplication.DEVELOPMENT_FORCE_STARTNEWGAME) {
continueGame(true, 0, "Debug player");
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java
index c41e6b372..3bfc8c9ca 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/VisualEffectController.java
@@ -2,6 +2,7 @@ package com.gpl.rpg.AndorsTrail.controller;
import android.graphics.Color;
import android.graphics.Paint;
+import android.graphics.Paint.Align;
import com.gpl.rpg.AndorsTrail.VisualEffectCollection;
import com.gpl.rpg.AndorsTrail.VisualEffectCollection.VisualEffect;
@@ -82,7 +83,10 @@ public final class VisualEffectController {
this.effect = effect;
this.displayText = (displayValue == 0) ? null : String.valueOf(displayValue);
this.textPaint.setColor(effect.textColor);
- this.textPaint.setShadowLayer(1, 1, 1, Color.DKGRAY);
+ this.textPaint.setShadowLayer(2, 1, 1, Color.DKGRAY);
+ this.textPaint.setTextSize(view.scaledTileSize * 0.5f); // 32dp.
+ this.textPaint.setAlpha(255);
+ this.textPaint.setTextAlign(Align.CENTER);
this.isAlive = true;
this.startTime = System.currentTimeMillis();
this.view = view;
@@ -96,6 +100,11 @@ public final class VisualEffectController {
final boolean changed = newTileID != this.currentTileID;
this.currentTileID = newTileID;
this.textYOffset = -2 * (currentFrame);
+ final int beginFadeAtFrame = effect.lastFrame / 2;
+ if (currentFrame >= beginFadeAtFrame) {
+ this.textPaint.setAlpha(255 * (effect.lastFrame - currentFrame) / (effect.lastFrame - beginFadeAtFrame));
+ }
+
if (changed) {
view.redrawAreaWithEffect(area, this);
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java
index 3e40bc9b7..576a0bdde 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterTypeCollection.java
@@ -87,6 +87,7 @@ public final class MonsterTypeCollection {
public void DEBUG_initializeTestEffectMonsters(WorldContext world) {
MonsterType t = getMonsterTypeFromName("Forest Snake");
+ if (t == null) return;
t.onHitEffects = new ItemTraits_OnUse[] {
new ItemTraits_OnUse(null, null, null, new ActorConditionEffect[] {
new ActorConditionEffect(world.actorConditionsTypes.getActorConditionType("poison"), 1, 3, new ConstRange(1, 1))
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTypeCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTypeCollection.java
index 3f195a3bb..e3c180868 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTypeCollection.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTypeCollection.java
@@ -126,7 +126,7 @@ public final class ItemTypeCollection {
*/
ItemType ring_dmg1 = getItemTypeByTag("ring_dmg1");
-
+ if (ring_dmg1 == null) return;
ItemType itemType = new ItemType(
nextId
, ring_dmg1.iconID
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java
index f89eb5343..405f571dc 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/DynamicTileLoader.java
@@ -143,6 +143,7 @@ public final class DynamicTileLoader {
}
private Bitmap createTilesetImage(TilesetBitmap b) {
+ //return BitmapFactory.decodeResource(r, b.resourceId);
Options o = new Options();
o.inScaled = false;
Bitmap sourceImage = BitmapFactory.decodeResource(r, b.resourceId, o);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java
index 8212dbb2c..ed8d4e8a6 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java
@@ -10,7 +10,6 @@ import com.gpl.rpg.AndorsTrail.model.item.ItemTypeCollection;
import com.gpl.rpg.AndorsTrail.model.map.TMXMapReader;
import com.gpl.rpg.AndorsTrail.model.quest.QuestLoader;
import com.gpl.rpg.AndorsTrail.util.ConstRange;
-import com.gpl.rpg.AndorsTrail.util.L;
import com.gpl.rpg.AndorsTrail.util.Size;
import android.content.res.Resources;
@@ -20,10 +19,7 @@ public final class ResourceLoader {
public static void loadResources(WorldContext world, Resources r) {
final TileStore tiles = world.tileStore;
- tiles.displayTileSize = DynamicTileLoader.measureBitmapWidth(r, R.drawable.equip_body); // Should be 32 on regular size.
- L.log("displayTileSize=" + tiles.displayTileSize);
- final int mTileSize = tiles.displayTileSize;
- L.log("mTileSize=" + mTileSize);
+ final int mTileSize = tiles.tileSize;
final Size dst_sz1x1 = new Size(mTileSize, mTileSize);
final Size dst_sz2x2 = new Size(mTileSize*2, mTileSize*2);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java
index 048592e08..7d50688c7 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/TileStore.java
@@ -1,5 +1,8 @@
package com.gpl.rpg.AndorsTrail.resource;
+import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences;
+
+import android.content.res.Resources;
import android.graphics.Bitmap;
public final class TileStore {
@@ -8,8 +11,22 @@ public final class TileStore {
public static final int iconID_moveselect = 3;
public static final int iconID_groundbag = 4;
public static final int iconID_shop = iconID_groundbag;
+
+ private float density;
+ public int tileSize;
+
+ public int viewTileSize;
+ public float scale;
+
+ public void setDensity(Resources r) {
+ density = r.getDisplayMetrics().density;
+ tileSize = (int) (32 * density);
+ }
- public int displayTileSize = 32;
+ public void updatePreferences(AndorsTrailPreferences prefs) {
+ scale = prefs.scalingFactor;
+ viewTileSize = (int) (tileSize * prefs.scalingFactor);
+ }
//TODO: should be final.
public Bitmap[] bitmaps = new Bitmap[1];
@@ -21,4 +38,8 @@ public final class TileStore {
bitmaps = new Bitmap[bitmaps.length + tilecount];
System.arraycopy(oldArray, 0, bitmaps, 0, oldArray.length);
}
+
+ public Bitmap getBitmap(int tileID) {
+ return bitmaps[tileID];
+ }
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/CombatView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/CombatView.java
index 25fdc84dc..1e01eacdf 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/CombatView.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/CombatView.java
@@ -107,7 +107,7 @@ public final class CombatView extends FrameLayout {
if (selectedMonster != null) {
attackMoveButton.setText(getResources().getString(R.string.combat_attack, world.model.player.traits.attackCost));
monsterBar.setVisibility(View.VISIBLE);
- monsterInfo.setImageBitmap(world.tileStore.bitmaps[selectedMonster.traits.iconID]);
+ monsterInfo.setImageBitmap(world.tileStore.getBitmap(selectedMonster.traits.iconID));
updateMonsterHealth(selectedMonster.health);
currentMonsterType = selectedMonster.monsterType;
} else if (selectedMovePosition != null) {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java
index 3ca773344..43f13d08b 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java
@@ -30,7 +30,7 @@ public final class ItemContainerAdapter extends ArrayAdapter {
result = View.inflate(getContext(), R.layout.inventoryitemview, null);
}
- ((ImageView) result.findViewById(R.id.inv_image)).setImageBitmap(tileStore.bitmaps[item.itemType.iconID]);
+ ((ImageView) result.findViewById(R.id.inv_image)).setImageBitmap(tileStore.getBitmap(item.itemType.iconID));
((TextView) result.findViewById(R.id.inv_text)).setText(item.itemType.describeWearEffect(item.quantity));
return result;
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java
index 445556feb..d624ac731 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java
@@ -30,7 +30,9 @@ import android.view.View;
public final class MainView extends SurfaceView implements SurfaceHolder.Callback {
- private int displayTileSize = 32;
+ private final int tileSize;
+ private float scale;
+ public int scaledTileSize;
private Size screenSizeTileCount = null;
private final Coord screenOffset = new Coord(); // pixel offset where the image begins
@@ -55,11 +57,12 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
super(context, attr);
this.holder = getHolder();
- AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivityContext(context);
+ AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivityContext(context);
this.view = app.currentView.get();
this.model = app.world.model;
this.tiles = app.world.tileStore;
-
+ this.tileSize = tiles.tileSize;
+
holder.addCallback(this);
setFocusable(true);
@@ -113,16 +116,19 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
L.log("surfaceChanged " + w + ", " + h);
- displayTileSize = tiles.displayTileSize;
+ this.scale = tiles.scale;
+ this.scaledTileSize = tiles.viewTileSize;
+ L.log("scale=" + scale);
+ L.log("scaledTileSize=" + scaledTileSize);
screenSizeTileCount = new Size(
- (int) Math.floor(w / displayTileSize)
- ,(int) Math.floor(h / displayTileSize)
+ (int) Math.floor(w / scaledTileSize)
+ ,(int) Math.floor(h / scaledTileSize)
);
screenOffset.set(
- (w - (displayTileSize * screenSizeTileCount.width)) / 2
- ,(h - (displayTileSize * screenSizeTileCount.height)) / 2
+ (w - (scaledTileSize * screenSizeTileCount.width)) / 2
+ ,(h - (scaledTileSize * screenSizeTileCount.height)) / 2
);
if (model.currentMap != null) {
@@ -181,8 +187,8 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
if (!allowInputInterval()) return true;
lastTouchPosition_tileCoords.set(
- (int) Math.floor(((int)event.getX() - screenOffset.x) / displayTileSize) + mapTopLeft.x
- ,(int) Math.floor(((int)event.getY() - screenOffset.y) / displayTileSize) + mapTopLeft.y);
+ (int) Math.floor(((int)event.getX() - screenOffset.x) / scaledTileSize) + mapTopLeft.x
+ ,(int) Math.floor(((int)event.getY() - screenOffset.y) / scaledTileSize) + mapTopLeft.y);
lastTouchPosition_dx = lastTouchPosition_tileCoords.x - model.player.position.x;
lastTouchPosition_dy = lastTouchPosition_tileCoords.y - model.player.position.y;
@@ -229,6 +235,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
c = holder.lockCanvas(redrawRect);
synchronized (holder) {
c.translate(screenOffset.x, screenOffset.y);
+ c.scale(scale, scale);
doDrawRect(c, area);
}
} finally {
@@ -253,6 +260,7 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
c = holder.lockCanvas(redrawRect);
synchronized (holder) {
c.translate(screenOffset.x, screenOffset.y);
+ c.scale(scale, scale);
doDrawRect(c, area);
drawFromMapPosition(c, area, effect.position, effect.currentTileID);
if (effect.displayText != null) {
@@ -291,10 +299,10 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
}
private void worldCoordsToScreenCords(final CoordRect worldArea, Rect destScreenRect) {
- destScreenRect.left = screenOffset.x + (worldArea.topLeft.x - mapViewArea.topLeft.x) * displayTileSize;
- destScreenRect.top = screenOffset.y + (worldArea.topLeft.y - mapViewArea.topLeft.y) * displayTileSize;
- destScreenRect.right = destScreenRect.left + worldArea.size.width * displayTileSize;
- destScreenRect.bottom = destScreenRect.top + worldArea.size.height * displayTileSize;
+ destScreenRect.left = screenOffset.x + (worldArea.topLeft.x - mapViewArea.topLeft.x) * scaledTileSize;
+ destScreenRect.top = screenOffset.y + (worldArea.topLeft.y - mapViewArea.topLeft.y) * scaledTileSize;
+ destScreenRect.right = destScreenRect.left + worldArea.size.width * scaledTileSize;
+ destScreenRect.bottom = destScreenRect.top + worldArea.size.height * scaledTileSize;
}
private void doDrawRect(Canvas canvas, CoordRect area) {
@@ -333,12 +341,12 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
private void drawMapLayer(Canvas canvas, final CoordRect area, final MapLayer layer) {
int my = area.topLeft.y;
- int py = (area.topLeft.y - mapViewArea.topLeft.y) * displayTileSize;
- int px0 = (area.topLeft.x - mapViewArea.topLeft.x) * displayTileSize;
- for (int y = 0; y < area.size.height; ++y, ++my, py += displayTileSize) {
+ int py = (area.topLeft.y - mapViewArea.topLeft.y) * tileSize;
+ int px0 = (area.topLeft.x - mapViewArea.topLeft.x) * tileSize;
+ for (int y = 0; y < area.size.height; ++y, ++my, py += tileSize) {
int mx = area.topLeft.x;
int px = px0;
- for (int x = 0; x < area.size.width; ++x, ++mx, px += displayTileSize) {
+ for (int x = 0; x < area.size.width; ++x, ++mx, px += tileSize) {
final int tile = layer.tiles[mx][my];
if (tile != 0) {
canvas.drawBitmap(tiles.bitmaps[tile], px, py, mPaint);
@@ -361,15 +369,15 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac
if ( (x >= 0 && x < mapViewArea.size.width)
&& (y >= 0 && y < mapViewArea.size.height)) {
canvas.drawBitmap(tiles.bitmaps[tile],
- x * displayTileSize,
- y * displayTileSize,
+ x * tileSize,
+ y * tileSize,
mPaint);
}
}
private void drawEffectText(Canvas canvas, final CoordRect area, final VisualEffectAnimation e) {
- int x = (e.position.x - mapViewArea.topLeft.x) * displayTileSize + displayTileSize/2;
- int y = (e.position.y - mapViewArea.topLeft.y) * displayTileSize + displayTileSize/2 + e.textYOffset;
+ int x = (e.position.x - mapViewArea.topLeft.x) * tileSize + tileSize/2;
+ int y = (e.position.y - mapViewArea.topLeft.y) * tileSize + tileSize/2 + e.textYOffset;
canvas.drawText(e.displayText, x, y, e.textPaint);
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java
index 7f13988bb..df0d4c7c4 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java
@@ -45,7 +45,7 @@ public final class ShopItemContainerAdapter extends ArrayAdapter {
result = View.inflate(getContext(), R.layout.shopitemview, null);
}
- ((ImageView) result.findViewById(R.id.shopitem_image)).setImageBitmap(tileStore.bitmaps[itemType.iconID]);
+ ((ImageView) result.findViewById(R.id.shopitem_image)).setImageBitmap(tileStore.getBitmap(itemType.iconID));
((TextView) result.findViewById(R.id.shopitem_text)).setText(itemType.describeWearEffect(item.quantity));
Button b = (Button) result.findViewById(R.id.shopitem_shopbutton);
if (isSelling) {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java
index d812450af..6b88b306e 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java
@@ -60,8 +60,8 @@ public final class StatusView extends RelativeLayout {
expBar.init(R.drawable.ui_progress_exp, R.string.status_exp);
levelupDrawable = new LayerDrawable(new Drawable[] {
- new BitmapDrawable(world.tileStore.bitmaps[player.traits.iconID])
- ,new BitmapDrawable(world.tileStore.bitmaps[TileStore.iconID_moveselect])
+ new BitmapDrawable(world.tileStore.getBitmap(player.traits.iconID))
+ ,new BitmapDrawable(world.tileStore.getBitmap(TileStore.iconID_moveselect))
});
updateStatus();
@@ -82,14 +82,14 @@ public final class StatusView extends RelativeLayout {
if (canLevelUp) {
heroImage.setImageDrawable(levelupDrawable);
} else {
- heroImage.setImageBitmap(world.tileStore.bitmaps[player.traits.iconID]);
+ heroImage.setImageBitmap(world.tileStore.getBitmap(player.traits.iconID));
}
}
public void updateActiveConditions(Context androidContext, LinearLayout activeConditions) {
GreedyImageViewAppender t = new GreedyImageViewAppender(androidContext, activeConditions);
for (ActorCondition condition : player.conditions) {
- t.setCurrentImage(world.tileStore.bitmaps[condition.conditionType.iconID]);
+ t.setCurrentImage(world.tileStore.getBitmap(condition.conditionType.iconID));
}
t.removeOtherImages();
}