Ability.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package org.leumasjaffe.charsheet.model;
  2. import java.util.Collections;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.function.Function;
  6. import org.leumasjaffe.charsheet.model.observable.IntValue;
  7. import org.leumasjaffe.observer.Observable;
  8. import com.fasterxml.jackson.annotation.JsonCreator;
  9. import com.fasterxml.jackson.annotation.JsonProperty;
  10. import lombok.AccessLevel;
  11. import lombok.AllArgsConstructor;
  12. import lombok.Data;
  13. import lombok.EqualsAndHashCode;
  14. import lombok.experimental.FieldDefaults;
  15. @Data
  16. @AllArgsConstructor
  17. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  18. public class Ability {
  19. public static final Map<String, Function<Ability, Scores>> fields;
  20. static {
  21. Map<String, Function<Ability, Scores>> tmp = new HashMap<>();
  22. tmp.put("STR", Ability::getStr);
  23. tmp.put("DEX", Ability::getDex);
  24. tmp.put("CON", Ability::getCon);
  25. tmp.put("INT", Ability::getInt);
  26. tmp.put("WIS", Ability::getWis);
  27. tmp.put("CHA", Ability::getCha);
  28. fields = Collections.unmodifiableMap(tmp);
  29. }
  30. @Data
  31. @AllArgsConstructor
  32. @EqualsAndHashCode(callSuper=false)
  33. @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
  34. public static class Scores extends Observable.Instance {
  35. IntValue base, temp;
  36. @JsonCreator
  37. public Scores() {
  38. this.base = new IntValue(-1);
  39. this.temp = new IntValue(-1);
  40. }
  41. public int baseScore() { return base.value(); }
  42. public int score() { return temp.value() == -1 ? base.value() : temp.value(); }
  43. public int baseModifier() { return Ability.modifier(baseScore()); }
  44. public int modifier() { return Ability.modifier(score()); }
  45. }
  46. Scores str, dex, con, wis, cha;
  47. @JsonProperty(value="int") Scores Int;
  48. public Ability() {
  49. this.str = new Scores();
  50. this.dex = new Scores();
  51. this.con = new Scores();
  52. this.Int = new Scores();
  53. this.wis = new Scores();
  54. this.cha = new Scores();
  55. }
  56. public static int modifier(int val) {
  57. return val == -1 ? 0 : val / 2 - 5;
  58. }
  59. }