DDCharacter.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package org.leumasjaffe.charsheet.model;
  2. import java.util.Collections;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. import java.util.SortedSet;
  6. import java.util.TreeSet;
  7. import org.leumasjaffe.charsheet.model.inventory.DDInventory;
  8. import org.leumasjaffe.charsheet.model.observable.IntValue;
  9. import org.leumasjaffe.charsheet.model.observable.ObjectValue;
  10. import org.leumasjaffe.charsheet.model.skill.DDSkills;
  11. import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  12. import lombok.AccessLevel;
  13. import lombok.Data;
  14. import lombok.Getter;
  15. import lombok.NoArgsConstructor;
  16. import lombok.NonNull;
  17. import lombok.experimental.FieldDefaults;
  18. @NoArgsConstructor
  19. @Data
  20. @FieldDefaults(level=AccessLevel.PRIVATE)
  21. @JsonIgnoreProperties(ignoreUnknown=true)
  22. public class DDCharacter {
  23. @NonNull String name = "";
  24. @NonNull String player = "";
  25. @NonNull @Getter(AccessLevel.NONE) SortedSet<DDCharacterClass> classes = new TreeSet<>();
  26. @NonNull String race = "";
  27. @NonNull Alignment alignment;
  28. @NonNull String deity = "";
  29. @NonNull ObjectValue<SizeClass> size = new ObjectValue<>(SizeClass.M);
  30. int age = -1;
  31. @NonNull Gender gender = Gender.N;
  32. @NonNull String height;
  33. int weight = -1;
  34. @NonNull String eyes = "";
  35. @NonNull String hair = "";
  36. @NonNull String skin = "";
  37. @NonNull IntValue experience = new IntValue();
  38. @NonNull HitPoints health = new HitPoints();
  39. @NonNull Ability abilities = new Ability();
  40. @NonNull DDSkills skills = new DDSkills(Collections.emptyList());
  41. @NonNull DDInventory inventory = new DDInventory();
  42. public String getClassAndLevelString() {
  43. final StringBuilder ss = new StringBuilder();
  44. final Iterator<DDCharacterClass> it = classes.iterator();
  45. while (it.hasNext()) {
  46. ss.append(it.next());
  47. if (it.hasNext()) { ss.append(" / "); }
  48. }
  49. return ss.toString();
  50. }
  51. public Set<DDCharacterClass> getClasses() {
  52. return Collections.unmodifiableSet(classes);
  53. }
  54. public int getBaseAttack() {
  55. return classes.stream().mapToInt(c -> c.getBab()).sum();
  56. }
  57. public int getFortSave() {
  58. return classes.stream().mapToInt(c -> c.getFort()).sum();
  59. }
  60. public int getRefSave() {
  61. return classes.stream().mapToInt(c -> c.getRef()).sum();
  62. }
  63. public int getWillSave() {
  64. return classes.stream().mapToInt(c -> c.getWill()).sum();
  65. }
  66. public boolean isClassSkill(final String skillName) {
  67. return classes.stream().anyMatch( cc -> cc.isClassSkill(skillName) );
  68. }
  69. public int getLevel() {
  70. return classes.stream().mapToInt(DDCharacterClass::getLevel).sum();
  71. }
  72. }