package com.vdom.comms;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Comparator;
import com.vdom.core.Cards;
import com.vdom.core.Util.MultilevelComparator;
public class MyCard implements Serializable {
private static final long serialVersionUID = -1367468781663470597L;
public int id;
public String name;
public String expansion;
public String originalExpansion;
public String desc;
public String originalSafeName;
public String originalName;
public int cost = 0;
public boolean costPotion = false;
public int vp = 0;
public int gold = 0;
public boolean isVictory = false;
public boolean isCurse = false;
public boolean isTreasure = false;
public boolean isAction = false;
public boolean isReaction = false;
public boolean isAttack = false;
public boolean isDuration = false;
public boolean isPrize = false;
public boolean isPotion = false;
public boolean isBane = false;
public boolean isShelter = false;
public boolean isRuins = false;
public boolean isLooter = false;
public boolean isKnight = false;
public boolean isOverpay = false;
public static final int SUPPLYPILE = 1;
public static final int MONEYPILE = 2;
public static final int VPPILE = 3;
public static final int PRIZEPILE = 4;
public static final int NON_SUPPLY_PILE = 5; // Used for DA cards (for now)
public static final int SHELTER_PILES = 6;
public static final int RUINS_PILES = 7;
public static final int KNIGHTS_PILES = 8;
public int pile;
public MyCard(int id, String name, String originalSafeName, String originalName) {
this.id = id;
this.name = name;
this.originalSafeName = originalSafeName;
this.originalName = originalName;
this.isKnight = originalName.equals("VirtualKnight");
}
/* This method is now unused. It had been copied to CardView.java
* to simplify card type internationalization.
*/
public String GetCardTypeString()
{
String cardType = "";
if (isAction)
{
cardType += "Action ";
if (isAttack)
{
cardType += "- Attack ";
}
if (isLooter)
{
cardType += "- Looter ";
}
if (isRuins)
{
cardType += "- Ruins ";
}
if (isPrize)
{
cardType += "- Prize ";
}
if (isReaction)
{
cardType += "- Reaction ";
}
if (isDuration)
{
cardType += "- Duration ";
}
if (isVictory)
{
cardType += "- Victory ";
}
if (isKnight)
{
cardType += "- Knight ";
}
if (isShelter)
{
cardType += "- Shelter";
}
}
else if (isTreasure)
{
cardType += "Treasure ";
if (isVictory)
{
cardType += "- Victory ";
}
if (isReaction)
{
cardType += "- Reaction ";
}
if (isPrize)
{
cardType += "- Prize ";
}
}
else if (isVictory)
{
cardType += "Victory ";
if (isShelter)
{
cardType += "- Shelter";
}
if (isReaction)
{
cardType += "- Reaction";
}
}
else if (name.equalsIgnoreCase("hovel"))
{
cardType += "Reaction - Shelter";
}
return cardType;
}
public String toString() {
return "Card #" + id + " (" + cost + ") " + name + ": " + desc;
}
static public class CardNameComparator implements Comparator<MyCard> {
@Override
public int compare(MyCard card0, MyCard card1) {
return card0.name.compareTo(card1.name);
}
}
static public class CardCostComparator implements Comparator<MyCard> {
@Override
public int compare(MyCard card0, MyCard card1) {
if(card0.cost < card1.cost) {
return -1;
} else if(card0.cost > card1.cost) {
return 1;
} else if(card0.isKnight) {
return -1;
} else if(card1.isKnight) {
return 1;
} else {
return 0;
}
}
}
static public class CardPotionComparator implements Comparator<MyCard> {
@Override
public int compare(MyCard card0, MyCard card1) {
if(card0.costPotion) {
if(card1.costPotion) {
return 0;
} else {
return 1;
}
} else if(card1.costPotion) {
return -1;
} else {
return 0;
}
}
}
static public class CardTypeComparator implements Comparator<MyCard> {
@Override
public int compare(MyCard card0, MyCard card1) {
if(card0.isAction) {
if(card1.isAction) {
return 0;
} else {
return -1;
}
} else if(card1.isAction) {
return 1;
} else if(card0.isTreasure || card0.isPotion) {
if(card1.isTreasure || card1.isPotion) {
return 0;
} else {
return -1;
}
} else if(card1.isTreasure || card1.isPotion) {
return 1;
} else {
return 0;
}
}
}
/**
* Comparator for sorting cards by cost, potion and then by name
* Used for sorting on table
*/
static public class CardCostNameComparator extends MultilevelComparator<MyCard> {
private static final ArrayList<Comparator<MyCard>> cmps = new ArrayList<Comparator<MyCard>>();
static {
cmps.add(new CardCostComparator());
cmps.add(new CardPotionComparator());
cmps.add(new CardNameComparator());
}
public CardCostNameComparator() {
super(cmps);
}
}
/**
* Comparator for sorting cards in hand.
* Sort by type then by cost and last by name
*/
static public class CardHandComparator extends MultilevelComparator<MyCard> {
private static final ArrayList<Comparator<MyCard>> cmps = new ArrayList<Comparator<MyCard>>();
static {
cmps.add(new CardTypeComparator());
cmps.add(new CardCostComparator());
cmps.add(new CardNameComparator());
}
public CardHandComparator() {
super(cmps);
}
}
}