import android.content.DialogInterface.OnDismissListener;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
+import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.gpl.rpg.AndorsTrail.activity.SkillInfoActivity;
import com.gpl.rpg.AndorsTrail.activity.StartScreenActivity;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
+import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.Controller;
import com.gpl.rpg.AndorsTrail.controller.ItemController;
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionType;
*/
public static void showKeyArea(final MainActivity currentActivity, final ViewContext context, String phraseID) {
- showConversation(currentActivity, context, phraseID, "");
+ showConversation(currentActivity, context, phraseID, null);
}
public static void showMapSign(final MainActivity currentActivity, final ViewContext context, String phraseID) {
- showConversation(currentActivity, context, phraseID, "");
+ showConversation(currentActivity, context, phraseID, null);
}
public static void showConversation(final MainActivity currentActivity, final ViewContext context, final String phraseID, final Monster npc) {
- showConversation(currentActivity, context, phraseID, npc.monsterTypeID);
- }
-
- private static void showConversation(final MainActivity currentActivity, final ViewContext context, final String phraseID, String monsterTypeID) {
context.gameRoundController.pause();
Intent intent = new Intent(currentActivity, ConversationActivity.class);
- Uri.Builder b = Uri.parse("content://com.gpl.rpg.AndorsTrail/conversation/" + phraseID).buildUpon();
- b.appendQueryParameter("monsterTypeID", monsterTypeID);
- intent.setData(b.build());
+ intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/conversation/" + phraseID));
+ addMonsterIdentifiers(intent, npc);
currentActivity.startActivityForResult(intent, MainActivity.INTENTREQUEST_CONVERSATION);
}
+ public static void addMonsterIdentifiers(Intent intent, Monster monster) {
+ if (monster == null) return;
+ intent.putExtra("x", monster.position.x);
+ intent.putExtra("y", monster.position.y);
+ }
+
+ public static Monster getMonsterFromIntent(Intent intent, final WorldContext world) {
+ Bundle params = intent.getExtras();
+ if (params == null) return null;
+ if (!params.containsKey("x")) return null;
+ int x = params.getInt("x");
+ int y = params.getInt("y");
+ return world.model.currentMap.getMonsterAt(x, y);
+ }
+
public static void showMonsterEncounter(final MainActivity currentActivity, final ViewContext context, final Monster monster) {
context.gameRoundController.pause();
Intent intent = new Intent(currentActivity, MonsterEncounterActivity.class);
intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/monsterencounter"));
- intent.putExtra("x", monster.position.x);
- intent.putExtra("y", monster.position.y);
+ addMonsterIdentifiers(intent, monster);
currentActivity.startActivityForResult(intent, MainActivity.INTENTREQUEST_MONSTERENCOUNTER);
}
public static void showMonsterInfo(final Activity currentActivity, final Monster monster) {
Intent intent = new Intent(currentActivity, MonsterInfoActivity.class);
intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/monsterinfo"));
- intent.putExtra("x", monster.position.x);
- intent.putExtra("y", monster.position.y);
+ addMonsterIdentifiers(intent, monster);
currentActivity.startActivity(intent);
}
import android.widget.TextView.BufferType;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
+import com.gpl.rpg.AndorsTrail.Dialogs;
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.ConversationController;
import com.gpl.rpg.AndorsTrail.conversation.ConversationCollection;
import com.gpl.rpg.AndorsTrail.conversation.Phrase;
import com.gpl.rpg.AndorsTrail.conversation.Phrase.Reply;
-import com.gpl.rpg.AndorsTrail.model.actor.ActorTraits;
-import com.gpl.rpg.AndorsTrail.model.actor.MonsterType;
+import com.gpl.rpg.AndorsTrail.model.actor.Actor;
+import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
import com.gpl.rpg.AndorsTrail.model.item.Loot;
import com.gpl.rpg.AndorsTrail.resource.TileStore;
private Button nextButton;
private Button leaveButton;
private ListView statementList;
- private MonsterType monsterType;
+ private Monster npc;
private RadioGroup replyGroup;
private OnClickListener radioButtonListener;
private boolean displayActors = true;
requestWindowFeature(Window.FEATURE_NO_TITLE);
Uri uri = getIntent().getData();
- final String monsterTypeID = uri.getQueryParameter("monsterTypeID");
- if (monsterTypeID != null && monsterTypeID.length() > 0) {
- displayActors = true;
- monsterType = world.monsterTypes.getMonsterType(monsterTypeID);
- assert(monsterType != null);
- } else {
- displayActors = false;
- monsterType = null;
- }
+ this.npc = Dialogs.getMonsterFromIntent(getIntent(), world);
+ displayActors = (npc != null);
+
String phraseID = uri.getLastPathSegment().toString();
if (savedInstanceState != null) {
phraseID = savedInstanceState.getString("phraseID");
ConversationActivity.this.finish();
return;
} else if (phraseID.equalsIgnoreCase(ConversationCollection.PHRASE_SHOP)) {
- assert(monsterType != null);
- assert(monsterType.dropList != null);
+ assert(npc != null);
+ assert(npc.dropList != null);
Intent intent = new Intent(this, ShopActivity.class);
- intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/shop/" + monsterType.id));
+ intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/shop"));
+ Dialogs.addMonsterIdentifiers(intent, npc);
startActivityForResult(intent, MainActivity.INTENTREQUEST_SHOP);
return;
} else if (phraseID.equalsIgnoreCase(ConversationCollection.PHRASE_ATTACK)) {
}
}
- addConversationStatement(monsterType, message, NPCConversationColor);
+ addConversationStatement(npc, message, NPCConversationColor);
if (isPhraseOnlyNextReply(phrase)) {
nextButton.setEnabled(true);
} else {
r = getSelectedReply();
if (r == null) return;
- addConversationStatement(player.traits, r.text, playerConversationColor);
+ addConversationStatement(player, r.text, playerConversationColor);
}
replyGroup.removeAllViews();
setPhrase(r.nextPhrase);
}
- private void addConversationStatement(ActorTraits traits, String text, int color) {
+ private void addConversationStatement(Actor actor, String text, int color) {
ConversationStatement s = new ConversationStatement();
if (displayActors) {
- assert(traits != null);
- s.iconID = traits.iconID;
- s.actorName = traits.name;
+ assert(actor != null);
+ s.iconID = actor.traits.iconID;
+ s.actorName = actor.traits.name;
} else {
s.iconID = ConversationStatement.NO_ICON;
}
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
+import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
public final class DebugInterface {
//private final ViewContext viewContext;
mainActivity.showToast("DEBUG: given 10000 exp", Toast.LENGTH_SHORT);
}
})*/
+ ,new DebugButton("reset", new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ for(PredefinedMap map : world.maps.predefinedMaps) {
+ map.lastVisitTime = 1;
+ map.resetIfNotRecentlyVisited();
+ }
+ mainActivity.showToast("DEBUG: maps respawned", Toast.LENGTH_SHORT);
+ }
+ })
,new DebugButton("hp=max", new OnClickListener() {
@Override
public void onClick(View arg0) {
package com.gpl.rpg.AndorsTrail.activity;
import android.app.Activity;
-import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
requestWindowFeature(Window.FEATURE_NO_TITLE);
- final Intent intent = getIntent();
- final Bundle params = intent.getExtras();
- int x = params.getInt("x");
- int y = params.getInt("y");
- final Monster monster = world.model.currentMap.getMonsterAt(x, y);
+ final Monster monster = Dialogs.getMonsterFromIntent(getIntent(), world);
if (monster == null) {
finish();
return;
import java.util.Arrays;\r
\r
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;\r
+import com.gpl.rpg.AndorsTrail.Dialogs;\r
import com.gpl.rpg.AndorsTrail.R;\r
import com.gpl.rpg.AndorsTrail.context.WorldContext;\r
import com.gpl.rpg.AndorsTrail.controller.CombatController;\r
import com.gpl.rpg.AndorsTrail.view.TraitsInfoView;\r
\r
import android.app.Activity;\r
-import android.content.Intent;\r
import android.os.Bundle;\r
import android.view.View;\r
import android.view.Window;\r
import android.widget.TextView;\r
\r
public final class MonsterInfoActivity extends Activity {\r
- private WorldContext world;\r
- private Monster monster;\r
\r
@Override\r
public void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this);\r
- this.world = app.world;\r
+ final WorldContext world = app.world;\r
requestWindowFeature(Window.FEATURE_NO_TITLE);\r
\r
- final Intent intent = getIntent();\r
- final Bundle params = intent.getExtras();\r
- int x = params.getInt("x");\r
- int y = params.getInt("y");\r
- this.monster = world.model.currentMap.getMonsterAt(x, y);\r
- if (this.monster == null) {\r
+ final Monster monster = Dialogs.getMonsterFromIntent(getIntent(), world);\r
+ if (monster == null) {\r
finish();\r
return;\r
} \r
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
-import android.net.Uri;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.TabHost;
import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.ItemController;
-import com.gpl.rpg.AndorsTrail.model.actor.MonsterType;
+import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
import com.gpl.rpg.AndorsTrail.model.item.ItemContainer;
import com.gpl.rpg.AndorsTrail.model.item.ItemType;
-import com.gpl.rpg.AndorsTrail.model.item.Loot;
import com.gpl.rpg.AndorsTrail.view.ShopItemContainerAdapter;
import com.gpl.rpg.AndorsTrail.view.ShopItemContainerAdapter.OnContainerItemClickedListener;
AndorsTrailApplication.setWindowParameters(this, app.preferences);
- Uri uri = getIntent().getData();
- String monsterTypeID = uri.getLastPathSegment().toString();
- final MonsterType npcType = world.monsterTypes.getMonsterType(monsterTypeID);
-
+ final Monster npc = Dialogs.getMonsterFromIntent(getIntent(), world);
final Player player = world.model.player;
setContentView(R.layout.shop);
shoplist_buy = (ListView) h.findViewById(R.id.shop_buy_list);
shoplist_sell = (ListView) h.findViewById(R.id.shop_sell_list);
- Loot merchantLoot = new Loot();
- npcType.dropList.createRandomLoot(merchantLoot, player);
- container_buy = merchantLoot.items;
+ container_buy = npc.getShopItems(player);
shoplist_buy.setAdapter(new ShopItemContainerAdapter(
this
import com.gpl.rpg.AndorsTrail.controller.Constants;
import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.item.DropList;
+import com.gpl.rpg.AndorsTrail.model.item.ItemContainer;
import com.gpl.rpg.AndorsTrail.model.item.Loot;
import com.gpl.rpg.AndorsTrail.util.Coord;
import com.gpl.rpg.AndorsTrail.util.CoordRect;
public final String phraseID;
public final int exp;
public final DropList dropList;
+ private ItemContainer shopItems = null;
public Monster(MonsterType monsterType, Coord position) {
super(monsterType, false);
if (this.dropList == null) return;
this.dropList.createRandomLoot(container, player);
}
+ public ItemContainer getShopItems(Player player) {
+ if (shopItems != null) return shopItems;
+ Loot loot = new Loot();
+ shopItems = loot.items;
+ this.dropList.createRandomLoot(loot, player);
+ return shopItems;
+ }
+ public void resetShopItems() {
+ this.shopItems = null;
+ }
public boolean isAgressive() {
return phraseID == null || forceAggressive;
if (fileversion >= 12) {
m.forceAggressive = src.readBoolean();
}
+
+ if (fileversion >= 25) {
+ if (src.readBoolean()) {
+ m.shopItems = new ItemContainer(src, world, fileversion);
+ }
+ }
return m;
}
dest.writeInt(ap.current);
dest.writeInt(health.current);
dest.writeBoolean(forceAggressive);
+ if (shopItems != null) {
+ dest.writeBoolean(true);
+ shopItems.writeToParcel(dest, flags);
+ } else {
+ dest.writeBoolean(false);
+ }
}
}
monsters.clear();
quantity.current = 0;
}
+
+ public void resetShops() {
+ for (Monster m : monsters) {
+ m.resetShopItems();
+ }
+ }
// ====== PARCELABLE ===================================================================
// We reset all non-unique spawn areas. This keeps the savegame file smaller, thus reducing load and save times. Also keeps the running memory usage slightly lower.
for(MonsterSpawnArea a : spawnAreas) {
- if (!a.isUnique) a.reset();
+ if (a.isUnique) a.resetShops();
+ else a.reset();
}
lastVisitTime = VISIT_RESET;
}