From 18f60e1707c62f6e7977138390c38d240b80434d Mon Sep 17 00:00:00 2001 From: Oskar Wiksten Date: Mon, 23 Jul 2012 23:39:38 +0000 Subject: [PATCH] First version of replacing the hero icon with the toolbox drawer. --- AndorsTrail/res/anim/slidedown.xml | 8 ++ AndorsTrail/res/anim/slideup.xml | 8 ++ AndorsTrail/res/drawable/ui_icon_map.png | Bin 0 -> 365 bytes AndorsTrail/res/layout/main.xml | 11 ++- AndorsTrail/res/layout/toolboxview.xml | 20 +++++ AndorsTrail/res/values/ui_theme.xml | 5 ++ .../AndorsTrail/activity/MainActivity.java | 24 ++---- .../controller/WorldMapController.java | 14 +-- .../gpl/rpg/AndorsTrail/view/StatusView.java | 8 +- .../gpl/rpg/AndorsTrail/view/ToolboxView.java | 80 ++++++++++++++++++ 10 files changed, 150 insertions(+), 28 deletions(-) create mode 100644 AndorsTrail/res/anim/slidedown.xml create mode 100644 AndorsTrail/res/anim/slideup.xml create mode 100644 AndorsTrail/res/drawable/ui_icon_map.png create mode 100644 AndorsTrail/res/layout/toolboxview.xml create mode 100644 AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ToolboxView.java diff --git a/AndorsTrail/res/anim/slidedown.xml b/AndorsTrail/res/anim/slidedown.xml new file mode 100644 index 0000000..7ef0eee --- /dev/null +++ b/AndorsTrail/res/anim/slidedown.xml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/AndorsTrail/res/anim/slideup.xml b/AndorsTrail/res/anim/slideup.xml new file mode 100644 index 0000000..f77856f --- /dev/null +++ b/AndorsTrail/res/anim/slideup.xml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/AndorsTrail/res/drawable/ui_icon_map.png b/AndorsTrail/res/drawable/ui_icon_map.png new file mode 100644 index 0000000000000000000000000000000000000000..b49bbce3eb32b859c9bd555ad36be2f8e9a2d836 GIT binary patch literal 365 zcmV-z0h0cSP)B-Boq0Xs+XiK8PGFd1X{Dm5ScSNLO#~_z=2}dE1n8zS;WcKk)bl%7<8(5>pee00000 LNkvXXu0mjf;N6Q` literal 0 HcmV?d00001 diff --git a/AndorsTrail/res/layout/main.xml b/AndorsTrail/res/layout/main.xml index fb98625..cbc4ce6 100644 --- a/AndorsTrail/res/layout/main.xml +++ b/AndorsTrail/res/layout/main.xml @@ -27,6 +27,15 @@ android:layout_alignParentTop="true" android:visibility="gone" /> + + + + + + + diff --git a/AndorsTrail/res/values/ui_theme.xml b/AndorsTrail/res/values/ui_theme.xml index 0a2aba0..ebe0c7f 100644 --- a/AndorsTrail/res/values/ui_theme.xml +++ b/AndorsTrail/res/values/ui_theme.xml @@ -29,4 +29,9 @@ wrap_content @dimen/smalltext_buttonheight + + \ No newline at end of file diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java index d2d648f..9c8bf62 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java @@ -11,13 +11,13 @@ import com.gpl.rpg.AndorsTrail.context.ViewContext; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.controller.CombatController; import com.gpl.rpg.AndorsTrail.controller.MovementController; -import com.gpl.rpg.AndorsTrail.controller.WorldMapController; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.item.ItemContainer.ItemEntry; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.view.CombatView; import com.gpl.rpg.AndorsTrail.view.MainView; +import com.gpl.rpg.AndorsTrail.view.ToolboxView; import com.gpl.rpg.AndorsTrail.view.VirtualDpadView; import com.gpl.rpg.AndorsTrail.view.QuickButton.QuickButtonContextMenuInfo; import com.gpl.rpg.AndorsTrail.view.QuickitemView; @@ -40,7 +40,6 @@ import android.widget.Toast; public final class MainActivity extends Activity { - public static final int INTENTREQUEST_HEROINFO = 1; public static final int INTENTREQUEST_MONSTERENCOUNTER = 2; public static final int INTENTREQUEST_ITEMINFO = 3; public static final int INTENTREQUEST_CONVERSATION = 4; @@ -60,6 +59,7 @@ public final class MainActivity extends Activity { public StatusView statusview; public CombatView combatview; public QuickitemView quickitemview; + private ToolboxView toolboxview; private LinearLayout activeConditions; private VirtualDpadView dpad; @@ -87,6 +87,7 @@ public final class MainActivity extends Activity { quickitemview = (QuickitemView) findViewById(R.id.main_quickitemview); activeConditions = (LinearLayout) findViewById(R.id.statusview_activeconditions); dpad = (VirtualDpadView) findViewById(R.id.main_virtual_dpad); + toolboxview = (ToolboxView) findViewById(R.id.main_toolboxview); statusText = (TextView) findViewById(R.id.statusview_statustext); statusText.setOnClickListener(new OnClickListener() { @@ -97,7 +98,7 @@ public final class MainActivity extends Activity { }); clearMessages(); - if (AndorsTrailApplication.DEVELOPMENT_DEBUGBUTTONS) new DebugInterface(view).addDebugButtons(); + if (AndorsTrailApplication.DEVELOPMENT_DEBUGBUTTONS) new DebugInterface(view).addDebugButtons(); quickitemview.setVisibility(View.GONE); quickitemview.registerForContextMenu(this); @@ -110,9 +111,6 @@ public final class MainActivity extends Activity { protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { - case INTENTREQUEST_HEROINFO: - updateStatus(); - break; case INTENTREQUEST_MONSTERENCOUNTER: if (resultCode == Activity.RESULT_OK) { view.combatController.enterCombat(CombatController.BEGIN_TURN_PLAYER); @@ -211,15 +209,6 @@ public final class MainActivity extends Activity { return true; } }); - menu.add(R.string.menu_button_worldmap) - .setIcon(android.R.drawable.ic_menu_mapmode) - .setOnMenuItemClickListener(new OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem arg0) { - WorldMapController.displayWorldMap(MainActivity.this, world); - return true; - } - }); return true; } @@ -270,6 +259,7 @@ public final class MainActivity extends Activity { statusview.updateActiveConditions(this, activeConditions); quickitemview.refreshQuickitems(); combatview.updateStatus(); + toolboxview.updateIcons(); } public void redrawAll(int why) { @@ -313,4 +303,8 @@ public final class MainActivity extends Activity { t.show(); } + public void toggleToolboxVisibility() { + toolboxview.toggleVisibility(); + statusview.bringToFront(); + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java index 8db9463..5a378b4 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/WorldMapController.java @@ -5,6 +5,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; +import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; @@ -18,7 +19,6 @@ import android.widget.Toast; import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.activity.DisplayWorldMapActivity; -import com.gpl.rpg.AndorsTrail.activity.MainActivity; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.model.map.LayeredTileMap; import com.gpl.rpg.AndorsTrail.model.map.MapLayer; @@ -202,15 +202,17 @@ public final class WorldMapController { pw.close(); } - public static void displayWorldMap(MainActivity mainActivity, WorldContext world) { + public static boolean displayWorldMap(Context context, WorldContext world) { String worldMapSegmentName = world.maps.getWorldMapSegmentNameForMap(world.model.currentMap.name); if (worldMapSegmentName == null) { - Toast.makeText(mainActivity, mainActivity.getResources().getString(R.string.display_worldmap_not_available), Toast.LENGTH_LONG).show(); - return; + Toast.makeText(context, context.getResources().getString(R.string.display_worldmap_not_available), Toast.LENGTH_LONG).show(); + return false; } - Intent intent = new Intent(mainActivity, DisplayWorldMapActivity.class); + Intent intent = new Intent(context, DisplayWorldMapActivity.class); intent.putExtra("worldMapSegmentName", worldMapSegmentName); - mainActivity.startActivity(intent); + context.startActivity(intent); + + return true; } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java index c6d0a36..79c610d 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java @@ -2,8 +2,6 @@ package com.gpl.rpg.AndorsTrail.view; import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.R; -import com.gpl.rpg.AndorsTrail.activity.MainActivity; -import com.gpl.rpg.AndorsTrail.activity.HeroinfoActivity; import com.gpl.rpg.AndorsTrail.context.ViewContext; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.model.ability.ActorCondition; @@ -11,7 +9,6 @@ import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.resource.tiles.TileManager; import android.content.Context; -import android.content.Intent; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; @@ -52,8 +49,7 @@ public final class StatusView extends RelativeLayout { heroImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { - Intent intent = new Intent(context, HeroinfoActivity.class); - AndorsTrailApplication.getActivityFromActivityContext(context).startActivityForResult(intent, MainActivity.INTENTREQUEST_HEROINFO); + view.mainActivity.toggleToolboxVisibility(); } }); healthBar = (RangeBar) findViewById(R.id.statusview_health); @@ -132,7 +128,7 @@ public final class StatusView extends RelativeLayout { // Therefore, we reuse existing ImageView:s if they are present, but just change the image on them. ImageView iv; if (currentChildIndex < previousChildCount) { - // There already is a create dimage on this position, reuse it. + // There already is a created image on this position, reuse it. iv = (ImageView) container.getChildAt(currentChildIndex); iv.setVisibility(View.VISIBLE); } else { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ToolboxView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ToolboxView.java new file mode 100644 index 0000000..a174432 --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ToolboxView.java @@ -0,0 +1,80 @@ +package com.gpl.rpg.AndorsTrail.view; + +import android.content.Context; +import android.content.Intent; +import android.util.AttributeSet; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.Animation.AnimationListener; +import android.widget.ImageButton; +import android.widget.LinearLayout; + +import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; +import com.gpl.rpg.AndorsTrail.R; +import com.gpl.rpg.AndorsTrail.activity.HeroinfoActivity; +import com.gpl.rpg.AndorsTrail.context.ViewContext; +import com.gpl.rpg.AndorsTrail.context.WorldContext; +import com.gpl.rpg.AndorsTrail.controller.WorldMapController; + +public class ToolboxView extends LinearLayout implements OnClickListener { + private final WorldContext world; + private final Animation slideUpAnimation; + private final Animation slideDownAnimation; + private final ImageButton toolbox_playerinfo; + private final ImageButton toolbox_map; + + public ToolboxView(final Context context, AttributeSet attrs) { + super(context, attrs); + AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivityContext(context); + this.world = app.world; + + inflate(context, R.layout.toolboxview, this); + + this.slideUpAnimation = AnimationUtils.loadAnimation(context, R.anim.slideup); + this.slideDownAnimation = AnimationUtils.loadAnimation(context, R.anim.slidedown); + this.slideDownAnimation.setAnimationListener(new AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { } + @Override + public void onAnimationRepeat(Animation animation) { } + @Override + public void onAnimationEnd(Animation animation) { + ToolboxView.this.setVisibility(View.GONE); + } + }); + + toolbox_playerinfo = (ImageButton)findViewById(R.id.toolbox_playerinfo); + toolbox_playerinfo.setOnClickListener(this); + toolbox_map = (ImageButton)findViewById(R.id.toolbox_map); + toolbox_map.setOnClickListener(this); + + updateIcons(); + } + + @Override + public void onClick(View btn) { + Context context = getContext(); + if (btn == toolbox_playerinfo) { + context.startActivity(new Intent(context, HeroinfoActivity.class)); + } else if (btn == toolbox_map) { + if (!WorldMapController.displayWorldMap(context, world)) return; + } + ToolboxView.this.setVisibility(View.GONE); + } + + public void toggleVisibility() { + if (getVisibility() == View.VISIBLE) { + startAnimation(slideDownAnimation); + } else { + setVisibility(View.VISIBLE); + bringToFront(); + startAnimation(slideUpAnimation); + } + } + + public void updateIcons() { + world.tileManager.setImageViewTile(toolbox_playerinfo, world.model.player); + } +} -- 2.49.0