Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarNpcDatabase.hpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/game/StarNpcDatabase.hpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/game/StarNpcDatabase.hpp')
-rw-r--r--source/game/StarNpcDatabase.hpp86
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