Adds actions to monster cards.
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package com.majinnaibu.monstercards.models;
|
||||
|
||||
public class Action {
|
||||
|
||||
public Action(String name, String description) {
|
||||
mName = name;
|
||||
mDescription = description;
|
||||
}
|
||||
|
||||
private String mName;
|
||||
public String getName() {
|
||||
return mName;
|
||||
}
|
||||
public void setName(String name) {
|
||||
mName = name;
|
||||
}
|
||||
|
||||
private String mDescription;
|
||||
public String getDescription() {
|
||||
return mDescription;
|
||||
}
|
||||
public void setDescription(String description) {
|
||||
mDescription = description;
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ public class Monster {
|
||||
|
||||
public Monster() {
|
||||
mAbilities = new ArrayList<>();
|
||||
mActions = new ArrayList<>();
|
||||
mConditionImmunities = new HashSet<>();
|
||||
mDamageTypes = new HashSet<>();
|
||||
mLanguages = new HashSet<>();
|
||||
@@ -979,4 +980,26 @@ public class Monster {
|
||||
return getProficiencyBonus() + getAbilityModifier(abilityScoreName);
|
||||
}
|
||||
|
||||
public List<String> getActionDescriptions() {
|
||||
ArrayList<String> actions = new ArrayList<>();
|
||||
for (Action action : getActions()) {
|
||||
actions.add(getPlaceholderReplacedText(String.format("__%s__ %s", action.getName(), action.getDescription())));
|
||||
}
|
||||
return actions;
|
||||
}
|
||||
|
||||
private ArrayList<Action> mActions;
|
||||
public List<Action> getActions() {
|
||||
return mActions;
|
||||
}
|
||||
public void addAction(Action ability) {
|
||||
mActions.add(ability);
|
||||
}
|
||||
public void removeAction(Action ability) {
|
||||
mActions.remove(ability);
|
||||
}
|
||||
public void clearActions() {
|
||||
mActions.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.majinnaibu.monstercards.R;
|
||||
import com.majinnaibu.monstercards.helpers.CommonMarkHelper;
|
||||
import com.majinnaibu.monstercards.helpers.StringHelper;
|
||||
import com.majinnaibu.monstercards.models.Ability;
|
||||
import com.majinnaibu.monstercards.models.Action;
|
||||
import com.majinnaibu.monstercards.models.DamageType;
|
||||
import com.majinnaibu.monstercards.models.Language;
|
||||
import com.majinnaibu.monstercards.models.Monster;
|
||||
@@ -117,7 +118,10 @@ public class MonsterFragment extends Fragment {
|
||||
monster.addAbility(new Ability("Spellcasting", "The acolyte is a 1st-level spellcaster. Its spellcasting ability is Wisdom (spell save DC [WIS SAVE], [WIS ATK] to hit with spell attacks). The acolyte has following cleric spells prepared:\n\n\n> Cantrips (at will): _light, sacred flame, thaumaturgy_\n> 1st level (3 slots): _bless, cure wounds, sanctuary_"));
|
||||
monster.addAbility(new Ability("Amphibious", "The dragon can breathe air and water."));
|
||||
monster.addAbility(new Ability("Legendary Resistance (3/Day)", "If the dragon fails a saving throw, it can choose to succeed instead."));
|
||||
// Actions
|
||||
monster.addAction(new Action("Club", "_Melee Weapon Attack:_ [STR ATK] to hit, reach 5 ft., one target. _Hit:_ 2 (1d4) bludgeoning damage."));
|
||||
// END remove block
|
||||
|
||||
monsterViewModel = new ViewModelProvider(this).get(MonsterViewModel.class);
|
||||
View root = inflater.inflate(R.layout.fragment_monster, container, false);
|
||||
monsterViewModel.setMonster(monster);
|
||||
@@ -351,6 +355,32 @@ public class MonsterFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
final LinearLayout monsterActions = root.findViewById(R.id.actions);
|
||||
monsterViewModel.getActions().observe(getViewLifecycleOwner(), new Observer<List<String>>() {
|
||||
@Override
|
||||
public void onChanged(List<String> actions) {
|
||||
Context context = getContext();
|
||||
DisplayMetrics displayMetrics = null;
|
||||
if (context != null) {
|
||||
Resources resources = context.getResources();
|
||||
if (resources != null) {
|
||||
displayMetrics = resources.getDisplayMetrics();
|
||||
}
|
||||
}
|
||||
monsterActions.removeAllViews();
|
||||
if (actions != null) {
|
||||
for (String action : actions) {
|
||||
TextView tvAction = new TextView(getContext());
|
||||
tvAction.setText(Html.fromHtml(CommonMarkHelper.toHtml(action)));
|
||||
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
layoutParams.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, displayMetrics);
|
||||
tvAction.setLayoutParams(layoutParams);
|
||||
monsterActions.addView(tvAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return root;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,105 +13,79 @@ public class MonsterViewModel extends ViewModel {
|
||||
|
||||
public MonsterViewModel() {
|
||||
mMonster = null;
|
||||
mName = new MutableLiveData<>();
|
||||
mName.setValue("");
|
||||
mMeta = new MutableLiveData<>();
|
||||
mMeta.setValue("");
|
||||
mAbilities = new MutableLiveData<>();
|
||||
mAbilities.setValue(new ArrayList<String>());
|
||||
mActions = new MutableLiveData<>();
|
||||
mActions.setValue(new ArrayList<String>());
|
||||
mArmorClass = new MutableLiveData<>();
|
||||
mArmorClass.setValue("");
|
||||
mChallenge = new MutableLiveData<>();
|
||||
mChallenge.setValue("");
|
||||
mCharisma = new MutableLiveData<>();
|
||||
mCharisma.setValue("");
|
||||
mConditionImmunities = new MutableLiveData<>();
|
||||
mConditionImmunities.setValue("");
|
||||
mConstitution = new MutableLiveData<>();
|
||||
mConstitution.setValue("");
|
||||
mDamageImmunities = new MutableLiveData<>();
|
||||
mDamageImmunities.setValue("");
|
||||
mDamageResistances = new MutableLiveData<>();
|
||||
mDamageResistances.setValue("");
|
||||
mDamageVulnerabilities = new MutableLiveData<>();
|
||||
mDamageVulnerabilities.setValue("");
|
||||
mDexterity = new MutableLiveData<>();
|
||||
mDexterity.setValue("");
|
||||
mHitPoints = new MutableLiveData<>();
|
||||
mHitPoints.setValue("");
|
||||
mIntelligence = new MutableLiveData<>();
|
||||
mIntelligence.setValue("");
|
||||
mLanguages = new MutableLiveData<>();
|
||||
mLanguages.setValue("");
|
||||
mMeta = new MutableLiveData<>();
|
||||
mMeta.setValue("");
|
||||
mName = new MutableLiveData<>();
|
||||
mName.setValue("");
|
||||
mSavingThrows = new MutableLiveData<>();
|
||||
mSavingThrows.setValue("");
|
||||
mSenses = new MutableLiveData<>();
|
||||
mSenses.setValue("");
|
||||
mSkills = new MutableLiveData<>();
|
||||
mSkills.setValue("");
|
||||
mSpeed = new MutableLiveData<>();
|
||||
mSpeed.setValue("");
|
||||
mStrength = new MutableLiveData<>();
|
||||
mStrength.setValue("");
|
||||
mDexterity = new MutableLiveData<>();
|
||||
mDexterity.setValue("");
|
||||
mConstitution = new MutableLiveData<>();
|
||||
mConstitution.setValue("");
|
||||
mIntelligence = new MutableLiveData<>();
|
||||
mIntelligence.setValue("");
|
||||
mWisdom = new MutableLiveData<>();
|
||||
mWisdom.setValue("");
|
||||
mCharisma = new MutableLiveData<>();
|
||||
mCharisma.setValue("");
|
||||
mSavingThrows = new MutableLiveData<>();
|
||||
mSavingThrows.setValue("");
|
||||
mSkills = new MutableLiveData<>();
|
||||
mSkills.setValue("");
|
||||
mDamageVulnerabilities = new MutableLiveData<>();
|
||||
mDamageVulnerabilities.setValue("");
|
||||
mDamageResistances = new MutableLiveData<>();
|
||||
mDamageResistances.setValue("");
|
||||
mDamageImmunities = new MutableLiveData<>();
|
||||
mDamageImmunities.setValue("");
|
||||
mConditionImmunities = new MutableLiveData<>();
|
||||
mConditionImmunities.setValue("");
|
||||
mSenses = new MutableLiveData<>();
|
||||
mSenses.setValue("");
|
||||
mLanguages = new MutableLiveData<>();
|
||||
mLanguages.setValue("");
|
||||
mChallenge = new MutableLiveData<>();
|
||||
mChallenge.setValue("");
|
||||
mAbilities = new MutableLiveData<>();
|
||||
mAbilities.setValue(new ArrayList<String>());
|
||||
}
|
||||
|
||||
private MutableLiveData<String> mName;
|
||||
public LiveData<String> getName() {
|
||||
return mName;
|
||||
private MutableLiveData<List<String>> mAbilities;
|
||||
public LiveData<List<String>> getAbilities() {
|
||||
return mAbilities;
|
||||
}
|
||||
private MutableLiveData<String> mMeta;
|
||||
public LiveData<String> getMeta() {
|
||||
return mMeta;
|
||||
private MutableLiveData<List<String>> mActions;
|
||||
public LiveData<List<String>> getActions() {
|
||||
return mActions;
|
||||
}
|
||||
private MutableLiveData<String> mArmorClass;
|
||||
public LiveData<String> getArmorClass() {
|
||||
return mArmorClass;
|
||||
}
|
||||
private MutableLiveData<String> mHitPoints;
|
||||
public LiveData<String> getHitPoints() {
|
||||
return mHitPoints;
|
||||
}
|
||||
private MutableLiveData<String> mSpeed;
|
||||
public LiveData<String> getSpeed() {
|
||||
return mSpeed;
|
||||
}
|
||||
private MutableLiveData<String> mStrength;
|
||||
public LiveData<String> getStrength() {
|
||||
return mStrength;
|
||||
}
|
||||
private MutableLiveData<String> mDexterity;
|
||||
public LiveData<String> getDexterity() {
|
||||
return mDexterity;
|
||||
}
|
||||
private MutableLiveData<String> mConstitution;
|
||||
public LiveData<String> getConstitution() {
|
||||
return mConstitution;
|
||||
}
|
||||
private MutableLiveData<String> mIntelligence;
|
||||
public LiveData<String> getIntelligence() {
|
||||
return mIntelligence;
|
||||
}
|
||||
private MutableLiveData<String> mWisdom;
|
||||
public LiveData<String> getWisdom() {
|
||||
return mWisdom;
|
||||
private MutableLiveData<String> mChallenge;
|
||||
public LiveData<String> getChallenge() {
|
||||
return mChallenge;
|
||||
}
|
||||
private MutableLiveData<String> mCharisma;
|
||||
public LiveData<String> getCharisma() {
|
||||
return mCharisma;
|
||||
}
|
||||
private MutableLiveData<String> mSavingThrows;
|
||||
public LiveData<String> getSavingThrows() {
|
||||
return mSavingThrows;
|
||||
private MutableLiveData<String> mConditionImmunities;
|
||||
public LiveData<String> getConditionImmunities() {
|
||||
return mConditionImmunities;
|
||||
}
|
||||
private MutableLiveData<String> mSkills;
|
||||
public LiveData<String> getSkills() {
|
||||
return mSkills;
|
||||
}
|
||||
private MutableLiveData<String> mDamageVulnerabilities;
|
||||
public LiveData<String> getDamageVulnerabilities() {
|
||||
return mDamageVulnerabilities;
|
||||
private MutableLiveData<String> mConstitution;
|
||||
public LiveData<String> getConstitution() {
|
||||
return mConstitution;
|
||||
}
|
||||
private MutableLiveData<String> mDamageResistances;
|
||||
public LiveData<String> getDamageResistances() {
|
||||
@@ -121,50 +95,84 @@ public class MonsterViewModel extends ViewModel {
|
||||
public LiveData<String> getDamageImmunities() {
|
||||
return mDamageImmunities;
|
||||
}
|
||||
private MutableLiveData<String> mConditionImmunities;
|
||||
public LiveData<String> getConditionImmunities() {
|
||||
return mConditionImmunities;
|
||||
private MutableLiveData<String> mDamageVulnerabilities;
|
||||
public LiveData<String> getDamageVulnerabilities() {
|
||||
return mDamageVulnerabilities;
|
||||
}
|
||||
private MutableLiveData<String> mSenses;
|
||||
public LiveData<String> getSenses() {
|
||||
return mSenses;
|
||||
private MutableLiveData<String> mDexterity;
|
||||
public LiveData<String> getDexterity() {
|
||||
return mDexterity;
|
||||
}
|
||||
private MutableLiveData<String> mHitPoints;
|
||||
public LiveData<String> getHitPoints() {
|
||||
return mHitPoints;
|
||||
}
|
||||
private MutableLiveData<String> mIntelligence;
|
||||
public LiveData<String> getIntelligence() {
|
||||
return mIntelligence;
|
||||
}
|
||||
private MutableLiveData<String> mLanguages;
|
||||
public LiveData<String> getLanguages() {
|
||||
return mLanguages;
|
||||
}
|
||||
private MutableLiveData<String> mChallenge;
|
||||
public LiveData<String> getChallenge() {
|
||||
return mChallenge;
|
||||
private MutableLiveData<String> mMeta;
|
||||
public LiveData<String> getMeta() {
|
||||
return mMeta;
|
||||
}
|
||||
private MutableLiveData<List<String>> mAbilities;
|
||||
public LiveData<List<String>> getAbilities() {
|
||||
return mAbilities;
|
||||
private MutableLiveData<String> mName;
|
||||
public LiveData<String> getName() {
|
||||
return mName;
|
||||
}
|
||||
private MutableLiveData<String> mSavingThrows;
|
||||
public LiveData<String> getSavingThrows() {
|
||||
return mSavingThrows;
|
||||
}
|
||||
private MutableLiveData<String> mSenses;
|
||||
public LiveData<String> getSenses() {
|
||||
return mSenses;
|
||||
}
|
||||
private MutableLiveData<String> mSkills;
|
||||
public LiveData<String> getSkills() {
|
||||
return mSkills;
|
||||
}
|
||||
private MutableLiveData<String> mSpeed;
|
||||
public LiveData<String> getSpeed() {
|
||||
return mSpeed;
|
||||
}
|
||||
private MutableLiveData<String> mStrength;
|
||||
public LiveData<String> getStrength() {
|
||||
return mStrength;
|
||||
}
|
||||
private MutableLiveData<String> mWisdom;
|
||||
public LiveData<String> getWisdom() {
|
||||
return mWisdom;
|
||||
}
|
||||
|
||||
private Monster mMonster;
|
||||
public void setMonster(Monster monster) {
|
||||
mMonster = monster;
|
||||
mName.setValue(mMonster.getName());
|
||||
mMeta.setValue(mMonster.getMeta());
|
||||
|
||||
mAbilities.setValue(mMonster.getAbilityDescriptions());
|
||||
mActions.setValue(mMonster.getActionDescriptions());
|
||||
mArmorClass.setValue(mMonster.getArmorClass());
|
||||
mChallenge.setValue(mMonster.getChallengeRatingDescription());
|
||||
mCharisma.setValue(monster.getCharismaDescription());
|
||||
mConditionImmunities.setValue(mMonster.getConditionImmunitiesDescription());
|
||||
mConstitution.setValue(monster.getConstitutionDescription());
|
||||
mDamageImmunities.setValue(mMonster.getDamageImmunitiesDescription());
|
||||
mDamageResistances.setValue(mMonster.getDamageResistancesDescription());
|
||||
mDamageVulnerabilities.setValue(mMonster.getDamageVulnerabilitiesDescription());
|
||||
mDexterity.setValue(monster.getDexterityDescription());
|
||||
mHitPoints.setValue(mMonster.getHitPoints());
|
||||
mIntelligence.setValue(monster.getIntelligenceDescription());
|
||||
mLanguages.setValue(mMonster.getLanguagesDescription());
|
||||
mMeta.setValue(mMonster.getMeta());
|
||||
mName.setValue(mMonster.getName());
|
||||
mSavingThrows.setValue(monster.getSavingThrowsDescription());
|
||||
mSenses.setValue(monster.getSensesDescription());
|
||||
mSkills.setValue(monster.getSkillsDescription());
|
||||
mSpeed.setValue(mMonster.getSpeedText());
|
||||
mStrength.setValue(monster.getStrengthDescription());
|
||||
mDexterity.setValue(monster.getDexterityDescription());
|
||||
mConstitution.setValue(monster.getConstitutionDescription());
|
||||
mIntelligence.setValue(monster.getIntelligenceDescription());
|
||||
mWisdom.setValue(monster.getWisdomDescription());
|
||||
mCharisma.setValue(monster.getCharismaDescription());
|
||||
mSavingThrows.setValue(monster.getSavingThrowsDescription());
|
||||
mSkills.setValue(monster.getSkillsDescription());
|
||||
mDamageVulnerabilities.setValue(mMonster.getDamageVulnerabilitiesDescription());
|
||||
mDamageResistances.setValue(mMonster.getDamageResistancesDescription());
|
||||
mDamageImmunities.setValue(mMonster.getDamageImmunitiesDescription());
|
||||
mConditionImmunities.setValue(mMonster.getConditionImmunitiesDescription());
|
||||
mSenses.setValue(monster.getSensesDescription());
|
||||
mLanguages.setValue(mMonster.getLanguagesDescription());
|
||||
mChallenge.setValue(mMonster.getChallengeRatingDescription());
|
||||
mAbilities.setValue(mMonster.getAbilityDescriptions());
|
||||
}
|
||||
}
|
||||
@@ -437,5 +437,48 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/challenge"
|
||||
tools:text="Damage Vulnerabilities" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label_actions"
|
||||
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/abilities"
|
||||
android:text="@string/actions_label" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/divider4"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:contentDescription="@string/section_divider"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/ic_section_divider"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/label_actions" />
|
||||
|
||||
<!-- Actions -->
|
||||
<LinearLayout
|
||||
android:id="@+id/actions"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="0dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="0dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/divider4"
|
||||
tools:text="Damage Vulnerabilities" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</ScrollView>
|
||||
@@ -1,16 +1,17 @@
|
||||
<resources>
|
||||
<string name="app_name">MonsterCards</string>
|
||||
<string name="title_dashboard">Dashboard</string>
|
||||
<string name="title_search">Search</string>
|
||||
<string name="title_collections">Collections</string>
|
||||
<string name="title_library">Library</string>
|
||||
<string name="action_search">Search</string>
|
||||
<string name="actions_label">Actions</string>
|
||||
<string name="app_name">MonsterCards</string>
|
||||
<string name="charisma_abbreviation">CHA</string>
|
||||
<string name="constitution_abbreviation">CON</string>
|
||||
<string name="dexterity_abbreviation">DEX</string>
|
||||
<string name="intelligence_abbreviation">INT</string>
|
||||
<string name="label_search_query">Query</string>
|
||||
<string name="section_divider">section divider</string>
|
||||
<string name="strength_abbreviation">STR</string>
|
||||
<string name="dexterity_abbreviation">DEX</string>
|
||||
<string name="constitution_abbreviation">CON</string>
|
||||
<string name="intelligence_abbreviation">INT</string>
|
||||
<string name="title_collections">Collections</string>
|
||||
<string name="title_dashboard">Dashboard</string>
|
||||
<string name="title_library">Library</string>
|
||||
<string name="title_search">Search</string>
|
||||
<string name="wisdom_abbreviation">WIS</string>
|
||||
<string name="charisma_abbreviation">CHA</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user