package br.com.while42.rpgcs.model.equip.weapons;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import br.com.while42.rpgcs.model.HitDice;
public class BasicWeapon implements Weapon {
private static final long serialVersionUID = 1L;
private final int codeName;
private final int codeImage;
private SizeWeapon size;
private Long cost = 0L;
private Map<SizeWeapon, List<HitDice>> damage = new HashMap<SizeWeapon, List<HitDice>>();
private Integer critical = 0;
private Integer rangeIncrement = 0;
private Double weight = 0.0;
private Set<TypeWeapon> types = new HashSet<TypeWeapon>();
private CategorieWeapon categorie = null;
private CategorieUsefulnessWeapon categorieUsefulness = null;
private CategorieEncumbranceWeapon categorieEncumbrance = null;
private String description = "";
private Boolean equiped = false;
public BasicWeapon(BasicWeapon basic) {
codeName = basic.codeName;
codeImage = basic.codeImage;
size = basic.size;
cost = basic.cost;
damage = new HashMap<SizeWeapon, List<HitDice>>(basic.damage);
critical = basic.critical;
rangeIncrement = basic.rangeIncrement;
weight = basic.weight;
types = new HashSet<TypeWeapon>(basic.types);
categorie = basic.categorie;
categorieUsefulness = basic.categorieUsefulness;
categorieEncumbrance = basic.categorieEncumbrance;
description = basic.description;
equiped = basic.equiped;
}
public BasicWeapon(int codeName, int codeImage) {
this.codeName = codeName;
this.codeImage = codeImage;
this.size = SizeWeapon.MEDIUM;
}
@Override
public Long getCost() {
return cost;
}
public void setCost(Long cost) {
this.cost = cost;
}
@Override
public void setSize(SizeWeapon size) {
this.size = size;
}
@Override
public SizeWeapon getSize() {
return size;
}
@Override
public List<HitDice> getDamage() {
return getDamage(size);
}
@Override
public List<HitDice> getDamage(SizeWeapon size) {
return Collections.unmodifiableList(damage.get(size));
}
public void addDamage(SizeWeapon size, HitDice hitDice) {
if (!damage.containsKey(size)) {
damage.put(size, new ArrayList<HitDice>());
}
damage.get(size).add(hitDice);
}
public void clearDamage() {
damage.clear();
}
@Override
public Integer getCritical() {
return critical;
}
public void setCritical(Integer critical) {
this.critical = critical;
}
@Override
public Integer getRangeIncrement() {
return rangeIncrement;
}
public void setRangeIncrement(Integer rangeIncrement) {
this.rangeIncrement = rangeIncrement;
}
@Override
public Double getWeight() {
return weight;
}
public void setWeight(Double weight) {
this.weight = weight;
}
@Override
public Set<TypeWeapon> getType() {
return Collections.unmodifiableSet(types);
}
public void addType(TypeWeapon type) {
this.types.add(type);
}
public void addType(Set<TypeWeapon> types) {
this.types.addAll(types);
}
public void clearTypes() {
types.clear();
}
@Override
public int getCodeName() {
return codeName;
}
@Override
public int getCodeImage() {
return codeImage;
};
public void setCategorie(CategorieWeapon categorie) {
this.categorie = categorie;
}
@Override
public CategorieWeapon getCategorie() {
return categorie;
}
public void setCategorieUsefulness(CategorieUsefulnessWeapon categorieUsefulness) {
this.categorieUsefulness = categorieUsefulness;
}
@Override
public CategorieUsefulnessWeapon getCategorieUsefulness() {
return categorieUsefulness;
}
public void setCategorieEncumbrance(CategorieEncumbranceWeapon categorieEncumbrance) {
this.categorieEncumbrance = categorieEncumbrance;
}
@Override
public CategorieEncumbranceWeapon getCategorieEncumbrance() {
return categorieEncumbrance;
}
@Override
public String getDescription() {
return description;
}
@Override
public void setEquiped(Boolean equiped) {
this.equiped = equiped;
}
@Override
public Boolean isEquiped() {
return equiped;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof BasicWeapon))
return false;
BasicWeapon bw = (BasicWeapon) o;
return codeName == bw.codeName &&
size.equals(bw.size) &&
cost.equals(bw.cost) &&
damage.equals(bw.damage) &&
critical.equals(bw.critical) &&
rangeIncrement.equals(bw.rangeIncrement) &&
weight.equals(bw.weight) &&
types.equals(bw.types) &&
((categorie == null && bw.categorie == null) || categorie.equals(bw.categorie)) &&
((categorieUsefulness == null && bw.categorieUsefulness == null) || categorieUsefulness.equals(bw.categorieUsefulness)) &&
((categorieEncumbrance == null && bw.categorieEncumbrance == null) || categorieEncumbrance.equals(bw.categorieEncumbrance)) &&
description.equals(bw.description) &&
equiped.equals(bw.equiped);
}
@Override
public int hashCode() {
return codeName + size.hashCode() + cost.intValue() + damage.hashCode() + critical.intValue() + rangeIncrement.intValue() + weight.intValue() + types.hashCode() + description.hashCode() + equiped.hashCode();
}
}