Files
StorytellersBestFriend/sbf-cpp/Abilities.cpp

280 lines
8.0 KiB
C++

#include "Abilities.h"
#include <iostream>
#include <string>
namespace SBF {
using std::ostream;
using std::string;
using std::vector;
const int kAbilitiesCount = 3;
const std::string kAbilityUnknownLabel = "";
const std::string kAbilityTalentsSingular = "Talent";
const std::string kAbilityTalentsPlural = "Talents";
const std::string kAbilitySkillsSingular = "Skill";
const std::string kAbilitySkillsPlural = "Skills";
const std::string kAbilityKnowledgesSingular = "Knowledge";
const std::string kAbilityKnowledgesPlural = "Knowledges";
const AbilityType kAbilityGroupUnknown = {0, "", ""};
const AbilityType kAbilityGroupTalents = {
kAbilityTalentsId,
kAbilityTalentsSingular,
kAbilityTalentsPlural,
};
const AbilityType kAbilityGroupSkills = {
kAbilitySkillsId,
kAbilitySkillsSingular,
kAbilitySkillsPlural,
};
const AbilityType kAbilityGroupKnowledges = {
kAbilityKnowledgesId,
kAbilityKnowledgesSingular,
kAbilityKnowledgesPlural,
};
const AbilityType kAbilities[]{
kAbilityGroupUnknown,
kAbilityGroupTalents,
kAbilityGroupSkills,
kAbilityGroupKnowledges,
};
const std::string kTalentActingLabel = "Acting";
const std::string kTalentAlertnessLabel = "Alertness";
const std::string kTalentAthleticsLabel = "Athletics";
const std::string kTalentBrawlLabel = "Brawl";
const std::string kTalentDodgeLabel = "Dodge";
const std::string kTalentEmpathyLabel = "Empathy";
const std::string kTalentIntimidationLabel = "Intimidation";
const std::string kTalentLeadershipLabel = "Leadership";
const std::string kTalentStreetwiseLabel = "Streetwise";
const std::string kTalentSubterfugeLabel = "Subterfuge";
const std::string kSkillAnimalKenLabel = "Animal Ken";
const std::string kSkillDriveLabel = "Drive";
const std::string kSkillEtiquetteLabel = "Etiquette";
const std::string kSkillFirearmsLabel = "Firearms";
const std::string kSkillMeleeLabel = "Melee";
const std::string kSkillMusicLabel = "Music";
const std::string kSkillRepairLabel = "Repair";
const std::string kSkillSecurityLabel = "Security";
const std::string kSkillStealthLabel = "Stealth";
const std::string kSkillSurvivalLabel = "Survival";
const std::string kKnowledgeBureaucracyLabel = "Bureaucracy";
const std::string kKnowledgeComputerLabel = "Computer";
const std::string kKnowledgeFinanceLabel = "Finance";
const std::string kKnowledgeInvestigationLabel = "Investigation";
const std::string kKnowledgeLawLabel = "Law";
const std::string kKnowledgeLinguisticsLabel = "Linguistics";
const std::string kKnowledgeMedicineLabel = "Medicine";
const std::string kKnowledgeOccultLabel = "Occult";
const std::string kKnowledgePoliticsLabel = "Politics";
const std::string kKnowledgeScienceLabel = "Science";
const int kTalentsCount = 10;
const int kSkillsCount = 10;
const int kKnowledgesCount = 10;
const std::string kSkills[] = {
kAbilityUnknownLabel,
kSkillAnimalKenLabel,
kSkillDriveLabel,
kSkillEtiquetteLabel,
kSkillFirearmsLabel,
kSkillMeleeLabel,
kSkillMusicLabel,
kSkillRepairLabel,
kSkillSecurityLabel,
kSkillStealthLabel,
kSkillSurvivalLabel,
};
const std::string kTalents[] = {
kAbilityUnknownLabel,
kTalentActingLabel,
kTalentAlertnessLabel,
kTalentAthleticsLabel,
kTalentBrawlLabel,
kTalentDodgeLabel,
kTalentEmpathyLabel,
kTalentIntimidationLabel,
kTalentLeadershipLabel,
kTalentStreetwiseLabel,
kTalentSubterfugeLabel,
};
const std::string kKnowledges[] = {
kAbilityUnknownLabel,
kKnowledgeBureaucracyLabel,
kKnowledgeComputerLabel,
kKnowledgeFinanceLabel,
kKnowledgeInvestigationLabel,
kKnowledgeLawLabel,
kKnowledgeLinguisticsLabel,
kKnowledgeMedicineLabel,
kKnowledgeOccultLabel,
kKnowledgePoliticsLabel,
kKnowledgeScienceLabel,
};
ostream& operator<<(ostream& os, const AbilityType& ability) {
os << "AbilityGroup: {id: " << ability.id << ", singular: \"" << ability.singular << "\", plural: \""
<< ability.plural << "\"}";
return os;
}
bool operator==(const AbilityType& left, const AbilityType& right) {
return left.id == right.id && left.singular == right.singular && left.plural == right.plural;
}
bool operator!=(const AbilityType& left, const AbilityType& right) {
return !(left == right);
}
void FillAbilities(vector<AbilityType>& abilities) {
abilities.clear();
abilities.push_back(kAbilityGroupTalents);
abilities.push_back(kAbilityGroupSkills);
abilities.push_back(kAbilityGroupKnowledges);
}
vector<string> GetAbilityGroupPluralLabels() {
vector<string> labels;
for (int id = 1; id <= kAbilitiesCount; id++) {
labels.push_back(GetAbility(id).plural);
}
return labels;
}
void FillAbilitiesForAbilityGroup(vector<string>& abilities, int id) {
abilities.clear();
int numAbilities = GetNumItemsForAbilityGroup(id);
switch (id) {
case kAbilityTalentsId:
for (int talent_id = 1; talent_id <= numAbilities; talent_id++) {
abilities.push_back(GetTalentLabel(talent_id));
}
break;
case kAbilitySkillsId:
for (int skill_id = 1; skill_id <= numAbilities; skill_id++) {
abilities.push_back(GetSkillLabel(skill_id));
}
break;
case kAbilityKnowledgesId:
for (int knowledge_id = 1; knowledge_id <= numAbilities; knowledge_id++) {
abilities.push_back(GetKnowledgeLabel(knowledge_id));
}
break;
}
}
vector<string> GetAbilityLabelsForAbilityGroup(int group_id) {
vector<string> labels;
int count = GetNumItemsForAbilityGroup(group_id);
for (int id = 1; id <= count; id++) {
labels.push_back(GetAbilityLabel(group_id, id));
}
return labels;
}
void FillAbilityLabels(vector<string>& labels, int id) {
labels.clear();
switch (id) {
case kAbilityTalentsId:
FillTalentLabels(labels);
break;
case kAbilitySkillsId:
FillSkillLabels(labels);
break;
case kAbilityKnowledgesId:
FillKnowledgeLabels(labels);
break;
}
}
void FillKnowledgeLabels(vector<string>& labels) {
labels.clear();
int numAbilities = GetNumItemsForAbilityGroup(kAbilityKnowledgesId);
for (int knowledge_id = 1; knowledge_id <= numAbilities; knowledge_id++) {
labels.push_back(GetKnowledgeLabel(knowledge_id));
}
}
void FillSkillLabels(vector<string>& labels) {
labels.clear();
int numAbilities = GetNumItemsForAbilityGroup(kAbilitySkillsId);
for (int skill_id = 1; skill_id <= numAbilities; skill_id++) {
labels.push_back(GetSkillLabel(skill_id));
}
}
void FillTalentLabels(vector<string>& labels) {
labels.clear();
int numAbilities = GetNumItemsForAbilityGroup(kAbilityTalentsId);
for (int talent_id = 1; talent_id <= numAbilities; talent_id++) {
labels.push_back(GetTalentLabel(talent_id));
}
}
const AbilityType& GetAbility(int ability_group_id) {
switch (ability_group_id) {
case kAbilityTalentsId:
return kAbilityGroupTalents;
case kAbilitySkillsId:
return kAbilityGroupSkills;
case kAbilityKnowledgesId:
return kAbilityGroupKnowledges;
};
return kAbilityGroupUnknown;
}
const string GetAbilityLabel(int ability_group_id, int ability_id) {
switch (ability_group_id) {
case kAbilityTalentsId:
return GetTalentLabel(ability_id);
case kAbilitySkillsId:
return GetSkillLabel(ability_id);
case kAbilityKnowledgesId:
return GetKnowledgeLabel(ability_id);
};
return "";
}
const std::string GetKnowledgeLabel(int talent_id) {
if (talent_id > 0 && talent_id <= kKnowledgesCount) {
return kKnowledges[talent_id];
}
return "";
}
int GetNumItemsForAbilityGroup(int ability_group_id) {
switch (ability_group_id) {
case kAbilityTalentsId:
return kTalentsCount;
case kAbilitySkillsId:
return kSkillsCount;
case kAbilityKnowledgesId:
return kKnowledgesCount;
}
return 0;
}
const std::string GetSkillLabel(int skill_id) {
if (skill_id > 0 && skill_id <= kSkillsCount) {
return kSkills[skill_id];
}
return "";
}
const std::string GetTalentLabel(int talent_id) {
if (talent_id > 0 && talent_id <= kTalentsCount) {
return kTalents[talent_id];
}
return "";
}
int GetNumAbilityGroups() {
return kAbilitiesCount;
}
} // End namespace SBF