1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package de.kaiserpfalzedv.rpg.torg.model.core;
19
20 import de.kaiserpfalzedv.rpg.torg.model.MapperEnum;
21 import de.kaiserpfalzedv.rpg.torg.model.actors.Attribute;
22 import lombok.AllArgsConstructor;
23 import lombok.Getter;
24 import lombok.ToString;
25
26 import jakarta.validation.constraints.NotNull;
27 import java.util.Collection;
28 import java.util.List;
29 import java.util.Optional;
30 import java.util.stream.Collectors;
31 import java.util.stream.Stream;
32
33 import static de.kaiserpfalzedv.rpg.torg.model.actors.Attribute.*;
34
35
36
37
38
39
40
41 @AllArgsConstructor
42 @Getter
43 @ToString(onlyExplicitlyIncluded = true)
44 public enum Skill implements MapperEnum<Skill> {
45 ENERGY_WEAPONS(DEXTERITY, "attr_EnergyWeapons", "energyWeapons"),
46 FIRE_COMBAT(DEXTERITY, "attr_FireCombat", "fireCombat"),
47 HEAVY_WEAPONS(DEXTERITY, "attr_HeavyWeapons", "heavyWeapons"),
48 MELEE_WEAPONS(DEXTERITY, "attr_MeleeWeapons", "meleeWeapons"),
49 MISSILE_WEAPONS(DEXTERITY, "attr_MissileWeapons", "missileWeapons"),
50 UNARMED_COMBAT(DEXTERITY, "attr_UnarmedCombat", "unarmedCombat"),
51
52 INTIMIDATION(SPIRIT, "attr_Intimidate", "intimidation"),
53 MANEUVER(DEXTERITY, "attr_Maneuver", "maneuver"),
54 TAUNT(CHARISMA, "attr_Taunt", "taunt"),
55 TRICK(MIND, "attr_Trick", "trick"),
56
57 AIR_VEHICLES(DEXTERITY, "attr_AirVehicles", "airVehicles"),
58 ALTERATION(MIND, "attr_Alteration", "alteration"),
59 APPORTATION(SPIRIT, "attr_Apportation", "apportation"),
60 BEAST_RIDING(DEXTERITY, "attr_BeastRiding", "beastRiding"),
61 COMPUTERS(MIND, "attr_Computers", "computers"),
62 CONJURATION(SPIRIT, "attr_Conjuration", "conjuration"),
63 DIVINATION(MIND, "attr_Divination", "divination"),
64 DODGE(DEXTERITY, "attr_Dodge", "dodge"),
65 EVIDENCE_ANALYSIS(MIND, "attr_EvidenceAnalysis", "evidenceAnalysis"),
66 FAITH(SPIRIT, "attr_Faith", "faith"),
67 FIND(MIND, "attr_Find", "find"),
68 FIRST_AID(MIND, "attr_FirstAid", "firstAid"),
69 KINESIS(SPIRIT, "attr_Kinesis", "kinesis"),
70 LAND_VEHICLES(DEXTERITY, "attr_LandVehicles", "landVehicles"),
71 LANGUAGE(MIND, "language", "language"),
72 LOCKPICKING(DEXTERITY, "attr_Lockpicking", "lockpicking"),
73 MEDICINE(MIND, "attr_Medicine", "medicine"),
74 PERSUASION(CHARISMA, "attr_Persuasion", "persuasion"),
75 PRECOGNITION(MIND, "attr_Precognition", "precognition"),
76 PROFESSION(MIND, "attr_Profession", "profession"),
77 REALITY(SPIRIT, "attr_Reality", "reality"),
78 SCHOLAR(MIND, "attr_Scholar", "scholar"),
79 SCIENCE(MIND, "attr_Science", "science"),
80 STEALTH(DEXTERITY, "attr_Stealth", "stealth"),
81 STREETWISE(CHARISMA, "attr_Streetwise", "streetwise"),
82 SURVIVAL(MIND, "attr_Survival", "survival"),
83 TELEPATHY(CHARISMA, "attr_Telepathy", "telepathy"),
84 TRACKING(MIND, "attr_Tracking", "tracking"),
85 WATER_VEHICLES(DEXTERITY, "attr_WaterVehicles", "waterVehicles"),
86 WILLPOWER(SPIRIT, "attr_Willpower", "willpower"),
87 ;
88
89 private final Attribute attribute;
90 private final String roll20;
91 private final String foundry;
92
93 public static Optional<Skill> mapFoundry(final String name) {
94 return REALITY.mapFromFoundry(name);
95 }
96
97 public Optional<Skill> mapFromFoundry(@NotNull final String name) {
98 return allSkills().stream()
99 .filter(e -> e.foundry.equals(name)).distinct()
100 .findFirst();
101 }
102
103 public Optional<Skill> mapFromRoll20(@NotNull final String name) {
104 return allSkills().stream()
105 .filter(e -> e.roll20.equals(name)).distinct()
106 .findFirst();
107 }
108
109 public List<Skill> allSkills() {
110 return Stream.of(combatSkills(), interactionAttacks(), otherSkills())
111 .flatMap(Collection::stream)
112 .collect(Collectors.toList());
113 }
114
115 public List<Skill> combatSkills() {
116 return List.of(
117 ENERGY_WEAPONS,
118 FIRE_COMBAT,
119 HEAVY_WEAPONS,
120 MELEE_WEAPONS,
121 MISSILE_WEAPONS,
122 UNARMED_COMBAT
123 );
124 }
125
126 public List<Skill> interactionAttacks() {
127 return List.of(
128 INTIMIDATION,
129 MANEUVER,
130 TAUNT,
131 TRICK
132 );
133 }
134
135 public List<Skill> otherSkills() {
136 return List.of(
137 AIR_VEHICLES,
138 ALTERATION,
139 APPORTATION,
140 BEAST_RIDING,
141 COMPUTERS,
142 CONJURATION,
143 DIVINATION,
144 DODGE,
145 EVIDENCE_ANALYSIS,
146 FAITH,
147 FIND,
148 FIRST_AID,
149 KINESIS,
150 LAND_VEHICLES,
151 LANGUAGE,
152 LOCKPICKING,
153 MEDICINE,
154 PERSUASION,
155 PRECOGNITION,
156 PROFESSION,
157 REALITY,
158 SCHOLAR,
159 SCIENCE,
160 STEALTH,
161 STREETWISE,
162 SURVIVAL,
163 TELEPATHY,
164 TRACKING,
165 WATER_VEHICLES,
166 WILLPOWER
167 );
168 }
169 }