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(); }