v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
69
source/game/StarDamageDatabase.cpp
Normal file
69
source/game/StarDamageDatabase.cpp
Normal file
|
@ -0,0 +1,69 @@
|
|||
#include "StarDamageDatabase.hpp"
|
||||
#include "StarRandom.hpp"
|
||||
#include "StarAssets.hpp"
|
||||
#include "StarRoot.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
DamageDatabase::DamageDatabase() {
|
||||
auto assets = Root::singleton().assets();
|
||||
|
||||
auto elementalConfig = assets->json("/damage/elementaltypes.config");
|
||||
for (auto p : elementalConfig.iterateObject()) {
|
||||
ElementalType type;
|
||||
type.resistanceStat = p.second.getString("resistanceStat");
|
||||
for (auto particle : p.second.getObject("damageNumberParticles")) {
|
||||
type.damageNumberParticles.set(HitTypeNames.getLeft(particle.first), particle.second.toString());
|
||||
}
|
||||
m_elementalTypes.set(p.first, move(type));
|
||||
}
|
||||
|
||||
auto files = assets->scanExtension("damage");
|
||||
assets->queueJsons(files);
|
||||
for (auto file : files) {
|
||||
auto config = assets->json(file);
|
||||
String name = config.getString("kind");
|
||||
if (m_damageKinds.contains(name))
|
||||
throw StarException(strf("Duplicate damage kind Name %s. configfile %s", name, file));
|
||||
|
||||
DamageKind kind;
|
||||
kind.name = name;
|
||||
for (auto effect : config.getObject("effects", JsonObject())) {
|
||||
TargetMaterial material = effect.first;
|
||||
kind.effects.set(material, {});
|
||||
for (auto hit : effect.second.toObject()) {
|
||||
DamageEffect effect = DamageEffect {
|
||||
hit.second.get("sounds", JsonArray()),
|
||||
hit.second.get("particles", JsonArray())
|
||||
};
|
||||
kind.effects[material].set(HitTypeNames.getLeft(hit.first), effect);
|
||||
}
|
||||
}
|
||||
kind.elementalType = config.getString("elementalType", "default");
|
||||
if (!m_elementalTypes.contains(kind.elementalType))
|
||||
throw StarException(strf("Undefined elemental type %s in damage kind %s", kind.elementalType, name));
|
||||
|
||||
m_damageKinds.set(name, move(kind));
|
||||
}
|
||||
}
|
||||
|
||||
DamageKind const& DamageDatabase::damageKind(String kind) const {
|
||||
if (kind.empty())
|
||||
kind = "default";
|
||||
else
|
||||
kind = kind.toLower();
|
||||
|
||||
if (!m_damageKinds.contains(kind))
|
||||
throw StarException(strf("Unknown damage definition with kind '%s'.", kind));
|
||||
|
||||
return m_damageKinds.get(kind);
|
||||
}
|
||||
|
||||
ElementalType const& DamageDatabase::elementalType(String const& name) const {
|
||||
if (!m_damageKinds.contains(name))
|
||||
throw StarException(strf("Unknown elemental type with name '%s'.", name));
|
||||
|
||||
return m_elementalTypes.get(name);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue