From 03af5c3aa7aa4b1af4751ab1db7ba5b4a300aecc Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Tue, 1 Sep 2020 21:17:36 -0700 Subject: [PATCH] Adds speeds to monster card. --- .../monstercards/helpers/StringHelper.java | 24 ++++- .../monstercards/models/Monster.java | 93 +++++++++++++++++++ .../ui/monster/MonsterFragment.java | 16 ++++ .../ui/monster/MonsterViewModel.java | 7 ++ app/src/main/res/layout/fragment_monster.xml | 13 +++ 5 files changed, 152 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java index a9df5de..270397e 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java +++ b/app/src/main/java/com/majinnaibu/monstercards/helpers/StringHelper.java @@ -1,6 +1,8 @@ package com.majinnaibu.monstercards.helpers; -@SuppressWarnings({"BooleanMethodIsAlwaysInverted", "RedundantIfStatement"}) +import java.util.Collection; + +@SuppressWarnings({"RedundantIfStatement"}) public final class StringHelper { public static boolean isNullOrEmpty(CharSequence value) { if (value == null) { @@ -13,4 +15,24 @@ public final class StringHelper { return false; } + + public static String join(String delimiter, Collection strings) { + int length = strings.size(); + if (length < 1) { + return ""; + } else { + StringBuilder sb = new StringBuilder(); + boolean isFirst = true; + for (String element : strings) { + if (!isFirst) { + sb.append(delimiter); + } + + sb.append(element); + + isFirst = false; + } + return sb.toString(); + } + } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java b/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java index 598971d..3c6756f 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java +++ b/app/src/main/java/com/majinnaibu/monstercards/models/Monster.java @@ -338,5 +338,98 @@ public class Monster { } } + private String mSpeed; + public String getSpeed() { + return mSpeed; + } + public void setSpeed(String value) { + mSpeed = value; + } + + private String mBurrowSpeed; + public String getBurrowSpeed() { + return mBurrowSpeed; + } + public void setBurrowSpeed(String value) { + mBurrowSpeed = value; + } + + private String mClimbSpeed; + public String getClimbSpeed() { + return mClimbSpeed; + } + public void setClimbSpeed(String value) { + mClimbSpeed = value; + } + + private String mFlySpeed; + public String getFlySpeed() { + return mFlySpeed; + } + public void setFlySpeed(String value) { + mFlySpeed = value; + } + + private boolean mHover; + public boolean getHover() { + return mHover; + } + public void setHover(boolean value) { + mHover = value; + } + + private String mSwimSpeed; + public String getSwimSpeed() { + return mSwimSpeed; + } + public void setSwimSpeed(String value) { + mSwimSpeed = value; + } + + private boolean mCustomSpeed; + public boolean getCustomSpeed() { + return mCustomSpeed; + } + public void setCustomSpeed(boolean value) { + mCustomSpeed = value; + } + + private String mSpeedDescription; + public String getSpeedDescription() { + return mSpeedDescription; + } + public void setSpeedDescription(String value) { + mSpeedDescription = value; + } + + public String getSpeedText() { + if (getCustomSpeed()) { + return getSpeedDescription(); + } else { + ArrayList speedParts = new ArrayList<>(); + speedParts.add(String.format("%s ft.", getSpeed())); + String burrowSpeed = getBurrowSpeed(); + if (!StringHelper.isNullOrEmpty(burrowSpeed) && !"0".equals(burrowSpeed)) { + speedParts.add(String.format("burrow %s ft.", burrowSpeed)); + } + + String climbSpeed = getClimbSpeed(); + if (!StringHelper.isNullOrEmpty(climbSpeed) && !"0".equals(climbSpeed)) { + speedParts.add(String.format("climb %s ft.", climbSpeed)); + } + + String flySpeed = getFlySpeed(); + if (!StringHelper.isNullOrEmpty(flySpeed) && !"0".equals(flySpeed)) { + speedParts.add(String.format("fly %s ft.%s", flySpeed, getHover() ? " (hover)" : "")); + } + + String swimSpeed = getSwimSpeed(); + if (!StringHelper.isNullOrEmpty(swimSpeed) && !"0".equals(swimSpeed)) { + speedParts.add(String.format("swim %s ft.", swimSpeed)); + } + + return StringHelper.join(", ", speedParts); + } + } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java index 3e4e6d8..15a6079 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java @@ -42,6 +42,14 @@ public class MonsterFragment extends Fragment { monster.setHitDice(1); monster.setCustomHP(false); monster.setHPText("11 (2d8 + 2)"); + monster.setSpeed("10"); + monster.setBurrowSpeed("0"); + monster.setClimbSpeed("0"); + monster.setFlySpeed("30"); + monster.setHover(false); + monster.setSwimSpeed("0"); + monster.setCustomSpeed(false); + monster.setSpeedDescription("30 ft., swim 30 ft."); // END remove block monsterViewModel = new ViewModelProvider(this).get(MonsterViewModel.class); @@ -80,6 +88,14 @@ public class MonsterFragment extends Fragment { } }); + final TextView monsterSpeed = root.findViewById(R.id.speed); + monsterViewModel.getSpeed().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(String speed) { + monsterSpeed.setText(Html.fromHtml("Speed " + speed)); + } + }); + return root; } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java index fc09444..dea5894 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java @@ -18,6 +18,8 @@ public class MonsterViewModel extends ViewModel { mArmorClass.setValue(""); mHitPoints = new MutableLiveData<>(); mHitPoints.setValue(""); + mSpeed = new MutableLiveData<>(); + mSpeed.setValue(""); } private MutableLiveData mName; @@ -36,6 +38,10 @@ public class MonsterViewModel extends ViewModel { public LiveData getHitPoints() { return mHitPoints; } + private MutableLiveData mSpeed; + public LiveData getSpeed() { + return mSpeed; + } private Monster mMonster; public void setMonster(Monster monster) { @@ -44,5 +50,6 @@ public class MonsterViewModel extends ViewModel { mMeta.setValue(mMonster.getMeta()); mArmorClass.setValue(mMonster.getArmorClass()); mHitPoints.setValue(mMonster.getHitPoints()); + mSpeed.setValue(mMonster.getSpeedText()); } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_monster.xml b/app/src/main/res/layout/fragment_monster.xml index 73d1a57..8983dd6 100644 --- a/app/src/main/res/layout/fragment_monster.xml +++ b/app/src/main/res/layout/fragment_monster.xml @@ -82,5 +82,18 @@ app:layout_constraintTop_toBottomOf="@+id/armor_class" tools:text="Hit Points 1 (1d4 - 1)" /> + + \ No newline at end of file