Adds saving throws editor.

This commit is contained in:
2021-05-31 12:58:34 -07:00
parent 1c5762405a
commit 8fd313e3df
7 changed files with 436 additions and 4 deletions

View File

@@ -109,6 +109,13 @@ public class EditMonsterFragment extends MCFragment {
Navigation.findNavController(view).navigate(action);
});
mHolder.savingThrows.setOnClickListener(v -> {
NavDirections action = EditMonsterFragmentDirections.actionEditMonsterFragmentToEditSavingThrowsFragment();
View view = getView();
assert view != null;
Navigation.findNavController(view).navigate(action);
});
requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
@@ -162,12 +169,42 @@ public class EditMonsterFragment extends MCFragment {
TextView armorButton;
TextView speedButton;
TextView abilityScoresButton;
TextView savingThrows;
TextView skills;
TextView conditionImmunities;
TextView damageImmunities;
TextView damageResistances;
TextView damageVulnerabilities;
TextView senses;
TextView languages;
TextView challengeRating;
TextView abilities;
TextView actions;
TextView reactions;
TextView legendaryActions;
TextView lairActions;
TextView regionalActions;
ViewHolder(View root) {
basicInfoButton = root.findViewById(R.id.basicInfo);
armorButton = root.findViewById(R.id.armor);
speedButton = root.findViewById(R.id.speed);
abilityScoresButton = root.findViewById(R.id.abilityScores);
savingThrows = root.findViewById(R.id.savingThrows);
skills = root.findViewById(R.id.skills);
conditionImmunities = root.findViewById(R.id.conditionImmunities);
damageImmunities = root.findViewById(R.id.damageImmunities);
damageResistances = root.findViewById(R.id.damageResistances);
damageVulnerabilities = root.findViewById(R.id.damageVulnerabilities);
senses = root.findViewById(R.id.senses);
languages = root.findViewById(R.id.languages);
challengeRating = root.findViewById(R.id.challengeRating);
abilities = root.findViewById(R.id.abilities);
actions = root.findViewById(R.id.actions);
reactions = root.findViewById(R.id.reactions);
legendaryActions = root.findViewById(R.id.legendaryActions);
lairActions = root.findViewById(R.id.lairActions);
regionalActions = root.findViewById(R.id.regionalActions);
}
}
}

View File

@@ -5,7 +5,9 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.majinnaibu.monstercards.data.enums.AdvantageType;
import com.majinnaibu.monstercards.data.enums.ArmorType;
import com.majinnaibu.monstercards.data.enums.ProficiencyType;
import com.majinnaibu.monstercards.helpers.StringHelper;
import com.majinnaibu.monstercards.models.Monster;
import com.majinnaibu.monstercards.utils.Logger;
@@ -24,6 +26,18 @@ public class EditMonsterViewModel extends ViewModel {
private final MutableLiveData<Boolean> mCanHover;
private final MutableLiveData<Boolean> mHasCustomSpeed;
private final MutableLiveData<ArmorType> mArmorType;
private final MutableLiveData<ProficiencyType> mStrengthProficiency;
private final MutableLiveData<AdvantageType> mStrengthAdvantage;
private final MutableLiveData<ProficiencyType> mDexterityProficiency;
private final MutableLiveData<AdvantageType> mDexterityAdvantage;
private final MutableLiveData<ProficiencyType> mConstitutionProficiency;
private final MutableLiveData<AdvantageType> mConstitutionAdvantage;
private final MutableLiveData<ProficiencyType> mIntelligenceProficiency;
private final MutableLiveData<AdvantageType> mIntelligenceAdvantage;
private final MutableLiveData<ProficiencyType> mWisdomProficiency;
private final MutableLiveData<AdvantageType> mWisdomAdvantage;
private final MutableLiveData<ProficiencyType> mCharismaProficiency;
private final MutableLiveData<AdvantageType> mCharismaAdvantage;
private final MutableLiveData<Integer> mHitDice;
private final MutableLiveData<Integer> mNaturalArmorBonus;
private final MutableLiveData<Integer> mShieldBonus;
@@ -81,6 +95,18 @@ public class EditMonsterViewModel extends ViewModel {
mIntelligence = new MutableLiveData<>(10);
mWisdom = new MutableLiveData<>(10);
mCharisma = new MutableLiveData<>(10);
mStrengthProficiency = new MutableLiveData<>(ProficiencyType.NONE);
mStrengthAdvantage = new MutableLiveData<>(AdvantageType.NONE);
mDexterityProficiency = new MutableLiveData<>(ProficiencyType.NONE);
mDexterityAdvantage = new MutableLiveData<>(AdvantageType.NONE);
mConstitutionProficiency = new MutableLiveData<>(ProficiencyType.NONE);
mConstitutionAdvantage = new MutableLiveData<>(AdvantageType.NONE);
mIntelligenceProficiency = new MutableLiveData<>(ProficiencyType.NONE);
mIntelligenceAdvantage = new MutableLiveData<>(AdvantageType.NONE);
mWisdomProficiency = new MutableLiveData<>(ProficiencyType.NONE);
mWisdomAdvantage = new MutableLiveData<>(AdvantageType.NONE);
mCharismaProficiency = new MutableLiveData<>(ProficiencyType.NONE);
mCharismaAdvantage = new MutableLiveData<>(AdvantageType.NONE);
// TODO: consider initializing this to true so all new monsters need saving
mHasChanges = new MutableLiveData<>(false);
@@ -116,6 +142,18 @@ public class EditMonsterViewModel extends ViewModel {
mIntelligence.setValue(monster.intelligenceScore);
mWisdom.setValue(monster.wisdomScore);
mCharisma.setValue(monster.charismaScore);
mStrengthProficiency.setValue(monster.strengthSavingThrowProficiency);
mStrengthAdvantage.setValue(monster.strengthSavingThrowAdvantage);
mDexterityProficiency.setValue(monster.dexteritySavingThrowProficiency);
mDexterityAdvantage.setValue(monster.dexteritySavingThrowAdvantage);
mConstitutionProficiency.setValue(monster.constitutionSavingThrowProficiency);
mConstitutionAdvantage.setValue(monster.constitutionSavingThrowAdvantage);
mIntelligenceProficiency.setValue(monster.intelligenceSavingThrowProficiency);
mIntelligenceAdvantage.setValue(monster.intelligenceSavingThrowAdvantage);
mWisdomProficiency.setValue(monster.wisdomSavingThrowProficiency);
mWisdomAdvantage.setValue(monster.wisdomSavingThrowAdvantage);
mCharismaProficiency.setValue(monster.charismaSavingThrowProficiency);
mCharismaAdvantage.setValue(monster.charismaSavingThrowAdvantage);
mHasChanges.setValue(false);
}
@@ -589,6 +627,138 @@ public class EditMonsterViewModel extends ViewModel {
setCharisma(mCharisma.getValue() - 1);
}
public LiveData<ProficiencyType> getStrengthProficiency() {
return mStrengthProficiency;
}
public void setStrengthProficiency(ProficiencyType proficiency) {
if (!Objects.equals(mStrengthProficiency.getValue(), proficiency)) {
mStrengthProficiency.setValue(proficiency);
mHasChanges.setValue(true);
}
}
public LiveData<AdvantageType> getStrengthAdvantage() {
return mStrengthAdvantage;
}
public void setStrengthAdvantage(AdvantageType advantage) {
if (!Objects.equals(mStrengthAdvantage.getValue(), advantage)) {
mStrengthAdvantage.setValue(advantage);
mHasChanges.setValue(true);
}
}
public LiveData<ProficiencyType> getDexterityProficiency() {
return mDexterityProficiency;
}
public void setDexterityProficiency(ProficiencyType proficiency) {
if (!Objects.equals(mDexterityProficiency.getValue(), proficiency)) {
mDexterityProficiency.setValue(proficiency);
mHasChanges.setValue(true);
}
}
public LiveData<AdvantageType> getDexterityAdvantage() {
return mDexterityAdvantage;
}
public void setDexterityAdvantage(AdvantageType advantage) {
if (!Objects.equals(mDexterityAdvantage.getValue(), advantage)) {
mDexterityAdvantage.setValue(advantage);
mHasChanges.setValue(true);
}
}
public LiveData<ProficiencyType> getConstitutionProficiency() {
return mConstitutionProficiency;
}
public void setConstitutionProficiency(ProficiencyType proficiency) {
if (!Objects.equals(mConstitutionProficiency.getValue(), proficiency)) {
mConstitutionProficiency.setValue(proficiency);
mHasChanges.setValue(true);
}
}
public LiveData<AdvantageType> getConstitutionAdvantage() {
return mConstitutionAdvantage;
}
public void setConstitutionAdvantage(AdvantageType advantage) {
if (!Objects.equals(mConstitutionAdvantage.getValue(), advantage)) {
mConstitutionAdvantage.setValue(advantage);
mHasChanges.setValue(true);
}
}
public LiveData<ProficiencyType> getIntelligenceProficiency() {
return mIntelligenceProficiency;
}
public void setIntelligenceProficiency(ProficiencyType proficiency) {
if (!Objects.equals(mIntelligenceProficiency.getValue(), proficiency)) {
mIntelligenceProficiency.setValue(proficiency);
mHasChanges.setValue(true);
}
}
public LiveData<AdvantageType> getIntelligenceAdvantage() {
return mIntelligenceAdvantage;
}
public void setIntelligenceAdvantage(AdvantageType advantage) {
if (!Objects.equals(mIntelligenceAdvantage.getValue(), advantage)) {
mIntelligenceAdvantage.setValue(advantage);
mHasChanges.setValue(true);
}
}
public LiveData<ProficiencyType> getWisdomProficiency() {
return mWisdomProficiency;
}
public void setWisdomProficiency(ProficiencyType proficiency) {
if (!Objects.equals(mWisdomProficiency.getValue(), proficiency)) {
mWisdomProficiency.setValue(proficiency);
mHasChanges.setValue(true);
}
}
public LiveData<AdvantageType> getWisdomAdvantage() {
return mWisdomAdvantage;
}
public void setWisdomAdvantage(AdvantageType advantage) {
if (!Objects.equals(mWisdomAdvantage.getValue(), advantage)) {
mWisdomAdvantage.setValue(advantage);
mHasChanges.setValue(true);
}
}
public LiveData<ProficiencyType> getCharismaProficiency() {
return mCharismaProficiency;
}
public void setCharismaProficiency(ProficiencyType proficiency) {
if (!Objects.equals(mCharismaProficiency.getValue(), proficiency)) {
mCharismaProficiency.setValue(proficiency);
mHasChanges.setValue(true);
}
}
public LiveData<AdvantageType> getCharismaAdvantage() {
return mCharismaAdvantage;
}
public void setCharismaAdvantage(AdvantageType advantage) {
if (!Objects.equals(mCharismaAdvantage.getValue(), advantage)) {
mCharismaAdvantage.setValue(advantage);
mHasChanges.setValue(true);
}
}
public Monster buildMonster() {
Monster monster = new Monster();
@@ -619,6 +789,18 @@ public class EditMonsterViewModel extends ViewModel {
monster.intelligenceScore = mIntelligence.getValue();
monster.wisdomScore = mWisdom.getValue();
monster.charismaScore = mCharisma.getValue();
monster.strengthSavingThrowAdvantage = mStrengthAdvantage.getValue();
monster.strengthSavingThrowProficiency = mStrengthProficiency.getValue();
monster.dexteritySavingThrowAdvantage = mDexterityAdvantage.getValue();
monster.dexteritySavingThrowProficiency = mDexterityProficiency.getValue();
monster.constitutionSavingThrowAdvantage = mConstitutionAdvantage.getValue();
monster.constitutionSavingThrowProficiency = mConstitutionProficiency.getValue();
monster.intelligenceSavingThrowAdvantage = mIntelligenceAdvantage.getValue();
monster.intelligenceSavingThrowProficiency = mIntelligenceProficiency.getValue();
monster.wisdomSavingThrowAdvantage = mWisdomAdvantage.getValue();
monster.wisdomSavingThrowProficiency = mWisdomProficiency.getValue();
monster.charismaSavingThrowAdvantage = mCharismaAdvantage.getValue();
monster.charismaSavingThrowProficiency = mCharismaProficiency.getValue();
return monster;
}

View File

@@ -0,0 +1,95 @@
package com.majinnaibu.monstercards.ui.editmonster;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavBackStackEntry;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import com.majinnaibu.monstercards.R;
import com.majinnaibu.monstercards.ui.components.AdvantagePicker;
import com.majinnaibu.monstercards.ui.components.ProficiencyPicker;
public class EditSavingThrowsFragment extends Fragment {
private EditMonsterViewModel mViewModel;
private ViewHolder mViewHolder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment);
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.edit_monster_navigation);
mViewModel = new ViewModelProvider(backStackEntry).get(EditMonsterViewModel.class);
// Inflate the layout for this fragment
View root = inflater.inflate(R.layout.fragment_edit_saving_throws, container, false);
mViewHolder = new ViewHolder(root);
mViewHolder.strengthProficiency.setValue(mViewModel.getStrengthProficiency().getValue());
mViewHolder.strengthProficiency.setOnValueChangedListener(value -> mViewModel.setStrengthProficiency(value));
mViewHolder.strengthAdvantage.setValue(mViewModel.getStrengthAdvantage().getValue());
mViewHolder.strengthAdvantage.setOnValueChangedListener(value -> mViewModel.setStrengthAdvantage(value));
mViewHolder.dexterityProficiency.setValue(mViewModel.getDexterityProficiency().getValue());
mViewHolder.dexterityProficiency.setOnValueChangedListener(value -> mViewModel.setDexterityProficiency(value));
mViewHolder.dexterityAdvantage.setValue(mViewModel.getDexterityAdvantage().getValue());
mViewHolder.dexterityAdvantage.setOnValueChangedListener(value -> mViewModel.setDexterityAdvantage(value));
mViewHolder.constitutionProficiency.setValue(mViewModel.getConstitutionProficiency().getValue());
mViewHolder.constitutionProficiency.setOnValueChangedListener(value -> mViewModel.setConstitutionProficiency(value));
mViewHolder.constitutionAdvantage.setValue(mViewModel.getConstitutionAdvantage().getValue());
mViewHolder.constitutionAdvantage.setOnValueChangedListener(value -> mViewModel.setConstitutionAdvantage(value));
mViewHolder.intelligenceProficiency.setValue(mViewModel.getIntelligenceProficiency().getValue());
mViewHolder.intelligenceProficiency.setOnValueChangedListener(value -> mViewModel.setIntelligenceProficiency(value));
mViewHolder.intelligenceAdvantage.setValue(mViewModel.getIntelligenceAdvantage().getValue());
mViewHolder.intelligenceAdvantage.setOnValueChangedListener(value -> mViewModel.setIntelligenceAdvantage(value));
mViewHolder.wisdomProficiency.setValue(mViewModel.getWisdomProficiency().getValue());
mViewHolder.wisdomProficiency.setOnValueChangedListener(value -> mViewModel.setWisdomProficiency(value));
mViewHolder.wisdomAdvantage.setValue(mViewModel.getWisdomAdvantage().getValue());
mViewHolder.wisdomAdvantage.setOnValueChangedListener(value -> mViewModel.setWisdomAdvantage(value));
mViewHolder.charismaProficiency.setValue(mViewModel.getCharismaProficiency().getValue());
mViewHolder.charismaProficiency.setOnValueChangedListener(value -> mViewModel.setCharismaProficiency(value));
mViewHolder.charismaAdvantage.setValue(mViewModel.getCharismaAdvantage().getValue());
mViewHolder.charismaAdvantage.setOnValueChangedListener(value -> mViewModel.setCharismaAdvantage(value));
return root;
}
private static class ViewHolder {
AdvantagePicker strengthAdvantage;
ProficiencyPicker strengthProficiency;
AdvantagePicker dexterityAdvantage;
ProficiencyPicker dexterityProficiency;
AdvantagePicker constitutionAdvantage;
ProficiencyPicker constitutionProficiency;
AdvantagePicker intelligenceAdvantage;
ProficiencyPicker intelligenceProficiency;
AdvantagePicker wisdomAdvantage;
ProficiencyPicker wisdomProficiency;
AdvantagePicker charismaAdvantage;
ProficiencyPicker charismaProficiency;
ViewHolder(View root) {
strengthAdvantage = root.findViewById(R.id.strengthAdvantage);
strengthProficiency = root.findViewById(R.id.strengthProficiency);
dexterityAdvantage = root.findViewById(R.id.dexterityAdvantage);
dexterityProficiency = root.findViewById(R.id.dexterityProficiency);
constitutionAdvantage = root.findViewById(R.id.constitutionAdvantage);
constitutionProficiency = root.findViewById(R.id.constitutionProficiency);
intelligenceAdvantage = root.findViewById(R.id.intelligenceAdvantage);
intelligenceProficiency = root.findViewById(R.id.intelligenceProficiency);
wisdomAdvantage = root.findViewById(R.id.wisdomAdvantage);
wisdomProficiency = root.findViewById(R.id.wisdomProficiency);
charismaAdvantage = root.findViewById(R.id.charismaAdvantage);
charismaProficiency = root.findViewById(R.id.charismaProficiency);
}
}
}