Adds armor class and section divider to monster cards.
This commit is contained in:
@@ -4,6 +4,7 @@ import com.majinnaibu.monstercards.helpers.StringHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class Monster {
|
||||
|
||||
@@ -87,4 +88,200 @@ public class Monster {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public int getAbilityScore(String abilityScoreName) {
|
||||
if ("strength".equals(abilityScoreName) || "str".equals(abilityScoreName)) {
|
||||
return getStrengthScore();
|
||||
} else if ("dexterity".equals(abilityScoreName) || "dex".equals(abilityScoreName)) {
|
||||
return getDexterityScore();
|
||||
} else if ("constitution".equals(abilityScoreName) || "con".equals(abilityScoreName)) {
|
||||
return getConstitutionScore();
|
||||
} else if ("intelligence".equals(abilityScoreName) || "int".equals(abilityScoreName)) {
|
||||
return getIntelligenceScore();
|
||||
} else if ("wisdom".equals(abilityScoreName) || "wis".equals(abilityScoreName)) {
|
||||
return getWisdomScore();
|
||||
} else if ("charisma".equals(abilityScoreName) || "cha".equals(abilityScoreName)) {
|
||||
return getCharismaScore();
|
||||
} else {
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
|
||||
public static int getAbilityModifierForScore(int score) {
|
||||
return (int)Math.floor((score-10)/2.0);
|
||||
}
|
||||
|
||||
public int getAbilityModifier(String abilityScoreName) {
|
||||
int score = getAbilityScore(abilityScoreName);
|
||||
return getAbilityModifierForScore(score);
|
||||
}
|
||||
|
||||
private int mStrengthScore;
|
||||
public int getStrengthScore() {
|
||||
return mStrengthScore;
|
||||
}
|
||||
public void setStrengthScore(int value) {
|
||||
mStrengthScore = value;
|
||||
}
|
||||
public int getStrengthModifier() {
|
||||
return getAbilityModifierForScore(getStrengthScore());
|
||||
}
|
||||
|
||||
private int mDexterityScore;
|
||||
public int getDexterityScore() {
|
||||
return mDexterityScore;
|
||||
}
|
||||
public void setDexterityScore(int value) {
|
||||
mDexterityScore = value;
|
||||
}
|
||||
public int getDexterityModifier() {
|
||||
return getAbilityModifierForScore(getDexterityScore());
|
||||
}
|
||||
|
||||
private int mConstitutionScore;
|
||||
public int getConstitutionScore() {
|
||||
return mConstitutionScore;
|
||||
}
|
||||
public void setConstitutionScore(int value) {
|
||||
mConstitutionScore = value;
|
||||
}
|
||||
public int getConstitutionModifier() {
|
||||
return getAbilityModifierForScore(getConstitutionScore());
|
||||
}
|
||||
|
||||
private int mIntelligenceScore;
|
||||
public int getIntelligenceScore() {
|
||||
return mIntelligenceScore;
|
||||
}
|
||||
public void setIntelligenceScore(int value) {
|
||||
mIntelligenceScore = value;
|
||||
}
|
||||
public int getIntelligenceModifier() {
|
||||
return getAbilityModifierForScore(getIntelligenceScore());
|
||||
}
|
||||
|
||||
private int mWisdomScore;
|
||||
public int getWisdomScore() {
|
||||
return mWisdomScore;
|
||||
}
|
||||
public void setWisdomScore(int value) {
|
||||
mWisdomScore = value;
|
||||
}
|
||||
public int getWisdomModifier() {
|
||||
return getAbilityModifierForScore(getWisdomScore());
|
||||
}
|
||||
|
||||
private int mCharismaScore;
|
||||
public int getCharismaScore() {
|
||||
return mCharismaScore;
|
||||
}
|
||||
public void setCharismaScore(int value) {
|
||||
mCharismaScore = value;
|
||||
}
|
||||
public int getCharismaModifier() {
|
||||
return getAbilityModifierForScore(getCharismaScore());
|
||||
}
|
||||
|
||||
private String mArmorName;
|
||||
public String getArmorName() {
|
||||
return mArmorName;
|
||||
}
|
||||
public void setArmorName(String value) {
|
||||
mArmorName = value;
|
||||
}
|
||||
|
||||
private int mShieldBonus;
|
||||
public int getShieldBonus() {
|
||||
return mShieldBonus;
|
||||
}
|
||||
public void setShieldBonus(int value) {
|
||||
mShieldBonus = value;
|
||||
}
|
||||
|
||||
private int mNaturalArmorBonus;
|
||||
public int getNaturalArmorBonus() {
|
||||
return mNaturalArmorBonus;
|
||||
}
|
||||
public void setNaturalArmorBonus(int value) {
|
||||
mNaturalArmorBonus = value;
|
||||
}
|
||||
|
||||
private String mOtherArmorDescription;
|
||||
public String getOtherArmorDescription() {
|
||||
return mOtherArmorDescription;
|
||||
}
|
||||
public void setOtherArmorDescription(String value) {
|
||||
mOtherArmorDescription = value;
|
||||
}
|
||||
|
||||
public String getArmorClass() {
|
||||
boolean hasShield = getShieldBonus() != 0;
|
||||
String armorName = getArmorName();
|
||||
if (StringHelper.isNullOrEmpty(armorName) || "none".equals(armorName)) {
|
||||
// 10 + dexMod + 2 for shieldBonus "15" or "17 (shield)"
|
||||
return String.format(Locale.US, "%d%s", BASE_ARMOR_CLASS + getDexterityModifier() + getShieldBonus(), hasShield ? " (shield)" : "");
|
||||
} else if("natural armor".equals(armorName)) {
|
||||
// 10 + dexMod + naturalArmorBonus + 2 for shieldBonus "16 (natural armor)" or "18 (natural armor, shield)"
|
||||
return String.format(Locale.US, "%d (natural armor%s)", BASE_ARMOR_CLASS + getDexterityModifier() + getNaturalArmorBonus() + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("mage armor".equals(armorName)) {
|
||||
// 10 + dexMod + 2 for shield + 3 for mage armor "15 (18 with mage armor)" or 17 (shield, 20 with mage armor)
|
||||
return String.format(Locale.US, "%d (%s%d with mage armor)", BASE_ARMOR_CLASS + getDexterityModifier() + getShieldBonus(), hasShield ? "shield, " : "", MAGE_ARMOR_ARMOR_CLASS + getDexterityModifier() + getShieldBonus());
|
||||
} else if ("padded".equals(armorName)) {
|
||||
// 11 + dexMod + 2 for shield "18 (padded armor, shield)"
|
||||
return String.format(Locale.US, "%d (padded%s)", PADDED_ARMOR_ARMOR_CLASS + getDexterityModifier() + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("leather".equals(armorName)) {
|
||||
// 11 + dexMod + 2 for shield "18 (leather, shield)"
|
||||
return String.format(Locale.US, "%d (leather%s)", LEATHER_ARMOR_CLASS + getDexterityModifier() + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("studded".equals(armorName)) {
|
||||
// 12 + dexMod +2 for shield "17 (studded leather)"
|
||||
return String.format(Locale.US, "%d (studded leather%s)", STUDDED_LEATHER_ARMOR_CLASS + getDexterityModifier() + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("hide".equals(armorName)) {
|
||||
// 12 + Min(2, dexMod) + 2 for shield "12 (hide armor)"
|
||||
return String.format(Locale.US, "%d (hide%s)", HIDE_ARMOR_CLASS + Math.min(2, getDexterityModifier()) + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("chain shirt".equals(armorName)) {
|
||||
// 13 + Min(2, dexMod) + 2 for shield "12 (chain shirt)"
|
||||
return String.format(Locale.US, "%d (chain shirt%s)", CHAIN_SHIRT_ARMOR_CLASS + Math.min(2, getDexterityModifier()) + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("scale mail".equals(armorName)) {
|
||||
// 14 + Min(2, dexMod) + 2 for shield "14 (scale mail)"
|
||||
return String.format(Locale.US, "%d (scale mail%s)", SCALE_MAIL_ARMOR_CLASS + Math.min(2, getDexterityModifier()) + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("breastplate".equals(armorName)) {
|
||||
// 14 + Min(2, dexMod) + 2 for shield "16 (breastplate)"
|
||||
return String.format(Locale.US, "%d (breastplate%s)", BREASTPLATE_ARMOR_CLASS +Math.min(2, getDexterityModifier()) + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("half plate".equals(armorName)) {
|
||||
// 15 + Min(2, dexMod) + 2 for shield "17 (half plate)"
|
||||
return String.format(Locale.US, "%d (half plate%s)", HALF_PLATE_ARMOR_CLASS + Math.min(2, getDexterityModifier()) + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("ring mail".equals(armorName)) {
|
||||
// 14 + 2 for shield "14 (ring mail)
|
||||
return String.format(Locale.US, "%d (ring mail%s)", RING_MAIL_ARMOR_CLASS + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("chain mail".equals(armorName)) {
|
||||
// 16 + 2 for shield "16 (chain mail)"
|
||||
return String.format(Locale.US, "%d (chain mail%s)", CHAIN_MAIL_ARMOR_CLASS + getShieldBonus(), hasShield ? ", shield" : "");
|
||||
} else if ("splint".equals(armorName)) {
|
||||
// 17 + 2 for shield "17 (splint)"
|
||||
return String.format(Locale.US, "%d (splint%s)", SPLINT_ARMOR_CLASS + getShieldBonus(), hasShield ? ", shield": "");
|
||||
} else if ("plate".equals(armorName)) {
|
||||
// 18 + 2 for shield "18 (plate)"
|
||||
return String.format(Locale.US, "%d (plate%s)", PLATE_ARMOR_CLASS + getShieldBonus(), hasShield ? ", shield": "");
|
||||
} else if ("other".equals(armorName)) {
|
||||
// pure string value shield check does nothing just copies the string from otherArmorDesc
|
||||
return getOtherArmorDescription();
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
private static final int BASE_ARMOR_CLASS = 10;
|
||||
private static final int MAGE_ARMOR_ARMOR_CLASS = BASE_ARMOR_CLASS + 3;
|
||||
private static final int PADDED_ARMOR_ARMOR_CLASS = BASE_ARMOR_CLASS + 1;
|
||||
private static final int LEATHER_ARMOR_CLASS = BASE_ARMOR_CLASS + 1;
|
||||
private static final int STUDDED_LEATHER_ARMOR_CLASS = BASE_ARMOR_CLASS + 2;
|
||||
private static final int HIDE_ARMOR_CLASS = BASE_ARMOR_CLASS + 2;
|
||||
private static final int CHAIN_SHIRT_ARMOR_CLASS = BASE_ARMOR_CLASS + 3;
|
||||
private static final int SCALE_MAIL_ARMOR_CLASS = BASE_ARMOR_CLASS + 4;
|
||||
private static final int BREASTPLATE_ARMOR_CLASS = BASE_ARMOR_CLASS + 4;
|
||||
private static final int HALF_PLATE_ARMOR_CLASS = BASE_ARMOR_CLASS + 5;
|
||||
private static final int RING_MAIL_ARMOR_CLASS = BASE_ARMOR_CLASS + 4;
|
||||
private static final int CHAIN_MAIL_ARMOR_CLASS = BASE_ARMOR_CLASS + 6;
|
||||
private static final int SPLINT_ARMOR_CLASS = BASE_ARMOR_CLASS + 7;
|
||||
private static final int PLATE_ARMOR_CLASS = BASE_ARMOR_CLASS + 8;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.majinnaibu.monstercards.ui.monster;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.Html;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -32,6 +33,11 @@ public class MonsterFragment extends Fragment {
|
||||
monster.setType("fey");
|
||||
monster.setTag("");
|
||||
monster.setAlignment("neutral good");
|
||||
// Armor & Armor Class
|
||||
monster.setArmorName("none");
|
||||
monster.setShieldBonus(0);
|
||||
monster.setNaturalArmorBonus(7);
|
||||
monster.setOtherArmorDescription("14");
|
||||
// END remove block
|
||||
monsterViewModel = new ViewModelProvider(this).get(MonsterViewModel.class);
|
||||
View root = inflater.inflate(R.layout.fragment_monster, container, false);
|
||||
@@ -48,8 +54,16 @@ public class MonsterFragment extends Fragment {
|
||||
final TextView monsterMeta = root.findViewById(R.id.meta);
|
||||
monsterViewModel.getMeta().observe(getViewLifecycleOwner(), new Observer<String>() {
|
||||
@Override
|
||||
public void onChanged(@Nullable String s) {
|
||||
monsterMeta.setText(s);
|
||||
public void onChanged(@Nullable String metaText) {
|
||||
monsterMeta.setText(metaText);
|
||||
}
|
||||
});
|
||||
|
||||
final TextView monsterArmorClass = root.findViewById(R.id.armor_class);
|
||||
monsterViewModel.getArmorClass().observe(getViewLifecycleOwner(), new Observer<String>() {
|
||||
@Override
|
||||
public void onChanged(@Nullable String armorText) {
|
||||
monsterArmorClass.setText(Html.fromHtml("<b>Armor Class</b> " + armorText));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ public class MonsterViewModel extends ViewModel {
|
||||
mName.setValue("");
|
||||
mMeta = new MutableLiveData<>();
|
||||
mMeta.setValue("");
|
||||
mArmorClass = new MutableLiveData<>();
|
||||
mArmorClass.setValue("");
|
||||
|
||||
}
|
||||
|
||||
private MutableLiveData<String> mName;
|
||||
@@ -24,11 +27,16 @@ public class MonsterViewModel extends ViewModel {
|
||||
public LiveData<String> getMeta() {
|
||||
return mMeta;
|
||||
}
|
||||
private MutableLiveData<String> mArmorClass;
|
||||
public LiveData<String> getArmorClass() {
|
||||
return mArmorClass;
|
||||
}
|
||||
|
||||
private Monster mMonster;
|
||||
public void setMonster(Monster monster) {
|
||||
mMonster = monster;
|
||||
mName.setValue(mMonster.getName());
|
||||
mMeta.setValue(mMonster.getMeta());
|
||||
mArmorClass.setValue(mMonster.getArmorClass());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user