/**
* Copyright (C) 2013 Gundog Studios LLC.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.godsandtowers.billing.amazon;
import java.util.HashMap;
import java.util.HashSet;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import com.amazon.inapp.purchasing.PurchasingManager;
import com.godsandtowers.R;
import com.godsandtowers.billing.PurchaseItem;
import com.godsandtowers.billing.PurchaseItem.SKU;
import com.godsandtowers.core.PlayerStats;
import com.godsandtowers.sprites.BaseCreature;
import com.godsandtowers.sprites.BasePlayer;
import com.godsandtowers.sprites.BaseRace;
import com.godsandtowers.sprites.BaseSpecial;
import com.godsandtowers.sprites.BaseTower;
import com.godsandtowers.sprites.Races;
import com.gundogstudios.modules.Modules;
import com.gundogstudios.modules.PurchaseModule;
public class AmazonPurchaser implements PurchaseModule {
private static final String TAG = "AmazonPurchaser";
private HashMap<String, PurchaseItem> purchaseItems;
private PlayerStats stats;
private Activity activity;
private String payload;
public AmazonPurchaser() {
}
@Override
public void restoreTransactions() {
HashSet<String> skus = new HashSet<String>();
skus.add(SKU.MULTIPLE_RACES.toString());
try {
PurchasingManager.initiateItemDataRequest(skus);
} catch (Exception e) {
Modules.LOG.error(TAG, e.toString());
}
}
@Override
public void purchase(String itemId, String payload) {
try {
if (itemId.equals(SKU.UPGRADE_ONE_RACE))
this.payload = payload;
PurchasingManager.initiatePurchaseRequest(itemId);
} catch (Exception e) {
Modules.LOG.error(TAG, e.toString());
}
}
@Override
public void purchased(String itemId, String unusedPayload) {
PurchaseItem item = purchaseItems.get(itemId);
if (item == null) {
Modules.LOG.error(TAG, "Unable to locate purchase item");
return;
}
Modules.LOG.info(TAG, "Purchased: " + itemId);
switch (item.getSku()) {
case MULTIPLE_RACES:
purchasedMultipleRaces();
break;
case SPECIAL_100:
purchasedSpecial100();
break;
case UPGRADE_ALL:
purchasedUpgradeAll();
break;
case UPGRADE_ONE_RACE:
purchasedUpgradeOneRace(payload);
break;
case UPGRADE_ABILITIES:
purchasedUpgradeAbilities();
break;
case DOUBLE_EXPERIENCE:
purchasedDoubleExperience();
break;
default:
Modules.LOG.error(TAG, "Unknown name ID: " + item.getSku());
}
}
@Override
public void destroy() {
}
private Dialog createDialog(int titleId, int messageId) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(titleId).setIcon(android.R.drawable.stat_sys_warning).setMessage(messageId)
.setCancelable(false).setPositiveButton(android.R.string.ok, null);
return builder.create();
}
private void purchasedDoubleExperience() {
stats.doubleExperience();
}
private void purchasedMultipleRaces() {
stats.unlockMultipleRaces();
}
private void purchasedSpecial100() {
for (BaseSpecial special : stats.getSpecials())
for (int i = 0; i < 100; i++)
special.upgrade(0);
}
private void purchasedUpgradeAll() {
for (BaseCreature creature : stats.getBaseCreatures()) {
for (int id : creature.getUpgradeIDs()) {
creature.upgrade(id);
}
}
for (BaseTower tower : stats.getBaseTowers()) {
for (int id : tower.getUpgradeIDs()) {
tower.upgrade(id);
}
}
}
private void purchasedUpgradeOneRace(String payload) {
int race = Integer.parseInt(payload);
for (BaseCreature creature : stats.getBaseCreatures()) {
if (Races.isRaces(creature.getRaces(), race)) {
for (int id : creature.getUpgradeIDs()) {
creature.upgrade(id);
}
}
}
for (BaseTower tower : stats.getBaseTowers()) {
if (Races.isRaces(tower.getRaces(), race)) {
for (int id : tower.getUpgradeIDs()) {
tower.upgrade(id);
}
}
}
}
private void purchasedUpgradeAbilities() {
BasePlayer player = stats.getBasePlayer();
for (int id : player.getUpgradeIDs()) {
player.upgrade(id);
}
BaseRace race = stats.getBaseRace();
for (int id : race.getUpgradeIDs()) {
race.upgrade(id);
}
}
@Override
public void init(Object... args) {
this.activity = (Activity) args[0];
this.stats = (PlayerStats) args[1];
try {
PurchaseObserver buttonClickerObserver = new PurchaseObserver(activity, this);
PurchasingManager.registerObserver(buttonClickerObserver);
PurchasingManager.initiateGetUserIdRequest();
purchaseItems = new HashMap<String, PurchaseItem>();
for (PurchaseItem item : PurchaseItem.getPurchaseItems()) {
purchaseItems.put(item.getSku().toString(), item);
}
} catch (Exception e) {
Modules.LOG.error(TAG, e.toString());
createDialog(R.string.purchase_cannot_connect_title, R.string.purchase_cannot_connect_message).show();
}
}
}