aboutsummaryrefslogtreecommitdiff
path: root/src/creature.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/creature.h')
-rw-r--r--src/creature.h49
1 files changed, 31 insertions, 18 deletions
diff --git a/src/creature.h b/src/creature.h
index 1c8db21..c3ce5ae 100644
--- a/src/creature.h
+++ b/src/creature.h
@@ -1,25 +1,31 @@
#pragma once
#include "json.hpp"
-#include "jsonable.h"
#include "rules.h"
+#include "utils.h"
+#include "entry.h"
+#include <cmath>
namespace entry {
class Feature;
-}
-namespace entry {
class Item;
}
-class Armor;
-class Weapon;
typedef nlohmann::json json;
namespace creature {
+ class Creature;
+
class dmgType : public Jsonable {
public:
dmgType(const json& data) : type(data["type"]), qualifiers(data["qualifiers"]) {}
std::string type;
std::vector<std::string> qualifiers;
+ operator string() const {
+ if(qualifiers.empty()) {
+ return type;
+ }
+ return utils::join(qualifiers, ", ") + " " + type;
+ }
json toJson(void) const {
return json({
{"type", type},
@@ -29,9 +35,15 @@ namespace creature {
};
- class Creature : public Jsonable {
+ // Convenience function to calculate AC
+ const int getAC(const Creature& c);
+
+ // Convenience function to spit out everything about it
+ std::string genText(const Creature& c);
+
+ class Creature : public entry::Entry {
public:
- Creature(const json& data);
+ Creature(const json& data, const json& base);
virtual ~Creature() {};
// Getters
@@ -40,10 +52,13 @@ namespace creature {
std::map<rules::Skill, int> getSkills(void) const;
std::map<rules::Ability, int> getSaves(void) const;
+ //Override getText
+ virtual std::string getText() const override {return genText(*this);}
+
// Inline getters
- std::string getCreatureName(void) const {return creatureName;}
+ std::string getCreatureName(void) const {return getName();}
std::string getGivenName(void) const {return givenName;}
- std::string getType(void) const {return type;}
+ //std::string getType(void) const {return getType();}
std::string getSize(void) const {return size;}
std::string getAlignment(void) const {return alignment;}
double getCR(void) const {return cr;}
@@ -54,10 +69,14 @@ namespace creature {
std::vector<std::string> getSenses(void) const {return senses;}
std::string getSpeed(void) const {return speed;}
int getScore(const rules::Ability& ability) const {return stats.at(ability);}
- int getBonus(const rules::Ability& ability) const {return (int) (getScore(ability) - 10) / 2;}
+ int getBonus(const rules::Ability& ability) const {return std::floor((getScore(ability) - 10) / 2.0);}
int getProficiency(void) const {return proficiency;}
std::vector<std::shared_ptr<entry::Feature>> getFeatures(void) const {return features;}
std::vector<std::shared_ptr<entry::Item>> getInventory(void) const {return inventory;}
+ std::vector<dmgType> getDmgImmunities(void) const {return dmgImmunities;}
+ std::vector<dmgType> getDmgResistances(void) const {return dmgResistances;}
+ std::vector<dmgType> getDmgVulnerabilities(void) const {return dmgVulnerabilities;}
+ std::vector<dmgType> getCondImmunities(void) const {return condImmunities;}
// Setters (mutators)
@@ -80,9 +99,9 @@ namespace creature {
std::map<rules::Skill, int> skills;
//Immutable variables
- const std::string creatureName;
+ //const std::string creatureName;
const std::string size;
- const std::string type;
+ //const std::string type;
const std::string alignment;
const int hdCount;
const int hdSides;
@@ -113,10 +132,4 @@ namespace creature {
}
return Ts;
}
-
- // Convenience function to calculate AC
- const int getAC(const Creature& c);
-
- // Convenience function to spit out everything about it
- std::string genText(const Creature& c);
}