package entity;
import java.util.LinkedHashMap;
import java.util.Map;
import core.Main;
public class SpellEntity extends DNDEntity{
String school;
//Map<String, Integer> level; //Key is what class can cast, level is what level the spell is for that class, map for multiple classes?
String components;
String castingTime;
String range;
String effect;
String duration;
String savingThrow;
boolean spellResistance;
String materialComponent;
String focus;
String damage;
String damageAlternate;
String[] level;
public SpellEntity(LinkedHashMap<String, String> input){
this.TYPE = DNDEntity.type.SPELL;
passedData = input;
for (Map.Entry<String, String> entry : input.entrySet()){
String field = entry.getKey();
String value = entry.getValue();
switch(field){
case "NAME":
this.name = value;
break;
case "COMPONENTS":
this.components = value;
break;
case "SCHOOL":
this.school = value;
break;
case "RANGE":
this.range = value;
break;
case "EFFECT":
this.effect = value;
break;
case "CASTINGTIME":
this.castingTime = value;
break;
case "DESCRIPTION":
this.description = value;
break;
case "MATERIALCOMPONENT":
this.materialComponent = value;
break;
case "SAVINGTHROW":
this.savingThrow = value;
break;
case "FOCUS":
this.focus = value;
break;
case "DURATION":
this.duration = value;
break;
case "LEVEL":
this.level = value.split(", ");
break;
case "SPELLRESISTANCE":
if(value.toUpperCase().contains("NO")){
this.spellResistance = false;
}
else
this.spellResistance = true;
break;
case "DAMAGE":
this.damage = value;
break;
case "DAMAGEALTERNATE":
this.damageAlternate = value;
break;
default:
break;
}
}
}
@Override
public void search(String searchString, Thread runningThread) throws InterruptedException {
if(this.name != null && this.name.toLowerCase().contains(searchString)){
Main.gameState.searchResultsLock.acquire();
//System.out.println("Lock aquired, adding " + this.name + " to results list.");
Main.gameState.searchResults.put(this.name, this);
Main.gameState.searchResultsLock.release();
//System.out.println("Lock released.");
return;
}
if(this.description != null && this.description.toLowerCase().contains(searchString)){
Main.gameState.searchResultsLock.acquire();
//System.out.println("Lock aquired, adding " + this.name + " to results list.");
Main.gameState.searchResults.put(this.name, this);
Main.gameState.searchResultsLock.release();
//System.out.println("Lock released.");
return;
}
if(this.effect != null && this.effect.toLowerCase().contains(searchString)){
Main.gameState.searchResultsLock.acquire();
//System.out.println("Lock aquired, adding " + this.name + " to results list.");
Main.gameState.searchResults.put(this.name, this);
Main.gameState.searchResultsLock.release();
//System.out.println("Lock released.");
return;
}
if(this.components != null && this.components.toLowerCase().contains(searchString)){
Main.gameState.searchResultsLock.acquire();
//System.out.println("Lock aquired, adding " + this.name + " to results list.");
Main.gameState.searchResults.put(this.name, this);
Main.gameState.searchResultsLock.release();
//System.out.println("Lock released.");
return;
}
if(this.school != null && this.school.toLowerCase().contains(searchString)){
Main.gameState.searchResultsLock.acquire();
//System.out.println("Lock aquired, adding " + this.name + " to results list.");
Main.gameState.searchResults.put(this.name, this);
Main.gameState.searchResultsLock.release();
//System.out.println("Lock released.");
return;
}
if(this.focus != null && this.focus.toLowerCase().contains(searchString)){
Main.gameState.searchResultsLock.acquire();
//System.out.println("Lock aquired, adding " + this.name + " to results list.");
Main.gameState.searchResults.put(this.name, this);
Main.gameState.searchResultsLock.release();
//System.out.println("Lock released.");
return;
}
if(this.materialComponent != null && this.materialComponent.toLowerCase().contains(searchString)){
Main.gameState.searchResultsLock.acquire();
//System.out.println("Lock aquired, adding " + this.name + " to results list.");
Main.gameState.searchResults.put(this.name, this);
Main.gameState.searchResultsLock.release();
//System.out.println("Lock released.");
return;
}
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String[] getLevel() {
return level;
}
public void setLevel(String[] level) {
this.level = level;
}
public String getComponents() {
return components;
}
public void setComponents(String components) {
this.components = components;
}
public String getCastingTime() {
return castingTime;
}
public void setCastingTime(String castingTime) {
this.castingTime = castingTime;
}
public String getRange() {
return range;
}
public void setRange(String range) {
this.range = range;
}
public String getEffect() {
return effect;
}
public void setEffect(String effect) {
this.effect = effect;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public String getSavingThrow() {
return savingThrow;
}
public void setSavingThrow(String savingThrow) {
this.savingThrow = savingThrow;
}
public boolean isSpellResistance() {
return spellResistance;
}
public void setSpellResistance(boolean spellResistance) {
this.spellResistance = spellResistance;
}
public String getMaterialComponent() {
return materialComponent;
}
public void setMaterialComponent(String materialComponent) {
this.materialComponent = materialComponent;
}
public String getFocus() {
return focus;
}
public void setFocus(String focus) {
this.focus = focus;
}
public String getDamage() {
return damage;
}
public void setDamage(String damage) {
this.damage = damage;
}
public String getDamageAlternate() {
return damageAlternate;
}
public void setDamageAlternate(String damageAlternate) {
this.damageAlternate = damageAlternate;
}
@Override
public String saveCustomContent() {
String output = this.oneTab + "<SPELL>\n";
output += this.twoTabs + "<NAME>\n";
output += this.threeTabs + this.name + "\n";
output += this.twoTabs + "</NAME>\n";
output += this.twoTabs + "<SCHOOL>\n";
output += this.threeTabs + this.school + "\n";
output += this.twoTabs + "</SCHOOL>\n";
output += this.twoTabs + "<LEVEL>\n";
output += this.threeTabs;
for(int i = 0; i < this.level.length; i++){
output += this.level[i];
if(i != this.level.length - 1)
output += ", ";
}
output += "\n";
output += this.twoTabs + "</LEVEL>\n";
output += this.twoTabs + "<COMPONENTS>\n";
output += this.threeTabs + this.components + "\n";
output += this.twoTabs + "</COMPONENTS>\n";
output += this.twoTabs + "<CASTINGTIME>\n";
output += this.threeTabs + this.castingTime + "\n";
output += this.twoTabs + "</CASTINGTIME>\n";
if(this.range != null){
output += this.twoTabs + "<RANGE>\n";
output += this.threeTabs + this.range + "\n";
output += this.twoTabs + "</RANGE>\n";
}
if(this.effect != null){
output += this.twoTabs + "<EFFECT>\n";
output += this.threeTabs + this.effect + "\n";
output += this.twoTabs + "</EFFECT>\n";
}
if(this.duration != null){
output += this.twoTabs + "<DURATION>\n";
output += this.threeTabs + this.duration + "\n";
output += this.twoTabs + "</DURATION>\n";
}
if(this.savingThrow != null){
output += this.twoTabs + "<SAVINGTHROW>\n";
output += this.threeTabs + this.savingThrow + "\n";
output += this.twoTabs + "</SAVINGTHROW>\n";
}
if(this.spellResistance == false){
output += this.twoTabs + "<SPELLRESISTANCE>\n";
output += this.threeTabs + "No\n";
output += this.twoTabs + "</SPELLRESISTANCE>\n";
}
if(this.materialComponent != null){
output += this.twoTabs + "<MATERIALCOMPONENT>\n";
output += this.threeTabs + this.materialComponent;
output += this.twoTabs + "</MATERIALCOMPONENT>\n";
}
if(this.focus != null){
output += this.twoTabs + "<FOCUS>\n";
output += this.threeTabs + this.focus;
output += this.twoTabs + "</FOCUS>\n";
}
if(this.damage != null){
output += this.twoTabs + "<DAMAGE>\n";
output += this.threeTabs + this.materialComponent;
output += this.twoTabs + "</DAMAGE>\n";
}
output += this.twoTabs + "<DESCRIPTION>\n";
output += this.threeTabs + this.description + "\n";
output += this.twoTabs + "</DESCRIPTION>\n";
output += this.oneTab + "</SPELL>\n";
return output;
}
}