diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/StarNpcDatabase.hpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/game/StarNpcDatabase.hpp')
-rw-r--r-- | source/game/StarNpcDatabase.hpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/source/game/StarNpcDatabase.hpp b/source/game/StarNpcDatabase.hpp new file mode 100644 index 0000000..f95e797 --- /dev/null +++ b/source/game/StarNpcDatabase.hpp @@ -0,0 +1,86 @@ +#ifndef STAR_NPC_DATABASE_HPP +#define STAR_NPC_DATABASE_HPP + +#include "StarThread.hpp" +#include "StarHumanoid.hpp" +#include "StarDamageTypes.hpp" +#include "StarStatusTypes.hpp" +#include "StarEntitySplash.hpp" +#include "StarItemDescriptor.hpp" + +namespace Star { + +STAR_CLASS(Item); +STAR_CLASS(Npc); +STAR_CLASS(NpcDatabase); + +STAR_EXCEPTION(NpcException, StarException); + +struct NpcVariant { + String species; + String typeName; + float level; + uint64_t seed; + + Json overrides; + + StringList scripts; + unsigned initialScriptDelta; + Json scriptConfig; + + HumanoidIdentity humanoidIdentity; + Json humanoidConfig; + + Json movementParameters; + Json statusControllerSettings; + List<PersistentStatusEffect> innateStatusEffects; + Json touchDamageConfig; + + StringMap<ItemDescriptor> items; + + StringList dropPools; + bool disableWornArmor; + + bool persistent; + bool keepAlive; + + TeamType damageTeamType; + uint8_t damageTeam; + + Vec3B nametagColor; + + EntitySplashConfig splashConfig; +}; + +class NpcDatabase { +public: + NpcDatabase(); + + NpcVariant generateNpcVariant(String const& species, String const& typeName, float level) const; + NpcVariant generateNpcVariant(String const& species, String const& typeName, float level, uint64_t seed, Json const& overrides) const; + + ByteArray writeNpcVariant(NpcVariant const& variant) const; + NpcVariant readNpcVariant(ByteArray const& data) const; + + Json writeNpcVariantToJson(NpcVariant const& variant) const; + NpcVariant readNpcVariantFromJson(Json const& data) const; + + NpcPtr createNpc(NpcVariant const& npcVariant) const; + NpcPtr diskLoadNpc(Json const& diskStoree) const; + NpcPtr netLoadNpc(ByteArray const& netStore) const; + + List<Drawable> npcPortrait(NpcVariant const& npcVariant, PortraitMode mode) const; + + Json buildConfig(String const& typeName, Json const& overrides = Json()) const; + +private: + // Recursively merges maps and lets any non-null merger (including lists) + // override any base value + Json mergeConfigValues(Json const& base, Json const& merger) const; + + StringMap<Json> m_npcTypes; +}; + +} + +#endif |