214 lines
7.2 KiB
Java
214 lines
7.2 KiB
Java
package at.reisinger;
|
|
|
|
import at.reisinger.server.helper.EnumHelper;
|
|
import com.fasterxml.jackson.annotation.*;
|
|
|
|
/**
|
|
* Object einer at.reisinger.Card
|
|
*/
|
|
@JsonAutoDetect
|
|
public class Card {
|
|
@JsonProperty
|
|
private String name;
|
|
@JsonProperty
|
|
private double damage;
|
|
@JsonProperty
|
|
private ElementTyp elementTyp;
|
|
@JsonProperty
|
|
private CardType cardType;
|
|
@JsonProperty
|
|
private boolean locked;
|
|
|
|
/**
|
|
* Erstellt eine neue at.reisinger.Card mit gegebenen Eigenschaften
|
|
* @param name Name der at.reisinger.Card
|
|
* @param damage Damage den die at.reisinger.Card macht
|
|
* @param elementTyp ElementType der at.reisinger.Card
|
|
* @param cardType at.reisinger.CardType der at.reisinger.Card
|
|
*/
|
|
public Card(String name, double damage, ElementTyp elementTyp, CardType cardType) {
|
|
this.name = name;
|
|
this.damage = damage;
|
|
this.elementTyp = elementTyp;
|
|
this.cardType = cardType;
|
|
}
|
|
|
|
/**
|
|
* Erstellt eine neue Card mit, anhand des cardNamen werden der ElementType und der CardType automatisch bestimmt
|
|
* @param name Name der Card (ID)
|
|
* @param elementCardTyp ElementTyp und CardType in einem String. Beide Enums werden durch diesen String gewählt.
|
|
* Wird kein passender Typ gefunden, dann bleibt diese Eigenschaft auf null
|
|
* @param damage Damage der Card
|
|
*/
|
|
@JsonCreator
|
|
public Card(@JsonProperty("Id") String name, @JsonProperty("Name") String elementCardTyp, @JsonProperty("Damage") double damage){
|
|
CardType tmpCard = EnumHelper.stringToCardType(elementCardTyp);
|
|
ElementTyp tmpElement = null;
|
|
if(tmpCard == null){
|
|
tmpCard = CardType.UNDEF;
|
|
}
|
|
|
|
//Spezialkarten die kein element besitzen, bekommen hier ihr natürliches element zugewiesen
|
|
if (tmpCard.name().toLowerCase().equals("dragon")){
|
|
tmpElement = ElementTyp.FIRE;
|
|
}else if (tmpCard.name().toLowerCase().equals("ork")){
|
|
tmpElement = ElementTyp.REGULAR;
|
|
}
|
|
else if (tmpCard.name().toLowerCase().equals("wizzard")){
|
|
tmpElement = ElementTyp.REGULAR;
|
|
}else if (tmpCard.name().toLowerCase().equals("kraken")){
|
|
tmpElement = ElementTyp.WATER;
|
|
}else if (tmpCard.name().toLowerCase().equals("elf")){
|
|
tmpElement = ElementTyp.REGULAR;
|
|
}else if (tmpCard.name().toLowerCase().equals("goblin")){
|
|
tmpElement = ElementTyp.REGULAR;
|
|
}else if (tmpCard.name().toLowerCase().equals("troll")){
|
|
tmpElement = ElementTyp.REGULAR;
|
|
}else if (tmpCard.name().toLowerCase().equals("knight")){
|
|
tmpElement = ElementTyp.REGULAR;
|
|
}else if (tmpCard.name().toLowerCase().equals("fireelves")){
|
|
tmpElement = ElementTyp.FIRE;
|
|
}
|
|
|
|
if(tmpElement == null){
|
|
tmpElement = EnumHelper.stringToElementType(elementCardTyp);
|
|
//Deutsch übersetzung
|
|
if (tmpElement.name().toLowerCase().equals("feuer")){
|
|
tmpElement = ElementTyp.FIRE;
|
|
}else if (tmpElement.name().toLowerCase().equals("wasser")){
|
|
tmpElement = ElementTyp.WATER;
|
|
}else if (tmpElement.name().toLowerCase().equals("normal")){
|
|
tmpElement = ElementTyp.REGULAR;
|
|
}
|
|
if(tmpElement == null) {
|
|
tmpElement = ElementTyp.UNDEF;
|
|
}
|
|
}
|
|
this.name = name;
|
|
this.damage = damage;
|
|
this.elementTyp = tmpElement;
|
|
this.cardType = tmpCard;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Prüft ob die Karte gesperrt ist
|
|
* @return True wenn die Karte gesperrt ist
|
|
*/
|
|
public boolean isLocked() {
|
|
return locked;
|
|
}
|
|
|
|
/**
|
|
* Setzt die sperre der Karte
|
|
* @param locked True bedeuted gesperrt
|
|
*/
|
|
public void setLocked(boolean locked) {
|
|
this.locked = locked;
|
|
}
|
|
|
|
/**
|
|
* Holt den Namen der at.reisinger.Card
|
|
* @return Name der at.reisinger.Card
|
|
*/
|
|
@JsonGetter
|
|
public String getName() {
|
|
return this.name;
|
|
}
|
|
|
|
/**
|
|
* Holt den Damage der at.reisinger.Card
|
|
* @return Damage der at.reisinger.Card
|
|
*/
|
|
@JsonGetter
|
|
public double getDamage() {
|
|
return this.damage;
|
|
}
|
|
|
|
/**
|
|
* Holt den ElementType der at.reisinger.Card
|
|
* @return ElementType der at.reisinger.Card
|
|
*/
|
|
@JsonGetter
|
|
public ElementTyp getElementTyp() {
|
|
return this.elementTyp;
|
|
}
|
|
|
|
/**
|
|
* Holt den at.reisinger.CardType der at.reisinger.Card
|
|
* @return at.reisinger.CardType der at.reisinger.Card
|
|
*/
|
|
@JsonGetter
|
|
public CardType getCardType() {
|
|
return this.cardType;
|
|
}
|
|
|
|
/**
|
|
* Berechnet die Wirksamkeit gegen eine Andere card. Die at.reisinger.Card im Parameter wird angegriffen
|
|
* @param toCeck at.reisinger.Card gegen welche die Wirksamkeit geprüft werden soll
|
|
* @return Gibt die Wirksamkeit zurück
|
|
* @throws InternalError Wenn die Effectifeness von den 2 at.reisinger.Cards nicht berechnet werden kann
|
|
*/
|
|
@JsonGetter
|
|
public EffectivnessType getEffectivenessAgainst(Card toCeck) {
|
|
if(toCeck.getCardType() == CardType.MONSTER){
|
|
if(this.cardType == CardType.MONSTER){
|
|
return EffectivnessType.NOEFFECT;
|
|
}else if (this.cardType == CardType.SPELL){
|
|
|
|
}
|
|
}else if (toCeck.getCardType() == CardType.SPELL){
|
|
if ((toCeck.getElementTyp() == ElementTyp.FIRE && this.elementTyp == ElementTyp.WATER) || (toCeck.getElementTyp() == ElementTyp.NORMAL && this.elementTyp == ElementTyp.FIRE) || (toCeck.getElementTyp() == ElementTyp.WATER && this.elementTyp == ElementTyp.NORMAL)){
|
|
return EffectivnessType.EFFECTIVE;
|
|
}else if (this.elementTyp == ElementTyp.FIRE && toCeck.getElementTyp() == ElementTyp.WATER){
|
|
return EffectivnessType.NOTEFFECTIVE;
|
|
}else if ((toCeck.getElementTyp() == ElementTyp.NORMAL && this.cardType == CardType.MONSTER && this.elementTyp == ElementTyp.NORMAL)){
|
|
return EffectivnessType.NOEFFECT;
|
|
}
|
|
}
|
|
throw new InternalError("Konnte die Effectiveness von den at.reisinger.Cards nicht berechnen");
|
|
}
|
|
|
|
/**
|
|
* Setztden namen der at.reisinger.Card
|
|
* @param neuerName Name der at.reisinger.Card
|
|
*/
|
|
@JsonSetter
|
|
public void setName(String neuerName) {
|
|
this.name = neuerName;
|
|
}
|
|
|
|
/**
|
|
* Setzt den Damage der at.reisinger.Card
|
|
* @param damage Der Damage
|
|
*/
|
|
@JsonSetter
|
|
public void setDamage(int damage) {
|
|
this.damage = damage;
|
|
}
|
|
|
|
/**
|
|
* Setzt den ElementType der at.reisinger.Card
|
|
* @param elementTyp Der ElementType
|
|
*/
|
|
@JsonSetter
|
|
public void setElementType(ElementTyp elementTyp) {
|
|
this.elementTyp = elementTyp;
|
|
}
|
|
|
|
/**
|
|
* Testet ob die beiden Karten gleich sind
|
|
* @param card at.reisinger.Card die geprüft werden soll
|
|
* @return True wenn die Karten übereinstimmen
|
|
*/
|
|
public boolean equals(Card card){
|
|
if(card == null) return false;
|
|
if(this.name == card.getName() && this.cardType == card.getCardType() && this.elementTyp == card.getElementTyp() && this.damage == card.getDamage()){
|
|
return true;
|
|
}else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|