Adds condition immunities to monster cards.

This commit is contained in:
2020-09-01 22:59:38 -07:00
parent aab146a724
commit 019199b8a9
4 changed files with 58 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ public class Monster {
mSavingThrows = new HashSet<>();
mSkills = new HashSet<>();
mDamageTypes = new HashSet<>();
mConditionImmunities = new HashSet<>();
}
private String mName;
@@ -667,4 +668,26 @@ public class Monster {
return StringHelper.oxfordJoin(", ", ", and ", " and ", vulnerabilities);
}
private HashSet<String> mConditionImmunities;
public Set<String> getConditionImmunities() {
return mConditionImmunities;
}
public void addConditionImmunity(String condition) {
// TODO: filter out duplicates
mConditionImmunities.add(condition);
}
public void removeConditionImmunity(String condition) {
// TODO: make sure this works even though we're using strings
mConditionImmunities.remove(condition);
}
public void clearConditionImmunities() {
mConditionImmunities.clear();
}
public String getConditionImmunitiesDescription() {
ArrayList<String> immunities = new ArrayList<>(getConditionImmunities());
Collections.sort(immunities);
return StringHelper.oxfordJoin(", ", ", and ", " and ", immunities);
}
}

View File

@@ -81,6 +81,8 @@ public class MonsterFragment extends Fragment {
monster.addDamageType(new DamageType("necrotic", " (Vulnerable)", "v"));
monster.addDamageType(new DamageType("piercing", " (Resistant)", "r"));
monster.addDamageType(new DamageType("poison", " (Immune)", "i"));
// Condition Immunities
monster.addConditionImmunity("blinded");
// Challenge Rating
monster.setChallengeRating("*");
@@ -244,6 +246,19 @@ public class MonsterFragment extends Fragment {
}
});
final TextView monsterConditionImmunities = root.findViewById(R.id.condition_immunities);
monsterViewModel.getConditionImmunities().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(String conditionImmunities) {
if (StringHelper.isNullOrEmpty(conditionImmunities)) {
monsterConditionImmunities.setVisibility(View.GONE);
} else {
monsterConditionImmunities.setVisibility(View.VISIBLE);
}
monsterConditionImmunities.setText(Html.fromHtml("<b>Condition Immunities</b> " + conditionImmunities));
}
});
return root;
}
}

View File

@@ -42,6 +42,8 @@ public class MonsterViewModel extends ViewModel {
mDamageResistances.setValue("");
mDamageImmunities = new MutableLiveData<>();
mDamageImmunities.setValue("");
mConditionImmunities = new MutableLiveData<>();
mConditionImmunities.setValue("");
}
private MutableLiveData<String> mName;
@@ -108,6 +110,10 @@ public class MonsterViewModel extends ViewModel {
public LiveData<String> getDamageImmunities() {
return mDamageImmunities;
}
private MutableLiveData<String> mConditionImmunities;
public LiveData<String> getConditionImmunities() {
return mConditionImmunities;
}
private Monster mMonster;
public void setMonster(Monster monster) {
@@ -128,6 +134,6 @@ public class MonsterViewModel extends ViewModel {
mDamageVulnerabilities.setValue(mMonster.getDamageVulnerabilitiesDescription());
mDamageResistances.setValue(mMonster.getDamageResistancesDescription());
mDamageImmunities.setValue(mMonster.getDamageImmunitiesDescription());
mConditionImmunities.setValue(mMonster.getConditionImmunitiesDescription());
}
}

View File

@@ -370,5 +370,18 @@
app:layout_constraintTop_toBottomOf="@+id/damage_resistances"
tools:text="Damage Immunities" />
<TextView
android:id="@+id/condition_immunities"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/damage_immunities"
tools:text="Condition Immunities" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>