View Javadoc
1   /*
2    * Copyright (c) 2023 Kaiserpfalz EDV-Service, Roland T. Lichti.
3    *
4    * This program is free software: you can redistribute it and/or modify
5    * it under the terms of the GNU General Public License as published by
6    * the Free Software Foundation, either version 3 of the License, or
7    * (at your option) any later version.
8    *
9    * This program is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   * GNU General Public License for more details.
13   *
14   * You should have received a copy of the GNU General Public License
15   * along with this program.  If not, see <https://www.gnu.org/licenses/>.
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   * SkillType -- The skills defined in Torg.
37   *
38   * @author klenkes74 {@literal <rlichti@kaiserpfalz-edv.de>}
39   * @since 1.2.0  2021-05-23
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 }