Adds senses to monster cards.

This commit is contained in:
2020-09-01 23:05:26 -07:00
parent 019199b8a9
commit 4965151a8f
4 changed files with 122 additions and 0 deletions

View File

@@ -690,4 +690,84 @@ public class Monster {
return StringHelper.oxfordJoin(", ", ", and ", " and ", immunities); return StringHelper.oxfordJoin(", ", ", and ", " and ", immunities);
} }
private String mBlindsight;
public String getBlindsight() {
return mBlindsight;
}
public void setBlindsight(String value) {
mBlindsight = value;
}
private boolean mIsBlind;
public boolean getIsBlind() {
return mIsBlind;
}
public void setIsBlind(boolean value) {
mIsBlind = value;
}
private String mDarkvision;
public String getDarkvision() {
return mDarkvision;
}
public void setDarkvision(String value) {
mDarkvision = value;
}
private String mTremorsense;
public String getTremorsense() {
return mTremorsense;
}
public void setTremorsense(String value) {
mTremorsense = value;
}
private String mTruesight;
public String getTruesight() {
return mTruesight;
}
public void setTruesight(String value) {
mTruesight = value;
}
private int mTelepathy;
public int getTelepathy() {
return mTelepathy;
}
public void setTelepathy(int value) {
mTelepathy = value;
}
private String mUnderstandsBut;
public String getUnderstandsBut() {
return mUnderstandsBut;
}
public void setUnderstandsBut(String value) {
mUnderstandsBut = value;
}
public String getSensesDescription() {
ArrayList<String> parts = new ArrayList<>();
String blindsight = getBlindsight();
if (!StringHelper.isNullOrEmpty(blindsight) && !"0".equals(blindsight)) {
parts.add(String.format(Locale.US, "blindsight %s ft.%s", blindsight, getIsBlind() ? " (blind beyond this radius)" : ""));
}
String darkvision = getDarkvision();
if (!StringHelper.isNullOrEmpty(darkvision) && !"0".equals(darkvision)) {
parts.add(String.format(Locale.US, "darkvision %s ft.", darkvision));
}
String tremorsense = getTremorsense();
if (!StringHelper.isNullOrEmpty(tremorsense) && !"0".equals(tremorsense)) {
parts.add(String.format(Locale.US, "tremorsense %s ft.", tremorsense));
}
String truesight = getTruesight();
if (!StringHelper.isNullOrEmpty(truesight) && !"0".equals(truesight)) {
parts.add(String.format(Locale.US, "truesight %s ft.", truesight));
}
parts.add(String.format(Locale.US, "passive Perception %d", 10 + getWisdomModifier()));
return StringHelper.join(", ", parts);
}
} }

View File

@@ -83,6 +83,14 @@ public class MonsterFragment extends Fragment {
monster.addDamageType(new DamageType("poison", " (Immune)", "i")); monster.addDamageType(new DamageType("poison", " (Immune)", "i"));
// Condition Immunities // Condition Immunities
monster.addConditionImmunity("blinded"); monster.addConditionImmunity("blinded");
// Senses
monster.setBlindsight("10");
monster.setIsBlind(true);
monster.setDarkvision("20");
monster.setTremorsense("30");
monster.setTruesight("40");
monster.setTelepathy(20);
monster.setUnderstandsBut("doesn't care");
// Challenge Rating // Challenge Rating
monster.setChallengeRating("*"); monster.setChallengeRating("*");
@@ -259,6 +267,20 @@ public class MonsterFragment extends Fragment {
} }
}); });
final TextView monsterSenses = root.findViewById(R.id.senses);
monsterViewModel.getSenses().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(String senses) {
if (StringHelper.isNullOrEmpty(senses)) {
monsterSenses.setVisibility(View.GONE);
} else {
monsterSenses.setVisibility(View.VISIBLE);
}
monsterSenses.setText(Html.fromHtml("<b>Senses</b> " + senses));
}
});
return root; return root;
} }
} }

View File

@@ -44,6 +44,8 @@ public class MonsterViewModel extends ViewModel {
mDamageImmunities.setValue(""); mDamageImmunities.setValue("");
mConditionImmunities = new MutableLiveData<>(); mConditionImmunities = new MutableLiveData<>();
mConditionImmunities.setValue(""); mConditionImmunities.setValue("");
mSenses = new MutableLiveData<>();
mSenses.setValue("");
} }
private MutableLiveData<String> mName; private MutableLiveData<String> mName;
@@ -114,6 +116,10 @@ public class MonsterViewModel extends ViewModel {
public LiveData<String> getConditionImmunities() { public LiveData<String> getConditionImmunities() {
return mConditionImmunities; return mConditionImmunities;
} }
private MutableLiveData<String> mSenses;
public LiveData<String> getSenses() {
return mSenses;
}
private Monster mMonster; private Monster mMonster;
public void setMonster(Monster monster) { public void setMonster(Monster monster) {
@@ -135,5 +141,6 @@ public class MonsterViewModel extends ViewModel {
mDamageResistances.setValue(mMonster.getDamageResistancesDescription()); mDamageResistances.setValue(mMonster.getDamageResistancesDescription());
mDamageImmunities.setValue(mMonster.getDamageImmunitiesDescription()); mDamageImmunities.setValue(mMonster.getDamageImmunitiesDescription());
mConditionImmunities.setValue(mMonster.getConditionImmunitiesDescription()); mConditionImmunities.setValue(mMonster.getConditionImmunitiesDescription());
mSenses.setValue(monster.getSensesDescription());
} }
} }

View File

@@ -383,5 +383,18 @@
app:layout_constraintTop_toBottomOf="@+id/damage_immunities" app:layout_constraintTop_toBottomOf="@+id/damage_immunities"
tools:text="Condition Immunities" /> tools:text="Condition Immunities" />
<TextView
android:id="@+id/senses"
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/condition_immunities"
tools:text="Senses" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView> </ScrollView>