chore: restructure t6 weapon camo json

This commit is contained in:
Jan 2024-03-24 15:38:46 +01:00
parent c881cd6fd3
commit 742b8d5bc6
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
4 changed files with 38 additions and 26 deletions

View File

@ -6666,6 +6666,13 @@ namespace T6
const char* flameCooldownSound; const char* flameCooldownSound;
}; };
enum WeaponCamoMaterialFlags
{
WCM_REPLACE_COLOR = 0x1,
WCM_REPLACE_NORMAL = 0x2,
WCM_REPLACE_SPECULAR = 0x4,
};
struct WeaponCamoMaterial struct WeaponCamoMaterial
{ {
uint16_t replaceFlags; uint16_t replaceFlags;

View File

@ -23,16 +23,26 @@ namespace T6
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(JsonWeaponCamoSet, solidCamoImage, patternCamoImage, patternOffset, patternScale); NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(JsonWeaponCamoSet, solidCamoImage, patternCamoImage, patternOffset, patternScale);
class JsonWeaponCamoMaterialOverride
{
public:
std::string baseMaterial;
std::string camoMaterial;
};
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(JsonWeaponCamoMaterialOverride, baseMaterial, camoMaterial);
class JsonWeaponCamoMaterial class JsonWeaponCamoMaterial
{ {
public: public:
unsigned replaceFlags; bool useColorMap;
std::vector<std::string> baseMaterials; bool useNormalMap;
std::vector<std::string> camoMaterials; bool useSpecularMap;
std::vector<JsonWeaponCamoMaterialOverride> materialOverrides;
std::array<float, 8> shaderConsts; std::array<float, 8> shaderConsts;
}; };
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(JsonWeaponCamoMaterial, replaceFlags, baseMaterials, camoMaterials, shaderConsts); NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(JsonWeaponCamoMaterial, useColorMap, useNormalMap, useSpecularMap, materialOverrides, shaderConsts);
class JsonWeaponCamoMaterialSet class JsonWeaponCamoMaterialSet
{ {

View File

@ -86,16 +86,15 @@ namespace
WeaponCamoMaterial& weaponCamoMaterial, WeaponCamoMaterial& weaponCamoMaterial,
const WeaponCamo& weaponCamo) const const WeaponCamo& weaponCamo) const
{ {
weaponCamoMaterial.replaceFlags = static_cast<uint16_t>(jWeaponCamoMaterial.replaceFlags); if (jWeaponCamoMaterial.useColorMap)
weaponCamoMaterial.replaceFlags |= WCM_REPLACE_COLOR;
if (jWeaponCamoMaterial.useNormalMap)
weaponCamoMaterial.replaceFlags |= WCM_REPLACE_NORMAL;
if (jWeaponCamoMaterial.useSpecularMap)
weaponCamoMaterial.replaceFlags |= WCM_REPLACE_SPECULAR;
if (jWeaponCamoMaterial.baseMaterials.size() != jWeaponCamoMaterial.camoMaterials.size()) weaponCamoMaterial.numBaseMaterials = static_cast<uint16_t>(jWeaponCamoMaterial.materialOverrides.size());
{ if (!jWeaponCamoMaterial.materialOverrides.empty())
PrintError(weaponCamo, "baseMaterials and camoMaterials arrays must have the same amount of entries");
return false;
}
weaponCamoMaterial.numBaseMaterials = static_cast<uint16_t>(jWeaponCamoMaterial.baseMaterials.size());
if (weaponCamoMaterial.numBaseMaterials > 0)
{ {
weaponCamoMaterial.baseMaterials = static_cast<Material**>(m_memory.Alloc(sizeof(Material*) * weaponCamoMaterial.numBaseMaterials)); weaponCamoMaterial.baseMaterials = static_cast<Material**>(m_memory.Alloc(sizeof(Material*) * weaponCamoMaterial.numBaseMaterials));
weaponCamoMaterial.camoMaterials = static_cast<Material**>(m_memory.Alloc(sizeof(Material*) * weaponCamoMaterial.numBaseMaterials)); weaponCamoMaterial.camoMaterials = static_cast<Material**>(m_memory.Alloc(sizeof(Material*) * weaponCamoMaterial.numBaseMaterials));
@ -104,10 +103,9 @@ namespace
for (auto i = 0u; i < weaponCamoMaterial.numBaseMaterials; i++) for (auto i = 0u; i < weaponCamoMaterial.numBaseMaterials; i++)
{ {
auto* baseMaterial = const auto& materialOverride = jWeaponCamoMaterial.materialOverrides[i];
static_cast<XAssetInfo<Material>*>(m_manager.LoadDependency(ASSET_TYPE_MATERIAL, jWeaponCamoMaterial.baseMaterials[i])); auto* baseMaterial = static_cast<XAssetInfo<Material>*>(m_manager.LoadDependency(ASSET_TYPE_MATERIAL, materialOverride.baseMaterial));
auto* camoMaterial = auto* camoMaterial = static_cast<XAssetInfo<Material>*>(m_manager.LoadDependency(ASSET_TYPE_MATERIAL, materialOverride.camoMaterial));
static_cast<XAssetInfo<Material>*>(m_manager.LoadDependency(ASSET_TYPE_MATERIAL, jWeaponCamoMaterial.camoMaterials[i]));
if (!baseMaterial) if (!baseMaterial)
{ {

View File

@ -55,20 +55,17 @@ namespace
static void CreateJsonWeaponCamoMaterial(JsonWeaponCamoMaterial& jWeaponCamoMaterial, const WeaponCamoMaterial& weaponCamoMaterial) static void CreateJsonWeaponCamoMaterial(JsonWeaponCamoMaterial& jWeaponCamoMaterial, const WeaponCamoMaterial& weaponCamoMaterial)
{ {
jWeaponCamoMaterial.replaceFlags = weaponCamoMaterial.replaceFlags; jWeaponCamoMaterial.useColorMap = weaponCamoMaterial.replaceFlags & WCM_REPLACE_COLOR;
jWeaponCamoMaterial.useNormalMap = weaponCamoMaterial.replaceFlags & WCM_REPLACE_NORMAL;
jWeaponCamoMaterial.useSpecularMap = weaponCamoMaterial.replaceFlags & WCM_REPLACE_SPECULAR;
jWeaponCamoMaterial.baseMaterials.resize(weaponCamoMaterial.numBaseMaterials); jWeaponCamoMaterial.materialOverrides.resize(weaponCamoMaterial.numBaseMaterials);
for (auto i = 0u; i < weaponCamoMaterial.numBaseMaterials; i++) for (auto i = 0u; i < weaponCamoMaterial.numBaseMaterials; i++)
{ {
if (weaponCamoMaterial.baseMaterials[i] && weaponCamoMaterial.baseMaterials[i]->info.name) if (weaponCamoMaterial.baseMaterials[i] && weaponCamoMaterial.baseMaterials[i]->info.name)
jWeaponCamoMaterial.baseMaterials[i] = AssetName(weaponCamoMaterial.baseMaterials[i]->info.name); jWeaponCamoMaterial.materialOverrides[i].baseMaterial = AssetName(weaponCamoMaterial.baseMaterials[i]->info.name);
}
jWeaponCamoMaterial.camoMaterials.resize(weaponCamoMaterial.numBaseMaterials);
for (auto i = 0u; i < weaponCamoMaterial.numBaseMaterials; i++)
{
if (weaponCamoMaterial.camoMaterials[i] && weaponCamoMaterial.camoMaterials[i]->info.name) if (weaponCamoMaterial.camoMaterials[i] && weaponCamoMaterial.camoMaterials[i]->info.name)
jWeaponCamoMaterial.camoMaterials[i] = AssetName(weaponCamoMaterial.camoMaterials[i]->info.name); jWeaponCamoMaterial.materialOverrides[i].camoMaterial = AssetName(weaponCamoMaterial.camoMaterials[i]->info.name);
} }
for (auto i = 0u; i < std::extent_v<decltype(WeaponCamoMaterial::shaderConsts)>; i++) for (auto i = 0u; i < std::extent_v<decltype(WeaponCamoMaterial::shaderConsts)>; i++)