From 18671f57e1828763967ed1f088d5e485110b40bd Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Sun, 3 Jun 2018 05:27:43 -0500 Subject: [PATCH] phew --- .../shared/template/ServerArmorTemplate.cpp | 999 +++--- .../template/ServerBuildingObjectTemplate.cpp | 389 +- .../template/ServerCreatureObjectTemplate.cpp | 1269 ++++--- .../ServerDraftSchematicObjectTemplate.cpp | 1641 +++++---- ...verHarvesterInstallationObjectTemplate.cpp | 481 ++- ...rverManufactureSchematicObjectTemplate.cpp | 1059 +++--- .../shared/template/ServerObjectTemplate.cpp | 3117 ++++++++--------- .../ServerResourceClassObjectTemplate.cpp | 534 ++- .../template/ServerTangibleObjectTemplate.cpp | 755 ++-- .../template/ServerVehicleObjectTemplate.cpp | 485 ++- .../template/ServerWeaponObjectTemplate.cpp | 961 +++-- .../template/SharedCreatureObjectTemplate.cpp | 1437 ++++---- .../SharedDraftSchematicObjectTemplate.cpp | 1308 ++++--- .../shared/template/SharedObjectTemplate.cpp | 1284 ++++--- .../template/SharedShipObjectTemplate.cpp | 25 +- .../template/SharedTangibleObjectTemplate.cpp | 2749 +++++++-------- .../template/SharedVehicleObjectTemplate.cpp | 650 ++-- 17 files changed, 9287 insertions(+), 9856 deletions(-) diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp index f4833a9e..3ff86320 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp @@ -19,74 +19,65 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerArmorTemplate::ServerArmorTemplate(const std::string & filename) +ServerArmorTemplate::ServerArmorTemplate(const std::string &filename) //@BEGIN TFD INIT - : TpfTemplate(filename) - ,m_specialProtectionLoaded(false) - ,m_specialProtectionAppend(false) + : TpfTemplate(filename), m_specialProtectionLoaded(false), m_specialProtectionAppend(false) //@END TFD INIT { -} // ServerArmorTemplate::ServerArmorTemplate +} // ServerArmorTemplate::ServerArmorTemplate /** * Class destructor. */ -ServerArmorTemplate::~ServerArmorTemplate() -{ +ServerArmorTemplate::~ServerArmorTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_specialProtection.begin(); iter != m_specialProtection.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_specialProtection.clear(); - } + { + std::vector::iterator iter; + for (iter = m_specialProtection.begin(); iter != m_specialProtection.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_specialProtection.clear(); + } //@END TFD CLEANUP -} // ServerArmorTemplate::~ServerArmorTemplate +} // ServerArmorTemplate::~ServerArmorTemplate /** * Static function used to register this template. */ -void ServerArmorTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerArmorTemplate_tag, create); -} // ServerArmorTemplate::registerMe +void ServerArmorTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerArmorTemplate_tag, create); +} // ServerArmorTemplate::registerMe /** * Creates a ServerArmorTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerArmorTemplate::create(const std::string & filename) -{ - return new ServerArmorTemplate(filename); -} // ServerArmorTemplate::create +ObjectTemplate *ServerArmorTemplate::create(const std::string &filename) { + return new ServerArmorTemplate(filename); +} // ServerArmorTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerArmorTemplate::getId(void) const -{ - return ServerArmorTemplate_tag; -} // ServerArmorTemplate::getId +Tag ServerArmorTemplate::getId(void) const { + return ServerArmorTemplate_tag; +} // ServerArmorTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerArmorTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerArmorTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerArmorTemplate::getTemplateVersion /** @@ -94,199 +85,173 @@ Tag ServerArmorTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerArmorTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerArmorTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerArmorTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerArmorTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerArmorTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerArmorTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "rating") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_rating; - } - fprintf(stderr, "trying to access single-parameter \"rating\" as an array\n"); - } - else if (strcmp(name, "integrity") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_integrity; - } - fprintf(stderr, "trying to access single-parameter \"integrity\" as an array\n"); - } - else if (strcmp(name, "effectiveness") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_effectiveness; - } - fprintf(stderr, "trying to access single-parameter \"effectiveness\" as an array\n"); - } - else if (strcmp(name, "vulnerability") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_vulnerability; - } - fprintf(stderr, "trying to access single-parameter \"vulnerability\" as an array\n"); - } - else if (strcmp(name, "encumbrance") == 0) - { - if (index >= 0 && index < 3) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_encumbrance[index]; - } - fprintf(stderr, "index for parameter \"encumbrance\" out of bounds\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerArmorTemplate::getCompilerIntegerParam +CompilerIntegerParam *ServerArmorTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("rating"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_rating; + } + fprintf(stderr, "trying to access single-parameter \"rating\" as an array\n"); + } + break; + case constcrc("integrity"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_integrity; + } + fprintf(stderr, "trying to access single-parameter \"integrity\" as an array\n"); + } + break; + case constcrc("effectiveness"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_effectiveness; + } + fprintf(stderr, "trying to access single-parameter \"effectiveness\" as an array\n"); + } + break; + case constcrc("vulnerability"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_vulnerability; + } + fprintf(stderr, "trying to access single-parameter \"vulnerability\" as an array\n"); + } + break; + case constcrc("encumbrance"): { + if (index >= 0 && index < 3) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_encumbrance[index]; + } + fprintf(stderr, "index for parameter \"encumbrance\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerArmorTemplate::getCompilerIntegerParam -FloatParam * ServerArmorTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //ServerArmorTemplate::getFloatParam +FloatParam *ServerArmorTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //ServerArmorTemplate::getFloatParam -BoolParam * ServerArmorTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //ServerArmorTemplate::getBoolParam +BoolParam *ServerArmorTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerArmorTemplate::getBoolParam -StringParam * ServerArmorTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringParam(name, deepCheck, index); -} //ServerArmorTemplate::getStringParam +StringParam *ServerArmorTemplate::getStringParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringParam(name, deepCheck, index); +} //ServerArmorTemplate::getStringParam -StringIdParam * ServerArmorTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerArmorTemplate::getStringIdParam +StringIdParam *ServerArmorTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerArmorTemplate::getStringIdParam -VectorParam * ServerArmorTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerArmorTemplate::getVectorParam +VectorParam *ServerArmorTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerArmorTemplate::getVectorParam -DynamicVariableParam * ServerArmorTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerArmorTemplate::getDynamicVariableParam +DynamicVariableParam *ServerArmorTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerArmorTemplate::getDynamicVariableParam -StructParamOT * ServerArmorTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "specialProtection") == 0) - { - if (index >= 0 && index < static_cast(m_specialProtection.size())) - return m_specialProtection[index]; - if (index == static_cast(m_specialProtection.size())) - { - StructParamOT *temp = new StructParamOT(); - m_specialProtection.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"specialProtection\" out of bounds\n"); - } - else - return TpfTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //ServerArmorTemplate::getStructParamOT +StructParamOT *ServerArmorTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("specialProtection"): { + if (index >= 0 && index < static_cast(m_specialProtection.size())) + return m_specialProtection[index]; + if (index == static_cast(m_specialProtection.size())) { + StructParamOT *temp = new StructParamOT(); + m_specialProtection.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"specialProtection\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getStructParamOT(name, deepCheck, index); + break; + } + return nullptr; +} //ServerArmorTemplate::getStructParamOT -TriggerVolumeParam * ServerArmorTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerArmorTemplate::getTriggerVolumeParam +TriggerVolumeParam *ServerArmorTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerArmorTemplate::getTriggerVolumeParam -void ServerArmorTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "specialProtection") == 0) - param.setValue(new _SpecialProtection("")); - else - TpfTemplate::initStructParamOT(param, name); -} // ServerArmorTemplate::initStructParamOT +void ServerArmorTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + if (strcmp(name, "specialProtection") == 0) + param.setValue(new _SpecialProtection("")); + else + TpfTemplate::initStructParamOT(param, name); +} // ServerArmorTemplate::initStructParamOT -void ServerArmorTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "specialProtection") == 0) - { - m_specialProtection.clear(); - m_specialProtectionLoaded = true; - } - else - TpfTemplate::setAsEmptyList(name); -} // ServerArmorTemplate::setAsEmptyList +void ServerArmorTemplate::setAsEmptyList(const char *name) { + if (strcmp(name, "specialProtection") == 0) { + m_specialProtection.clear(); + m_specialProtectionLoaded = true; + } else + TpfTemplate::setAsEmptyList(name); +} // ServerArmorTemplate::setAsEmptyList -void ServerArmorTemplate::setAppend(const char *name) -{ - if (strcmp(name, "specialProtection") == 0) - m_specialProtectionAppend = true; - else - TpfTemplate::setAppend(name); -} // ServerArmorTemplate::setAppend +void ServerArmorTemplate::setAppend(const char *name) { + if (strcmp(name, "specialProtection") == 0) + m_specialProtectionAppend = true; + else + TpfTemplate::setAppend(name); +} // ServerArmorTemplate::setAppend -bool ServerArmorTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "specialProtection") == 0) - return m_specialProtectionAppend; - else - return TpfTemplate::isAppend(name); -} // ServerArmorTemplate::isAppend +bool ServerArmorTemplate::isAppend(const char *name) const { + if (strcmp(name, "specialProtection") == 0) + return m_specialProtectionAppend; + else + return TpfTemplate::isAppend(name); +} // ServerArmorTemplate::isAppend -int ServerArmorTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "specialProtection") == 0) - { - return m_specialProtection.size(); - } - else if (strcmp(name, "encumbrance") == 0) - { - return sizeof(m_encumbrance) / sizeof(CompilerIntegerParam); - } - else - return TpfTemplate::getListLength(name); -} // ServerArmorTemplate::getListLength +int ServerArmorTemplate::getListLength(const char *name) const { + if (strcmp(name, "encumbrance") == 0) { + return sizeof(m_encumbrance) / sizeof(CompilerIntegerParam); + } else if (strcmp(name, "specialProtection") == 0) { + return m_specialProtection.size(); + } else + return TpfTemplate::getListLength(name); +} // ServerArmorTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -294,103 +259,102 @@ int ServerArmorTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerArmorTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerArmorTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerArmorTemplate_tag) - { - TpfTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerArmorTemplate_tag) { + TpfTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,1)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 1)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "rating") == 0) - m_rating.loadFromIff(file); - else if (strcmp(paramName, "integrity") == 0) - m_integrity.loadFromIff(file); - else if (strcmp(paramName, "effectiveness") == 0) - m_effectiveness.loadFromIff(file); - else if (strcmp(paramName, "specialProtection") == 0) - { - std::vector::iterator iter; - for (iter = m_specialProtection.begin(); iter != m_specialProtection.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_specialProtection.clear(); - m_specialProtectionAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_specialProtection.push_back(newData); - } - m_specialProtectionLoaded = true; - } - else if (strcmp(paramName, "vulnerability") == 0) - m_vulnerability.loadFromIff(file); - else if (strcmp(paramName, "encumbrance") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 3, ("Template %s: read array size of %d for array \"encumbrance\" of size 3, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 3 && j < listCount; ++j) - m_encumbrance[j].loadFromIff(file); - // if there are more params for encumbrance read and dump them - for (; j < listCount; ++j) - { - CompilerIntegerParam dummy; - dummy.loadFromIff(file); - } - } - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - TpfTemplate::load(file); - file.exitForm(); - return; -} // ServerArmorTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("rating"): + m_rating.loadFromIff(file); + break; + case constcrc("integrity"): + m_integrity.loadFromIff(file); + break; + case constcrc("effectiveness"): + m_effectiveness.loadFromIff(file); + break; + case constcrc("specialProtection"): { + std::vector::iterator iter; + for (iter = m_specialProtection.begin(); iter != m_specialProtection.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_specialProtection.clear(); + m_specialProtectionAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_specialProtection.push_back(newData); + } + m_specialProtectionLoaded = true; + } + break; + case constcrc("vulnerability"): + m_vulnerability.loadFromIff(file); + break; + case constcrc("encumbrance"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 3, + ("Template %s: read array size of %d for array \"encumbrance\" of size 3, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 3 && j < listCount; ++j) + m_encumbrance[j].loadFromIff(file); + // if there are more params for encumbrance read and dump them + for (; j < listCount; ++j) { + CompilerIntegerParam dummy; + dummy.loadFromIff(file); + } + } + break; + } + file.exitChunk(true); + } + + file.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // ServerArmorTemplate::load /** * Saves the template data to an iff file. @@ -398,83 +362,84 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerArmorTemplate::save(Iff &file) -{ -int count; +void ServerArmorTemplate::save(Iff &file) { + int count; - file.insertForm(ServerArmorTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,1)); - file.allowNonlinearFunctions(); + file.insertForm(ServerArmorTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 1)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save rating - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("rating"); - m_rating.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save integrity - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("integrity"); - m_integrity.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save effectiveness - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("effectiveness"); - m_effectiveness.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_specialProtectionLoaded) - { - // mark the list as empty and extending the base list - m_specialProtectionAppend = true; - } - // save specialProtection - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("specialProtection"); - file.insertChunkData(&m_specialProtectionAppend, sizeof(bool)); - count = m_specialProtection.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_specialProtection[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save vulnerability - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("vulnerability"); - m_vulnerability.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save encumbrance - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("encumbrance"); - count = 3; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 3; ++i) - m_encumbrance[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; + // save rating + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("rating"); + m_rating.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save integrity + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("integrity"); + m_integrity.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save effectiveness + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("effectiveness"); + m_effectiveness.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_specialProtectionLoaded) { + // mark the list as empty and extending the base list + m_specialProtectionAppend = true; + } + // save specialProtection + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("specialProtection"); + file.insertChunkData(&m_specialProtectionAppend, sizeof(bool)); + count = m_specialProtection.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_specialProtection[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save vulnerability + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("vulnerability"); + m_vulnerability.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save encumbrance + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("encumbrance"); + count = 3; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 3; ++i) + m_encumbrance[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - TpfTemplate::save(file); - file.exitForm(); -} // ServerArmorTemplate::save + file.exitForm(true); + TpfTemplate::save(file); + file.exitForm(); +} // ServerArmorTemplate::save //============================================================================= @@ -483,148 +448,131 @@ int count; /** * Class constructor. */ -ServerArmorTemplate::_SpecialProtection::_SpecialProtection(const std::string & filename) - : TpfTemplate(filename) -{ -} // ServerArmorTemplate::_SpecialProtection::_SpecialProtection +ServerArmorTemplate::_SpecialProtection::_SpecialProtection(const std::string &filename) + : TpfTemplate(filename) { +} // ServerArmorTemplate::_SpecialProtection::_SpecialProtection /** * Class destructor. */ -ServerArmorTemplate::_SpecialProtection::~_SpecialProtection() -{ -} // ServerArmorTemplate::_SpecialProtection::~_SpecialProtection +ServerArmorTemplate::_SpecialProtection::~_SpecialProtection() { +} // ServerArmorTemplate::_SpecialProtection::~_SpecialProtection /** * Static function used to register this template. */ -void ServerArmorTemplate::_SpecialProtection::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_SpecialProtection_tag, create); -} // ServerArmorTemplate::_SpecialProtection::registerMe +void ServerArmorTemplate::_SpecialProtection::registerMe(void) { + ObjectTemplateList::registerTemplate(_SpecialProtection_tag, create); +} // ServerArmorTemplate::_SpecialProtection::registerMe /** * Creates a ServerArmorTemplate::_SpecialProtection template. * * @return a new instance of the template */ -ObjectTemplate * ServerArmorTemplate::_SpecialProtection::create(const std::string & filename) -{ - return new ServerArmorTemplate::_SpecialProtection(filename); -} // ServerArmorTemplate::_SpecialProtection::create +ObjectTemplate *ServerArmorTemplate::_SpecialProtection::create(const std::string &filename) { + return new ServerArmorTemplate::_SpecialProtection(filename); +} // ServerArmorTemplate::_SpecialProtection::create /** * Returns the template id. * * @return the template id */ -Tag ServerArmorTemplate::_SpecialProtection::getId(void) const -{ - return _SpecialProtection_tag; -} // ServerArmorTemplate::_SpecialProtection::getId +Tag ServerArmorTemplate::_SpecialProtection::getId(void) const { + return _SpecialProtection_tag; +} // ServerArmorTemplate::_SpecialProtection::getId -CompilerIntegerParam * ServerArmorTemplate::_SpecialProtection::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "type") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_type; - } - fprintf(stderr, "trying to access single-parameter \"type\" as an array\n"); - } - else if (strcmp(name, "effectiveness") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_effectiveness; - } - fprintf(stderr, "trying to access single-parameter \"effectiveness\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerArmorTemplate::_SpecialProtection::getCompilerIntegerParam +CompilerIntegerParam * +ServerArmorTemplate::_SpecialProtection::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("type"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_type; + } + fprintf(stderr, "trying to access single-parameter \"type\" as an array\n"); + } + break; + case constcrc("effectiveness"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_effectiveness; + } + fprintf(stderr, "trying to access single-parameter \"effectiveness\" as an array\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerArmorTemplate::_SpecialProtection::getCompilerIntegerParam -FloatParam * ServerArmorTemplate::_SpecialProtection::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getFloatParam +FloatParam *ServerArmorTemplate::_SpecialProtection::getFloatParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getFloatParam -BoolParam * ServerArmorTemplate::_SpecialProtection::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getBoolParam +BoolParam *ServerArmorTemplate::_SpecialProtection::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getBoolParam -StringParam * ServerArmorTemplate::_SpecialProtection::getStringParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringParam(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getStringParam +StringParam *ServerArmorTemplate::_SpecialProtection::getStringParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringParam(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getStringParam -StringIdParam * ServerArmorTemplate::_SpecialProtection::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getStringIdParam +StringIdParam *ServerArmorTemplate::_SpecialProtection::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getStringIdParam -VectorParam * ServerArmorTemplate::_SpecialProtection::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getVectorParam +VectorParam *ServerArmorTemplate::_SpecialProtection::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getVectorParam -DynamicVariableParam * ServerArmorTemplate::_SpecialProtection::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getDynamicVariableParam +DynamicVariableParam * +ServerArmorTemplate::_SpecialProtection::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getDynamicVariableParam -StructParamOT * ServerArmorTemplate::_SpecialProtection::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getStructParamOT +StructParamOT *ServerArmorTemplate::_SpecialProtection::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getStructParamOT -TriggerVolumeParam * ServerArmorTemplate::_SpecialProtection::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerArmorTemplate::_SpecialProtection::getTriggerVolumeParam +TriggerVolumeParam * +ServerArmorTemplate::_SpecialProtection::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerArmorTemplate::_SpecialProtection::getTriggerVolumeParam -void ServerArmorTemplate::_SpecialProtection::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // ServerArmorTemplate::_SpecialProtection::initStructParamOT +void ServerArmorTemplate::_SpecialProtection::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerArmorTemplate::_SpecialProtection::initStructParamOT -void ServerArmorTemplate::_SpecialProtection::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // ServerArmorTemplate::_SpecialProtection::setAsEmptyList +void ServerArmorTemplate::_SpecialProtection::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // ServerArmorTemplate::_SpecialProtection::setAsEmptyList -void ServerArmorTemplate::_SpecialProtection::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // ServerArmorTemplate::_SpecialProtection::setAppend +void ServerArmorTemplate::_SpecialProtection::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // ServerArmorTemplate::_SpecialProtection::setAppend -bool ServerArmorTemplate::_SpecialProtection::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // ServerArmorTemplate::_SpecialProtection::isAppend +bool ServerArmorTemplate::_SpecialProtection::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // ServerArmorTemplate::_SpecialProtection::isAppend -int ServerArmorTemplate::_SpecialProtection::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // ServerArmorTemplate::_SpecialProtection::getListLength +int ServerArmorTemplate::_SpecialProtection::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // ServerArmorTemplate::_SpecialProtection::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -632,30 +580,28 @@ int ServerArmorTemplate::_SpecialProtection::getListLength(const char *name) con * * @param file file to load from */ -void ServerArmorTemplate::_SpecialProtection::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerArmorTemplate::_SpecialProtection::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "type") == 0) - m_type.loadFromIff(file); - else if (strcmp(paramName, "effectiveness") == 0) - m_effectiveness.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + case constcrc("type"): + m_type.loadFromIff(file); + case constcrc("effectiveness"): + m_effectiveness.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - UNREF(file); -} // ServerArmorTemplate::_SpecialProtection::load + file.exitForm(); + UNREF(file); +} // ServerArmorTemplate::_SpecialProtection::load /** * Saves the template data to an iff file. @@ -663,35 +609,34 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerArmorTemplate::_SpecialProtection::save(Iff &file) -{ -int count; +void ServerArmorTemplate::_SpecialProtection::save(Iff &file) { + int count; - file.insertForm(_SpecialProtection_tag); + file.insertForm(_SpecialProtection_tag); - int paramCount = 0; + int paramCount = 0; - // save type - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("type"); - m_type.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save effectiveness - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("effectiveness"); - m_effectiveness.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save type + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("type"); + m_type.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save effectiveness + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("effectiveness"); + m_effectiveness.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // ServerArmorTemplate::_SpecialProtection::save + file.exitForm(true); + UNREF(count); +} // ServerArmorTemplate::_SpecialProtection::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp index 8034821e..5a46cb63 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp @@ -20,62 +20,56 @@ #include - /** * Class constructor. */ -ServerBuildingObjectTemplate::ServerBuildingObjectTemplate(const std::string & filename) +ServerBuildingObjectTemplate::ServerBuildingObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerTangibleObjectTemplate(filename) + : ServerTangibleObjectTemplate(filename) //@END TFD INIT { -} // ServerBuildingObjectTemplate::ServerBuildingObjectTemplate +} // ServerBuildingObjectTemplate::ServerBuildingObjectTemplate /** * Class destructor. */ -ServerBuildingObjectTemplate::~ServerBuildingObjectTemplate() -{ +ServerBuildingObjectTemplate::~ServerBuildingObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // ServerBuildingObjectTemplate::~ServerBuildingObjectTemplate +} // ServerBuildingObjectTemplate::~ServerBuildingObjectTemplate /** * Static function used to register this template. */ -void ServerBuildingObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerBuildingObjectTemplate_tag, create); -} // ServerBuildingObjectTemplate::registerMe +void ServerBuildingObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerBuildingObjectTemplate_tag, create); +} // ServerBuildingObjectTemplate::registerMe /** * Creates a ServerBuildingObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerBuildingObjectTemplate::create(const std::string & filename) -{ - return new ServerBuildingObjectTemplate(filename); -} // ServerBuildingObjectTemplate::create +ObjectTemplate *ServerBuildingObjectTemplate::create(const std::string &filename) { + return new ServerBuildingObjectTemplate(filename); +} // ServerBuildingObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerBuildingObjectTemplate::getId(void) const -{ - return ServerBuildingObjectTemplate_tag; -} // ServerBuildingObjectTemplate::getId +Tag ServerBuildingObjectTemplate::getId(void) const { + return ServerBuildingObjectTemplate_tag; +} // ServerBuildingObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerBuildingObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerBuildingObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerBuildingObjectTemplate::getTemplateVersion /** @@ -83,121 +77,100 @@ Tag ServerBuildingObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerBuildingObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerBuildingObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerBuildingObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerBuildingObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerBuildingObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerBuildingObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "maintenanceCost") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_maintenanceCost; - } - fprintf(stderr, "trying to access single-parameter \"maintenanceCost\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerBuildingObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerBuildingObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "maintenanceCost") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_maintenanceCost; + } + fprintf(stderr, "trying to access single-parameter \"maintenanceCost\" as an array\n"); + } else + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return nullptr; +} //ServerBuildingObjectTemplate::getCompilerIntegerParam -FloatParam * ServerBuildingObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); -} //ServerBuildingObjectTemplate::getFloatParam +FloatParam *ServerBuildingObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerBuildingObjectTemplate::getFloatParam -BoolParam * ServerBuildingObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "isPublic") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_isPublic; - } - fprintf(stderr, "trying to access single-parameter \"isPublic\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //ServerBuildingObjectTemplate::getBoolParam +BoolParam *ServerBuildingObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "isPublic") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_isPublic; + } + fprintf(stderr, "trying to access single-parameter \"isPublic\" as an array\n"); + } else + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return nullptr; +} //ServerBuildingObjectTemplate::getBoolParam -StringParam * ServerBuildingObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); -} //ServerBuildingObjectTemplate::getStringParam +StringParam *ServerBuildingObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerBuildingObjectTemplate::getStringParam -StringIdParam * ServerBuildingObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerBuildingObjectTemplate::getStringIdParam +StringIdParam *ServerBuildingObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerBuildingObjectTemplate::getStringIdParam -VectorParam * ServerBuildingObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerBuildingObjectTemplate::getVectorParam +VectorParam *ServerBuildingObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerBuildingObjectTemplate::getVectorParam -DynamicVariableParam * ServerBuildingObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerBuildingObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +ServerBuildingObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerBuildingObjectTemplate::getDynamicVariableParam -StructParamOT * ServerBuildingObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); -} //ServerBuildingObjectTemplate::getStructParamOT +StructParamOT *ServerBuildingObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerBuildingObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerBuildingObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerBuildingObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *ServerBuildingObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerBuildingObjectTemplate::getTriggerVolumeParam -void ServerBuildingObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - ServerTangibleObjectTemplate::initStructParamOT(param, name); -} // ServerBuildingObjectTemplate::initStructParamOT +void ServerBuildingObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerBuildingObjectTemplate::initStructParamOT -void ServerBuildingObjectTemplate::setAsEmptyList(const char *name) -{ - ServerTangibleObjectTemplate::setAsEmptyList(name); -} // ServerBuildingObjectTemplate::setAsEmptyList +void ServerBuildingObjectTemplate::setAsEmptyList(const char *name) { + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerBuildingObjectTemplate::setAsEmptyList -void ServerBuildingObjectTemplate::setAppend(const char *name) -{ - ServerTangibleObjectTemplate::setAppend(name); -} // ServerBuildingObjectTemplate::setAppend +void ServerBuildingObjectTemplate::setAppend(const char *name) { + ServerTangibleObjectTemplate::setAppend(name); +} // ServerBuildingObjectTemplate::setAppend -bool ServerBuildingObjectTemplate::isAppend(const char *name) const -{ - return ServerTangibleObjectTemplate::isAppend(name); -} // ServerBuildingObjectTemplate::isAppend +bool ServerBuildingObjectTemplate::isAppend(const char *name) const { + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerBuildingObjectTemplate::isAppend -int ServerBuildingObjectTemplate::getListLength(const char *name) const -{ - return ServerTangibleObjectTemplate::getListLength(name); -} // ServerBuildingObjectTemplate::getListLength +int ServerBuildingObjectTemplate::getListLength(const char *name) const { + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerBuildingObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -205,66 +178,60 @@ int ServerBuildingObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerBuildingObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerBuildingObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerBuildingObjectTemplate_tag) - { - ServerTangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerBuildingObjectTemplate_tag) { + ServerTangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,1)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 1)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "maintenanceCost") == 0) - m_maintenanceCost.loadFromIff(file); - else if (strcmp(paramName, "isPublic") == 0) - m_isPublic.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + if (strcmp(paramName, "isPublic") == 0) + m_isPublic.loadFromIff(file); + else if (strcmp(paramName, "maintenanceCost") == 0) + m_maintenanceCost.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - ServerTangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerBuildingObjectTemplate::load + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerBuildingObjectTemplate::load /** * Saves the template data to an iff file. @@ -272,47 +239,45 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerBuildingObjectTemplate::save(Iff &file) -{ -int count; +void ServerBuildingObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerBuildingObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,1)); - file.allowNonlinearFunctions(); + file.insertForm(ServerBuildingObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 1)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save maintenanceCost - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maintenanceCost"); - m_maintenanceCost.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save isPublic - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("isPublic"); - m_isPublic.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save maintenanceCost + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maintenanceCost"); + m_maintenanceCost.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save isPublic + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("isPublic"); + m_isPublic.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerTangibleObjectTemplate::save(file); - file.exitForm(); - UNREF(count); -} // ServerBuildingObjectTemplate::save + file.exitForm(true); + ServerTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerBuildingObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp index 989ea73e..6f636828 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp @@ -19,74 +19,66 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerCreatureObjectTemplate::ServerCreatureObjectTemplate(const std::string & filename) +ServerCreatureObjectTemplate::ServerCreatureObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerTangibleObjectTemplate(filename) - ,m_attribModsLoaded(false) - ,m_attribModsAppend(false) + : ServerTangibleObjectTemplate(filename), m_attribModsLoaded(false), m_attribModsAppend(false) //@END TFD INIT { -} // ServerCreatureObjectTemplate::ServerCreatureObjectTemplate +} // ServerCreatureObjectTemplate::ServerCreatureObjectTemplate /** * Class destructor. */ -ServerCreatureObjectTemplate::~ServerCreatureObjectTemplate() -{ +ServerCreatureObjectTemplate::~ServerCreatureObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_attribMods.begin(); iter != m_attribMods.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_attribMods.clear(); - } + { + std::vector::iterator iter; + for (iter = m_attribMods.begin(); iter != m_attribMods.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_attribMods.clear(); + } //@END TFD CLEANUP -} // ServerCreatureObjectTemplate::~ServerCreatureObjectTemplate +} // ServerCreatureObjectTemplate::~ServerCreatureObjectTemplate /** * Static function used to register this template. */ -void ServerCreatureObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerCreatureObjectTemplate_tag, create); -} // ServerCreatureObjectTemplate::registerMe +void ServerCreatureObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerCreatureObjectTemplate_tag, create); +} // ServerCreatureObjectTemplate::registerMe /** * Creates a ServerCreatureObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerCreatureObjectTemplate::create(const std::string & filename) -{ - return new ServerCreatureObjectTemplate(filename); -} // ServerCreatureObjectTemplate::create +ObjectTemplate *ServerCreatureObjectTemplate::create(const std::string &filename) { + return new ServerCreatureObjectTemplate(filename); +} // ServerCreatureObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerCreatureObjectTemplate::getId(void) const -{ - return ServerCreatureObjectTemplate_tag; -} // ServerCreatureObjectTemplate::getId +Tag ServerCreatureObjectTemplate::getId(void) const { + return ServerCreatureObjectTemplate_tag; +} // ServerCreatureObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerCreatureObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerCreatureObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerCreatureObjectTemplate::getTemplateVersion /** @@ -94,347 +86,305 @@ Tag ServerCreatureObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerCreatureObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerCreatureObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerCreatureObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerCreatureObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerCreatureObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerCreatureObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "attributes") == 0) - { - if (index >= 0 && index < 6) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_attributes[index]; - } - fprintf(stderr, "index for parameter \"attributes\" out of bounds\n"); - } - else if (strcmp(name, "minAttributes") == 0) - { - if (index >= 0 && index < 6) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_minAttributes[index]; - } - fprintf(stderr, "index for parameter \"minAttributes\" out of bounds\n"); - } - else if (strcmp(name, "maxAttributes") == 0) - { - if (index >= 0 && index < 6) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_maxAttributes[index]; - } - fprintf(stderr, "index for parameter \"maxAttributes\" out of bounds\n"); - } - else if (strcmp(name, "shockWounds") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_shockWounds; - } - fprintf(stderr, "trying to access single-parameter \"shockWounds\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerCreatureObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerCreatureObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("attributes"): { + if (index >= 0 && index < 6) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_attributes[index]; + } + fprintf(stderr, "index for parameter \"attributes\" out of bounds\n"); + } + break; + case constcrc("minAttributes"): { + if (index >= 0 && index < 6) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_minAttributes[index]; + } + fprintf(stderr, "index for parameter \"minAttributes\" out of bounds\n"); + } + break; + case constcrc("maxAttributes"): { + if (index >= 0 && index < 6) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_maxAttributes[index]; + } + fprintf(stderr, "index for parameter \"maxAttributes\" out of bounds\n"); + } + break; + case constcrc("shockWounds"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_shockWounds; + } + fprintf(stderr, "trying to access single-parameter \"shockWounds\" as an array\n"); + } + break; + default: + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } -FloatParam * ServerCreatureObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "minDrainModifier") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_minDrainModifier; - } - fprintf(stderr, "trying to access single-parameter \"minDrainModifier\" as an array\n"); - } - else if (strcmp(name, "maxDrainModifier") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_maxDrainModifier; - } - fprintf(stderr, "trying to access single-parameter \"maxDrainModifier\" as an array\n"); - } - else if (strcmp(name, "minFaucetModifier") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_minFaucetModifier; - } - fprintf(stderr, "trying to access single-parameter \"minFaucetModifier\" as an array\n"); - } - else if (strcmp(name, "maxFaucetModifier") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_maxFaucetModifier; - } - fprintf(stderr, "trying to access single-parameter \"maxFaucetModifier\" as an array\n"); - } - else if (strcmp(name, "approachTriggerRange") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_approachTriggerRange; - } - fprintf(stderr, "trying to access single-parameter \"approachTriggerRange\" as an array\n"); - } - else if (strcmp(name, "maxMentalStates") == 0) - { - if (index >= 0 && index < 4) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_maxMentalStates[index]; - } - fprintf(stderr, "index for parameter \"maxMentalStates\" out of bounds\n"); - } - else if (strcmp(name, "mentalStatesDecay") == 0) - { - if (index >= 0 && index < 4) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_mentalStatesDecay[index]; - } - fprintf(stderr, "index for parameter \"mentalStatesDecay\" out of bounds\n"); - } - else - return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerCreatureObjectTemplate::getFloatParam + return nullptr; +} //ServerCreatureObjectTemplate::getCompilerIntegerParam -BoolParam * ServerCreatureObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "canCreateAvatar") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_canCreateAvatar; - } - fprintf(stderr, "trying to access single-parameter \"canCreateAvatar\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //ServerCreatureObjectTemplate::getBoolParam +FloatParam *ServerCreatureObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("minDrainModifier"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_minDrainModifier; + } + fprintf(stderr, "trying to access single-parameter \"minDrainModifier\" as an array\n"); + } + break; + case constcrc("maxDrainModifier"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_maxDrainModifier; + } + fprintf(stderr, "trying to access single-parameter \"maxDrainModifier\" as an array\n"); + } + break; + case constcrc("minFaucetModifier") : { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_minFaucetModifier; + } + fprintf(stderr, "trying to access single-parameter \"minFaucetModifier\" as an array\n"); + } + break; + case constcrc("maxFaucetModifier") : { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_maxFaucetModifier; + } + fprintf(stderr, "trying to access single-parameter \"maxFaucetModifier\" as an array\n"); + } + break; + case constcrc("approachTriggerRange") : { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_approachTriggerRange; + } + fprintf(stderr, "trying to access single-parameter \"approachTriggerRange\" as an array\n"); + } + break; + case constcrc("maxMentalStates") : { + if (index >= 0 && index < 4) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_maxMentalStates[index]; + } + fprintf(stderr, "index for parameter \"maxMentalStates\" out of bounds\n"); + } + break; + case constcrc("mentalStatesDecay"): { + if (index >= 0 && index < 4) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_mentalStatesDecay[index]; + } + fprintf(stderr, "index for parameter \"mentalStatesDecay\" out of bounds\n"); + } + break; + default: + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerCreatureObjectTemplate::getFloatParam -StringParam * ServerCreatureObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "defaultWeapon") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_defaultWeapon; - } - fprintf(stderr, "trying to access single-parameter \"defaultWeapon\" as an array\n"); - } - else if (strcmp(name, "nameGeneratorType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_nameGeneratorType; - } - fprintf(stderr, "trying to access single-parameter \"nameGeneratorType\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerCreatureObjectTemplate::getStringParam +BoolParam *ServerCreatureObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "canCreateAvatar") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_canCreateAvatar; + } + fprintf(stderr, "trying to access single-parameter \"canCreateAvatar\" as an array\n"); + } else + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return nullptr; +} //ServerCreatureObjectTemplate::getBoolParam -StringIdParam * ServerCreatureObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerCreatureObjectTemplate::getStringIdParam +StringParam *ServerCreatureObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "defaultWeapon") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_defaultWeapon; + } + fprintf(stderr, "trying to access single-parameter \"defaultWeapon\" as an array\n"); + } else if (strcmp(name, "nameGeneratorType") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_nameGeneratorType; + } + fprintf(stderr, "trying to access single-parameter \"nameGeneratorType\" as an array\n"); + } else + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return nullptr; +} //ServerCreatureObjectTemplate::getStringParam -VectorParam * ServerCreatureObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerCreatureObjectTemplate::getVectorParam +StringIdParam *ServerCreatureObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getStringIdParam -DynamicVariableParam * ServerCreatureObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerCreatureObjectTemplate::getDynamicVariableParam +VectorParam *ServerCreatureObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getVectorParam -StructParamOT * ServerCreatureObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "attribMods") == 0) - { - if (index >= 0 && index < static_cast(m_attribMods.size())) - return m_attribMods[index]; - if (index == static_cast(m_attribMods.size())) - { - StructParamOT *temp = new StructParamOT(); - m_attribMods.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"attribMods\" out of bounds\n"); - } - else - return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //ServerCreatureObjectTemplate::getStructParamOT +DynamicVariableParam * +ServerCreatureObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getDynamicVariableParam -TriggerVolumeParam * ServerCreatureObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerCreatureObjectTemplate::getTriggerVolumeParam +StructParamOT *ServerCreatureObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + if (strcmp(name, "attribMods") == 0) { + if (index >= 0 && index < static_cast(m_attribMods.size())) + return m_attribMods[index]; + if (index == static_cast(m_attribMods.size())) { + StructParamOT *temp = new StructParamOT(); + m_attribMods.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"attribMods\" out of bounds\n"); + } else + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); + return nullptr; +} //ServerCreatureObjectTemplate::getStructParamOT -void ServerCreatureObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "attribMods") == 0) - param.setValue(new _AttribMod("")); - else - ServerTangibleObjectTemplate::initStructParamOT(param, name); -} // ServerCreatureObjectTemplate::initStructParamOT +TriggerVolumeParam *ServerCreatureObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getTriggerVolumeParam -void ServerCreatureObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "attribMods") == 0) - { - m_attribMods.clear(); - m_attribModsLoaded = true; - } - else - ServerTangibleObjectTemplate::setAsEmptyList(name); -} // ServerCreatureObjectTemplate::setAsEmptyList +void ServerCreatureObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + if (strcmp(name, "attribMods") == 0) + param.setValue(new _AttribMod("")); + else + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerCreatureObjectTemplate::initStructParamOT -void ServerCreatureObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "attribMods") == 0) - m_attribModsAppend = true; - else - ServerTangibleObjectTemplate::setAppend(name); -} // ServerCreatureObjectTemplate::setAppend +void ServerCreatureObjectTemplate::setAsEmptyList(const char *name) { + if (strcmp(name, "attribMods") == 0) { + m_attribMods.clear(); + m_attribModsLoaded = true; + } else + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerCreatureObjectTemplate::setAsEmptyList -bool ServerCreatureObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "attribMods") == 0) - return m_attribModsAppend; - else - return ServerTangibleObjectTemplate::isAppend(name); -} // ServerCreatureObjectTemplate::isAppend +void ServerCreatureObjectTemplate::setAppend(const char *name) { + if (strcmp(name, "attribMods") == 0) + m_attribModsAppend = true; + else + ServerTangibleObjectTemplate::setAppend(name); +} // ServerCreatureObjectTemplate::setAppend + +bool ServerCreatureObjectTemplate::isAppend(const char *name) const { + if (strcmp(name, "attribMods") == 0) + return m_attribModsAppend; + else + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerCreatureObjectTemplate::isAppend -int ServerCreatureObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "attributes") == 0) - { - return sizeof(m_attributes) / sizeof(CompilerIntegerParam); - } - else if (strcmp(name, "minAttributes") == 0) - { - return sizeof(m_minAttributes) / sizeof(CompilerIntegerParam); - } - else if (strcmp(name, "maxAttributes") == 0) - { - return sizeof(m_maxAttributes) / sizeof(CompilerIntegerParam); - } - else if (strcmp(name, "attribMods") == 0) - { - return m_attribMods.size(); - } - else if (strcmp(name, "maxMentalStates") == 0) - { - return sizeof(m_maxMentalStates) / sizeof(FloatParam); - } - else if (strcmp(name, "mentalStatesDecay") == 0) - { - return sizeof(m_mentalStatesDecay) / sizeof(FloatParam); - } - else - return ServerTangibleObjectTemplate::getListLength(name); -} // ServerCreatureObjectTemplate::getListLength +int ServerCreatureObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("attributes"): { + return sizeof(m_attributes) / sizeof(CompilerIntegerParam); + } + break; + case constcrc("minAttributes"): { + return sizeof(m_minAttributes) / sizeof(CompilerIntegerParam); + } + break; + case constcrc("maxAttributes") : { + return sizeof(m_maxAttributes) / sizeof(CompilerIntegerParam); + } + break; + case constcrc("attribMods") : { + return m_attribMods.size(); + } + break; + case constcrc("maxMentalStates") : { + return sizeof(m_maxMentalStates) / sizeof(FloatParam); + } + break; + case constcrc("mentalStatesDecay") : { + return sizeof(m_mentalStatesDecay) / sizeof(FloatParam); + } + break; + default: + return ServerTangibleObjectTemplate::getListLength(name); + break; + } +} // ServerCreatureObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -442,169 +392,173 @@ int ServerCreatureObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerCreatureObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerCreatureObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerCreatureObjectTemplate_tag) - { - ServerTangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerCreatureObjectTemplate_tag) { + ServerTangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,5)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 5)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "defaultWeapon") == 0) - m_defaultWeapon.loadFromIff(file); - else if (strcmp(paramName, "attributes") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 6, ("Template %s: read array size of %d for array \"attributes\" of size 6, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 6 && j < listCount; ++j) - m_attributes[j].loadFromIff(file); - // if there are more params for attributes read and dump them - for (; j < listCount; ++j) - { - CompilerIntegerParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "minAttributes") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 6, ("Template %s: read array size of %d for array \"minAttributes\" of size 6, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 6 && j < listCount; ++j) - m_minAttributes[j].loadFromIff(file); - // if there are more params for minAttributes read and dump them - for (; j < listCount; ++j) - { - CompilerIntegerParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "maxAttributes") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 6, ("Template %s: read array size of %d for array \"maxAttributes\" of size 6, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 6 && j < listCount; ++j) - m_maxAttributes[j].loadFromIff(file); - // if there are more params for maxAttributes read and dump them - for (; j < listCount; ++j) - { - CompilerIntegerParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "minDrainModifier") == 0) - m_minDrainModifier.loadFromIff(file); - else if (strcmp(paramName, "maxDrainModifier") == 0) - m_maxDrainModifier.loadFromIff(file); - else if (strcmp(paramName, "minFaucetModifier") == 0) - m_minFaucetModifier.loadFromIff(file); - else if (strcmp(paramName, "maxFaucetModifier") == 0) - m_maxFaucetModifier.loadFromIff(file); - else if (strcmp(paramName, "attribMods") == 0) - { - std::vector::iterator iter; - for (iter = m_attribMods.begin(); iter != m_attribMods.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_attribMods.clear(); - m_attribModsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_attribMods.push_back(newData); - } - m_attribModsLoaded = true; - } - else if (strcmp(paramName, "shockWounds") == 0) - m_shockWounds.loadFromIff(file); - else if (strcmp(paramName, "canCreateAvatar") == 0) - m_canCreateAvatar.loadFromIff(file); - else if (strcmp(paramName, "nameGeneratorType") == 0) - m_nameGeneratorType.loadFromIff(file); - else if (strcmp(paramName, "approachTriggerRange") == 0) - m_approachTriggerRange.loadFromIff(file); - else if (strcmp(paramName, "maxMentalStates") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 4, ("Template %s: read array size of %d for array \"maxMentalStates\" of size 4, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 4 && j < listCount; ++j) - m_maxMentalStates[j].loadFromIff(file); - // if there are more params for maxMentalStates read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "mentalStatesDecay") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 4, ("Template %s: read array size of %d for array \"mentalStatesDecay\" of size 4, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 4 && j < listCount; ++j) - m_mentalStatesDecay[j].loadFromIff(file); - // if there are more params for mentalStatesDecay read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - ServerTangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerCreatureObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("defaultWeapon"): + m_defaultWeapon.loadFromIff(file); + break; + case constcrc("attributes"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 6, + ("Template %s: read array size of %d for array \"attributes\" of size 6, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 6 && j < listCount; ++j) + m_attributes[j].loadFromIff(file); + // if there are more params for attributes read and dump them + for (; j < listCount; ++j) { + CompilerIntegerParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("minAttributes"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 6, + ("Template %s: read array size of %d for array \"minAttributes\" of size 6, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 6 && j < listCount; ++j) + m_minAttributes[j].loadFromIff(file); + // if there are more params for minAttributes read and dump them + for (; j < listCount; ++j) { + CompilerIntegerParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("maxAttributes"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 6, + ("Template %s: read array size of %d for array \"maxAttributes\" of size 6, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 6 && j < listCount; ++j) + m_maxAttributes[j].loadFromIff(file); + // if there are more params for maxAttributes read and dump them + for (; j < listCount; ++j) { + CompilerIntegerParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("minDrainModifier"): + m_minDrainModifier.loadFromIff(file); + break; + case constcrc("maxDrainModifier"): + m_maxDrainModifier.loadFromIff(file); + break; + case constcrc("minFaucetModifier"): + m_minFaucetModifier.loadFromIff(file); + break; + case constcrc("maxFaucetModifier"): + m_maxFaucetModifier.loadFromIff(file); + break; + case constcrc("attribMods"): { + std::vector::iterator iter; + for (iter = m_attribMods.begin(); iter != m_attribMods.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_attribMods.clear(); + m_attribModsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_attribMods.push_back(newData); + } + m_attribModsLoaded = true; + } + break; + case constcrc("shockWounds"): + m_shockWounds.loadFromIff(file); + break; + case constcrc("canCreateAvatar"): + m_canCreateAvatar.loadFromIff(file); + break; + case constcrc("nameGeneratorType"): + m_nameGeneratorType.loadFromIff(file); + break; + case constcrc("approachTriggerRange"): + m_approachTriggerRange.loadFromIff(file); + break; + case constcrc("maxMentalStates"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 4, + ("Template %s: read array size of %d for array \"maxMentalStates\" of size 4, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 4 && j < listCount; ++j) + m_maxMentalStates[j].loadFromIff(file); + // if there are more params for maxMentalStates read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("mentalStatesDecay"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 4, + ("Template %s: read array size of %d for array \"mentalStatesDecay\" of size 4, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 4 && j < listCount; ++j) + m_mentalStatesDecay[j].loadFromIff(file); + // if there are more params for mentalStatesDecay read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + } + file.exitChunk(true); + } + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerCreatureObjectTemplate::load /** * Saves the template data to an iff file. @@ -612,148 +566,157 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerCreatureObjectTemplate::save(Iff &file) -{ -int count; +void ServerCreatureObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerCreatureObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,5)); - file.allowNonlinearFunctions(); + file.insertForm(ServerCreatureObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 5)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save defaultWeapon - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("defaultWeapon"); - m_defaultWeapon.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save attributes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("attributes"); - count = 6; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 6; ++i) - m_attributes[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save minAttributes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("minAttributes"); - count = 6; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 6; ++i) - m_minAttributes[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save maxAttributes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxAttributes"); - count = 6; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 6; ++i) - m_maxAttributes[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save minDrainModifier - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("minDrainModifier"); - m_minDrainModifier.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxDrainModifier - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxDrainModifier"); - m_maxDrainModifier.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save minFaucetModifier - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("minFaucetModifier"); - m_minFaucetModifier.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxFaucetModifier - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxFaucetModifier"); - m_maxFaucetModifier.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_attribModsLoaded) - { - // mark the list as empty and extending the base list - m_attribModsAppend = true; - } - // save attribMods - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("attribMods"); - file.insertChunkData(&m_attribModsAppend, sizeof(bool)); - count = m_attribMods.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_attribMods[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save shockWounds - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("shockWounds"); - m_shockWounds.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save canCreateAvatar - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("canCreateAvatar"); - m_canCreateAvatar.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save nameGeneratorType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("nameGeneratorType"); - m_nameGeneratorType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save approachTriggerRange - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("approachTriggerRange"); - m_approachTriggerRange.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxMentalStates - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxMentalStates"); - count = 4; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 4; ++i) - m_maxMentalStates[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save mentalStatesDecay - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("mentalStatesDecay"); - count = 4; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 4; ++i) - m_mentalStatesDecay[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; + // save defaultWeapon + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("defaultWeapon"); + m_defaultWeapon.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save attributes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attributes"); + count = 6; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 6; ++i) + m_attributes[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save minAttributes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("minAttributes"); + count = 6; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 6; ++i) + m_minAttributes[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save maxAttributes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxAttributes"); + count = 6; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 6; ++i) + m_maxAttributes[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save minDrainModifier + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("minDrainModifier"); + m_minDrainModifier.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxDrainModifier + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxDrainModifier"); + m_maxDrainModifier.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save minFaucetModifier + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("minFaucetModifier"); + m_minFaucetModifier.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxFaucetModifier + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxFaucetModifier"); + m_maxFaucetModifier.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_attribModsLoaded) { + // mark the list as empty and extending the base list + m_attribModsAppend = true; + } + // save attribMods + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attribMods"); + file.insertChunkData(&m_attribModsAppend, sizeof(bool)); + count = m_attribMods.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_attribMods[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save shockWounds + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("shockWounds"); + m_shockWounds.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save canCreateAvatar + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("canCreateAvatar"); + m_canCreateAvatar.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save nameGeneratorType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("nameGeneratorType"); + m_nameGeneratorType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save approachTriggerRange + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("approachTriggerRange"); + m_approachTriggerRange.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxMentalStates + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxMentalStates"); + count = 4; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 4; ++i) + m_maxMentalStates[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save mentalStatesDecay + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("mentalStatesDecay"); + count = 4; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 4; ++i) + m_mentalStatesDecay[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerTangibleObjectTemplate::save(file); - file.exitForm(); -} // ServerCreatureObjectTemplate::save + file.exitForm(true); + ServerTangibleObjectTemplate::save(file); + file.exitForm(); +} // ServerCreatureObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp index 52a830bd..60505528 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp @@ -19,96 +19,84 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerDraftSchematicObjectTemplate::ServerDraftSchematicObjectTemplate(const std::string & filename) +ServerDraftSchematicObjectTemplate::ServerDraftSchematicObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerIntangibleObjectTemplate(filename) - ,m_slotsLoaded(false) - ,m_slotsAppend(false) - ,m_skillCommandsLoaded(false) - ,m_skillCommandsAppend(false) - ,m_manufactureScriptsLoaded(false) - ,m_manufactureScriptsAppend(false) + : ServerIntangibleObjectTemplate(filename), m_slotsLoaded(false), m_slotsAppend(false), + m_skillCommandsLoaded(false), m_skillCommandsAppend(false), m_manufactureScriptsLoaded(false), + m_manufactureScriptsAppend(false) //@END TFD INIT { -} // ServerDraftSchematicObjectTemplate::ServerDraftSchematicObjectTemplate +} // ServerDraftSchematicObjectTemplate::ServerDraftSchematicObjectTemplate /** * Class destructor. */ -ServerDraftSchematicObjectTemplate::~ServerDraftSchematicObjectTemplate() -{ +ServerDraftSchematicObjectTemplate::~ServerDraftSchematicObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_slots.clear(); - } - { - std::vector::iterator iter; - for (iter = m_skillCommands.begin(); iter != m_skillCommands.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_skillCommands.clear(); - } - { - std::vector::iterator iter; - for (iter = m_manufactureScripts.begin(); iter != m_manufactureScripts.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_manufactureScripts.clear(); - } + { + std::vector::iterator iter; + for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_slots.clear(); + } + { + std::vector::iterator iter; + for (iter = m_skillCommands.begin(); iter != m_skillCommands.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_skillCommands.clear(); + } + { + std::vector::iterator iter; + for (iter = m_manufactureScripts.begin(); iter != m_manufactureScripts.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_manufactureScripts.clear(); + } //@END TFD CLEANUP -} // ServerDraftSchematicObjectTemplate::~ServerDraftSchematicObjectTemplate +} // ServerDraftSchematicObjectTemplate::~ServerDraftSchematicObjectTemplate /** * Static function used to register this template. */ -void ServerDraftSchematicObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerDraftSchematicObjectTemplate_tag, create); -} // ServerDraftSchematicObjectTemplate::registerMe +void ServerDraftSchematicObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerDraftSchematicObjectTemplate_tag, create); +} // ServerDraftSchematicObjectTemplate::registerMe /** * Creates a ServerDraftSchematicObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerDraftSchematicObjectTemplate::create(const std::string & filename) -{ - return new ServerDraftSchematicObjectTemplate(filename); -} // ServerDraftSchematicObjectTemplate::create +ObjectTemplate *ServerDraftSchematicObjectTemplate::create(const std::string &filename) { + return new ServerDraftSchematicObjectTemplate(filename); +} // ServerDraftSchematicObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerDraftSchematicObjectTemplate::getId(void) const -{ - return ServerDraftSchematicObjectTemplate_tag; -} // ServerDraftSchematicObjectTemplate::getId +Tag ServerDraftSchematicObjectTemplate::getId(void) const { + return ServerDraftSchematicObjectTemplate_tag; +} // ServerDraftSchematicObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerDraftSchematicObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerDraftSchematicObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerDraftSchematicObjectTemplate::getTemplateVersion /** @@ -116,279 +104,274 @@ Tag ServerDraftSchematicObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerDraftSchematicObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerDraftSchematicObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerDraftSchematicObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerDraftSchematicObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerDraftSchematicObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerDraftSchematicObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "category") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_category; - } - fprintf(stderr, "trying to access single-parameter \"category\" as an array\n"); - } - else if (strcmp(name, "itemsPerContainer") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_itemsPerContainer; - } - fprintf(stderr, "trying to access single-parameter \"itemsPerContainer\" as an array\n"); - } - else - return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerDraftSchematicObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("category"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_category; + } + fprintf(stderr, "trying to access single-parameter \"category\" as an array\n"); + } + break; + case constcrc("itemsPerContainer"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_itemsPerContainer; + } + fprintf(stderr, "trying to access single-parameter \"itemsPerContainer\" as an array\n"); + } + break; + default: + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerDraftSchematicObjectTemplate::getCompilerIntegerParam -FloatParam * ServerDraftSchematicObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "manufactureTime") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_manufactureTime; - } - fprintf(stderr, "trying to access single-parameter \"manufactureTime\" as an array\n"); - } - else if (strcmp(name, "prototypeTime") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_prototypeTime; - } - fprintf(stderr, "trying to access single-parameter \"prototypeTime\" as an array\n"); - } - else - return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::getFloatParam +FloatParam *ServerDraftSchematicObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("manufactureTime"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_manufactureTime; + } + fprintf(stderr, "trying to access single-parameter \"manufactureTime\" as an array\n"); + } + break; + case constcrc("prototypeTime"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_prototypeTime; + } + fprintf(stderr, "trying to access single-parameter \"prototypeTime\" as an array\n"); + } + break; + default: + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerDraftSchematicObjectTemplate::getFloatParam -BoolParam * ServerDraftSchematicObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "destroyIngredients") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_destroyIngredients; - } - fprintf(stderr, "trying to access single-parameter \"destroyIngredients\" as an array\n"); - } - else - return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::getBoolParam +BoolParam *ServerDraftSchematicObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "destroyIngredients") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_destroyIngredients; + } + fprintf(stderr, "trying to access single-parameter \"destroyIngredients\" as an array\n"); + } else + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return nullptr; +} //ServerDraftSchematicObjectTemplate::getBoolParam -StringParam * ServerDraftSchematicObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "craftedObjectTemplate") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_craftedObjectTemplate; - } - fprintf(stderr, "trying to access single-parameter \"craftedObjectTemplate\" as an array\n"); - } - else if (strcmp(name, "crateObjectTemplate") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_crateObjectTemplate; - } - fprintf(stderr, "trying to access single-parameter \"crateObjectTemplate\" as an array\n"); - } - else if (strcmp(name, "skillCommands") == 0) - { - if (index >= 0 && index < static_cast(m_skillCommands.size())) - return m_skillCommands[index]; - if (index == static_cast(m_skillCommands.size())) - { - StringParam *temp = new StringParam(); - m_skillCommands.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"skillCommands\" out of bounds\n"); - } - else if (strcmp(name, "manufactureScripts") == 0) - { - if (index >= 0 && index < static_cast(m_manufactureScripts.size())) - return m_manufactureScripts[index]; - if (index == static_cast(m_manufactureScripts.size())) - { - StringParam *temp = new StringParam(); - m_manufactureScripts.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"manufactureScripts\" out of bounds\n"); - } - else - return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::getStringParam +StringParam *ServerDraftSchematicObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("craftedObjectTemplate"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_craftedObjectTemplate; + } + fprintf(stderr, "trying to access single-parameter \"craftedObjectTemplate\" as an array\n"); + } + break; + case constcrc("crateObjectTemplate"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_crateObjectTemplate; + } + fprintf(stderr, "trying to access single-parameter \"crateObjectTemplate\" as an array\n"); + } + break; + case constcrc("skillCommands"): { + if (index >= 0 && index < static_cast(m_skillCommands.size())) + return m_skillCommands[index]; + if (index == static_cast(m_skillCommands.size())) { + StringParam *temp = new StringParam(); + m_skillCommands.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"skillCommands\" out of bounds\n"); + } + break; + case constcrc("manufactureScripts"): { + if (index >= 0 && index < static_cast(m_manufactureScripts.size())) + return m_manufactureScripts[index]; + if (index == static_cast(m_manufactureScripts.size())) { + StringParam *temp = new StringParam(); + m_manufactureScripts.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"manufactureScripts\" out of bounds\n"); + } + break; + default: + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerDraftSchematicObjectTemplate::getStringParam -StringIdParam * ServerDraftSchematicObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::getStringIdParam +StringIdParam *ServerDraftSchematicObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::getStringIdParam -VectorParam * ServerDraftSchematicObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::getVectorParam +VectorParam *ServerDraftSchematicObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::getVectorParam -DynamicVariableParam * ServerDraftSchematicObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +ServerDraftSchematicObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::getDynamicVariableParam -StructParamOT * ServerDraftSchematicObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "slots") == 0) - { - if (index >= 0 && index < static_cast(m_slots.size())) - return m_slots[index]; - if (index == static_cast(m_slots.size())) - { - StructParamOT *temp = new StructParamOT(); - m_slots.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"slots\" out of bounds\n"); - } - else - return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::getStructParamOT +StructParamOT *ServerDraftSchematicObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + if (strcmp(name, "slots") == 0) { + if (index >= 0 && index < static_cast(m_slots.size())) + return m_slots[index]; + if (index == static_cast(m_slots.size())) { + StructParamOT *temp = new StructParamOT(); + m_slots.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"slots\" out of bounds\n"); + } else + return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); + return nullptr; +} //ServerDraftSchematicObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerDraftSchematicObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam * +ServerDraftSchematicObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::getTriggerVolumeParam -void ServerDraftSchematicObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "slots") == 0) - param.setValue(new _IngredientSlot("")); - else - ServerIntangibleObjectTemplate::initStructParamOT(param, name); -} // ServerDraftSchematicObjectTemplate::initStructParamOT +void ServerDraftSchematicObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + if (strcmp(name, "slots") == 0) + param.setValue(new _IngredientSlot("")); + else + ServerIntangibleObjectTemplate::initStructParamOT(param, name); +} // ServerDraftSchematicObjectTemplate::initStructParamOT -void ServerDraftSchematicObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "slots") == 0) - { - m_slots.clear(); - m_slotsLoaded = true; - } - else if (strcmp(name, "skillCommands") == 0) - { - m_skillCommands.clear(); - m_skillCommandsLoaded = true; - } - else if (strcmp(name, "manufactureScripts") == 0) - { - m_manufactureScripts.clear(); - m_manufactureScriptsLoaded = true; - } - else - ServerIntangibleObjectTemplate::setAsEmptyList(name); -} // ServerDraftSchematicObjectTemplate::setAsEmptyList +void ServerDraftSchematicObjectTemplate::setAsEmptyList(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("slots"): { + m_slots.clear(); + m_slotsLoaded = true; + } + break; + case constcrc("skillCommands"): { + m_skillCommands.clear(); + m_skillCommandsLoaded = true; + } + break; + case constcrc("manufactureScripts"): { + m_manufactureScripts.clear(); + m_manufactureScriptsLoaded = true; + } + break; + default: + ServerIntangibleObjectTemplate::setAsEmptyList(name); + break; + } +} // ServerDraftSchematicObjectTemplate::setAsEmptyList -void ServerDraftSchematicObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "slots") == 0) - m_slotsAppend = true; - else if (strcmp(name, "skillCommands") == 0) - m_skillCommandsAppend = true; - else if (strcmp(name, "manufactureScripts") == 0) - m_manufactureScriptsAppend = true; - else - ServerIntangibleObjectTemplate::setAppend(name); -} // ServerDraftSchematicObjectTemplate::setAppend +void ServerDraftSchematicObjectTemplate::setAppend(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("slots"): + m_slotsAppend = true; + break; + case constcrc("skillCommands"): + m_skillCommandsAppend = true; + break; + case constcrc("manufactureScripts"): + m_manufactureScriptsAppend = true; + break; + default: + ServerIntangibleObjectTemplate::setAppend(name); + break; + } +} // ServerDraftSchematicObjectTemplate::setAppend -bool ServerDraftSchematicObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "slots") == 0) - return m_slotsAppend; - else if (strcmp(name, "skillCommands") == 0) - return m_skillCommandsAppend; - else if (strcmp(name, "manufactureScripts") == 0) - return m_manufactureScriptsAppend; - else - return ServerIntangibleObjectTemplate::isAppend(name); -} // ServerDraftSchematicObjectTemplate::isAppend +bool ServerDraftSchematicObjectTemplate::isAppend(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("slots"): + return m_slotsAppend; + break; + case constcrc("skillCommands"): + return m_skillCommandsAppend; + break; + case constcrc("manufactureScripts"): + return m_manufactureScriptsAppend; + break; + default: + return ServerIntangibleObjectTemplate::isAppend(name); + break; + } +} // ServerDraftSchematicObjectTemplate::isAppend -int ServerDraftSchematicObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "slots") == 0) - { - return m_slots.size(); - } - else if (strcmp(name, "skillCommands") == 0) - { - return m_skillCommands.size(); - } - else if (strcmp(name, "manufactureScripts") == 0) - { - return m_manufactureScripts.size(); - } - else - return ServerIntangibleObjectTemplate::getListLength(name); -} // ServerDraftSchematicObjectTemplate::getListLength +int ServerDraftSchematicObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("slots"): { + return m_slots.size(); + } + break; + case constcrc("skillCommands"): { + return m_skillCommands.size(); + } + break; + case constcrc("manufactureScripts"): { + return m_manufactureScripts.size(); + } + break; + default: + return ServerIntangibleObjectTemplate::getListLength(name); + break; + } + +} // ServerDraftSchematicObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -396,133 +379,131 @@ int ServerDraftSchematicObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerDraftSchematicObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerDraftSchematicObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerDraftSchematicObjectTemplate_tag) - { - ServerIntangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerDraftSchematicObjectTemplate_tag) { + ServerIntangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,7)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 7)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "category") == 0) - m_category.loadFromIff(file); - else if (strcmp(paramName, "craftedObjectTemplate") == 0) - m_craftedObjectTemplate.loadFromIff(file); - else if (strcmp(paramName, "crateObjectTemplate") == 0) - m_crateObjectTemplate.loadFromIff(file); - else if (strcmp(paramName, "slots") == 0) - { - std::vector::iterator iter; - for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_slots.clear(); - m_slotsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_slots.push_back(newData); - } - m_slotsLoaded = true; - } - else if (strcmp(paramName, "skillCommands") == 0) - { - std::vector::iterator iter; - for (iter = m_skillCommands.begin(); iter != m_skillCommands.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_skillCommands.clear(); - m_skillCommandsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_skillCommands.push_back(newData); - } - m_skillCommandsLoaded = true; - } - else if (strcmp(paramName, "destroyIngredients") == 0) - m_destroyIngredients.loadFromIff(file); - else if (strcmp(paramName, "manufactureScripts") == 0) - { - std::vector::iterator iter; - for (iter = m_manufactureScripts.begin(); iter != m_manufactureScripts.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_manufactureScripts.clear(); - m_manufactureScriptsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_manufactureScripts.push_back(newData); - } - m_manufactureScriptsLoaded = true; - } - else if (strcmp(paramName, "itemsPerContainer") == 0) - m_itemsPerContainer.loadFromIff(file); - else if (strcmp(paramName, "manufactureTime") == 0) - m_manufactureTime.loadFromIff(file); - else if (strcmp(paramName, "prototypeTime") == 0) - m_prototypeTime.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - ServerIntangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerDraftSchematicObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("category"): + m_category.loadFromIff(file); + break; + case constcrc("craftedObjectTemplate"): + m_craftedObjectTemplate.loadFromIff(file); + break; + case constcrc("crateObjectTemplate"): + m_crateObjectTemplate.loadFromIff(file); + break; + case constcrc("slots"): { + std::vector::iterator iter; + for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_slots.clear(); + m_slotsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_slots.push_back(newData); + } + m_slotsLoaded = true; + } + break; + case constcrc("skillCommands"): { + std::vector::iterator iter; + for (iter = m_skillCommands.begin(); iter != m_skillCommands.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_skillCommands.clear(); + m_skillCommandsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_skillCommands.push_back(newData); + } + m_skillCommandsLoaded = true; + } + break; + case constcrc("destroyIngredients"): + m_destroyIngredients.loadFromIff(file); + break; + case constcrc("manufactureScripts"): { + std::vector::iterator iter; + for (iter = m_manufactureScripts.begin(); iter != m_manufactureScripts.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_manufactureScripts.clear(); + m_manufactureScriptsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_manufactureScripts.push_back(newData); + } + m_manufactureScriptsLoaded = true; + } + break; + case constcrc("itemsPerContainer"): + m_itemsPerContainer.loadFromIff(file); + break; + case constcrc("manufactureTime"): + m_manufactureTime.loadFromIff(file); + break; + case constcrc("prototypeTime"): + m_prototypeTime.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerDraftSchematicObjectTemplate::load /** * Saves the template data to an iff file. @@ -530,122 +511,123 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerDraftSchematicObjectTemplate::save(Iff &file) -{ -int count; +void ServerDraftSchematicObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerDraftSchematicObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,7)); - file.allowNonlinearFunctions(); + file.insertForm(ServerDraftSchematicObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 7)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save category - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("category"); - m_category.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save craftedObjectTemplate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("craftedObjectTemplate"); - m_craftedObjectTemplate.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save crateObjectTemplate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("crateObjectTemplate"); - m_crateObjectTemplate.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_slotsLoaded) - { - // mark the list as empty and extending the base list - m_slotsAppend = true; - } - // save slots - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("slots"); - file.insertChunkData(&m_slotsAppend, sizeof(bool)); - count = m_slots.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_slots[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_skillCommandsLoaded) - { - // mark the list as empty and extending the base list - m_skillCommandsAppend = true; - } - // save skillCommands - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("skillCommands"); - file.insertChunkData(&m_skillCommandsAppend, sizeof(bool)); - count = m_skillCommands.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_skillCommands[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save destroyIngredients - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("destroyIngredients"); - m_destroyIngredients.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_manufactureScriptsLoaded) - { - // mark the list as empty and extending the base list - m_manufactureScriptsAppend = true; - } - // save manufactureScripts - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("manufactureScripts"); - file.insertChunkData(&m_manufactureScriptsAppend, sizeof(bool)); - count = m_manufactureScripts.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_manufactureScripts[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save itemsPerContainer - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("itemsPerContainer"); - m_itemsPerContainer.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save manufactureTime - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("manufactureTime"); - m_manufactureTime.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save prototypeTime - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("prototypeTime"); - m_prototypeTime.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save category + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("category"); + m_category.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save craftedObjectTemplate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("craftedObjectTemplate"); + m_craftedObjectTemplate.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save crateObjectTemplate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("crateObjectTemplate"); + m_crateObjectTemplate.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_slotsLoaded) { + // mark the list as empty and extending the base list + m_slotsAppend = true; + } + // save slots + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("slots"); + file.insertChunkData(&m_slotsAppend, sizeof(bool)); + count = m_slots.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_slots[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_skillCommandsLoaded) { + // mark the list as empty and extending the base list + m_skillCommandsAppend = true; + } + // save skillCommands + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("skillCommands"); + file.insertChunkData(&m_skillCommandsAppend, sizeof(bool)); + count = m_skillCommands.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_skillCommands[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save destroyIngredients + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("destroyIngredients"); + m_destroyIngredients.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_manufactureScriptsLoaded) { + // mark the list as empty and extending the base list + m_manufactureScriptsAppend = true; + } + // save manufactureScripts + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("manufactureScripts"); + file.insertChunkData(&m_manufactureScriptsAppend, sizeof(bool)); + count = m_manufactureScripts.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_manufactureScripts[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save itemsPerContainer + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("itemsPerContainer"); + m_itemsPerContainer.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save manufactureTime + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("manufactureTime"); + m_manufactureTime.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save prototypeTime + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("prototypeTime"); + m_prototypeTime.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerIntangibleObjectTemplate::save(file); - file.exitForm(); -} // ServerDraftSchematicObjectTemplate::save + file.exitForm(true); + ServerIntangibleObjectTemplate::save(file); + file.exitForm(); +} // ServerDraftSchematicObjectTemplate::save //============================================================================= @@ -654,241 +636,211 @@ int count; /** * Class constructor. */ -ServerDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string & filename) - : TpfTemplate(filename) - ,m_optionsLoaded(false) - ,m_optionsAppend(false) -{ -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot +ServerDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string &filename) + : TpfTemplate(filename), m_optionsLoaded(false), m_optionsAppend(false) { +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot /** * Class destructor. */ -ServerDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot() -{ - { - std::vector::iterator iter; - for (iter = m_options.begin(); iter != m_options.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_options.clear(); - } -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot +ServerDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot() { + { + std::vector::iterator iter; + for (iter = m_options.begin(); iter != m_options.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_options.clear(); + } +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot /** * Static function used to register this template. */ -void ServerDraftSchematicObjectTemplate::_IngredientSlot::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_IngredientSlot_tag, create); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::registerMe +void ServerDraftSchematicObjectTemplate::_IngredientSlot::registerMe(void) { + ObjectTemplateList::registerTemplate(_IngredientSlot_tag, create); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::registerMe /** * Creates a ServerDraftSchematicObjectTemplate::_IngredientSlot template. * * @return a new instance of the template */ -ObjectTemplate * ServerDraftSchematicObjectTemplate::_IngredientSlot::create(const std::string & filename) -{ - return new ServerDraftSchematicObjectTemplate::_IngredientSlot(filename); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::create +ObjectTemplate *ServerDraftSchematicObjectTemplate::_IngredientSlot::create(const std::string &filename) { + return new ServerDraftSchematicObjectTemplate::_IngredientSlot(filename); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::create /** * Returns the template id. * * @return the template id */ -Tag ServerDraftSchematicObjectTemplate::_IngredientSlot::getId(void) const -{ - return _IngredientSlot_tag; -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::getId +Tag ServerDraftSchematicObjectTemplate::_IngredientSlot::getId(void) const { + return _IngredientSlot_tag; +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::getId -CompilerIntegerParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam +CompilerIntegerParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam -FloatParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "complexity") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_complexity; - } - fprintf(stderr, "trying to access single-parameter \"complexity\" as an array\n"); - } - else - return TpfTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam +FloatParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "complexity") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_complexity; + } + fprintf(stderr, "trying to access single-parameter \"complexity\" as an array\n"); + } else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return nullptr; +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam -BoolParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "optional") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_optional; - } - fprintf(stderr, "trying to access single-parameter \"optional\" as an array\n"); - } - else - return TpfTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam +BoolParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "optional") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_optional; + } + fprintf(stderr, "trying to access single-parameter \"optional\" as an array\n"); + } else + return TpfTemplate::getBoolParam(name, deepCheck, index); + return nullptr; +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam -StringParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "optionalSkillCommand") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_optionalSkillCommand; - } - fprintf(stderr, "trying to access single-parameter \"optionalSkillCommand\" as an array\n"); - } - else if (strcmp(name, "appearance") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_appearance; - } - fprintf(stderr, "trying to access single-parameter \"appearance\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringParam +StringParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("optionalSkillCommand"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_optionalSkillCommand; + } + fprintf(stderr, "trying to access single-parameter \"optionalSkillCommand\" as an array\n"); + } + break; + case constcrc("appearance"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_appearance; + } + fprintf(stderr, "trying to access single-parameter \"appearance\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringParam -StringIdParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "name") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_name; - } - fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); - } - else - return TpfTemplate::getStringIdParam(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam +StringIdParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "name") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return nullptr; +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam -VectorParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam +VectorParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam -DynamicVariableParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam +DynamicVariableParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam -StructParamOT * ServerDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "options") == 0) - { - if (index >= 0 && index < static_cast(m_options.size())) - return m_options[index]; - if (index == static_cast(m_options.size())) - { - StructParamOT *temp = new StructParamOT(); - m_options.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"options\" out of bounds\n"); - } - else - return TpfTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT +StructParamOT * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT(const char *name, bool deepCheck, int index) { + if (strcmp(name, "options") == 0) { + if (index >= 0 && index < static_cast(m_options.size())) + return m_options[index]; + if (index == static_cast(m_options.size())) { + StructParamOT *temp = new StructParamOT(); + m_options.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"options\" out of bounds\n"); + } else + return TpfTemplate::getStructParamOT(name, deepCheck, index); + return nullptr; +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT -TriggerVolumeParam * ServerDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam +TriggerVolumeParam * +ServerDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam -void ServerDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "options") == 0) - param.setValue(new _Ingredient("")); - else - TpfTemplate::initStructParamOT(param, name); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT +void ServerDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + if (strcmp(name, "options") == 0) + param.setValue(new _Ingredient("")); + else + TpfTemplate::initStructParamOT(param, name); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT -void ServerDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList(const char *name) -{ - if (strcmp(name, "options") == 0) - { - m_options.clear(); - m_optionsLoaded = true; - } - else - TpfTemplate::setAsEmptyList(name); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList +void ServerDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList(const char *name) { + if (strcmp(name, "options") == 0) { + m_options.clear(); + m_optionsLoaded = true; + } else + TpfTemplate::setAsEmptyList(name); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList -void ServerDraftSchematicObjectTemplate::_IngredientSlot::setAppend(const char *name) -{ - if (strcmp(name, "options") == 0) - m_optionsAppend = true; - else - TpfTemplate::setAppend(name); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::setAppend +void ServerDraftSchematicObjectTemplate::_IngredientSlot::setAppend(const char *name) { + if (strcmp(name, "options") == 0) + m_optionsAppend = true; + else + TpfTemplate::setAppend(name); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::setAppend -bool ServerDraftSchematicObjectTemplate::_IngredientSlot::isAppend(const char *name) const -{ - if (strcmp(name, "options") == 0) - return m_optionsAppend; - else - return TpfTemplate::isAppend(name); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::isAppend +bool ServerDraftSchematicObjectTemplate::_IngredientSlot::isAppend(const char *name) const { + if (strcmp(name, "options") == 0) + return m_optionsAppend; + else + return TpfTemplate::isAppend(name); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::isAppend -int ServerDraftSchematicObjectTemplate::_IngredientSlot::getListLength(const char *name) const -{ - if (strcmp(name, "options") == 0) - { - return m_options.size(); - } - else - return TpfTemplate::getListLength(name); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::getListLength +int ServerDraftSchematicObjectTemplate::_IngredientSlot::getListLength(const char *name) const { + if (strcmp(name, "options") == 0) { + return m_options.size(); + } else + return TpfTemplate::getListLength(name); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -896,55 +848,50 @@ int ServerDraftSchematicObjectTemplate::_IngredientSlot::getListLength(const cha * * @param file file to load from */ -void ServerDraftSchematicObjectTemplate::_IngredientSlot::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerDraftSchematicObjectTemplate::_IngredientSlot::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "optional") == 0) - m_optional.loadFromIff(file); - else if (strcmp(paramName, "name") == 0) - m_name.loadFromIff(file); - else if (strcmp(paramName, "options") == 0) - { - std::vector::iterator iter; - for (iter = m_options.begin(); iter != m_options.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_options.clear(); - m_optionsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_options.push_back(newData); - } - m_optionsLoaded = true; - } - else if (strcmp(paramName, "optionalSkillCommand") == 0) - m_optionalSkillCommand.loadFromIff(file); - else if (strcmp(paramName, "complexity") == 0) - m_complexity.loadFromIff(file); - else if (strcmp(paramName, "appearance") == 0) - m_appearance.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + if (strcmp(paramName, "optional") == 0) + m_optional.loadFromIff(file); + case constcrc("name"): + m_name.loadFromIff(file); + case constcrc("options"): { + std::vector::iterator iter; + for (iter = m_options.begin(); iter != m_options.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_options.clear(); + m_optionsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_options.push_back(newData); + } + m_optionsLoaded = true; + } + case constcrc("optionalSkillCommand"): + m_optionalSkillCommand.loadFromIff(file); + case constcrc("complexity"): + m_complexity.loadFromIff(file); + case constcrc("appearance"): + m_appearance.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - UNREF(file); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::load + file.exitForm(); + UNREF(file); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::load /** * Saves the template data to an iff file. @@ -952,67 +899,67 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerDraftSchematicObjectTemplate::_IngredientSlot::save(Iff &file) -{ -int count; +void ServerDraftSchematicObjectTemplate::_IngredientSlot::save(Iff &file) { + int count; - file.insertForm(_IngredientSlot_tag); + file.insertForm(_IngredientSlot_tag); - int paramCount = 0; + int paramCount = 0; - // save optional - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("optional"); - m_optional.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save name - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("name"); - m_name.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_optionsLoaded) - { - // mark the list as empty and extending the base list - m_optionsAppend = true; - } - // save options - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("options"); - file.insertChunkData(&m_optionsAppend, sizeof(bool)); - count = m_options.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_options[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save optionalSkillCommand - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("optionalSkillCommand"); - m_optionalSkillCommand.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save complexity - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("complexity"); - m_complexity.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save appearance - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("appearance"); - m_appearance.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save optional + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("optional"); + m_optional.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save name + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("name"); + m_name.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_optionsLoaded) { + // mark the list as empty and extending the base list + m_optionsAppend = true; + } + // save options + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("options"); + file.insertChunkData(&m_optionsAppend, sizeof(bool)); + count = m_options.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_options[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save optionalSkillCommand + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("optionalSkillCommand"); + m_optionalSkillCommand.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save complexity + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("complexity"); + m_complexity.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save appearance + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("appearance"); + m_appearance.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); -} // ServerDraftSchematicObjectTemplate::_IngredientSlot::save + file.exitForm(true); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp index 299c8a2c..4a93bb00 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp @@ -19,63 +19,59 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerHarvesterInstallationObjectTemplate::ServerHarvesterInstallationObjectTemplate(const std::string & filename) +ServerHarvesterInstallationObjectTemplate::ServerHarvesterInstallationObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerInstallationObjectTemplate(filename) + : ServerInstallationObjectTemplate(filename) //@END TFD INIT { -} // ServerHarvesterInstallationObjectTemplate::ServerHarvesterInstallationObjectTemplate +} // ServerHarvesterInstallationObjectTemplate::ServerHarvesterInstallationObjectTemplate /** * Class destructor. */ -ServerHarvesterInstallationObjectTemplate::~ServerHarvesterInstallationObjectTemplate() -{ +ServerHarvesterInstallationObjectTemplate::~ServerHarvesterInstallationObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // ServerHarvesterInstallationObjectTemplate::~ServerHarvesterInstallationObjectTemplate +} // ServerHarvesterInstallationObjectTemplate::~ServerHarvesterInstallationObjectTemplate /** * Static function used to register this template. */ -void ServerHarvesterInstallationObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerHarvesterInstallationObjectTemplate_tag, create); -} // ServerHarvesterInstallationObjectTemplate::registerMe +void ServerHarvesterInstallationObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerHarvesterInstallationObjectTemplate_tag, create); +} // ServerHarvesterInstallationObjectTemplate::registerMe /** * Creates a ServerHarvesterInstallationObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerHarvesterInstallationObjectTemplate::create(const std::string & filename) -{ - return new ServerHarvesterInstallationObjectTemplate(filename); -} // ServerHarvesterInstallationObjectTemplate::create +ObjectTemplate *ServerHarvesterInstallationObjectTemplate::create(const std::string &filename) { + return new ServerHarvesterInstallationObjectTemplate(filename); +} // ServerHarvesterInstallationObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerHarvesterInstallationObjectTemplate::getId(void) const -{ - return ServerHarvesterInstallationObjectTemplate_tag; -} // ServerHarvesterInstallationObjectTemplate::getId +Tag ServerHarvesterInstallationObjectTemplate::getId(void) const { + return ServerHarvesterInstallationObjectTemplate_tag; +} // ServerHarvesterInstallationObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerHarvesterInstallationObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerHarvesterInstallationObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerHarvesterInstallationObjectTemplate::getTemplateVersion /** @@ -83,149 +79,132 @@ Tag ServerHarvesterInstallationObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerHarvesterInstallationObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerHarvesterInstallationObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerHarvesterInstallationObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerHarvesterInstallationObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerHarvesterInstallationObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerHarvesterInstallationObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "maxExtractionRate") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_maxExtractionRate; - } - fprintf(stderr, "trying to access single-parameter \"maxExtractionRate\" as an array\n"); - } - else if (strcmp(name, "currentExtractionRate") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_currentExtractionRate; - } - fprintf(stderr, "trying to access single-parameter \"currentExtractionRate\" as an array\n"); - } - else if (strcmp(name, "maxHopperSize") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_maxHopperSize; - } - fprintf(stderr, "trying to access single-parameter \"maxHopperSize\" as an array\n"); - } - else - return ServerInstallationObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerHarvesterInstallationObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerHarvesterInstallationObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("maxExtractionRate"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_maxExtractionRate; + } + fprintf(stderr, "trying to access single-parameter \"maxExtractionRate\" as an array\n"); + } + break; + case constcrc("currentExtractionRate"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_currentExtractionRate; + } + fprintf(stderr, "trying to access single-parameter \"currentExtractionRate\" as an array\n"); + } + break; + case constcrc("maxHopperSize"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_maxHopperSize; + } + fprintf(stderr, "trying to access single-parameter \"maxHopperSize\" as an array\n"); + } + break; + default: + return ServerInstallationObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerHarvesterInstallationObjectTemplate::getCompilerIntegerParam -FloatParam * ServerHarvesterInstallationObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return ServerInstallationObjectTemplate::getFloatParam(name, deepCheck, index); -} //ServerHarvesterInstallationObjectTemplate::getFloatParam +FloatParam *ServerHarvesterInstallationObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return ServerInstallationObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerHarvesterInstallationObjectTemplate::getFloatParam -BoolParam * ServerHarvesterInstallationObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return ServerInstallationObjectTemplate::getBoolParam(name, deepCheck, index); -} //ServerHarvesterInstallationObjectTemplate::getBoolParam +BoolParam *ServerHarvesterInstallationObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return ServerInstallationObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerHarvesterInstallationObjectTemplate::getBoolParam -StringParam * ServerHarvesterInstallationObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "masterClassName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_masterClassName; - } - fprintf(stderr, "trying to access single-parameter \"masterClassName\" as an array\n"); - } - else - return ServerInstallationObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerHarvesterInstallationObjectTemplate::getStringParam +StringParam *ServerHarvesterInstallationObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "masterClassName") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_masterClassName; + } + fprintf(stderr, "trying to access single-parameter \"masterClassName\" as an array\n"); + } else + return ServerInstallationObjectTemplate::getStringParam(name, deepCheck, index); + return nullptr; +} //ServerHarvesterInstallationObjectTemplate::getStringParam -StringIdParam * ServerHarvesterInstallationObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerInstallationObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerHarvesterInstallationObjectTemplate::getStringIdParam +StringIdParam * +ServerHarvesterInstallationObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerInstallationObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerHarvesterInstallationObjectTemplate::getStringIdParam -VectorParam * ServerHarvesterInstallationObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerInstallationObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerHarvesterInstallationObjectTemplate::getVectorParam +VectorParam *ServerHarvesterInstallationObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerInstallationObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerHarvesterInstallationObjectTemplate::getVectorParam -DynamicVariableParam * ServerHarvesterInstallationObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerInstallationObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerHarvesterInstallationObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +ServerHarvesterInstallationObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerInstallationObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerHarvesterInstallationObjectTemplate::getDynamicVariableParam -StructParamOT * ServerHarvesterInstallationObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return ServerInstallationObjectTemplate::getStructParamOT(name, deepCheck, index); -} //ServerHarvesterInstallationObjectTemplate::getStructParamOT +StructParamOT * +ServerHarvesterInstallationObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return ServerInstallationObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerHarvesterInstallationObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerHarvesterInstallationObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerInstallationObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerHarvesterInstallationObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam * +ServerHarvesterInstallationObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerInstallationObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerHarvesterInstallationObjectTemplate::getTriggerVolumeParam -void ServerHarvesterInstallationObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - ServerInstallationObjectTemplate::initStructParamOT(param, name); -} // ServerHarvesterInstallationObjectTemplate::initStructParamOT +void ServerHarvesterInstallationObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + ServerInstallationObjectTemplate::initStructParamOT(param, name); +} // ServerHarvesterInstallationObjectTemplate::initStructParamOT -void ServerHarvesterInstallationObjectTemplate::setAsEmptyList(const char *name) -{ - ServerInstallationObjectTemplate::setAsEmptyList(name); -} // ServerHarvesterInstallationObjectTemplate::setAsEmptyList +void ServerHarvesterInstallationObjectTemplate::setAsEmptyList(const char *name) { + ServerInstallationObjectTemplate::setAsEmptyList(name); +} // ServerHarvesterInstallationObjectTemplate::setAsEmptyList -void ServerHarvesterInstallationObjectTemplate::setAppend(const char *name) -{ - ServerInstallationObjectTemplate::setAppend(name); -} // ServerHarvesterInstallationObjectTemplate::setAppend +void ServerHarvesterInstallationObjectTemplate::setAppend(const char *name) { + ServerInstallationObjectTemplate::setAppend(name); +} // ServerHarvesterInstallationObjectTemplate::setAppend -bool ServerHarvesterInstallationObjectTemplate::isAppend(const char *name) const -{ - return ServerInstallationObjectTemplate::isAppend(name); -} // ServerHarvesterInstallationObjectTemplate::isAppend +bool ServerHarvesterInstallationObjectTemplate::isAppend(const char *name) const { + return ServerInstallationObjectTemplate::isAppend(name); +} // ServerHarvesterInstallationObjectTemplate::isAppend -int ServerHarvesterInstallationObjectTemplate::getListLength(const char *name) const -{ - return ServerInstallationObjectTemplate::getListLength(name); -} // ServerHarvesterInstallationObjectTemplate::getListLength +int ServerHarvesterInstallationObjectTemplate::getListLength(const char *name) const { + return ServerInstallationObjectTemplate::getListLength(name); +} // ServerHarvesterInstallationObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -233,70 +212,64 @@ int ServerHarvesterInstallationObjectTemplate::getListLength(const char *name) c * * @param file file to load from */ -void ServerHarvesterInstallationObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerHarvesterInstallationObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerHarvesterInstallationObjectTemplate_tag) - { - ServerInstallationObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerHarvesterInstallationObjectTemplate_tag) { + ServerInstallationObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,0)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 0)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "maxExtractionRate") == 0) - m_maxExtractionRate.loadFromIff(file); - else if (strcmp(paramName, "currentExtractionRate") == 0) - m_currentExtractionRate.loadFromIff(file); - else if (strcmp(paramName, "maxHopperSize") == 0) - m_maxHopperSize.loadFromIff(file); - else if (strcmp(paramName, "masterClassName") == 0) - m_masterClassName.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + if (strcmp(paramName, "maxExtractionRate") == 0) + m_maxExtractionRate.loadFromIff(file); + else if (strcmp(paramName, "currentExtractionRate") == 0) + m_currentExtractionRate.loadFromIff(file); + else if (strcmp(paramName, "maxHopperSize") == 0) + m_maxHopperSize.loadFromIff(file); + else if (strcmp(paramName, "masterClassName") == 0) + m_masterClassName.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - ServerInstallationObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerHarvesterInstallationObjectTemplate::load + file.exitForm(); + ServerInstallationObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerHarvesterInstallationObjectTemplate::load /** * Saves the template data to an iff file. @@ -304,59 +277,57 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerHarvesterInstallationObjectTemplate::save(Iff &file) -{ -int count; +void ServerHarvesterInstallationObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerHarvesterInstallationObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,0)); - file.allowNonlinearFunctions(); + file.insertForm(ServerHarvesterInstallationObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 0)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save maxExtractionRate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxExtractionRate"); - m_maxExtractionRate.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save currentExtractionRate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("currentExtractionRate"); - m_currentExtractionRate.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxHopperSize - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxHopperSize"); - m_maxHopperSize.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save masterClassName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("masterClassName"); - m_masterClassName.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save maxExtractionRate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxExtractionRate"); + m_maxExtractionRate.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save currentExtractionRate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("currentExtractionRate"); + m_currentExtractionRate.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxHopperSize + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxHopperSize"); + m_maxHopperSize.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save masterClassName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("masterClassName"); + m_masterClassName.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerInstallationObjectTemplate::save(file); - file.exitForm(); - UNREF(count); -} // ServerHarvesterInstallationObjectTemplate::save + file.exitForm(true); + ServerInstallationObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerHarvesterInstallationObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp index 13707972..b1268d44 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp @@ -19,85 +19,76 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerManufactureSchematicObjectTemplate::ServerManufactureSchematicObjectTemplate(const std::string & filename) +ServerManufactureSchematicObjectTemplate::ServerManufactureSchematicObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerIntangibleObjectTemplate(filename) - ,m_ingredientsLoaded(false) - ,m_ingredientsAppend(false) - ,m_attributesLoaded(false) - ,m_attributesAppend(false) + : ServerIntangibleObjectTemplate(filename), m_ingredientsLoaded(false), m_ingredientsAppend(false), + m_attributesLoaded(false), m_attributesAppend(false) //@END TFD INIT { -} // ServerManufactureSchematicObjectTemplate::ServerManufactureSchematicObjectTemplate +} // ServerManufactureSchematicObjectTemplate::ServerManufactureSchematicObjectTemplate /** * Class destructor. */ -ServerManufactureSchematicObjectTemplate::~ServerManufactureSchematicObjectTemplate() -{ +ServerManufactureSchematicObjectTemplate::~ServerManufactureSchematicObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_ingredients.begin(); iter != m_ingredients.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_ingredients.clear(); - } - { - std::vector::iterator iter; - for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_attributes.clear(); - } + { + std::vector::iterator iter; + for (iter = m_ingredients.begin(); iter != m_ingredients.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_ingredients.clear(); + } + { + std::vector::iterator iter; + for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_attributes.clear(); + } //@END TFD CLEANUP -} // ServerManufactureSchematicObjectTemplate::~ServerManufactureSchematicObjectTemplate +} // ServerManufactureSchematicObjectTemplate::~ServerManufactureSchematicObjectTemplate /** * Static function used to register this template. */ -void ServerManufactureSchematicObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerManufactureSchematicObjectTemplate_tag, create); -} // ServerManufactureSchematicObjectTemplate::registerMe +void ServerManufactureSchematicObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerManufactureSchematicObjectTemplate_tag, create); +} // ServerManufactureSchematicObjectTemplate::registerMe /** * Creates a ServerManufactureSchematicObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerManufactureSchematicObjectTemplate::create(const std::string & filename) -{ - return new ServerManufactureSchematicObjectTemplate(filename); -} // ServerManufactureSchematicObjectTemplate::create +ObjectTemplate *ServerManufactureSchematicObjectTemplate::create(const std::string &filename) { + return new ServerManufactureSchematicObjectTemplate(filename); +} // ServerManufactureSchematicObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerManufactureSchematicObjectTemplate::getId(void) const -{ - return ServerManufactureSchematicObjectTemplate_tag; -} // ServerManufactureSchematicObjectTemplate::getId +Tag ServerManufactureSchematicObjectTemplate::getId(void) const { + return ServerManufactureSchematicObjectTemplate_tag; +} // ServerManufactureSchematicObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerManufactureSchematicObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerManufactureSchematicObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerManufactureSchematicObjectTemplate::getTemplateVersion /** @@ -105,196 +96,201 @@ Tag ServerManufactureSchematicObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerManufactureSchematicObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerManufactureSchematicObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerManufactureSchematicObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerManufactureSchematicObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerManufactureSchematicObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerManufactureSchematicObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "itemCount") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_itemCount; - } - fprintf(stderr, "trying to access single-parameter \"itemCount\" as an array\n"); - } - else - return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerManufactureSchematicObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerManufactureSchematicObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "itemCount") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_itemCount; + } + fprintf(stderr, "trying to access single-parameter \"itemCount\" as an array\n"); + } else + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return nullptr; +} //ServerManufactureSchematicObjectTemplate::getCompilerIntegerParam -FloatParam * ServerManufactureSchematicObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::getFloatParam +FloatParam *ServerManufactureSchematicObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::getFloatParam -BoolParam * ServerManufactureSchematicObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::getBoolParam +BoolParam *ServerManufactureSchematicObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::getBoolParam -StringParam * ServerManufactureSchematicObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "draftSchematic") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_draftSchematic; - } - fprintf(stderr, "trying to access single-parameter \"draftSchematic\" as an array\n"); - } - else if (strcmp(name, "creator") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_creator; - } - fprintf(stderr, "trying to access single-parameter \"creator\" as an array\n"); - } - else - return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerManufactureSchematicObjectTemplate::getStringParam +StringParam *ServerManufactureSchematicObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("draftSchematic"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_draftSchematic; + } + fprintf(stderr, "trying to access single-parameter \"draftSchematic\" as an array\n"); + } + break; + case constcrc("creator"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_creator; + } + fprintf(stderr, "trying to access single-parameter \"creator\" as an array\n"); + } + break; + default: + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerManufactureSchematicObjectTemplate::getStringParam -StringIdParam * ServerManufactureSchematicObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::getStringIdParam +StringIdParam *ServerManufactureSchematicObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::getStringIdParam -VectorParam * ServerManufactureSchematicObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::getVectorParam +VectorParam *ServerManufactureSchematicObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::getVectorParam -DynamicVariableParam * ServerManufactureSchematicObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +ServerManufactureSchematicObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::getDynamicVariableParam -StructParamOT * ServerManufactureSchematicObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "ingredients") == 0) - { - if (index >= 0 && index < static_cast(m_ingredients.size())) - return m_ingredients[index]; - if (index == static_cast(m_ingredients.size())) - { - StructParamOT *temp = new StructParamOT(); - m_ingredients.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"ingredients\" out of bounds\n"); - } - else if (strcmp(name, "attributes") == 0) - { - if (index >= 0 && index < static_cast(m_attributes.size())) - return m_attributes[index]; - if (index == static_cast(m_attributes.size())) - { - StructParamOT *temp = new StructParamOT(); - m_attributes.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"attributes\" out of bounds\n"); - } - else - return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //ServerManufactureSchematicObjectTemplate::getStructParamOT +StructParamOT *ServerManufactureSchematicObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("ingredients"): { + if (index >= 0 && index < static_cast(m_ingredients.size())) + return m_ingredients[index]; + if (index == static_cast(m_ingredients.size())) { + StructParamOT *temp = new StructParamOT(); + m_ingredients.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"ingredients\" out of bounds\n"); + } + break; + case constcrc("attributes"): { + if (index >= 0 && index < static_cast(m_attributes.size())) + return m_attributes[index]; + if (index == static_cast(m_attributes.size())) { + StructParamOT *temp = new StructParamOT(); + m_attributes.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"attributes\" out of bounds\n"); + } + break; + default: + return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); + break; + } + return nullptr; +} //ServerManufactureSchematicObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerManufactureSchematicObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam * +ServerManufactureSchematicObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::getTriggerVolumeParam -void ServerManufactureSchematicObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "ingredients") == 0) - param.setValue(new _IngredientSlot("")); - else if (strcmp(name, "attributes") == 0) - param.setValue(new _SchematicAttribute("")); - else - ServerIntangibleObjectTemplate::initStructParamOT(param, name); -} // ServerManufactureSchematicObjectTemplate::initStructParamOT +void ServerManufactureSchematicObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + switch (runtimeCrc(name)) { + case constcrc("ingredients"): + param.setValue(new _IngredientSlot("")); + break; + case constcrc("attributes"): + param.setValue(new _SchematicAttribute("")); + break; + default: + ServerIntangibleObjectTemplate::initStructParamOT(param, name); + break; + } +} // ServerManufactureSchematicObjectTemplate::initStructParamOT -void ServerManufactureSchematicObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "ingredients") == 0) - { - m_ingredients.clear(); - m_ingredientsLoaded = true; - } - else if (strcmp(name, "attributes") == 0) - { - m_attributes.clear(); - m_attributesLoaded = true; - } - else - ServerIntangibleObjectTemplate::setAsEmptyList(name); -} // ServerManufactureSchematicObjectTemplate::setAsEmptyList +void ServerManufactureSchematicObjectTemplate::setAsEmptyList(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("ingredients"): { + m_ingredients.clear(); + m_ingredientsLoaded = true; + } + break; + case constcrc("attributes"): { + m_attributes.clear(); + m_attributesLoaded = true; + } + break; + default: + ServerIntangibleObjectTemplate::setAsEmptyList(name); + break; + } +} // ServerManufactureSchematicObjectTemplate::setAsEmptyList -void ServerManufactureSchematicObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "ingredients") == 0) - m_ingredientsAppend = true; - else if (strcmp(name, "attributes") == 0) - m_attributesAppend = true; - else - ServerIntangibleObjectTemplate::setAppend(name); -} // ServerManufactureSchematicObjectTemplate::setAppend +void ServerManufactureSchematicObjectTemplate::setAppend(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("ingredients"): + m_ingredientsAppend = true; + break; + case constcrc("attributes"): + m_attributesAppend = true; + break; + default: + ServerIntangibleObjectTemplate::setAppend(name); + break; + } +} // ServerManufactureSchematicObjectTemplate::setAppend -bool ServerManufactureSchematicObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "ingredients") == 0) - return m_ingredientsAppend; - else if (strcmp(name, "attributes") == 0) - return m_attributesAppend; - else - return ServerIntangibleObjectTemplate::isAppend(name); -} // ServerManufactureSchematicObjectTemplate::isAppend +bool ServerManufactureSchematicObjectTemplate::isAppend(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("ingredients"): + return m_ingredientsAppend; + break; + case constcrc("attributes"): + return m_attributesAppend; + break; + default: + return ServerIntangibleObjectTemplate::isAppend(name); + break; + } +} // ServerManufactureSchematicObjectTemplate::isAppend -int ServerManufactureSchematicObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "ingredients") == 0) - { - return m_ingredients.size(); - } - else if (strcmp(name, "attributes") == 0) - { - return m_attributes.size(); - } - else - return ServerIntangibleObjectTemplate::getListLength(name); -} // ServerManufactureSchematicObjectTemplate::getListLength +int ServerManufactureSchematicObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("ingredients"): { + return m_ingredients.size(); + } + break; + case constcrc("attributes"): { + return m_attributes.size(); + } + break; + default: + return ServerIntangibleObjectTemplate::getListLength(name); + break; + } +} // ServerManufactureSchematicObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -302,106 +298,102 @@ int ServerManufactureSchematicObjectTemplate::getListLength(const char *name) co * * @param file file to load from */ -void ServerManufactureSchematicObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerManufactureSchematicObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerManufactureSchematicObjectTemplate_tag) - { - ServerIntangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerManufactureSchematicObjectTemplate_tag) { + ServerIntangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,0)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 0)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "draftSchematic") == 0) - m_draftSchematic.loadFromIff(file); - else if (strcmp(paramName, "creator") == 0) - m_creator.loadFromIff(file); - else if (strcmp(paramName, "ingredients") == 0) - { - std::vector::iterator iter; - for (iter = m_ingredients.begin(); iter != m_ingredients.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_ingredients.clear(); - m_ingredientsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_ingredients.push_back(newData); - } - m_ingredientsLoaded = true; - } - else if (strcmp(paramName, "itemCount") == 0) - m_itemCount.loadFromIff(file); - else if (strcmp(paramName, "attributes") == 0) - { - std::vector::iterator iter; - for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_attributes.clear(); - m_attributesAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_attributes.push_back(newData); - } - m_attributesLoaded = true; - } - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - ServerIntangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerManufactureSchematicObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("draftSchematic"): + m_draftSchematic.loadFromIff(file); + break; + case constcrc("creator"): + m_creator.loadFromIff(file); + break; + case constcrc("ingredients"): { + std::vector::iterator iter; + for (iter = m_ingredients.begin(); iter != m_ingredients.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_ingredients.clear(); + m_ingredientsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_ingredients.push_back(newData); + } + m_ingredientsLoaded = true; + } + break; + case constcrc("itemCount"): + m_itemCount.loadFromIff(file); + break; + case constcrc("attributes"): { + std::vector::iterator iter; + for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_attributes.clear(); + m_attributesAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_attributes.push_back(newData); + } + m_attributesLoaded = true; + } + break; + } + file.exitChunk(true); + } + + file.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerManufactureSchematicObjectTemplate::load /** * Saves the template data to an iff file. @@ -409,83 +401,83 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerManufactureSchematicObjectTemplate::save(Iff &file) -{ -int count; +void ServerManufactureSchematicObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerManufactureSchematicObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,0)); - file.allowNonlinearFunctions(); + file.insertForm(ServerManufactureSchematicObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 0)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save draftSchematic - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("draftSchematic"); - m_draftSchematic.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save creator - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("creator"); - m_creator.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_ingredientsLoaded) - { - // mark the list as empty and extending the base list - m_ingredientsAppend = true; - } - // save ingredients - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("ingredients"); - file.insertChunkData(&m_ingredientsAppend, sizeof(bool)); - count = m_ingredients.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_ingredients[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save itemCount - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("itemCount"); - m_itemCount.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_attributesLoaded) - { - // mark the list as empty and extending the base list - m_attributesAppend = true; - } - // save attributes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("attributes"); - file.insertChunkData(&m_attributesAppend, sizeof(bool)); - count = m_attributes.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_attributes[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; + // save draftSchematic + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("draftSchematic"); + m_draftSchematic.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save creator + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("creator"); + m_creator.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_ingredientsLoaded) { + // mark the list as empty and extending the base list + m_ingredientsAppend = true; + } + // save ingredients + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("ingredients"); + file.insertChunkData(&m_ingredientsAppend, sizeof(bool)); + count = m_ingredients.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_ingredients[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save itemCount + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("itemCount"); + m_itemCount.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_attributesLoaded) { + // mark the list as empty and extending the base list + m_attributesAppend = true; + } + // save attributes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attributes"); + file.insertChunkData(&m_attributesAppend, sizeof(bool)); + count = m_attributes.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_attributes[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerIntangibleObjectTemplate::save(file); - file.exitForm(); -} // ServerManufactureSchematicObjectTemplate::save + file.exitForm(true); + ServerIntangibleObjectTemplate::save(file); + file.exitForm(); +} // ServerManufactureSchematicObjectTemplate::save //============================================================================= @@ -494,153 +486,141 @@ int count; /** * Class constructor. */ -ServerManufactureSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string & filename) - : TpfTemplate(filename) -{ -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::_IngredientSlot +ServerManufactureSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string &filename) + : TpfTemplate(filename) { +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::_IngredientSlot /** * Class destructor. */ -ServerManufactureSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot() -{ -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot +ServerManufactureSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot() { +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot /** * Static function used to register this template. */ -void ServerManufactureSchematicObjectTemplate::_IngredientSlot::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_IngredientSlot_tag, create); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::registerMe +void ServerManufactureSchematicObjectTemplate::_IngredientSlot::registerMe(void) { + ObjectTemplateList::registerTemplate(_IngredientSlot_tag, create); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::registerMe /** * Creates a ServerManufactureSchematicObjectTemplate::_IngredientSlot template. * * @return a new instance of the template */ -ObjectTemplate * ServerManufactureSchematicObjectTemplate::_IngredientSlot::create(const std::string & filename) -{ - return new ServerManufactureSchematicObjectTemplate::_IngredientSlot(filename); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::create +ObjectTemplate *ServerManufactureSchematicObjectTemplate::_IngredientSlot::create(const std::string &filename) { + return new ServerManufactureSchematicObjectTemplate::_IngredientSlot(filename); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::create /** * Returns the template id. * * @return the template id */ -Tag ServerManufactureSchematicObjectTemplate::_IngredientSlot::getId(void) const -{ - return _IngredientSlot_tag; -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::getId +Tag ServerManufactureSchematicObjectTemplate::_IngredientSlot::getId(void) const { + return _IngredientSlot_tag; +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::getId -CompilerIntegerParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam +CompilerIntegerParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam -FloatParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getFloatParam +FloatParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getFloatParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getFloatParam -BoolParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getBoolParam +BoolParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getBoolParam -StringParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringParam +StringParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringParam -StringIdParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringIdParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "name") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_name; - } - fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); - } - else - return TpfTemplate::getStringIdParam(name, deepCheck, index); - return nullptr; -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringIdParam +StringIdParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringIdParam(const char *name, bool deepCheck, + int index) { + if (strcmp(name, "name") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return nullptr; +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringIdParam -VectorParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getVectorParam +VectorParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getVectorParam -DynamicVariableParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam +DynamicVariableParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam -StructParamOT * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "ingredient") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStructParamOT(name, deepCheck, index); - return nullptr; - } - return &m_ingredient; - } - fprintf(stderr, "trying to access single-parameter \"ingredient\" as an array\n"); - } - else - return TpfTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStructParamOT +StructParamOT * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStructParamOT(const char *name, bool deepCheck, + int index) { + if (strcmp(name, "ingredient") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStructParamOT(name, deepCheck, index); + return nullptr; + } + return &m_ingredient; + } + fprintf(stderr, "trying to access single-parameter \"ingredient\" as an array\n"); + } else + return TpfTemplate::getStructParamOT(name, deepCheck, index); + return nullptr; +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStructParamOT -TriggerVolumeParam * ServerManufactureSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam +TriggerVolumeParam * +ServerManufactureSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam -void ServerManufactureSchematicObjectTemplate::_IngredientSlot::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "ingredient") == 0) - param.setValue(new _Ingredient("")); - else - TpfTemplate::initStructParamOT(param, name); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::initStructParamOT +void +ServerManufactureSchematicObjectTemplate::_IngredientSlot::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + if (strcmp(name, "ingredient") == 0) + param.setValue(new _Ingredient("")); + else + TpfTemplate::initStructParamOT(param, name); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::initStructParamOT -void ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAsEmptyList +void ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAsEmptyList -void ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAppend +void ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAppend -bool ServerManufactureSchematicObjectTemplate::_IngredientSlot::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::isAppend +bool ServerManufactureSchematicObjectTemplate::_IngredientSlot::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::isAppend -int ServerManufactureSchematicObjectTemplate::_IngredientSlot::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::getListLength +int ServerManufactureSchematicObjectTemplate::_IngredientSlot::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -648,30 +628,28 @@ int ServerManufactureSchematicObjectTemplate::_IngredientSlot::getListLength(con * * @param file file to load from */ -void ServerManufactureSchematicObjectTemplate::_IngredientSlot::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerManufactureSchematicObjectTemplate::_IngredientSlot::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "name") == 0) - m_name.loadFromIff(file); - else if (strcmp(paramName, "ingredient") == 0) - m_ingredient.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + if (strcmp(paramName, "name") == 0) + m_name.loadFromIff(file); + case constcrc("ingredient"): + m_ingredient.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - UNREF(file); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::load + file.exitForm(); + UNREF(file); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::load /** * Saves the template data to an iff file. @@ -679,35 +657,34 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerManufactureSchematicObjectTemplate::_IngredientSlot::save(Iff &file) -{ -int count; +void ServerManufactureSchematicObjectTemplate::_IngredientSlot::save(Iff &file) { + int count; - file.insertForm(_IngredientSlot_tag); + file.insertForm(_IngredientSlot_tag); - int paramCount = 0; + int paramCount = 0; - // save name - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("name"); - m_name.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save ingredient - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("ingredient"); - m_ingredient.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save name + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("name"); + m_name.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save ingredient + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("ingredient"); + m_ingredient.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::save + file.exitForm(true); + UNREF(count); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp index eb064024..ebb3fc71 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp @@ -19,129 +19,110 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerObjectTemplate::ServerObjectTemplate(const std::string & filename) +ServerObjectTemplate::ServerObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : TpfTemplate(filename) - ,m_scriptsLoaded(false) - ,m_scriptsAppend(false) - ,m_visibleFlagsLoaded(false) - ,m_visibleFlagsAppend(false) - ,m_deleteFlagsLoaded(false) - ,m_deleteFlagsAppend(false) - ,m_moveFlagsLoaded(false) - ,m_moveFlagsAppend(false) - ,m_contentsLoaded(false) - ,m_contentsAppend(false) - ,m_xpPointsLoaded(false) - ,m_xpPointsAppend(false) + : TpfTemplate(filename), m_scriptsLoaded(false), m_scriptsAppend(false), m_visibleFlagsLoaded(false), + m_visibleFlagsAppend(false), m_deleteFlagsLoaded(false), m_deleteFlagsAppend(false), m_moveFlagsLoaded(false), + m_moveFlagsAppend(false), m_contentsLoaded(false), m_contentsAppend(false), m_xpPointsLoaded(false), + m_xpPointsAppend(false) //@END TFD INIT { -} // ServerObjectTemplate::ServerObjectTemplate +} // ServerObjectTemplate::ServerObjectTemplate /** * Class destructor. */ -ServerObjectTemplate::~ServerObjectTemplate() -{ +ServerObjectTemplate::~ServerObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_scripts.begin(); iter != m_scripts.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_scripts.clear(); - } - { - std::vector::iterator iter; - for (iter = m_visibleFlags.begin(); iter != m_visibleFlags.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_visibleFlags.clear(); - } - { - std::vector::iterator iter; - for (iter = m_deleteFlags.begin(); iter != m_deleteFlags.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_deleteFlags.clear(); - } - { - std::vector::iterator iter; - for (iter = m_moveFlags.begin(); iter != m_moveFlags.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_moveFlags.clear(); - } - { - std::vector::iterator iter; - for (iter = m_contents.begin(); iter != m_contents.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_contents.clear(); - } - { - std::vector::iterator iter; - for (iter = m_xpPoints.begin(); iter != m_xpPoints.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_xpPoints.clear(); - } + { + std::vector::iterator iter; + for (iter = m_scripts.begin(); iter != m_scripts.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_scripts.clear(); + } + { + std::vector::iterator iter; + for (iter = m_visibleFlags.begin(); iter != m_visibleFlags.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_visibleFlags.clear(); + } + { + std::vector::iterator iter; + for (iter = m_deleteFlags.begin(); iter != m_deleteFlags.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_deleteFlags.clear(); + } + { + std::vector::iterator iter; + for (iter = m_moveFlags.begin(); iter != m_moveFlags.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_moveFlags.clear(); + } + { + std::vector::iterator iter; + for (iter = m_contents.begin(); iter != m_contents.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_contents.clear(); + } + { + std::vector::iterator iter; + for (iter = m_xpPoints.begin(); iter != m_xpPoints.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_xpPoints.clear(); + } //@END TFD CLEANUP -} // ServerObjectTemplate::~ServerObjectTemplate +} // ServerObjectTemplate::~ServerObjectTemplate /** * Static function used to register this template. */ -void ServerObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerObjectTemplate_tag, create); -} // ServerObjectTemplate::registerMe +void ServerObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerObjectTemplate_tag, create); +} // ServerObjectTemplate::registerMe /** * Creates a ServerObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerObjectTemplate::create(const std::string & filename) -{ - return new ServerObjectTemplate(filename); -} // ServerObjectTemplate::create +ObjectTemplate *ServerObjectTemplate::create(const std::string &filename) { + return new ServerObjectTemplate(filename); +} // ServerObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerObjectTemplate::getId(void) const -{ - return ServerObjectTemplate_tag; -} // ServerObjectTemplate::getId +Tag ServerObjectTemplate::getId(void) const { + return ServerObjectTemplate_tag; +} // ServerObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerObjectTemplate::getTemplateVersion /** @@ -149,390 +130,394 @@ Tag ServerObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "volume") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_volume; - } - fprintf(stderr, "trying to access single-parameter \"volume\" as an array\n"); - } - else if (strcmp(name, "visibleFlags") == 0) - { - if (index >= 0 && index < static_cast(m_visibleFlags.size())) - return m_visibleFlags[index]; - if (index == static_cast(m_visibleFlags.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_visibleFlags.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"visibleFlags\" out of bounds\n"); - } - else if (strcmp(name, "deleteFlags") == 0) - { - if (index >= 0 && index < static_cast(m_deleteFlags.size())) - return m_deleteFlags[index]; - if (index == static_cast(m_deleteFlags.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_deleteFlags.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"deleteFlags\" out of bounds\n"); - } - else if (strcmp(name, "moveFlags") == 0) - { - if (index >= 0 && index < static_cast(m_moveFlags.size())) - return m_moveFlags[index]; - if (index == static_cast(m_moveFlags.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_moveFlags.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"moveFlags\" out of bounds\n"); - } - else if (strcmp(name, "tintIndex") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_tintIndex; - } - fprintf(stderr, "trying to access single-parameter \"tintIndex\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam *ServerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("volume"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_volume; + } + fprintf(stderr, "trying to access single-parameter \"volume\" as an array\n"); + } + break; + case constcrc("visibleFlags"): { + if (index >= 0 && index < static_cast(m_visibleFlags.size())) + return m_visibleFlags[index]; + if (index == static_cast(m_visibleFlags.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_visibleFlags.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"visibleFlags\" out of bounds\n"); + } + break; + case constcrc("deleteFlags"): { + if (index >= 0 && index < static_cast(m_deleteFlags.size())) + return m_deleteFlags[index]; + if (index == static_cast(m_deleteFlags.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_deleteFlags.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"deleteFlags\" out of bounds\n"); + } + break; + case constcrc("moveFlags"): { + if (index >= 0 && index < static_cast(m_moveFlags.size())) + return m_moveFlags[index]; + if (index == static_cast(m_moveFlags.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_moveFlags.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"moveFlags\" out of bounds\n"); + } + break; + case constcrc("tintIndex"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_tintIndex; + } + fprintf(stderr, "trying to access single-parameter \"tintIndex\" as an array\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::getCompilerIntegerParam -FloatParam * ServerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "complexity") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_complexity; - } - fprintf(stderr, "trying to access single-parameter \"complexity\" as an array\n"); - } - else if (strcmp(name, "updateRanges") == 0) - { - if (index >= 0 && index < 3) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_updateRanges[index]; - } - fprintf(stderr, "index for parameter \"updateRanges\" out of bounds\n"); - } - else - return TpfTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::getFloatParam +FloatParam *ServerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("complexity"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_complexity; + } + fprintf(stderr, "trying to access single-parameter \"complexity\" as an array\n"); + } + break; + case constcrc("updateRanges"): { + if (index >= 0 && index < 3) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_updateRanges[index]; + } + fprintf(stderr, "index for parameter \"updateRanges\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::getFloatParam -BoolParam * ServerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "invulnerable") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_invulnerable; - } - fprintf(stderr, "trying to access single-parameter \"invulnerable\" as an array\n"); - } - else if (strcmp(name, "persistByDefault") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_persistByDefault; - } - fprintf(stderr, "trying to access single-parameter \"persistByDefault\" as an array\n"); - } - else if (strcmp(name, "persistContents") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_persistContents; - } - fprintf(stderr, "trying to access single-parameter \"persistContents\" as an array\n"); - } - else - return TpfTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::getBoolParam +BoolParam *ServerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("invulnerable"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_invulnerable; + } + fprintf(stderr, "trying to access single-parameter \"invulnerable\" as an array\n"); + } + break; + case constcrc("persistByDefault"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_persistByDefault; + } + fprintf(stderr, "trying to access single-parameter \"persistByDefault\" as an array\n"); + } + break; + case constcrc("persistContents"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_persistContents; + } + fprintf(stderr, "trying to access single-parameter \"persistContents\" as an array\n"); + } + break; + default: + return TpfTemplate::getBoolParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::getBoolParam -StringParam * ServerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "sharedTemplate") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_sharedTemplate; - } - fprintf(stderr, "trying to access single-parameter \"sharedTemplate\" as an array\n"); - } - else if (strcmp(name, "scripts") == 0) - { - if (index >= 0 && index < static_cast(m_scripts.size())) - return m_scripts[index]; - if (index == static_cast(m_scripts.size())) - { - StringParam *temp = new StringParam(); - m_scripts.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"scripts\" out of bounds\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::getStringParam +StringParam *ServerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("sharedTemplate"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_sharedTemplate; + } + fprintf(stderr, "trying to access single-parameter \"sharedTemplate\" as an array\n"); + } + break; + case constcrc("scripts"): { + if (index >= 0 && index < static_cast(m_scripts.size())) + return m_scripts[index]; + if (index == static_cast(m_scripts.size())) { + StringParam *temp = new StringParam(); + m_scripts.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"scripts\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::getStringParam -StringIdParam * ServerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerObjectTemplate::getStringIdParam +StringIdParam *ServerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerObjectTemplate::getStringIdParam -VectorParam * ServerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerObjectTemplate::getVectorParam +VectorParam *ServerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerObjectTemplate::getVectorParam -DynamicVariableParam * ServerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "objvars") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getDynamicVariableParam(name, deepCheck, index); - return nullptr; - } - return &m_objvars; - } - fprintf(stderr, "trying to access single-parameter \"objvars\" as an array\n"); - } - else - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::getDynamicVariableParam +DynamicVariableParam *ServerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "objvars") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getDynamicVariableParam(name, deepCheck, index); + return nullptr; + } + return &m_objvars; + } + fprintf(stderr, "trying to access single-parameter \"objvars\" as an array\n"); + } else + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); + return nullptr; +} //ServerObjectTemplate::getDynamicVariableParam -StructParamOT * ServerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "contents") == 0) - { - if (index >= 0 && index < static_cast(m_contents.size())) - return m_contents[index]; - if (index == static_cast(m_contents.size())) - { - StructParamOT *temp = new StructParamOT(); - m_contents.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"contents\" out of bounds\n"); - } - else if (strcmp(name, "xpPoints") == 0) - { - if (index >= 0 && index < static_cast(m_xpPoints.size())) - return m_xpPoints[index]; - if (index == static_cast(m_xpPoints.size())) - { - StructParamOT *temp = new StructParamOT(); - m_xpPoints.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"xpPoints\" out of bounds\n"); - } - else - return TpfTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::getStructParamOT +StructParamOT *ServerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("contents"): { + if (index >= 0 && index < static_cast(m_contents.size())) + return m_contents[index]; + if (index == static_cast(m_contents.size())) { + StructParamOT *temp = new StructParamOT(); + m_contents.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"contents\" out of bounds\n"); + } + break; + case constcrc("xpPoints"): { + if (index >= 0 && index < static_cast(m_xpPoints.size())) + return m_xpPoints[index]; + if (index == static_cast(m_xpPoints.size())) { + StructParamOT *temp = new StructParamOT(); + m_xpPoints.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"xpPoints\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getStructParamOT(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *ServerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerObjectTemplate::getTriggerVolumeParam -void ServerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "contents") == 0) - param.setValue(new _Contents("")); - else if (strcmp(name, "xpPoints") == 0) - param.setValue(new _Xp("")); - else - TpfTemplate::initStructParamOT(param, name); -} // ServerObjectTemplate::initStructParamOT +void ServerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; -void ServerObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "scripts") == 0) - { - m_scripts.clear(); - m_scriptsLoaded = true; - } - else if (strcmp(name, "visibleFlags") == 0) - { - m_visibleFlags.clear(); - m_visibleFlagsLoaded = true; - } - else if (strcmp(name, "deleteFlags") == 0) - { - m_deleteFlags.clear(); - m_deleteFlagsLoaded = true; - } - else if (strcmp(name, "moveFlags") == 0) - { - m_moveFlags.clear(); - m_moveFlagsLoaded = true; - } - else if (strcmp(name, "contents") == 0) - { - m_contents.clear(); - m_contentsLoaded = true; - } - else if (strcmp(name, "xpPoints") == 0) - { - m_xpPoints.clear(); - m_xpPointsLoaded = true; - } - else - TpfTemplate::setAsEmptyList(name); -} // ServerObjectTemplate::setAsEmptyList + switch (runtimeCrc(name)) { + case constcrc("contents"): + param.setValue(new _Contents("")); + break; + case constcrc("xpPoints"): + param.setValue(new _Xp("")); + break; + default: + TpfTemplate::initStructParamOT(param, name); + break; + } +} // ServerObjectTemplate::initStructParamOT -void ServerObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "scripts") == 0) - m_scriptsAppend = true; - else if (strcmp(name, "visibleFlags") == 0) - m_visibleFlagsAppend = true; - else if (strcmp(name, "deleteFlags") == 0) - m_deleteFlagsAppend = true; - else if (strcmp(name, "moveFlags") == 0) - m_moveFlagsAppend = true; - else if (strcmp(name, "contents") == 0) - m_contentsAppend = true; - else if (strcmp(name, "xpPoints") == 0) - m_xpPointsAppend = true; - else - TpfTemplate::setAppend(name); -} // ServerObjectTemplate::setAppend +void ServerObjectTemplate::setAsEmptyList(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("scripts"): { + m_scripts.clear(); + m_scriptsLoaded = true; + } + break; + case constcrc("visibleFlags"): { + m_visibleFlags.clear(); + m_visibleFlagsLoaded = true; + } + break; + case constcrc("deleteFlags"): { + m_deleteFlags.clear(); + m_deleteFlagsLoaded = true; + } + break; + case constcrc("moveFlags"): { + m_moveFlags.clear(); + m_moveFlagsLoaded = true; + } + break; + case constcrc("contents"): { + m_contents.clear(); + m_contentsLoaded = true; + } + break; + case constcrc("xpPoints"): { + m_xpPoints.clear(); + m_xpPointsLoaded = true; + } + break; + default: + TpfTemplate::setAsEmptyList(name); + break; + } +} // ServerObjectTemplate::setAsEmptyList -bool ServerObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "scripts") == 0) - return m_scriptsAppend; - else if (strcmp(name, "visibleFlags") == 0) - return m_visibleFlagsAppend; - else if (strcmp(name, "deleteFlags") == 0) - return m_deleteFlagsAppend; - else if (strcmp(name, "moveFlags") == 0) - return m_moveFlagsAppend; - else if (strcmp(name, "contents") == 0) - return m_contentsAppend; - else if (strcmp(name, "xpPoints") == 0) - return m_xpPointsAppend; - else - return TpfTemplate::isAppend(name); -} // ServerObjectTemplate::isAppend +void ServerObjectTemplate::setAppend(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("scripts"): + m_scriptsAppend = true; + break; + case constcrc("visibleFlags"): + m_visibleFlagsAppend = true; + break; + case constcrc("deleteFlags"): + m_deleteFlagsAppend = true; + break; + case constcrc("moveFlags"): + m_moveFlagsAppend = true; + break; + case constcrc("contents"): + m_contentsAppend = true; + break; + case constcrc("xpPoints"): + m_xpPointsAppend = true; + break; + default: + TpfTemplate::setAppend(name); + break; + } +} // ServerObjectTemplate::setAppend + +bool ServerObjectTemplate::isAppend(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("scripts"): + return m_scriptsAppend; + break; + case constcrc("visibleFlags"): + return m_visibleFlagsAppend; + break; + case constcrc("deleteFlags"): + return m_deleteFlagsAppend; + break; + case constcrc("moveFlags"): + return m_moveFlagsAppend; + break; + case constcrc("contents"): + return m_contentsAppend; + break; + case constcrc("xpPoints"): + return m_xpPointsAppend; + break; + default: + return TpfTemplate::isAppend(name); + break; + } +} // ServerObjectTemplate::isAppend -int ServerObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "scripts") == 0) - { - return m_scripts.size(); - } - else if (strcmp(name, "visibleFlags") == 0) - { - return m_visibleFlags.size(); - } - else if (strcmp(name, "deleteFlags") == 0) - { - return m_deleteFlags.size(); - } - else if (strcmp(name, "moveFlags") == 0) - { - return m_moveFlags.size(); - } - else if (strcmp(name, "updateRanges") == 0) - { - return sizeof(m_updateRanges) / sizeof(FloatParam); - } - else if (strcmp(name, "contents") == 0) - { - return m_contents.size(); - } - else if (strcmp(name, "xpPoints") == 0) - { - return m_xpPoints.size(); - } - else - return TpfTemplate::getListLength(name); -} // ServerObjectTemplate::getListLength +int ServerObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("scripts"): { + return m_scripts.size(); + } + break; + case constcrc("visibleFlags"): { + return m_visibleFlags.size(); + } + break; + case constcrc("deleteFlags"): { + return m_deleteFlags.size(); + } + break; + case constcrc("moveFlags"): { + return m_moveFlags.size(); + } + break; + case constcrc("updateRanges"): { + return sizeof(m_updateRanges) / sizeof(FloatParam); + } + break; + case constcrc("contents"): { + return m_contents.size(); + } + break; + case constcrc("xpPoints"): { + return m_xpPoints.size(); + } + break; + default: + return TpfTemplate::getListLength(name); + break; + } +} // ServerObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -540,206 +525,199 @@ int ServerObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerObjectTemplate_tag) - { - TpfTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerObjectTemplate_tag) { + TpfTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,1,1)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 1, 1)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "sharedTemplate") == 0) - m_sharedTemplate.loadFromIff(file); - else if (strcmp(paramName, "scripts") == 0) - { - std::vector::iterator iter; - for (iter = m_scripts.begin(); iter != m_scripts.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_scripts.clear(); - m_scriptsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_scripts.push_back(newData); - } - m_scriptsLoaded = true; - } - else if (strcmp(paramName, "objvars") == 0) - m_objvars.loadFromIff(file); - else if (strcmp(paramName, "volume") == 0) - m_volume.loadFromIff(file); - else if (strcmp(paramName, "visibleFlags") == 0) - { - std::vector::iterator iter; - for (iter = m_visibleFlags.begin(); iter != m_visibleFlags.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_visibleFlags.clear(); - m_visibleFlagsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_visibleFlags.push_back(newData); - } - m_visibleFlagsLoaded = true; - } - else if (strcmp(paramName, "deleteFlags") == 0) - { - std::vector::iterator iter; - for (iter = m_deleteFlags.begin(); iter != m_deleteFlags.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_deleteFlags.clear(); - m_deleteFlagsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_deleteFlags.push_back(newData); - } - m_deleteFlagsLoaded = true; - } - else if (strcmp(paramName, "moveFlags") == 0) - { - std::vector::iterator iter; - for (iter = m_moveFlags.begin(); iter != m_moveFlags.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_moveFlags.clear(); - m_moveFlagsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_moveFlags.push_back(newData); - } - m_moveFlagsLoaded = true; - } - else if (strcmp(paramName, "invulnerable") == 0) - m_invulnerable.loadFromIff(file); - else if (strcmp(paramName, "complexity") == 0) - m_complexity.loadFromIff(file); - else if (strcmp(paramName, "tintIndex") == 0) - m_tintIndex.loadFromIff(file); - else if (strcmp(paramName, "updateRanges") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 3, ("Template %s: read array size of %d for array \"updateRanges\" of size 3, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 3 && j < listCount; ++j) - m_updateRanges[j].loadFromIff(file); - // if there are more params for updateRanges read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "contents") == 0) - { - std::vector::iterator iter; - for (iter = m_contents.begin(); iter != m_contents.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_contents.clear(); - m_contentsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_contents.push_back(newData); - } - m_contentsLoaded = true; - } - else if (strcmp(paramName, "xpPoints") == 0) - { - std::vector::iterator iter; - for (iter = m_xpPoints.begin(); iter != m_xpPoints.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_xpPoints.clear(); - m_xpPointsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_xpPoints.push_back(newData); - } - m_xpPointsLoaded = true; - } - else if (strcmp(paramName, "persistByDefault") == 0) - m_persistByDefault.loadFromIff(file); - else if (strcmp(paramName, "persistContents") == 0) - m_persistContents.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - TpfTemplate::load(file); - file.exitForm(); - return; -} // ServerObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("sharedTemplate"): + m_sharedTemplate.loadFromIff(file); + break; + case constcrc("scripts"): { + std::vector::iterator iter; + for (iter = m_scripts.begin(); iter != m_scripts.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_scripts.clear(); + m_scriptsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_scripts.push_back(newData); + } + m_scriptsLoaded = true; + } + break; + case constcrc("objvars"): + m_objvars.loadFromIff(file); + break; + case constcrc("volume"): + m_volume.loadFromIff(file); + break; + case constcrc("visibleFlags"): { + std::vector::iterator iter; + for (iter = m_visibleFlags.begin(); iter != m_visibleFlags.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_visibleFlags.clear(); + m_visibleFlagsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_visibleFlags.push_back(newData); + } + m_visibleFlagsLoaded = true; + } + break; + case constcrc("deleteFlags"): { + std::vector::iterator iter; + for (iter = m_deleteFlags.begin(); iter != m_deleteFlags.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_deleteFlags.clear(); + m_deleteFlagsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_deleteFlags.push_back(newData); + } + m_deleteFlagsLoaded = true; + } + break; + case constcrc("moveFlags"): { + std::vector::iterator iter; + for (iter = m_moveFlags.begin(); iter != m_moveFlags.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_moveFlags.clear(); + m_moveFlagsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_moveFlags.push_back(newData); + } + m_moveFlagsLoaded = true; + } + break; + case constcrc("invulnerable"): + m_invulnerable.loadFromIff(file); + break; + case constcrc("complexity"): + m_complexity.loadFromIff(file); + break; + case constcrc("tintIndex"): + m_tintIndex.loadFromIff(file); + break; + case constcrc("updateRanges"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 3, + ("Template %s: read array size of %d for array \"updateRanges\" of size 3, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 3 && j < listCount; ++j) + m_updateRanges[j].loadFromIff(file); + // if there are more params for updateRanges read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("contents"): { + std::vector::iterator iter; + for (iter = m_contents.begin(); iter != m_contents.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_contents.clear(); + m_contentsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_contents.push_back(newData); + } + m_contentsLoaded = true; + } + break; + case constcrc("xpPoints"): { + std::vector::iterator iter; + for (iter = m_xpPoints.begin(); iter != m_xpPoints.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_xpPoints.clear(); + m_xpPointsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_xpPoints.push_back(newData); + } + m_xpPointsLoaded = true; + } + break; + case constcrc("persistByDefault"): + m_persistByDefault.loadFromIff(file); + break; + case constcrc("persistContents"): + m_persistContents.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // ServerObjectTemplate::load /** * Saves the template data to an iff file. @@ -747,182 +725,188 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerObjectTemplate::save(Iff &file) -{ -int count; +void ServerObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,1,1)); - file.allowNonlinearFunctions(); + file.insertForm(ServerObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 1, 1)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save sharedTemplate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("sharedTemplate"); - m_sharedTemplate.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_scriptsLoaded) - { - // mark the list as empty and extending the base list - m_scriptsAppend = true; - } - // save scripts - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("scripts"); - file.insertChunkData(&m_scriptsAppend, sizeof(bool)); - count = m_scripts.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_scripts[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save objvars - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("objvars"); - m_objvars.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save volume - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("volume"); - m_volume.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_visibleFlagsLoaded) - { - // mark the list as empty and extending the base list - m_visibleFlagsAppend = true; - } - // save visibleFlags - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("visibleFlags"); - file.insertChunkData(&m_visibleFlagsAppend, sizeof(bool)); - count = m_visibleFlags.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_visibleFlags[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_deleteFlagsLoaded) - { - // mark the list as empty and extending the base list - m_deleteFlagsAppend = true; - } - // save deleteFlags - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("deleteFlags"); - file.insertChunkData(&m_deleteFlagsAppend, sizeof(bool)); - count = m_deleteFlags.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_deleteFlags[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_moveFlagsLoaded) - { - // mark the list as empty and extending the base list - m_moveFlagsAppend = true; - } - // save moveFlags - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("moveFlags"); - file.insertChunkData(&m_moveFlagsAppend, sizeof(bool)); - count = m_moveFlags.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_moveFlags[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save invulnerable - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("invulnerable"); - m_invulnerable.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save complexity - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("complexity"); - m_complexity.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save tintIndex - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("tintIndex"); - m_tintIndex.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save updateRanges - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("updateRanges"); - count = 3; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 3; ++i) - m_updateRanges[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_contentsLoaded) - { - // mark the list as empty and extending the base list - m_contentsAppend = true; - } - // save contents - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("contents"); - file.insertChunkData(&m_contentsAppend, sizeof(bool)); - count = m_contents.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_contents[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_xpPointsLoaded) - { - // mark the list as empty and extending the base list - m_xpPointsAppend = true; - } - // save xpPoints - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("xpPoints"); - file.insertChunkData(&m_xpPointsAppend, sizeof(bool)); - count = m_xpPoints.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_xpPoints[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save persistByDefault - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("persistByDefault"); - m_persistByDefault.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save persistContents - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("persistContents"); - m_persistContents.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save sharedTemplate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("sharedTemplate"); + m_sharedTemplate.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_scriptsLoaded) { + // mark the list as empty and extending the base list + m_scriptsAppend = true; + } + // save scripts + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("scripts"); + file.insertChunkData(&m_scriptsAppend, sizeof(bool)); + count = m_scripts.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_scripts[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save objvars + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("objvars"); + m_objvars.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save volume + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("volume"); + m_volume.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_visibleFlagsLoaded) { + // mark the list as empty and extending the base list + m_visibleFlagsAppend = true; + } + // save visibleFlags + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("visibleFlags"); + file.insertChunkData(&m_visibleFlagsAppend, sizeof(bool)); + count = m_visibleFlags.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_visibleFlags[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_deleteFlagsLoaded) { + // mark the list as empty and extending the base list + m_deleteFlagsAppend = true; + } + // save deleteFlags + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("deleteFlags"); + file.insertChunkData(&m_deleteFlagsAppend, sizeof(bool)); + count = m_deleteFlags.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_deleteFlags[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_moveFlagsLoaded) { + // mark the list as empty and extending the base list + m_moveFlagsAppend = true; + } + // save moveFlags + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("moveFlags"); + file.insertChunkData(&m_moveFlagsAppend, sizeof(bool)); + count = m_moveFlags.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_moveFlags[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save invulnerable + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("invulnerable"); + m_invulnerable.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save complexity + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("complexity"); + m_complexity.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save tintIndex + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("tintIndex"); + m_tintIndex.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save updateRanges + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("updateRanges"); + count = 3; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 3; ++i) + m_updateRanges[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_contentsLoaded) { + // mark the list as empty and extending the base list + m_contentsAppend = true; + } + // save contents + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("contents"); + file.insertChunkData(&m_contentsAppend, sizeof(bool)); + count = m_contents.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_contents[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_xpPointsLoaded) { + // mark the list as empty and extending the base list + m_xpPointsAppend = true; + } + // save xpPoints + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("xpPoints"); + file.insertChunkData(&m_xpPointsAppend, sizeof(bool)); + count = m_xpPoints.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_xpPoints[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save persistByDefault + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("persistByDefault"); + m_persistByDefault.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save persistContents + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("persistContents"); + m_persistContents.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - TpfTemplate::save(file); - file.exitForm(); -} // ServerObjectTemplate::save + file.exitForm(true); + TpfTemplate::save(file); + file.exitForm(); +} // ServerObjectTemplate::save //============================================================================= @@ -931,192 +915,172 @@ int count; /** * Class constructor. */ -ServerObjectTemplate::_AttribMod::_AttribMod(const std::string & filename) - : TpfTemplate(filename) -{ -} // ServerObjectTemplate::_AttribMod::_AttribMod +ServerObjectTemplate::_AttribMod::_AttribMod(const std::string &filename) + : TpfTemplate(filename) { +} // ServerObjectTemplate::_AttribMod::_AttribMod /** * Class destructor. */ -ServerObjectTemplate::_AttribMod::~_AttribMod() -{ -} // ServerObjectTemplate::_AttribMod::~_AttribMod +ServerObjectTemplate::_AttribMod::~_AttribMod() { +} // ServerObjectTemplate::_AttribMod::~_AttribMod /** * Static function used to register this template. */ -void ServerObjectTemplate::_AttribMod::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_AttribMod_tag, create); -} // ServerObjectTemplate::_AttribMod::registerMe +void ServerObjectTemplate::_AttribMod::registerMe(void) { + ObjectTemplateList::registerTemplate(_AttribMod_tag, create); +} // ServerObjectTemplate::_AttribMod::registerMe /** * Creates a ServerObjectTemplate::_AttribMod template. * * @return a new instance of the template */ -ObjectTemplate * ServerObjectTemplate::_AttribMod::create(const std::string & filename) -{ - return new ServerObjectTemplate::_AttribMod(filename); -} // ServerObjectTemplate::_AttribMod::create +ObjectTemplate *ServerObjectTemplate::_AttribMod::create(const std::string &filename) { + return new ServerObjectTemplate::_AttribMod(filename); +} // ServerObjectTemplate::_AttribMod::create /** * Returns the template id. * * @return the template id */ -Tag ServerObjectTemplate::_AttribMod::getId(void) const -{ - return _AttribMod_tag; -} // ServerObjectTemplate::_AttribMod::getId +Tag ServerObjectTemplate::_AttribMod::getId(void) const { + return _AttribMod_tag; +} // ServerObjectTemplate::_AttribMod::getId -CompilerIntegerParam * ServerObjectTemplate::_AttribMod::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "target") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_target; - } - fprintf(stderr, "trying to access single-parameter \"target\" as an array\n"); - } - else if (strcmp(name, "value") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_value; - } - fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::_AttribMod::getCompilerIntegerParam +CompilerIntegerParam * +ServerObjectTemplate::_AttribMod::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("target"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_target; + } + fprintf(stderr, "trying to access single-parameter \"target\" as an array\n"); + } + break; + case constcrc("value"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::_AttribMod::getCompilerIntegerParam -FloatParam * ServerObjectTemplate::_AttribMod::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "time") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_time; - } - fprintf(stderr, "trying to access single-parameter \"time\" as an array\n"); - } - else if (strcmp(name, "timeAtValue") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_timeAtValue; - } - fprintf(stderr, "trying to access single-parameter \"timeAtValue\" as an array\n"); - } - else if (strcmp(name, "decay") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_decay; - } - fprintf(stderr, "trying to access single-parameter \"decay\" as an array\n"); - } - else - return TpfTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::_AttribMod::getFloatParam +FloatParam *ServerObjectTemplate::_AttribMod::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("time"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_time; + } + fprintf(stderr, "trying to access single-parameter \"time\" as an array\n"); + } + break; + case constcrc("timeAtValue"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_timeAtValue; + } + fprintf(stderr, "trying to access single-parameter \"timeAtValue\" as an array\n"); + } + break; + case constcrc("decay"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_decay; + } + fprintf(stderr, "trying to access single-parameter \"decay\" as an array\n"); + } + break; + default: + return TpfTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::_AttribMod::getFloatParam -BoolParam * ServerObjectTemplate::_AttribMod::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //ServerObjectTemplate::_AttribMod::getBoolParam +BoolParam *ServerObjectTemplate::_AttribMod::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerObjectTemplate::_AttribMod::getBoolParam -StringParam * ServerObjectTemplate::_AttribMod::getStringParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringParam(name, deepCheck, index); -} //ServerObjectTemplate::_AttribMod::getStringParam +StringParam *ServerObjectTemplate::_AttribMod::getStringParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringParam(name, deepCheck, index); +} //ServerObjectTemplate::_AttribMod::getStringParam -StringIdParam * ServerObjectTemplate::_AttribMod::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerObjectTemplate::_AttribMod::getStringIdParam +StringIdParam *ServerObjectTemplate::_AttribMod::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerObjectTemplate::_AttribMod::getStringIdParam -VectorParam * ServerObjectTemplate::_AttribMod::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerObjectTemplate::_AttribMod::getVectorParam +VectorParam *ServerObjectTemplate::_AttribMod::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerObjectTemplate::_AttribMod::getVectorParam -DynamicVariableParam * ServerObjectTemplate::_AttribMod::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerObjectTemplate::_AttribMod::getDynamicVariableParam +DynamicVariableParam * +ServerObjectTemplate::_AttribMod::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerObjectTemplate::_AttribMod::getDynamicVariableParam -StructParamOT * ServerObjectTemplate::_AttribMod::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //ServerObjectTemplate::_AttribMod::getStructParamOT +StructParamOT *ServerObjectTemplate::_AttribMod::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerObjectTemplate::_AttribMod::getStructParamOT -TriggerVolumeParam * ServerObjectTemplate::_AttribMod::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerObjectTemplate::_AttribMod::getTriggerVolumeParam +TriggerVolumeParam * +ServerObjectTemplate::_AttribMod::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerObjectTemplate::_AttribMod::getTriggerVolumeParam -void ServerObjectTemplate::_AttribMod::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // ServerObjectTemplate::_AttribMod::initStructParamOT +void ServerObjectTemplate::_AttribMod::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerObjectTemplate::_AttribMod::initStructParamOT -void ServerObjectTemplate::_AttribMod::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // ServerObjectTemplate::_AttribMod::setAsEmptyList +void ServerObjectTemplate::_AttribMod::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // ServerObjectTemplate::_AttribMod::setAsEmptyList -void ServerObjectTemplate::_AttribMod::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // ServerObjectTemplate::_AttribMod::setAppend +void ServerObjectTemplate::_AttribMod::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // ServerObjectTemplate::_AttribMod::setAppend -bool ServerObjectTemplate::_AttribMod::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // ServerObjectTemplate::_AttribMod::isAppend +bool ServerObjectTemplate::_AttribMod::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // ServerObjectTemplate::_AttribMod::isAppend -int ServerObjectTemplate::_AttribMod::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // ServerObjectTemplate::_AttribMod::getListLength +int ServerObjectTemplate::_AttribMod::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // ServerObjectTemplate::_AttribMod::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1124,36 +1088,34 @@ int ServerObjectTemplate::_AttribMod::getListLength(const char *name) const * * @param file file to load from */ -void ServerObjectTemplate::_AttribMod::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerObjectTemplate::_AttribMod::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "target") == 0) - m_target.loadFromIff(file); - else if (strcmp(paramName, "value") == 0) - m_value.loadFromIff(file); - else if (strcmp(paramName, "time") == 0) - m_time.loadFromIff(file); - else if (strcmp(paramName, "timeAtValue") == 0) - m_timeAtValue.loadFromIff(file); - else if (strcmp(paramName, "decay") == 0) - m_decay.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + if (strcmp(paramName, "target") == 0) + m_target.loadFromIff(file); + case constcrc("value"): + m_value.loadFromIff(file); + case constcrc("time"): + m_time.loadFromIff(file); + case constcrc("timeAtValue"): + m_timeAtValue.loadFromIff(file); + case constcrc("decay"): + m_decay.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - UNREF(file); -} // ServerObjectTemplate::_AttribMod::load + file.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_AttribMod::load /** * Saves the template data to an iff file. @@ -1161,54 +1123,53 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerObjectTemplate::_AttribMod::save(Iff &file) -{ -int count; +void ServerObjectTemplate::_AttribMod::save(Iff &file) { + int count; - file.insertForm(_AttribMod_tag); + file.insertForm(_AttribMod_tag); - int paramCount = 0; + int paramCount = 0; - // save target - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("target"); - m_target.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save value - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("value"); - m_value.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save time - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("time"); - m_time.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save timeAtValue - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("timeAtValue"); - m_timeAtValue.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save decay - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("decay"); - m_decay.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save target + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("target"); + m_target.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save value + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("value"); + m_value.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save time + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("time"); + m_time.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save timeAtValue + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("timeAtValue"); + m_timeAtValue.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save decay + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("decay"); + m_decay.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // ServerObjectTemplate::_AttribMod::save + file.exitForm(true); + UNREF(count); +} // ServerObjectTemplate::_AttribMod::save //============================================================================= @@ -1217,164 +1178,143 @@ int count; /** * Class constructor. */ -ServerObjectTemplate::_Contents::_Contents(const std::string & filename) - : TpfTemplate(filename) -{ -} // ServerObjectTemplate::_Contents::_Contents +ServerObjectTemplate::_Contents::_Contents(const std::string &filename) + : TpfTemplate(filename) { +} // ServerObjectTemplate::_Contents::_Contents /** * Class destructor. */ -ServerObjectTemplate::_Contents::~_Contents() -{ -} // ServerObjectTemplate::_Contents::~_Contents +ServerObjectTemplate::_Contents::~_Contents() { +} // ServerObjectTemplate::_Contents::~_Contents /** * Static function used to register this template. */ -void ServerObjectTemplate::_Contents::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_Contents_tag, create); -} // ServerObjectTemplate::_Contents::registerMe +void ServerObjectTemplate::_Contents::registerMe(void) { + ObjectTemplateList::registerTemplate(_Contents_tag, create); +} // ServerObjectTemplate::_Contents::registerMe /** * Creates a ServerObjectTemplate::_Contents template. * * @return a new instance of the template */ -ObjectTemplate * ServerObjectTemplate::_Contents::create(const std::string & filename) -{ - return new ServerObjectTemplate::_Contents(filename); -} // ServerObjectTemplate::_Contents::create +ObjectTemplate *ServerObjectTemplate::_Contents::create(const std::string &filename) { + return new ServerObjectTemplate::_Contents(filename); +} // ServerObjectTemplate::_Contents::create /** * Returns the template id. * * @return the template id */ -Tag ServerObjectTemplate::_Contents::getId(void) const -{ - return _Contents_tag; -} // ServerObjectTemplate::_Contents::getId +Tag ServerObjectTemplate::_Contents::getId(void) const { + return _Contents_tag; +} // ServerObjectTemplate::_Contents::getId -CompilerIntegerParam * ServerObjectTemplate::_Contents::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //ServerObjectTemplate::_Contents::getCompilerIntegerParam +CompilerIntegerParam * +ServerObjectTemplate::_Contents::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerObjectTemplate::_Contents::getCompilerIntegerParam -FloatParam * ServerObjectTemplate::_Contents::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //ServerObjectTemplate::_Contents::getFloatParam +FloatParam *ServerObjectTemplate::_Contents::getFloatParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //ServerObjectTemplate::_Contents::getFloatParam -BoolParam * ServerObjectTemplate::_Contents::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "equipObject") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_equipObject; - } - fprintf(stderr, "trying to access single-parameter \"equipObject\" as an array\n"); - } - else - return TpfTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::_Contents::getBoolParam +BoolParam *ServerObjectTemplate::_Contents::getBoolParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "equipObject") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_equipObject; + } + fprintf(stderr, "trying to access single-parameter \"equipObject\" as an array\n"); + } else + return TpfTemplate::getBoolParam(name, deepCheck, index); + return nullptr; +} //ServerObjectTemplate::_Contents::getBoolParam -StringParam * ServerObjectTemplate::_Contents::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "slotName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_slotName; - } - fprintf(stderr, "trying to access single-parameter \"slotName\" as an array\n"); - } - else if (strcmp(name, "content") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_content; - } - fprintf(stderr, "trying to access single-parameter \"content\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::_Contents::getStringParam +StringParam *ServerObjectTemplate::_Contents::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("slotName"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_slotName; + } + fprintf(stderr, "trying to access single-parameter \"slotName\" as an array\n"); + } + break; + case constcrc("content"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_content; + } + fprintf(stderr, "trying to access single-parameter \"content\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::_Contents::getStringParam -StringIdParam * ServerObjectTemplate::_Contents::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerObjectTemplate::_Contents::getStringIdParam +StringIdParam *ServerObjectTemplate::_Contents::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerObjectTemplate::_Contents::getStringIdParam -VectorParam * ServerObjectTemplate::_Contents::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerObjectTemplate::_Contents::getVectorParam +VectorParam *ServerObjectTemplate::_Contents::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerObjectTemplate::_Contents::getVectorParam -DynamicVariableParam * ServerObjectTemplate::_Contents::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerObjectTemplate::_Contents::getDynamicVariableParam +DynamicVariableParam * +ServerObjectTemplate::_Contents::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerObjectTemplate::_Contents::getDynamicVariableParam -StructParamOT * ServerObjectTemplate::_Contents::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //ServerObjectTemplate::_Contents::getStructParamOT +StructParamOT *ServerObjectTemplate::_Contents::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerObjectTemplate::_Contents::getStructParamOT -TriggerVolumeParam * ServerObjectTemplate::_Contents::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerObjectTemplate::_Contents::getTriggerVolumeParam +TriggerVolumeParam * +ServerObjectTemplate::_Contents::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerObjectTemplate::_Contents::getTriggerVolumeParam -void ServerObjectTemplate::_Contents::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // ServerObjectTemplate::_Contents::initStructParamOT +void ServerObjectTemplate::_Contents::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerObjectTemplate::_Contents::initStructParamOT -void ServerObjectTemplate::_Contents::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // ServerObjectTemplate::_Contents::setAsEmptyList +void ServerObjectTemplate::_Contents::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // ServerObjectTemplate::_Contents::setAsEmptyList -void ServerObjectTemplate::_Contents::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // ServerObjectTemplate::_Contents::setAppend +void ServerObjectTemplate::_Contents::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // ServerObjectTemplate::_Contents::setAppend -bool ServerObjectTemplate::_Contents::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // ServerObjectTemplate::_Contents::isAppend +bool ServerObjectTemplate::_Contents::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // ServerObjectTemplate::_Contents::isAppend -int ServerObjectTemplate::_Contents::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // ServerObjectTemplate::_Contents::getListLength +int ServerObjectTemplate::_Contents::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // ServerObjectTemplate::_Contents::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1382,32 +1322,30 @@ int ServerObjectTemplate::_Contents::getListLength(const char *name) const * * @param file file to load from */ -void ServerObjectTemplate::_Contents::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerObjectTemplate::_Contents::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "slotName") == 0) - m_slotName.loadFromIff(file); - else if (strcmp(paramName, "equipObject") == 0) - m_equipObject.loadFromIff(file); - else if (strcmp(paramName, "content") == 0) - m_content.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + if (strcmp(paramName, "slotName") == 0) + m_slotName.loadFromIff(file); + case constcrc("equipObject"): + m_equipObject.loadFromIff(file); + case constcrc("content"): + m_content.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - UNREF(file); -} // ServerObjectTemplate::_Contents::load + file.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_Contents::load /** * Saves the template data to an iff file. @@ -1415,42 +1353,41 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerObjectTemplate::_Contents::save(Iff &file) -{ -int count; +void ServerObjectTemplate::_Contents::save(Iff &file) { + int count; - file.insertForm(_Contents_tag); + file.insertForm(_Contents_tag); - int paramCount = 0; + int paramCount = 0; - // save slotName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("slotName"); - m_slotName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save equipObject - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("equipObject"); - m_equipObject.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save content - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("content"); - m_content.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save slotName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("slotName"); + m_slotName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save equipObject + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("equipObject"); + m_equipObject.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save content + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("content"); + m_content.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // ServerObjectTemplate::_Contents::save + file.exitForm(true); + UNREF(count); +} // ServerObjectTemplate::_Contents::save //============================================================================= @@ -1459,192 +1396,167 @@ int count; /** * Class constructor. */ -ServerObjectTemplate::_MentalStateMod::_MentalStateMod(const std::string & filename) - : TpfTemplate(filename) -{ -} // ServerObjectTemplate::_MentalStateMod::_MentalStateMod +ServerObjectTemplate::_MentalStateMod::_MentalStateMod(const std::string &filename) + : TpfTemplate(filename) { +} // ServerObjectTemplate::_MentalStateMod::_MentalStateMod /** * Class destructor. */ -ServerObjectTemplate::_MentalStateMod::~_MentalStateMod() -{ -} // ServerObjectTemplate::_MentalStateMod::~_MentalStateMod +ServerObjectTemplate::_MentalStateMod::~_MentalStateMod() { +} // ServerObjectTemplate::_MentalStateMod::~_MentalStateMod /** * Static function used to register this template. */ -void ServerObjectTemplate::_MentalStateMod::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_MentalStateMod_tag, create); -} // ServerObjectTemplate::_MentalStateMod::registerMe +void ServerObjectTemplate::_MentalStateMod::registerMe(void) { + ObjectTemplateList::registerTemplate(_MentalStateMod_tag, create); +} // ServerObjectTemplate::_MentalStateMod::registerMe /** * Creates a ServerObjectTemplate::_MentalStateMod template. * * @return a new instance of the template */ -ObjectTemplate * ServerObjectTemplate::_MentalStateMod::create(const std::string & filename) -{ - return new ServerObjectTemplate::_MentalStateMod(filename); -} // ServerObjectTemplate::_MentalStateMod::create +ObjectTemplate *ServerObjectTemplate::_MentalStateMod::create(const std::string &filename) { + return new ServerObjectTemplate::_MentalStateMod(filename); +} // ServerObjectTemplate::_MentalStateMod::create /** * Returns the template id. * * @return the template id */ -Tag ServerObjectTemplate::_MentalStateMod::getId(void) const -{ - return _MentalStateMod_tag; -} // ServerObjectTemplate::_MentalStateMod::getId +Tag ServerObjectTemplate::_MentalStateMod::getId(void) const { + return _MentalStateMod_tag; +} // ServerObjectTemplate::_MentalStateMod::getId -CompilerIntegerParam * ServerObjectTemplate::_MentalStateMod::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "target") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_target; - } - fprintf(stderr, "trying to access single-parameter \"target\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::_MentalStateMod::getCompilerIntegerParam +CompilerIntegerParam * +ServerObjectTemplate::_MentalStateMod::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "target") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_target; + } + fprintf(stderr, "trying to access single-parameter \"target\" as an array\n"); + } else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return nullptr; +} //ServerObjectTemplate::_MentalStateMod::getCompilerIntegerParam -FloatParam * ServerObjectTemplate::_MentalStateMod::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "value") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_value; - } - fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); - } - else if (strcmp(name, "time") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_time; - } - fprintf(stderr, "trying to access single-parameter \"time\" as an array\n"); - } - else if (strcmp(name, "timeAtValue") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_timeAtValue; - } - fprintf(stderr, "trying to access single-parameter \"timeAtValue\" as an array\n"); - } - else if (strcmp(name, "decay") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_decay; - } - fprintf(stderr, "trying to access single-parameter \"decay\" as an array\n"); - } - else - return TpfTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::_MentalStateMod::getFloatParam +FloatParam *ServerObjectTemplate::_MentalStateMod::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("value"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } + break; + case constcrc("time"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_time; + } + fprintf(stderr, "trying to access single-parameter \"time\" as an array\n"); + } + break; + case constcrc("timeAtValue"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_timeAtValue; + } + fprintf(stderr, "trying to access single-parameter \"timeAtValue\" as an array\n"); + } + break; + case constcrc("decay"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_decay; + } + fprintf(stderr, "trying to access single-parameter \"decay\" as an array\n"); + } + break; + default: + return TpfTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::_MentalStateMod::getFloatParam -BoolParam * ServerObjectTemplate::_MentalStateMod::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //ServerObjectTemplate::_MentalStateMod::getBoolParam +BoolParam *ServerObjectTemplate::_MentalStateMod::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerObjectTemplate::_MentalStateMod::getBoolParam -StringParam * ServerObjectTemplate::_MentalStateMod::getStringParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringParam(name, deepCheck, index); -} //ServerObjectTemplate::_MentalStateMod::getStringParam +StringParam *ServerObjectTemplate::_MentalStateMod::getStringParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringParam(name, deepCheck, index); +} //ServerObjectTemplate::_MentalStateMod::getStringParam -StringIdParam * ServerObjectTemplate::_MentalStateMod::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerObjectTemplate::_MentalStateMod::getStringIdParam +StringIdParam *ServerObjectTemplate::_MentalStateMod::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerObjectTemplate::_MentalStateMod::getStringIdParam -VectorParam * ServerObjectTemplate::_MentalStateMod::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerObjectTemplate::_MentalStateMod::getVectorParam +VectorParam *ServerObjectTemplate::_MentalStateMod::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerObjectTemplate::_MentalStateMod::getVectorParam -DynamicVariableParam * ServerObjectTemplate::_MentalStateMod::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerObjectTemplate::_MentalStateMod::getDynamicVariableParam +DynamicVariableParam * +ServerObjectTemplate::_MentalStateMod::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerObjectTemplate::_MentalStateMod::getDynamicVariableParam -StructParamOT * ServerObjectTemplate::_MentalStateMod::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //ServerObjectTemplate::_MentalStateMod::getStructParamOT +StructParamOT *ServerObjectTemplate::_MentalStateMod::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerObjectTemplate::_MentalStateMod::getStructParamOT -TriggerVolumeParam * ServerObjectTemplate::_MentalStateMod::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerObjectTemplate::_MentalStateMod::getTriggerVolumeParam +TriggerVolumeParam * +ServerObjectTemplate::_MentalStateMod::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerObjectTemplate::_MentalStateMod::getTriggerVolumeParam -void ServerObjectTemplate::_MentalStateMod::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // ServerObjectTemplate::_MentalStateMod::initStructParamOT +void ServerObjectTemplate::_MentalStateMod::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerObjectTemplate::_MentalStateMod::initStructParamOT -void ServerObjectTemplate::_MentalStateMod::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // ServerObjectTemplate::_MentalStateMod::setAsEmptyList +void ServerObjectTemplate::_MentalStateMod::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // ServerObjectTemplate::_MentalStateMod::setAsEmptyList -void ServerObjectTemplate::_MentalStateMod::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // ServerObjectTemplate::_MentalStateMod::setAppend +void ServerObjectTemplate::_MentalStateMod::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // ServerObjectTemplate::_MentalStateMod::setAppend -bool ServerObjectTemplate::_MentalStateMod::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // ServerObjectTemplate::_MentalStateMod::isAppend +bool ServerObjectTemplate::_MentalStateMod::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // ServerObjectTemplate::_MentalStateMod::isAppend -int ServerObjectTemplate::_MentalStateMod::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // ServerObjectTemplate::_MentalStateMod::getListLength +int ServerObjectTemplate::_MentalStateMod::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // ServerObjectTemplate::_MentalStateMod::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1652,36 +1564,34 @@ int ServerObjectTemplate::_MentalStateMod::getListLength(const char *name) const * * @param file file to load from */ -void ServerObjectTemplate::_MentalStateMod::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerObjectTemplate::_MentalStateMod::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "target") == 0) - m_target.loadFromIff(file); - else if (strcmp(paramName, "value") == 0) - m_value.loadFromIff(file); - else if (strcmp(paramName, "time") == 0) - m_time.loadFromIff(file); - else if (strcmp(paramName, "timeAtValue") == 0) - m_timeAtValue.loadFromIff(file); - else if (strcmp(paramName, "decay") == 0) - m_decay.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + if (strcmp(paramName, "target") == 0) + m_target.loadFromIff(file); + case constcrc("value"): + m_value.loadFromIff(file); + case constcrc("time"): + m_time.loadFromIff(file); + case constcrc("timeAtValue"): + m_timeAtValue.loadFromIff(file); + case constcrc("decay"): + m_decay.loadFromIff(file); + file.exitChunk(true); + } - file.exitForm(); - UNREF(file); -} // ServerObjectTemplate::_MentalStateMod::load + file.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_MentalStateMod::load /** * Saves the template data to an iff file. @@ -1689,54 +1599,53 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerObjectTemplate::_MentalStateMod::save(Iff &file) -{ -int count; +void ServerObjectTemplate::_MentalStateMod::save(Iff &file) { + int count; - file.insertForm(_MentalStateMod_tag); + file.insertForm(_MentalStateMod_tag); - int paramCount = 0; + int paramCount = 0; - // save target - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("target"); - m_target.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save value - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("value"); - m_value.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save time - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("time"); - m_time.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save timeAtValue - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("timeAtValue"); - m_timeAtValue.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save decay - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("decay"); - m_decay.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save target + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("target"); + m_target.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save value + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("value"); + m_value.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save time + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("time"); + m_time.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save timeAtValue + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("timeAtValue"); + m_timeAtValue.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save decay + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("decay"); + m_decay.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // ServerObjectTemplate::_MentalStateMod::save + file.exitForm(true); + UNREF(count); +} // ServerObjectTemplate::_MentalStateMod::save //============================================================================= @@ -1745,162 +1654,140 @@ int count; /** * Class constructor. */ -ServerObjectTemplate::_Xp::_Xp(const std::string & filename) - : TpfTemplate(filename) -{ -} // ServerObjectTemplate::_Xp::_Xp +ServerObjectTemplate::_Xp::_Xp(const std::string &filename) + : TpfTemplate(filename) { +} // ServerObjectTemplate::_Xp::_Xp /** * Class destructor. */ -ServerObjectTemplate::_Xp::~_Xp() -{ -} // ServerObjectTemplate::_Xp::~_Xp +ServerObjectTemplate::_Xp::~_Xp() { +} // ServerObjectTemplate::_Xp::~_Xp /** * Static function used to register this template. */ -void ServerObjectTemplate::_Xp::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_Xp_tag, create); -} // ServerObjectTemplate::_Xp::registerMe +void ServerObjectTemplate::_Xp::registerMe(void) { + ObjectTemplateList::registerTemplate(_Xp_tag, create); +} // ServerObjectTemplate::_Xp::registerMe /** * Creates a ServerObjectTemplate::_Xp template. * * @return a new instance of the template */ -ObjectTemplate * ServerObjectTemplate::_Xp::create(const std::string & filename) -{ - return new ServerObjectTemplate::_Xp(filename); -} // ServerObjectTemplate::_Xp::create +ObjectTemplate *ServerObjectTemplate::_Xp::create(const std::string &filename) { + return new ServerObjectTemplate::_Xp(filename); +} // ServerObjectTemplate::_Xp::create /** * Returns the template id. * * @return the template id */ -Tag ServerObjectTemplate::_Xp::getId(void) const -{ - return _Xp_tag; -} // ServerObjectTemplate::_Xp::getId +Tag ServerObjectTemplate::_Xp::getId(void) const { + return _Xp_tag; +} // ServerObjectTemplate::_Xp::getId -CompilerIntegerParam * ServerObjectTemplate::_Xp::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "type") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_type; - } - fprintf(stderr, "trying to access single-parameter \"type\" as an array\n"); - } - else if (strcmp(name, "level") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_level; - } - fprintf(stderr, "trying to access single-parameter \"level\" as an array\n"); - } - else if (strcmp(name, "value") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_value; - } - fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerObjectTemplate::_Xp::getCompilerIntegerParam +CompilerIntegerParam *ServerObjectTemplate::_Xp::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("type"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_type; + } + fprintf(stderr, "trying to access single-parameter \"type\" as an array\n"); + } + break; + case constcrc("level"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_level; + } + fprintf(stderr, "trying to access single-parameter \"level\" as an array\n"); + } + break; + case constcrc("value"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerObjectTemplate::_Xp::getCompilerIntegerParam -FloatParam * ServerObjectTemplate::_Xp::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getFloatParam +FloatParam *ServerObjectTemplate::_Xp::getFloatParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getFloatParam -BoolParam * ServerObjectTemplate::_Xp::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getBoolParam +BoolParam *ServerObjectTemplate::_Xp::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getBoolParam -StringParam * ServerObjectTemplate::_Xp::getStringParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringParam(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getStringParam +StringParam *ServerObjectTemplate::_Xp::getStringParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringParam(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getStringParam -StringIdParam * ServerObjectTemplate::_Xp::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getStringIdParam +StringIdParam *ServerObjectTemplate::_Xp::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getStringIdParam -VectorParam * ServerObjectTemplate::_Xp::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getVectorParam +VectorParam *ServerObjectTemplate::_Xp::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getVectorParam -DynamicVariableParam * ServerObjectTemplate::_Xp::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getDynamicVariableParam +DynamicVariableParam *ServerObjectTemplate::_Xp::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getDynamicVariableParam -StructParamOT * ServerObjectTemplate::_Xp::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getStructParamOT +StructParamOT *ServerObjectTemplate::_Xp::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getStructParamOT -TriggerVolumeParam * ServerObjectTemplate::_Xp::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerObjectTemplate::_Xp::getTriggerVolumeParam +TriggerVolumeParam *ServerObjectTemplate::_Xp::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerObjectTemplate::_Xp::getTriggerVolumeParam -void ServerObjectTemplate::_Xp::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // ServerObjectTemplate::_Xp::initStructParamOT +void ServerObjectTemplate::_Xp::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerObjectTemplate::_Xp::initStructParamOT -void ServerObjectTemplate::_Xp::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // ServerObjectTemplate::_Xp::setAsEmptyList +void ServerObjectTemplate::_Xp::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // ServerObjectTemplate::_Xp::setAsEmptyList -void ServerObjectTemplate::_Xp::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // ServerObjectTemplate::_Xp::setAppend +void ServerObjectTemplate::_Xp::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // ServerObjectTemplate::_Xp::setAppend -bool ServerObjectTemplate::_Xp::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // ServerObjectTemplate::_Xp::isAppend +bool ServerObjectTemplate::_Xp::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // ServerObjectTemplate::_Xp::isAppend -int ServerObjectTemplate::_Xp::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // ServerObjectTemplate::_Xp::getListLength +int ServerObjectTemplate::_Xp::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // ServerObjectTemplate::_Xp::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1908,32 +1795,35 @@ int ServerObjectTemplate::_Xp::getListLength(const char *name) const * * @param file file to load from */ -void ServerObjectTemplate::_Xp::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerObjectTemplate::_Xp::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "type") == 0) - m_type.loadFromIff(file); - else if (strcmp(paramName, "level") == 0) - m_level.loadFromIff(file); - else if (strcmp(paramName, "value") == 0) - m_value.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + switch (runtimeCrc(paramName)) { + case constcrc("type"): + m_type.loadFromIff(file); + break; + case constcrc("level"): + m_level.loadFromIff(file); + break; + case constcrc("value"): + m_value.loadFromIff(file); + break; + } + file.exitChunk(true); + } - file.exitForm(); - UNREF(file); -} // ServerObjectTemplate::_Xp::load + file.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_Xp::load /** * Saves the template data to an iff file. @@ -1941,41 +1831,40 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerObjectTemplate::_Xp::save(Iff &file) -{ -int count; +void ServerObjectTemplate::_Xp::save(Iff &file) { + int count; - file.insertForm(_Xp_tag); + file.insertForm(_Xp_tag); - int paramCount = 0; + int paramCount = 0; - // save type - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("type"); - m_type.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save level - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("level"); - m_level.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save value - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("value"); - m_value.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save type + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("type"); + m_type.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save level + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("level"); + m_level.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save value + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("value"); + m_value.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // ServerObjectTemplate::_Xp::save + file.exitForm(true); + UNREF(count); +} // ServerObjectTemplate::_Xp::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp index dfa0c7fd..26087fe7 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp @@ -19,63 +19,59 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerResourceClassObjectTemplate::ServerResourceClassObjectTemplate(const std::string & filename) +ServerResourceClassObjectTemplate::ServerResourceClassObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerUniverseObjectTemplate(filename) + : ServerUniverseObjectTemplate(filename) //@END TFD INIT { -} // ServerResourceClassObjectTemplate::ServerResourceClassObjectTemplate +} // ServerResourceClassObjectTemplate::ServerResourceClassObjectTemplate /** * Class destructor. */ -ServerResourceClassObjectTemplate::~ServerResourceClassObjectTemplate() -{ +ServerResourceClassObjectTemplate::~ServerResourceClassObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // ServerResourceClassObjectTemplate::~ServerResourceClassObjectTemplate +} // ServerResourceClassObjectTemplate::~ServerResourceClassObjectTemplate /** * Static function used to register this template. */ -void ServerResourceClassObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerResourceClassObjectTemplate_tag, create); -} // ServerResourceClassObjectTemplate::registerMe +void ServerResourceClassObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerResourceClassObjectTemplate_tag, create); +} // ServerResourceClassObjectTemplate::registerMe /** * Creates a ServerResourceClassObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerResourceClassObjectTemplate::create(const std::string & filename) -{ - return new ServerResourceClassObjectTemplate(filename); -} // ServerResourceClassObjectTemplate::create +ObjectTemplate *ServerResourceClassObjectTemplate::create(const std::string &filename) { + return new ServerResourceClassObjectTemplate(filename); +} // ServerResourceClassObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerResourceClassObjectTemplate::getId(void) const -{ - return ServerResourceClassObjectTemplate_tag; -} // ServerResourceClassObjectTemplate::getId +Tag ServerResourceClassObjectTemplate::getId(void) const { + return ServerResourceClassObjectTemplate_tag; +} // ServerResourceClassObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerResourceClassObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerResourceClassObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerResourceClassObjectTemplate::getTemplateVersion /** @@ -83,163 +79,147 @@ Tag ServerResourceClassObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerResourceClassObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerResourceClassObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerResourceClassObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerResourceClassObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerResourceClassObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerResourceClassObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "numTypes") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_numTypes; - } - fprintf(stderr, "trying to access single-parameter \"numTypes\" as an array\n"); - } - else if (strcmp(name, "minTypes") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_minTypes; - } - fprintf(stderr, "trying to access single-parameter \"minTypes\" as an array\n"); - } - else if (strcmp(name, "maxTypes") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_maxTypes; - } - fprintf(stderr, "trying to access single-parameter \"maxTypes\" as an array\n"); - } - else - return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return NULL; -} //ServerResourceClassObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerResourceClassObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("numTypes"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_numTypes; + } + fprintf(stderr, "trying to access single-parameter \"numTypes\" as an array\n"); + } + break; + case constcrc("minTypes"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_minTypes; + } + fprintf(stderr, "trying to access single-parameter \"minTypes\" as an array\n"); + } + break; + case constcrc("maxTypes"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_maxTypes; + } + fprintf(stderr, "trying to access single-parameter \"maxTypes\" as an array\n"); + } + break; + default: + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerResourceClassObjectTemplate::getCompilerIntegerParam -FloatParam * ServerResourceClassObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); -} //ServerResourceClassObjectTemplate::getFloatParam +FloatParam *ServerResourceClassObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerResourceClassObjectTemplate::getFloatParam -BoolParam * ServerResourceClassObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); -} //ServerResourceClassObjectTemplate::getBoolParam +BoolParam *ServerResourceClassObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerResourceClassObjectTemplate::getBoolParam -StringParam * ServerResourceClassObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "resourceClassName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_resourceClassName; - } - fprintf(stderr, "trying to access single-parameter \"resourceClassName\" as an array\n"); - } - else if (strcmp(name, "parentClass") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_parentClass; - } - fprintf(stderr, "trying to access single-parameter \"parentClass\" as an array\n"); - } - else - return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); - return NULL; -} //ServerResourceClassObjectTemplate::getStringParam +StringParam *ServerResourceClassObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("resourceClassName"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_resourceClassName; + } + fprintf(stderr, "trying to access single-parameter \"resourceClassName\" as an array\n"); + } + break; + case constcrc("parentClass"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_parentClass; + } + fprintf(stderr, "trying to access single-parameter \"parentClass\" as an array\n"); + } + break; + default: + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerResourceClassObjectTemplate::getStringParam -StringIdParam * ServerResourceClassObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerResourceClassObjectTemplate::getStringIdParam +StringIdParam *ServerResourceClassObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerResourceClassObjectTemplate::getStringIdParam -VectorParam * ServerResourceClassObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerResourceClassObjectTemplate::getVectorParam +VectorParam *ServerResourceClassObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerResourceClassObjectTemplate::getVectorParam -DynamicVariableParam * ServerResourceClassObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerResourceClassObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +ServerResourceClassObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerResourceClassObjectTemplate::getDynamicVariableParam -StructParamOT * ServerResourceClassObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); -} //ServerResourceClassObjectTemplate::getStructParamOT +StructParamOT *ServerResourceClassObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerResourceClassObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerResourceClassObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerResourceClassObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam * +ServerResourceClassObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerResourceClassObjectTemplate::getTriggerVolumeParam -void ServerResourceClassObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - ServerUniverseObjectTemplate::initStructParamOT(param, name); -} // ServerResourceClassObjectTemplate::initStructParamOT +void ServerResourceClassObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerResourceClassObjectTemplate::initStructParamOT -void ServerResourceClassObjectTemplate::setAsEmptyList(const char *name) -{ - ServerUniverseObjectTemplate::setAsEmptyList(name); -} // ServerResourceClassObjectTemplate::setAsEmptyList +void ServerResourceClassObjectTemplate::setAsEmptyList(const char *name) { + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerResourceClassObjectTemplate::setAsEmptyList -void ServerResourceClassObjectTemplate::setAppend(const char *name) -{ - ServerUniverseObjectTemplate::setAppend(name); -} // ServerResourceClassObjectTemplate::setAppend +void ServerResourceClassObjectTemplate::setAppend(const char *name) { + ServerUniverseObjectTemplate::setAppend(name); +} // ServerResourceClassObjectTemplate::setAppend -bool ServerResourceClassObjectTemplate::isAppend(const char *name) const -{ - return ServerUniverseObjectTemplate::isAppend(name); -} // ServerResourceClassObjectTemplate::isAppend +bool ServerResourceClassObjectTemplate::isAppend(const char *name) const { + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerResourceClassObjectTemplate::isAppend -int ServerResourceClassObjectTemplate::getListLength(const char *name) const -{ - return ServerUniverseObjectTemplate::getListLength(name); -} // ServerResourceClassObjectTemplate::getListLength +int ServerResourceClassObjectTemplate::getListLength(const char *name) const { + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerResourceClassObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -247,72 +227,74 @@ int ServerResourceClassObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerResourceClassObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerResourceClassObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerResourceClassObjectTemplate_tag) - { - ServerUniverseObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerResourceClassObjectTemplate_tag) { + ServerUniverseObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == NULL, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != NULL) - base->releaseReference(); - else - { - if (m_baseData != NULL) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,0)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == NULL, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != NULL) + base->releaseReference(); + else { + if (m_baseData != NULL) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 0)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "resourceClassName") == 0) - m_resourceClassName.loadFromIff(file); - else if (strcmp(paramName, "numTypes") == 0) - m_numTypes.loadFromIff(file); - else if (strcmp(paramName, "minTypes") == 0) - m_minTypes.loadFromIff(file); - else if (strcmp(paramName, "maxTypes") == 0) - m_maxTypes.loadFromIff(file); - else if (strcmp(paramName, "parentClass") == 0) - m_parentClass.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - ServerUniverseObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerResourceClassObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("resourceClassName"): + m_resourceClassName.loadFromIff(file); + break; + case constcrc("numTypes"): + m_numTypes.loadFromIff(file); + break; + case constcrc("minTypes") : + m_minTypes.loadFromIff(file); + break; + case constcrc("maxTypes") : + m_maxTypes.loadFromIff(file); + break; + case constcrc("parentClass") : + m_parentClass.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerResourceClassObjectTemplate::load /** * Saves the template data to an iff file. @@ -320,65 +302,63 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerResourceClassObjectTemplate::save(Iff &file) -{ -int count; +void ServerResourceClassObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerResourceClassObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,0)); - file.allowNonlinearFunctions(); + file.insertForm(ServerResourceClassObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 0)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save resourceClassName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("resourceClassName"); - m_resourceClassName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save numTypes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("numTypes"); - m_numTypes.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save minTypes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("minTypes"); - m_minTypes.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxTypes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxTypes"); - m_maxTypes.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save parentClass - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("parentClass"); - m_parentClass.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save resourceClassName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("resourceClassName"); + m_resourceClassName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save numTypes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("numTypes"); + m_numTypes.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save minTypes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("minTypes"); + m_minTypes.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxTypes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxTypes"); + m_maxTypes.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save parentClass + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("parentClass"); + m_parentClass.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerUniverseObjectTemplate::save(file); - file.exitForm(); - UNREF(count); -} // ServerResourceClassObjectTemplate::save + file.exitForm(true); + ServerUniverseObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerResourceClassObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp index 1a88f18c..3b76311a 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp @@ -19,74 +19,67 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerTangibleObjectTemplate::ServerTangibleObjectTemplate(const std::string & filename) +ServerTangibleObjectTemplate::ServerTangibleObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerObjectTemplate(filename) - ,m_triggerVolumesLoaded(false) - ,m_triggerVolumesAppend(false) + : ServerObjectTemplate(filename), m_triggerVolumesLoaded(false), m_triggerVolumesAppend(false) //@END TFD INIT { -} // ServerTangibleObjectTemplate::ServerTangibleObjectTemplate +} // ServerTangibleObjectTemplate::ServerTangibleObjectTemplate /** * Class destructor. */ -ServerTangibleObjectTemplate::~ServerTangibleObjectTemplate() -{ +ServerTangibleObjectTemplate::~ServerTangibleObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_triggerVolumes.begin(); iter != m_triggerVolumes.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_triggerVolumes.clear(); - } + { + std::vector::iterator iter; + for (iter = m_triggerVolumes.begin(); iter != m_triggerVolumes.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_triggerVolumes.clear(); + } //@END TFD CLEANUP -} // ServerTangibleObjectTemplate::~ServerTangibleObjectTemplate +} // ServerTangibleObjectTemplate::~ServerTangibleObjectTemplate /** * Static function used to register this template. */ -void ServerTangibleObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerTangibleObjectTemplate_tag, create); -} // ServerTangibleObjectTemplate::registerMe +void ServerTangibleObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerTangibleObjectTemplate_tag, create); +} // ServerTangibleObjectTemplate::registerMe /** * Creates a ServerTangibleObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerTangibleObjectTemplate::create(const std::string & filename) -{ - return new ServerTangibleObjectTemplate(filename); -} // ServerTangibleObjectTemplate::create +ObjectTemplate *ServerTangibleObjectTemplate::create(const std::string &filename) { + return new ServerTangibleObjectTemplate(filename); +} // ServerTangibleObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerTangibleObjectTemplate::getId(void) const -{ - return ServerTangibleObjectTemplate_tag; -} // ServerTangibleObjectTemplate::getId +Tag ServerTangibleObjectTemplate::getId(void) const { + return ServerTangibleObjectTemplate_tag; +} // ServerTangibleObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerTangibleObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerTangibleObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerTangibleObjectTemplate::getTemplateVersion /** @@ -94,224 +87,189 @@ Tag ServerTangibleObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerTangibleObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerTangibleObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerTangibleObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerTangibleObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerTangibleObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerTangibleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "combatSkeleton") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_combatSkeleton; - } - fprintf(stderr, "trying to access single-parameter \"combatSkeleton\" as an array\n"); - } - else if (strcmp(name, "maxHitPoints") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_maxHitPoints; - } - fprintf(stderr, "trying to access single-parameter \"maxHitPoints\" as an array\n"); - } - else if (strcmp(name, "interestRadius") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_interestRadius; - } - fprintf(stderr, "trying to access single-parameter \"interestRadius\" as an array\n"); - } - else if (strcmp(name, "count") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_count; - } - fprintf(stderr, "trying to access single-parameter \"count\" as an array\n"); - } - else if (strcmp(name, "condition") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_condition; - } - fprintf(stderr, "trying to access single-parameter \"condition\" as an array\n"); - } - else - return ServerObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerTangibleObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerTangibleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("combatSkeleton"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_combatSkeleton; + } + fprintf(stderr, "trying to access single-parameter \"combatSkeleton\" as an array\n"); + } + break; + case constcrc("maxHitPoints"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_maxHitPoints; + } + fprintf(stderr, "trying to access single-parameter \"maxHitPoints\" as an array\n"); + } + break; + case constcrc("interestRadius"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_interestRadius; + } + fprintf(stderr, "trying to access single-parameter \"interestRadius\" as an array\n"); + } + break; + case constcrc("count"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_count; + } + fprintf(stderr, "trying to access single-parameter \"count\" as an array\n"); + } + break; + case constcrc("condition"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_condition; + } + fprintf(stderr, "trying to access single-parameter \"condition\" as an array\n"); + } + break; + default: + return ServerObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerTangibleObjectTemplate::getCompilerIntegerParam -FloatParam * ServerTangibleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return ServerObjectTemplate::getFloatParam(name, deepCheck, index); -} //ServerTangibleObjectTemplate::getFloatParam +FloatParam *ServerTangibleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return ServerObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerTangibleObjectTemplate::getFloatParam -BoolParam * ServerTangibleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "wantSawAttackTriggers") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_wantSawAttackTriggers; - } - fprintf(stderr, "trying to access single-parameter \"wantSawAttackTriggers\" as an array\n"); - } - else - return ServerObjectTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //ServerTangibleObjectTemplate::getBoolParam +BoolParam *ServerTangibleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "wantSawAttackTriggers") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_wantSawAttackTriggers; + } + fprintf(stderr, "trying to access single-parameter \"wantSawAttackTriggers\" as an array\n"); + } else + return ServerObjectTemplate::getBoolParam(name, deepCheck, index); + return nullptr; +} //ServerTangibleObjectTemplate::getBoolParam -StringParam * ServerTangibleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "armor") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_armor; - } - fprintf(stderr, "trying to access single-parameter \"armor\" as an array\n"); - } - else - return ServerObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerTangibleObjectTemplate::getStringParam +StringParam *ServerTangibleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "armor") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_armor; + } + fprintf(stderr, "trying to access single-parameter \"armor\" as an array\n"); + } else + return ServerObjectTemplate::getStringParam(name, deepCheck, index); + return nullptr; +} //ServerTangibleObjectTemplate::getStringParam -StringIdParam * ServerTangibleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerTangibleObjectTemplate::getStringIdParam +StringIdParam *ServerTangibleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerTangibleObjectTemplate::getStringIdParam -VectorParam * ServerTangibleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerTangibleObjectTemplate::getVectorParam +VectorParam *ServerTangibleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerTangibleObjectTemplate::getVectorParam -DynamicVariableParam * ServerTangibleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerTangibleObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +ServerTangibleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerTangibleObjectTemplate::getDynamicVariableParam -StructParamOT * ServerTangibleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return ServerObjectTemplate::getStructParamOT(name, deepCheck, index); -} //ServerTangibleObjectTemplate::getStructParamOT +StructParamOT *ServerTangibleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return ServerObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerTangibleObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerTangibleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "triggerVolumes") == 0) - { - if (index >= 0 && index < static_cast(m_triggerVolumes.size())) - return m_triggerVolumes[index]; - if (index == static_cast(m_triggerVolumes.size())) - { - TriggerVolumeParam *temp = new TriggerVolumeParam(); - m_triggerVolumes.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"triggerVolumes\" out of bounds\n"); - } - else - return ServerObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); - return nullptr; -} //ServerTangibleObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *ServerTangibleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "triggerVolumes") == 0) { + if (index >= 0 && index < static_cast(m_triggerVolumes.size())) + return m_triggerVolumes[index]; + if (index == static_cast(m_triggerVolumes.size())) { + TriggerVolumeParam *temp = new TriggerVolumeParam(); + m_triggerVolumes.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"triggerVolumes\" out of bounds\n"); + } else + return ServerObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); + return nullptr; +} //ServerTangibleObjectTemplate::getTriggerVolumeParam -void ServerTangibleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - ServerObjectTemplate::initStructParamOT(param, name); -} // ServerTangibleObjectTemplate::initStructParamOT +void ServerTangibleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + ServerObjectTemplate::initStructParamOT(param, name); +} // ServerTangibleObjectTemplate::initStructParamOT -void ServerTangibleObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "triggerVolumes") == 0) - { - m_triggerVolumes.clear(); - m_triggerVolumesLoaded = true; - } - else - ServerObjectTemplate::setAsEmptyList(name); -} // ServerTangibleObjectTemplate::setAsEmptyList +void ServerTangibleObjectTemplate::setAsEmptyList(const char *name) { + if (strcmp(name, "triggerVolumes") == 0) { + m_triggerVolumes.clear(); + m_triggerVolumesLoaded = true; + } else + ServerObjectTemplate::setAsEmptyList(name); +} // ServerTangibleObjectTemplate::setAsEmptyList -void ServerTangibleObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "triggerVolumes") == 0) - m_triggerVolumesAppend = true; - else - ServerObjectTemplate::setAppend(name); -} // ServerTangibleObjectTemplate::setAppend +void ServerTangibleObjectTemplate::setAppend(const char *name) { + if (strcmp(name, "triggerVolumes") == 0) + m_triggerVolumesAppend = true; + else + ServerObjectTemplate::setAppend(name); +} // ServerTangibleObjectTemplate::setAppend -bool ServerTangibleObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "triggerVolumes") == 0) - return m_triggerVolumesAppend; - else - return ServerObjectTemplate::isAppend(name); -} // ServerTangibleObjectTemplate::isAppend +bool ServerTangibleObjectTemplate::isAppend(const char *name) const { + if (strcmp(name, "triggerVolumes") == 0) + return m_triggerVolumesAppend; + else + return ServerObjectTemplate::isAppend(name); +} // ServerTangibleObjectTemplate::isAppend -int ServerTangibleObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "triggerVolumes") == 0) - { - return m_triggerVolumes.size(); - } - else - return ServerObjectTemplate::getListLength(name); -} // ServerTangibleObjectTemplate::getListLength +int ServerTangibleObjectTemplate::getListLength(const char *name) const { + if (strcmp(name, "triggerVolumes") == 0) { + return m_triggerVolumes.size(); + } else + return ServerObjectTemplate::getListLength(name); +} // ServerTangibleObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -319,95 +277,97 @@ int ServerTangibleObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerTangibleObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerTangibleObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerTangibleObjectTemplate_tag) - { - ServerObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerTangibleObjectTemplate_tag) { + ServerObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,4)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 4)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "triggerVolumes") == 0) - { - std::vector::iterator iter; - for (iter = m_triggerVolumes.begin(); iter != m_triggerVolumes.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_triggerVolumes.clear(); - m_triggerVolumesAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - TriggerVolumeParam * newData = new TriggerVolumeParam; - newData->loadFromIff(file); - m_triggerVolumes.push_back(newData); - } - m_triggerVolumesLoaded = true; - } - else if (strcmp(paramName, "combatSkeleton") == 0) - m_combatSkeleton.loadFromIff(file); - else if (strcmp(paramName, "maxHitPoints") == 0) - m_maxHitPoints.loadFromIff(file); - else if (strcmp(paramName, "armor") == 0) - m_armor.loadFromIff(file); - else if (strcmp(paramName, "interestRadius") == 0) - m_interestRadius.loadFromIff(file); - else if (strcmp(paramName, "count") == 0) - m_count.loadFromIff(file); - else if (strcmp(paramName, "condition") == 0) - m_condition.loadFromIff(file); - else if (strcmp(paramName, "wantSawAttackTriggers") == 0) - m_wantSawAttackTriggers.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - ServerObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerTangibleObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("triggerVolumes"): { + std::vector::iterator iter; + for (iter = m_triggerVolumes.begin(); iter != m_triggerVolumes.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_triggerVolumes.clear(); + m_triggerVolumesAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + TriggerVolumeParam *newData = new TriggerVolumeParam; + newData->loadFromIff(file); + m_triggerVolumes.push_back(newData); + } + m_triggerVolumesLoaded = true; + } + break; + case constcrc("combatSkeleton"): + m_combatSkeleton.loadFromIff(file); + break; + case constcrc("maxHitPoints"): + m_maxHitPoints.loadFromIff(file); + break; + case constcrc("armor"): + m_armor.loadFromIff(file); + break; + case constcrc("interestRadius"): + m_interestRadius.loadFromIff(file); + break; + case constcrc("count"): + m_count.loadFromIff(file); + break; + case constcrc("condition"): + m_condition.loadFromIff(file); + break; + case constcrc("wantSawAttackTriggers"): + m_wantSawAttackTriggers.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + ServerObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerTangibleObjectTemplate::load /** * Saves the template data to an iff file. @@ -415,91 +375,90 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerTangibleObjectTemplate::save(Iff &file) -{ -int count; +void ServerTangibleObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerTangibleObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,4)); - file.allowNonlinearFunctions(); + file.insertForm(ServerTangibleObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 4)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - if (!m_triggerVolumesLoaded) - { - // mark the list as empty and extending the base list - m_triggerVolumesAppend = true; - } - // save triggerVolumes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("triggerVolumes"); - file.insertChunkData(&m_triggerVolumesAppend, sizeof(bool)); - count = m_triggerVolumes.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_triggerVolumes[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save combatSkeleton - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("combatSkeleton"); - m_combatSkeleton.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxHitPoints - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxHitPoints"); - m_maxHitPoints.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save armor - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("armor"); - m_armor.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save interestRadius - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("interestRadius"); - m_interestRadius.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save count - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("count"); - m_count.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save condition - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("condition"); - m_condition.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save wantSawAttackTriggers - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("wantSawAttackTriggers"); - m_wantSawAttackTriggers.saveToIff(file); - file.exitChunk(); - ++paramCount; + if (!m_triggerVolumesLoaded) { + // mark the list as empty and extending the base list + m_triggerVolumesAppend = true; + } + // save triggerVolumes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("triggerVolumes"); + file.insertChunkData(&m_triggerVolumesAppend, sizeof(bool)); + count = m_triggerVolumes.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_triggerVolumes[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save combatSkeleton + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("combatSkeleton"); + m_combatSkeleton.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxHitPoints + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxHitPoints"); + m_maxHitPoints.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save armor + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("armor"); + m_armor.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save interestRadius + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("interestRadius"); + m_interestRadius.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save count + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("count"); + m_count.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save condition + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("condition"); + m_condition.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save wantSawAttackTriggers + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("wantSawAttackTriggers"); + m_wantSawAttackTriggers.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerObjectTemplate::save(file); - file.exitForm(); -} // ServerTangibleObjectTemplate::save + file.exitForm(true); + ServerObjectTemplate::save(file); + file.exitForm(); +} // ServerTangibleObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp index aac5cad7..f2e080a3 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp @@ -19,63 +19,59 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerVehicleObjectTemplate::ServerVehicleObjectTemplate(const std::string & filename) +ServerVehicleObjectTemplate::ServerVehicleObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerTangibleObjectTemplate(filename) + : ServerTangibleObjectTemplate(filename) //@END TFD INIT { -} // ServerVehicleObjectTemplate::ServerVehicleObjectTemplate +} // ServerVehicleObjectTemplate::ServerVehicleObjectTemplate /** * Class destructor. */ -ServerVehicleObjectTemplate::~ServerVehicleObjectTemplate() -{ +ServerVehicleObjectTemplate::~ServerVehicleObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // ServerVehicleObjectTemplate::~ServerVehicleObjectTemplate +} // ServerVehicleObjectTemplate::~ServerVehicleObjectTemplate /** * Static function used to register this template. */ -void ServerVehicleObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerVehicleObjectTemplate_tag, create); -} // ServerVehicleObjectTemplate::registerMe +void ServerVehicleObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerVehicleObjectTemplate_tag, create); +} // ServerVehicleObjectTemplate::registerMe /** * Creates a ServerVehicleObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerVehicleObjectTemplate::create(const std::string & filename) -{ - return new ServerVehicleObjectTemplate(filename); -} // ServerVehicleObjectTemplate::create +ObjectTemplate *ServerVehicleObjectTemplate::create(const std::string &filename) { + return new ServerVehicleObjectTemplate(filename); +} // ServerVehicleObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerVehicleObjectTemplate::getId(void) const -{ - return ServerVehicleObjectTemplate_tag; -} // ServerVehicleObjectTemplate::getId +Tag ServerVehicleObjectTemplate::getId(void) const { + return ServerVehicleObjectTemplate_tag; +} // ServerVehicleObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerVehicleObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerVehicleObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerVehicleObjectTemplate::getTemplateVersion /** @@ -83,149 +79,129 @@ Tag ServerVehicleObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerVehicleObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerVehicleObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerVehicleObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerVehicleObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerVehicleObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerVehicleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //ServerVehicleObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +ServerVehicleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerVehicleObjectTemplate::getCompilerIntegerParam -FloatParam * ServerVehicleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "currentFuel") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_currentFuel; - } - fprintf(stderr, "trying to access single-parameter \"currentFuel\" as an array\n"); - } - else if (strcmp(name, "maxFuel") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_maxFuel; - } - fprintf(stderr, "trying to access single-parameter \"maxFuel\" as an array\n"); - } - else if (strcmp(name, "consumpsion") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_consumpsion; - } - fprintf(stderr, "trying to access single-parameter \"consumpsion\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerVehicleObjectTemplate::getFloatParam +FloatParam *ServerVehicleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("currentFuel"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_currentFuel; + } + fprintf(stderr, "trying to access single-parameter \"currentFuel\" as an array\n"); + } + break; + case constcrc("maxFuel"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_maxFuel; + } + fprintf(stderr, "trying to access single-parameter \"maxFuel\" as an array\n"); + } + break; + case constcrc("consumpsion"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_consumpsion; + } + fprintf(stderr, "trying to access single-parameter \"consumpsion\" as an array\n"); + } + break; + default: + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerVehicleObjectTemplate::getFloatParam -BoolParam * ServerVehicleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); -} //ServerVehicleObjectTemplate::getBoolParam +BoolParam *ServerVehicleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerVehicleObjectTemplate::getBoolParam -StringParam * ServerVehicleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "fuelType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_fuelType; - } - fprintf(stderr, "trying to access single-parameter \"fuelType\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //ServerVehicleObjectTemplate::getStringParam +StringParam *ServerVehicleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "fuelType") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_fuelType; + } + fprintf(stderr, "trying to access single-parameter \"fuelType\" as an array\n"); + } else + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return nullptr; +} //ServerVehicleObjectTemplate::getStringParam -StringIdParam * ServerVehicleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerVehicleObjectTemplate::getStringIdParam +StringIdParam *ServerVehicleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerVehicleObjectTemplate::getStringIdParam -VectorParam * ServerVehicleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerVehicleObjectTemplate::getVectorParam +VectorParam *ServerVehicleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerVehicleObjectTemplate::getVectorParam -DynamicVariableParam * ServerVehicleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerVehicleObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +ServerVehicleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerVehicleObjectTemplate::getDynamicVariableParam -StructParamOT * ServerVehicleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); -} //ServerVehicleObjectTemplate::getStructParamOT +StructParamOT *ServerVehicleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerVehicleObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerVehicleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerVehicleObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *ServerVehicleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerVehicleObjectTemplate::getTriggerVolumeParam -void ServerVehicleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - ServerTangibleObjectTemplate::initStructParamOT(param, name); -} // ServerVehicleObjectTemplate::initStructParamOT +void ServerVehicleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerVehicleObjectTemplate::initStructParamOT -void ServerVehicleObjectTemplate::setAsEmptyList(const char *name) -{ - ServerTangibleObjectTemplate::setAsEmptyList(name); -} // ServerVehicleObjectTemplate::setAsEmptyList +void ServerVehicleObjectTemplate::setAsEmptyList(const char *name) { + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerVehicleObjectTemplate::setAsEmptyList -void ServerVehicleObjectTemplate::setAppend(const char *name) -{ - ServerTangibleObjectTemplate::setAppend(name); -} // ServerVehicleObjectTemplate::setAppend +void ServerVehicleObjectTemplate::setAppend(const char *name) { + ServerTangibleObjectTemplate::setAppend(name); +} // ServerVehicleObjectTemplate::setAppend -bool ServerVehicleObjectTemplate::isAppend(const char *name) const -{ - return ServerTangibleObjectTemplate::isAppend(name); -} // ServerVehicleObjectTemplate::isAppend +bool ServerVehicleObjectTemplate::isAppend(const char *name) const { + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerVehicleObjectTemplate::isAppend -int ServerVehicleObjectTemplate::getListLength(const char *name) const -{ - return ServerTangibleObjectTemplate::getListLength(name); -} // ServerVehicleObjectTemplate::getListLength +int ServerVehicleObjectTemplate::getListLength(const char *name) const { + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerVehicleObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -233,70 +209,71 @@ int ServerVehicleObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerVehicleObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerVehicleObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerVehicleObjectTemplate_tag) - { - ServerTangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerVehicleObjectTemplate_tag) { + ServerTangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,0)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 0)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "fuelType") == 0) - m_fuelType.loadFromIff(file); - else if (strcmp(paramName, "currentFuel") == 0) - m_currentFuel.loadFromIff(file); - else if (strcmp(paramName, "maxFuel") == 0) - m_maxFuel.loadFromIff(file); - else if (strcmp(paramName, "consumpsion") == 0) - m_consumpsion.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - ServerTangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerVehicleObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("fuelType"): + m_fuelType.loadFromIff(file); + break; + case constcrc("currentFuel"): + m_currentFuel.loadFromIff(file); + break; + case constcrc("maxFuel"): + m_maxFuel.loadFromIff(file); + break; + case constcrc("consumpsion"): + m_consumpsion.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerVehicleObjectTemplate::load /** * Saves the template data to an iff file. @@ -304,59 +281,57 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerVehicleObjectTemplate::save(Iff &file) -{ -int count; +void ServerVehicleObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerVehicleObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,0)); - file.allowNonlinearFunctions(); + file.insertForm(ServerVehicleObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 0)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save fuelType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("fuelType"); - m_fuelType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save currentFuel - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("currentFuel"); - m_currentFuel.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxFuel - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxFuel"); - m_maxFuel.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save consumpsion - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("consumpsion"); - m_consumpsion.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save fuelType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("fuelType"); + m_fuelType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save currentFuel + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("currentFuel"); + m_currentFuel.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxFuel + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxFuel"); + m_maxFuel.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save consumpsion + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("consumpsion"); + m_consumpsion.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerTangibleObjectTemplate::save(file); - file.exitForm(); - UNREF(count); -} // ServerVehicleObjectTemplate::save + file.exitForm(true); + ServerTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerVehicleObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp index 7f88b2c7..fca988ab 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp @@ -19,63 +19,59 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerWeaponObjectTemplate::ServerWeaponObjectTemplate(const std::string & filename) +ServerWeaponObjectTemplate::ServerWeaponObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : ServerTangibleObjectTemplate(filename) + : ServerTangibleObjectTemplate(filename) //@END TFD INIT { -} // ServerWeaponObjectTemplate::ServerWeaponObjectTemplate +} // ServerWeaponObjectTemplate::ServerWeaponObjectTemplate /** * Class destructor. */ -ServerWeaponObjectTemplate::~ServerWeaponObjectTemplate() -{ +ServerWeaponObjectTemplate::~ServerWeaponObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // ServerWeaponObjectTemplate::~ServerWeaponObjectTemplate +} // ServerWeaponObjectTemplate::~ServerWeaponObjectTemplate /** * Static function used to register this template. */ -void ServerWeaponObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerWeaponObjectTemplate_tag, create); -} // ServerWeaponObjectTemplate::registerMe +void ServerWeaponObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerWeaponObjectTemplate_tag, create); +} // ServerWeaponObjectTemplate::registerMe /** * Creates a ServerWeaponObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerWeaponObjectTemplate::create(const std::string & filename) -{ - return new ServerWeaponObjectTemplate(filename); -} // ServerWeaponObjectTemplate::create +ObjectTemplate *ServerWeaponObjectTemplate::create(const std::string &filename) { + return new ServerWeaponObjectTemplate(filename); +} // ServerWeaponObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerWeaponObjectTemplate::getId(void) const -{ - return ServerWeaponObjectTemplate_tag; -} // ServerWeaponObjectTemplate::getId +Tag ServerWeaponObjectTemplate::getId(void) const { + return ServerWeaponObjectTemplate_tag; +} // ServerWeaponObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerWeaponObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerWeaponObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerWeaponObjectTemplate::getTemplateVersion /** @@ -83,303 +79,264 @@ Tag ServerWeaponObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerWeaponObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerWeaponObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerWeaponObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerWeaponObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerWeaponObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerWeaponObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "weaponType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_weaponType; - } - fprintf(stderr, "trying to access single-parameter \"weaponType\" as an array\n"); - } - else if (strcmp(name, "attackType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_attackType; - } - fprintf(stderr, "trying to access single-parameter \"attackType\" as an array\n"); - } - else if (strcmp(name, "damageType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_damageType; - } - fprintf(stderr, "trying to access single-parameter \"damageType\" as an array\n"); - } - else if (strcmp(name, "elementalType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_elementalType; - } - fprintf(stderr, "trying to access single-parameter \"elementalType\" as an array\n"); - } - else if (strcmp(name, "elementalValue") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_elementalValue; - } - fprintf(stderr, "trying to access single-parameter \"elementalValue\" as an array\n"); - } - else if (strcmp(name, "minDamageAmount") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_minDamageAmount; - } - fprintf(stderr, "trying to access single-parameter \"minDamageAmount\" as an array\n"); - } - else if (strcmp(name, "maxDamageAmount") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_maxDamageAmount; - } - fprintf(stderr, "trying to access single-parameter \"maxDamageAmount\" as an array\n"); - } - else if (strcmp(name, "attackCost") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_attackCost; - } - fprintf(stderr, "trying to access single-parameter \"attackCost\" as an array\n"); - } - else if (strcmp(name, "accuracy") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_accuracy; - } - fprintf(stderr, "trying to access single-parameter \"accuracy\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //ServerWeaponObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam *ServerWeaponObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("weaponType"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_weaponType; + } + fprintf(stderr, "trying to access single-parameter \"weaponType\" as an array\n"); + } + break; + case constcrc("attackType"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_attackType; + } + fprintf(stderr, "trying to access single-parameter \"attackType\" as an array\n"); + } + break; + case constcrc("damageType"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_damageType; + } + fprintf(stderr, "trying to access single-parameter \"damageType\" as an array\n"); + } + break; + case constcrc("elementalType"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_elementalType; + } + fprintf(stderr, "trying to access single-parameter \"elementalType\" as an array\n"); + } + break; + case constcrc("elementalValue"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_elementalValue; + } + fprintf(stderr, "trying to access single-parameter \"elementalValue\" as an array\n"); + } + break; + case constcrc("minDamageAmount"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_minDamageAmount; + } + fprintf(stderr, "trying to access single-parameter \"minDamageAmount\" as an array\n"); + } + break; + case constcrc("maxDamageAmount"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_maxDamageAmount; + } + fprintf(stderr, "trying to access single-parameter \"maxDamageAmount\" as an array\n"); + } + break; + case constcrc("attackCost"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_attackCost; + } + fprintf(stderr, "trying to access single-parameter \"attackCost\" as an array\n"); + } + break; + case constcrc("accuracy"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_accuracy; + } + fprintf(stderr, "trying to access single-parameter \"accuracy\" as an array\n"); + } + break; + default: + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerWeaponObjectTemplate::getCompilerIntegerParam -FloatParam * ServerWeaponObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "attackSpeed") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_attackSpeed; - } - fprintf(stderr, "trying to access single-parameter \"attackSpeed\" as an array\n"); - } - else if (strcmp(name, "audibleRange") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_audibleRange; - } - fprintf(stderr, "trying to access single-parameter \"audibleRange\" as an array\n"); - } - else if (strcmp(name, "minRange") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_minRange; - } - fprintf(stderr, "trying to access single-parameter \"minRange\" as an array\n"); - } - else if (strcmp(name, "maxRange") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_maxRange; - } - fprintf(stderr, "trying to access single-parameter \"maxRange\" as an array\n"); - } - else if (strcmp(name, "damageRadius") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_damageRadius; - } - fprintf(stderr, "trying to access single-parameter \"damageRadius\" as an array\n"); - } - else if (strcmp(name, "woundChance") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_woundChance; - } - fprintf(stderr, "trying to access single-parameter \"woundChance\" as an array\n"); - } - else - return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //ServerWeaponObjectTemplate::getFloatParam +FloatParam *ServerWeaponObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("attackSpeed"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_attackSpeed; + } + fprintf(stderr, "trying to access single-parameter \"attackSpeed\" as an array\n"); + } + break; + case constcrc("audibleRange"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_audibleRange; + } + fprintf(stderr, "trying to access single-parameter \"audibleRange\" as an array\n"); + } + break; + case constcrc("minRange"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_minRange; + } + fprintf(stderr, "trying to access single-parameter \"minRange\" as an array\n"); + } + break; + case constcrc("maxRange"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_maxRange; + } + fprintf(stderr, "trying to access single-parameter \"maxRange\" as an array\n"); + } + break; + case constcrc("damageRadius"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_damageRadius; + } + fprintf(stderr, "trying to access single-parameter \"damageRadius\" as an array\n"); + } + break; + case constcrc("woundChance"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_woundChance; + } + fprintf(stderr, "trying to access single-parameter \"woundChance\" as an array\n"); + } + break; + default: + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //ServerWeaponObjectTemplate::getFloatParam -BoolParam * ServerWeaponObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); -} //ServerWeaponObjectTemplate::getBoolParam +BoolParam *ServerWeaponObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerWeaponObjectTemplate::getBoolParam -StringParam * ServerWeaponObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); -} //ServerWeaponObjectTemplate::getStringParam +StringParam *ServerWeaponObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerWeaponObjectTemplate::getStringParam -StringIdParam * ServerWeaponObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //ServerWeaponObjectTemplate::getStringIdParam +StringIdParam *ServerWeaponObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerWeaponObjectTemplate::getStringIdParam -VectorParam * ServerWeaponObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //ServerWeaponObjectTemplate::getVectorParam +VectorParam *ServerWeaponObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerWeaponObjectTemplate::getVectorParam -DynamicVariableParam * ServerWeaponObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerWeaponObjectTemplate::getDynamicVariableParam +DynamicVariableParam *ServerWeaponObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerWeaponObjectTemplate::getDynamicVariableParam -StructParamOT * ServerWeaponObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); -} //ServerWeaponObjectTemplate::getStructParamOT +StructParamOT *ServerWeaponObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerWeaponObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerWeaponObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerWeaponObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *ServerWeaponObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerWeaponObjectTemplate::getTriggerVolumeParam -void ServerWeaponObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - ServerTangibleObjectTemplate::initStructParamOT(param, name); -} // ServerWeaponObjectTemplate::initStructParamOT +void ServerWeaponObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerWeaponObjectTemplate::initStructParamOT -void ServerWeaponObjectTemplate::setAsEmptyList(const char *name) -{ - ServerTangibleObjectTemplate::setAsEmptyList(name); -} // ServerWeaponObjectTemplate::setAsEmptyList +void ServerWeaponObjectTemplate::setAsEmptyList(const char *name) { + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerWeaponObjectTemplate::setAsEmptyList -void ServerWeaponObjectTemplate::setAppend(const char *name) -{ - ServerTangibleObjectTemplate::setAppend(name); -} // ServerWeaponObjectTemplate::setAppend +void ServerWeaponObjectTemplate::setAppend(const char *name) { + ServerTangibleObjectTemplate::setAppend(name); +} // ServerWeaponObjectTemplate::setAppend -bool ServerWeaponObjectTemplate::isAppend(const char *name) const -{ - return ServerTangibleObjectTemplate::isAppend(name); -} // ServerWeaponObjectTemplate::isAppend +bool ServerWeaponObjectTemplate::isAppend(const char *name) const { + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerWeaponObjectTemplate::isAppend -int ServerWeaponObjectTemplate::getListLength(const char *name) const -{ - return ServerTangibleObjectTemplate::getListLength(name); -} // ServerWeaponObjectTemplate::getListLength +int ServerWeaponObjectTemplate::getListLength(const char *name) const { + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerWeaponObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -387,92 +344,104 @@ int ServerWeaponObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerWeaponObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerWeaponObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerWeaponObjectTemplate_tag) - { - ServerTangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerWeaponObjectTemplate_tag) { + ServerTangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,1,1)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 1, 1)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "weaponType") == 0) - m_weaponType.loadFromIff(file); - else if (strcmp(paramName, "attackType") == 0) - m_attackType.loadFromIff(file); - else if (strcmp(paramName, "damageType") == 0) - m_damageType.loadFromIff(file); - else if (strcmp(paramName, "elementalType") == 0) - m_elementalType.loadFromIff(file); - else if (strcmp(paramName, "elementalValue") == 0) - m_elementalValue.loadFromIff(file); - else if (strcmp(paramName, "minDamageAmount") == 0) - m_minDamageAmount.loadFromIff(file); - else if (strcmp(paramName, "maxDamageAmount") == 0) - m_maxDamageAmount.loadFromIff(file); - else if (strcmp(paramName, "attackSpeed") == 0) - m_attackSpeed.loadFromIff(file); - else if (strcmp(paramName, "audibleRange") == 0) - m_audibleRange.loadFromIff(file); - else if (strcmp(paramName, "minRange") == 0) - m_minRange.loadFromIff(file); - else if (strcmp(paramName, "maxRange") == 0) - m_maxRange.loadFromIff(file); - else if (strcmp(paramName, "damageRadius") == 0) - m_damageRadius.loadFromIff(file); - else if (strcmp(paramName, "woundChance") == 0) - m_woundChance.loadFromIff(file); - else if (strcmp(paramName, "attackCost") == 0) - m_attackCost.loadFromIff(file); - else if (strcmp(paramName, "accuracy") == 0) - m_accuracy.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - ServerTangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // ServerWeaponObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("weaponType"): + m_weaponType.loadFromIff(file); + break; + case constcrc("attackType"): + m_attackType.loadFromIff(file); + break; + case constcrc("damageType"): + m_damageType.loadFromIff(file); + break; + case constcrc("elementalType"): + m_elementalType.loadFromIff(file); + break; + case constcrc("elementalValue"): + m_elementalValue.loadFromIff(file); + break; + case constcrc("minDamageAmount"): + m_minDamageAmount.loadFromIff(file); + break; + case constcrc("maxDamageAmount"): + m_maxDamageAmount.loadFromIff(file); + break; + case constcrc("attackSpeed"): + m_attackSpeed.loadFromIff(file); + break; + case constcrc("audibleRange"): + m_audibleRange.loadFromIff(file); + break; + case constcrc("minRange"): + m_minRange.loadFromIff(file); + break; + case constcrc("maxRange"): + m_maxRange.loadFromIff(file); + break; + case constcrc("damageRadius"): + m_damageRadius.loadFromIff(file); + break; + case constcrc("woundChance"): + m_woundChance.loadFromIff(file); + break; + case constcrc("attackCost"): + m_attackCost.loadFromIff(file); + break; + case constcrc("accuracy"): + m_accuracy.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerWeaponObjectTemplate::load /** * Saves the template data to an iff file. @@ -480,125 +449,123 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerWeaponObjectTemplate::save(Iff &file) -{ -int count; +void ServerWeaponObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerWeaponObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,1,1)); - file.allowNonlinearFunctions(); + file.insertForm(ServerWeaponObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 1, 1)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save weaponType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("weaponType"); - m_weaponType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save attackType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("attackType"); - m_attackType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save damageType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("damageType"); - m_damageType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save elementalType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("elementalType"); - m_elementalType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save elementalValue - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("elementalValue"); - m_elementalValue.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save minDamageAmount - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("minDamageAmount"); - m_minDamageAmount.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxDamageAmount - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxDamageAmount"); - m_maxDamageAmount.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save attackSpeed - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("attackSpeed"); - m_attackSpeed.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save audibleRange - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("audibleRange"); - m_audibleRange.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save minRange - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("minRange"); - m_minRange.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxRange - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxRange"); - m_maxRange.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save damageRadius - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("damageRadius"); - m_damageRadius.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save woundChance - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("woundChance"); - m_woundChance.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save attackCost - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("attackCost"); - m_attackCost.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save accuracy - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("accuracy"); - m_accuracy.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save weaponType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("weaponType"); + m_weaponType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save attackType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attackType"); + m_attackType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save damageType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("damageType"); + m_damageType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save elementalType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("elementalType"); + m_elementalType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save elementalValue + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("elementalValue"); + m_elementalValue.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save minDamageAmount + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("minDamageAmount"); + m_minDamageAmount.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxDamageAmount + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxDamageAmount"); + m_maxDamageAmount.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save attackSpeed + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attackSpeed"); + m_attackSpeed.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save audibleRange + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("audibleRange"); + m_audibleRange.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save minRange + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("minRange"); + m_minRange.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxRange + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxRange"); + m_maxRange.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save damageRadius + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("damageRadius"); + m_damageRadius.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save woundChance + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("woundChance"); + m_woundChance.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save attackCost + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attackCost"); + m_attackCost.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save accuracy + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("accuracy"); + m_accuracy.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - ServerTangibleObjectTemplate::save(file); - file.exitForm(); - UNREF(count); -} // ServerWeaponObjectTemplate::save + file.exitForm(true); + ServerTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerWeaponObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp index 2cd81c03..b084b696 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp @@ -19,63 +19,59 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -SharedCreatureObjectTemplate::SharedCreatureObjectTemplate(const std::string & filename) +SharedCreatureObjectTemplate::SharedCreatureObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : SharedTangibleObjectTemplate(filename) + : SharedTangibleObjectTemplate(filename) //@END TFD INIT { -} // SharedCreatureObjectTemplate::SharedCreatureObjectTemplate +} // SharedCreatureObjectTemplate::SharedCreatureObjectTemplate /** * Class destructor. */ -SharedCreatureObjectTemplate::~SharedCreatureObjectTemplate() -{ +SharedCreatureObjectTemplate::~SharedCreatureObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // SharedCreatureObjectTemplate::~SharedCreatureObjectTemplate +} // SharedCreatureObjectTemplate::~SharedCreatureObjectTemplate /** * Static function used to register this template. */ -void SharedCreatureObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(SharedCreatureObjectTemplate_tag, create); -} // SharedCreatureObjectTemplate::registerMe +void SharedCreatureObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(SharedCreatureObjectTemplate_tag, create); +} // SharedCreatureObjectTemplate::registerMe /** * Creates a SharedCreatureObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * SharedCreatureObjectTemplate::create(const std::string & filename) -{ - return new SharedCreatureObjectTemplate(filename); -} // SharedCreatureObjectTemplate::create +ObjectTemplate *SharedCreatureObjectTemplate::create(const std::string &filename) { + return new SharedCreatureObjectTemplate(filename); +} // SharedCreatureObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag SharedCreatureObjectTemplate::getId(void) const -{ - return SharedCreatureObjectTemplate_tag; -} // SharedCreatureObjectTemplate::getId +Tag SharedCreatureObjectTemplate::getId(void) const { + return SharedCreatureObjectTemplate_tag; +} // SharedCreatureObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag SharedCreatureObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag SharedCreatureObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // SharedCreatureObjectTemplate::getTemplateVersion /** @@ -83,422 +79,380 @@ Tag SharedCreatureObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag SharedCreatureObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const SharedCreatureObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag SharedCreatureObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const SharedCreatureObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // SharedCreatureObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * SharedCreatureObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "gender") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_gender; - } - fprintf(stderr, "trying to access single-parameter \"gender\" as an array\n"); - } - else if (strcmp(name, "niche") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_niche; - } - fprintf(stderr, "trying to access single-parameter \"niche\" as an array\n"); - } - else if (strcmp(name, "species") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_species; - } - fprintf(stderr, "trying to access single-parameter \"species\" as an array\n"); - } - else if (strcmp(name, "race") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_race; - } - fprintf(stderr, "trying to access single-parameter \"race\" as an array\n"); - } - else - return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //SharedCreatureObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +SharedCreatureObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("gender"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_gender; + } + fprintf(stderr, "trying to access single-parameter \"gender\" as an array\n"); + } + name; + case constcrc("niche"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_niche; + } + fprintf(stderr, "trying to access single-parameter \"niche\" as an array\n"); + } + name; + case constcrc("species"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_species; + } + fprintf(stderr, "trying to access single-parameter \"species\" as an array\n"); + } + name; + case constcrc("race"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_race; + } + fprintf(stderr, "trying to access single-parameter \"race\" as an array\n"); + } + name; + default: + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedCreatureObjectTemplate::getCompilerIntegerParam -FloatParam * SharedCreatureObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "acceleration") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_acceleration[index]; - } - fprintf(stderr, "index for parameter \"acceleration\" out of bounds\n"); - } - else if (strcmp(name, "speed") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_speed[index]; - } - fprintf(stderr, "index for parameter \"speed\" out of bounds\n"); - } - else if (strcmp(name, "turnRate") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_turnRate[index]; - } - fprintf(stderr, "index for parameter \"turnRate\" out of bounds\n"); - } - else if (strcmp(name, "slopeModAngle") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_slopeModAngle; - } - fprintf(stderr, "trying to access single-parameter \"slopeModAngle\" as an array\n"); - } - else if (strcmp(name, "slopeModPercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_slopeModPercent; - } - fprintf(stderr, "trying to access single-parameter \"slopeModPercent\" as an array\n"); - } - else if (strcmp(name, "waterModPercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_waterModPercent; - } - fprintf(stderr, "trying to access single-parameter \"waterModPercent\" as an array\n"); - } - else if (strcmp(name, "stepHeight") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_stepHeight; - } - fprintf(stderr, "trying to access single-parameter \"stepHeight\" as an array\n"); - } - else if (strcmp(name, "collisionHeight") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_collisionHeight; - } - fprintf(stderr, "trying to access single-parameter \"collisionHeight\" as an array\n"); - } - else if (strcmp(name, "collisionRadius") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_collisionRadius; - } - fprintf(stderr, "trying to access single-parameter \"collisionRadius\" as an array\n"); - } - else if (strcmp(name, "swimHeight") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_swimHeight; - } - fprintf(stderr, "trying to access single-parameter \"swimHeight\" as an array\n"); - } - else if (strcmp(name, "warpTolerance") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_warpTolerance; - } - fprintf(stderr, "trying to access single-parameter \"warpTolerance\" as an array\n"); - } - else if (strcmp(name, "collisionOffsetX") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_collisionOffsetX; - } - fprintf(stderr, "trying to access single-parameter \"collisionOffsetX\" as an array\n"); - } - else if (strcmp(name, "collisionOffsetZ") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_collisionOffsetZ; - } - fprintf(stderr, "trying to access single-parameter \"collisionOffsetZ\" as an array\n"); - } - else if (strcmp(name, "collisionLength") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_collisionLength; - } - fprintf(stderr, "trying to access single-parameter \"collisionLength\" as an array\n"); - } - else if (strcmp(name, "cameraHeight") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_cameraHeight; - } - fprintf(stderr, "trying to access single-parameter \"cameraHeight\" as an array\n"); - } - else - return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //SharedCreatureObjectTemplate::getFloatParam +FloatParam *SharedCreatureObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("acceleration"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_acceleration[index]; + } + fprintf(stderr, "index for parameter \"acceleration\" out of bounds\n"); + } + name; + case constcrc("speed"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_speed[index]; + } + fprintf(stderr, "index for parameter \"speed\" out of bounds\n"); + } + name; + case constcrc("turnRate"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_turnRate[index]; + } + fprintf(stderr, "index for parameter \"turnRate\" out of bounds\n"); + } + name; + case constcrc("slopeModAngle"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_slopeModAngle; + } + fprintf(stderr, "trying to access single-parameter \"slopeModAngle\" as an array\n"); + } + name; + case constcrc("slopeModPercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_slopeModPercent; + } + fprintf(stderr, "trying to access single-parameter \"slopeModPercent\" as an array\n"); + } + name; + case constcrc("waterModPercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_waterModPercent; + } + fprintf(stderr, "trying to access single-parameter \"waterModPercent\" as an array\n"); + } + name; + case constcrc("stepHeight"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_stepHeight; + } + fprintf(stderr, "trying to access single-parameter \"stepHeight\" as an array\n"); + } + name; + case constcrc("collisionHeight"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_collisionHeight; + } + fprintf(stderr, "trying to access single-parameter \"collisionHeight\" as an array\n"); + } + name; + case constcrc("collisionRadius"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_collisionRadius; + } + fprintf(stderr, "trying to access single-parameter \"collisionRadius\" as an array\n"); + } + name; + case constcrc("swimHeight"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_swimHeight; + } + fprintf(stderr, "trying to access single-parameter \"swimHeight\" as an array\n"); + } + name; + case constcrc("warpTolerance"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_warpTolerance; + } + fprintf(stderr, "trying to access single-parameter \"warpTolerance\" as an array\n"); + } + name; + case constcrc("collisionOffsetX"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_collisionOffsetX; + } + fprintf(stderr, "trying to access single-parameter \"collisionOffsetX\" as an array\n"); + } + name; + case constcrc("collisionOffsetZ"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_collisionOffsetZ; + } + fprintf(stderr, "trying to access single-parameter \"collisionOffsetZ\" as an array\n"); + } + name; + case constcrc("collisionLength"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_collisionLength; + } + fprintf(stderr, "trying to access single-parameter \"collisionLength\" as an array\n"); + } + name; + case constcrc("cameraHeight"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_cameraHeight; + } + fprintf(stderr, "trying to access single-parameter \"cameraHeight\" as an array\n"); + } + name; + default: + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedCreatureObjectTemplate::getFloatParam -BoolParam * SharedCreatureObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "postureAlignToTerrain") == 0) - { - if (index >= 0 && index < 15) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_postureAlignToTerrain[index]; - } - fprintf(stderr, "index for parameter \"postureAlignToTerrain\" out of bounds\n"); - } - else - return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //SharedCreatureObjectTemplate::getBoolParam +BoolParam *SharedCreatureObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("postureAlignToTerrain"): { + if (index >= 0 && index < 15) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_postureAlignToTerrain[index]; + } + fprintf(stderr, "index for parameter \"postureAlignToTerrain\" out of bounds\n"); + } + break; + default: + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedCreatureObjectTemplate::getBoolParam -StringParam * SharedCreatureObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "animationMapFilename") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_animationMapFilename; - } - fprintf(stderr, "trying to access single-parameter \"animationMapFilename\" as an array\n"); - } - else if (strcmp(name, "movementDatatable") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_movementDatatable; - } - fprintf(stderr, "trying to access single-parameter \"movementDatatable\" as an array\n"); - } - else - return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedCreatureObjectTemplate::getStringParam +StringParam *SharedCreatureObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("animationMapFilename"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_animationMapFilename; + } + fprintf(stderr, "trying to access single-parameter \"animationMapFilename\" as an array\n"); + } + break; + case constcrc("movementDatatable"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_movementDatatable; + } + fprintf(stderr, "trying to access single-parameter \"movementDatatable\" as an array\n"); + } + break; + default: + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedCreatureObjectTemplate::getStringParam -StringIdParam * SharedCreatureObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //SharedCreatureObjectTemplate::getStringIdParam +StringIdParam *SharedCreatureObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedCreatureObjectTemplate::getStringIdParam -VectorParam * SharedCreatureObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //SharedCreatureObjectTemplate::getVectorParam +VectorParam *SharedCreatureObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedCreatureObjectTemplate::getVectorParam -DynamicVariableParam * SharedCreatureObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedCreatureObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +SharedCreatureObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedCreatureObjectTemplate::getDynamicVariableParam -StructParamOT * SharedCreatureObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); -} //SharedCreatureObjectTemplate::getStructParamOT +StructParamOT *SharedCreatureObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedCreatureObjectTemplate::getStructParamOT -TriggerVolumeParam * SharedCreatureObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedCreatureObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *SharedCreatureObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedCreatureObjectTemplate::getTriggerVolumeParam -void SharedCreatureObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - SharedTangibleObjectTemplate::initStructParamOT(param, name); -} // SharedCreatureObjectTemplate::initStructParamOT +void SharedCreatureObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedCreatureObjectTemplate::initStructParamOT -void SharedCreatureObjectTemplate::setAsEmptyList(const char *name) -{ - SharedTangibleObjectTemplate::setAsEmptyList(name); -} // SharedCreatureObjectTemplate::setAsEmptyList +void SharedCreatureObjectTemplate::setAsEmptyList(const char *name) { + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedCreatureObjectTemplate::setAsEmptyList -void SharedCreatureObjectTemplate::setAppend(const char *name) -{ - SharedTangibleObjectTemplate::setAppend(name); -} // SharedCreatureObjectTemplate::setAppend +void SharedCreatureObjectTemplate::setAppend(const char *name) { + SharedTangibleObjectTemplate::setAppend(name); +} // SharedCreatureObjectTemplate::setAppend -bool SharedCreatureObjectTemplate::isAppend(const char *name) const -{ - return SharedTangibleObjectTemplate::isAppend(name); -} // SharedCreatureObjectTemplate::isAppend +bool SharedCreatureObjectTemplate::isAppend(const char *name) const { + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedCreatureObjectTemplate::isAppend -int SharedCreatureObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "acceleration") == 0) - { - return sizeof(m_acceleration) / sizeof(FloatParam); - } - else if (strcmp(name, "speed") == 0) - { - return sizeof(m_speed) / sizeof(FloatParam); - } - else if (strcmp(name, "turnRate") == 0) - { - return sizeof(m_turnRate) / sizeof(FloatParam); - } - else if (strcmp(name, "postureAlignToTerrain") == 0) - { - return sizeof(m_postureAlignToTerrain) / sizeof(BoolParam); - } - else - return SharedTangibleObjectTemplate::getListLength(name); -} // SharedCreatureObjectTemplate::getListLength +int SharedCreatureObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("acceleration"): { + return sizeof(m_acceleration) / sizeof(FloatParam); + } + break; + case constcrc("speed"): { + return sizeof(m_speed) / sizeof(FloatParam); + } + break; + case constcrc("turnRate"): { + return sizeof(m_turnRate) / sizeof(FloatParam); + } + break; + case constcrc("postureAlignToTerrain"): { + return sizeof(m_postureAlignToTerrain) / sizeof(BoolParam); + } + break; + default: + return SharedTangibleObjectTemplate::getListLength(name); + break; + } +} // SharedCreatureObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -506,154 +460,169 @@ int SharedCreatureObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void SharedCreatureObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedCreatureObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != SharedCreatureObjectTemplate_tag) - { - SharedTangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != SharedCreatureObjectTemplate_tag) { + SharedTangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,1,3)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 1, 3)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "gender") == 0) - m_gender.loadFromIff(file); - else if (strcmp(paramName, "niche") == 0) - m_niche.loadFromIff(file); - else if (strcmp(paramName, "species") == 0) - m_species.loadFromIff(file); - else if (strcmp(paramName, "race") == 0) - m_race.loadFromIff(file); - else if (strcmp(paramName, "acceleration") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("Template %s: read array size of %d for array \"acceleration\" of size 2, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_acceleration[j].loadFromIff(file); - // if there are more params for acceleration read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "speed") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("Template %s: read array size of %d for array \"speed\" of size 2, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_speed[j].loadFromIff(file); - // if there are more params for speed read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "turnRate") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("Template %s: read array size of %d for array \"turnRate\" of size 2, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_turnRate[j].loadFromIff(file); - // if there are more params for turnRate read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "animationMapFilename") == 0) - m_animationMapFilename.loadFromIff(file); - else if (strcmp(paramName, "slopeModAngle") == 0) - m_slopeModAngle.loadFromIff(file); - else if (strcmp(paramName, "slopeModPercent") == 0) - m_slopeModPercent.loadFromIff(file); - else if (strcmp(paramName, "waterModPercent") == 0) - m_waterModPercent.loadFromIff(file); - else if (strcmp(paramName, "stepHeight") == 0) - m_stepHeight.loadFromIff(file); - else if (strcmp(paramName, "collisionHeight") == 0) - m_collisionHeight.loadFromIff(file); - else if (strcmp(paramName, "collisionRadius") == 0) - m_collisionRadius.loadFromIff(file); - else if (strcmp(paramName, "movementDatatable") == 0) - m_movementDatatable.loadFromIff(file); - else if (strcmp(paramName, "postureAlignToTerrain") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 15, ("Template %s: read array size of %d for array \"postureAlignToTerrain\" of size 15, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 15 && j < listCount; ++j) - m_postureAlignToTerrain[j].loadFromIff(file); - // if there are more params for postureAlignToTerrain read and dump them - for (; j < listCount; ++j) - { - BoolParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "swimHeight") == 0) - m_swimHeight.loadFromIff(file); - else if (strcmp(paramName, "warpTolerance") == 0) - m_warpTolerance.loadFromIff(file); - else if (strcmp(paramName, "collisionOffsetX") == 0) - m_collisionOffsetX.loadFromIff(file); - else if (strcmp(paramName, "collisionOffsetZ") == 0) - m_collisionOffsetZ.loadFromIff(file); - else if (strcmp(paramName, "collisionLength") == 0) - m_collisionLength.loadFromIff(file); - else if (strcmp(paramName, "cameraHeight") == 0) - m_cameraHeight.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - SharedTangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // SharedCreatureObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("gender"): + m_gender.loadFromIff(file); + break; + case constcrc("niche"): + m_niche.loadFromIff(file); + break; + case constcrc("species"): + m_species.loadFromIff(file); + break; + case constcrc("race"): + m_race.loadFromIff(file); + break; + case constcrc("acceleration"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("Template %s: read array size of %d for array \"acceleration\" of size 2, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_acceleration[j].loadFromIff(file); + // if there are more params for acceleration read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("speed"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("Template %s: read array size of %d for array \"speed\" of size 2, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_speed[j].loadFromIff(file); + // if there are more params for speed read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("turnRate"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("Template %s: read array size of %d for array \"turnRate\" of size 2, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_turnRate[j].loadFromIff(file); + // if there are more params for turnRate read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("animationMapFilename"): + m_animationMapFilename.loadFromIff(file); + break; + case constcrc("slopeModAngle"): + m_slopeModAngle.loadFromIff(file); + break; + case constcrc("slopeModPercent"): + m_slopeModPercent.loadFromIff(file); + break; + case constcrc("waterModPercent"): + m_waterModPercent.loadFromIff(file); + break; + case constcrc("stepHeight"): + m_stepHeight.loadFromIff(file); + break; + case constcrc("collisionHeight"): + m_collisionHeight.loadFromIff(file); + break; + case constcrc("collisionRadius"): + m_collisionRadius.loadFromIff(file); + break; + case constcrc("movementDatatable"): + m_movementDatatable.loadFromIff(file); + break; + case constcrc("postureAlignToTerrain"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 15, + ("Template %s: read array size of %d for array \"postureAlignToTerrain\" of size 15, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 15 && j < listCount; ++j) + m_postureAlignToTerrain[j].loadFromIff(file); + // if there are more params for postureAlignToTerrain read and dump them + for (; j < listCount; ++j) { + BoolParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("swimHeight"): + m_swimHeight.loadFromIff(file); + break; + case constcrc("warpTolerance"): + m_warpTolerance.loadFromIff(file); + break; + case constcrc("collisionOffsetX"): + m_collisionOffsetX.loadFromIff(file); + break; + case constcrc("collisionOffsetZ"): + m_collisionOffsetZ.loadFromIff(file); + break; + case constcrc("collisionLength"): + m_collisionLength.loadFromIff(file); + break; + case constcrc("cameraHeight"): + m_cameraHeight.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedCreatureObjectTemplate::load /** * Saves the template data to an iff file. @@ -661,178 +630,184 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedCreatureObjectTemplate::save(Iff &file) -{ -int count; +void SharedCreatureObjectTemplate::save(Iff &file) { + int count; - file.insertForm(SharedCreatureObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,1,3)); - file.allowNonlinearFunctions(); + file.insertForm(SharedCreatureObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 1, 3)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save gender - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("gender"); - m_gender.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save niche - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("niche"); - m_niche.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save species - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("species"); - m_species.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save race - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("race"); - m_race.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save acceleration - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("acceleration"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_acceleration[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save speed - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("speed"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_speed[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save turnRate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("turnRate"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_turnRate[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save animationMapFilename - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("animationMapFilename"); - m_animationMapFilename.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save slopeModAngle - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("slopeModAngle"); - m_slopeModAngle.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save slopeModPercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("slopeModPercent"); - m_slopeModPercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save waterModPercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("waterModPercent"); - m_waterModPercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save stepHeight - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stepHeight"); - m_stepHeight.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save collisionHeight - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("collisionHeight"); - m_collisionHeight.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save collisionRadius - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("collisionRadius"); - m_collisionRadius.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save movementDatatable - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("movementDatatable"); - m_movementDatatable.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save postureAlignToTerrain - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("postureAlignToTerrain"); - count = 15; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 15; ++i) - m_postureAlignToTerrain[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save swimHeight - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("swimHeight"); - m_swimHeight.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save warpTolerance - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("warpTolerance"); - m_warpTolerance.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save collisionOffsetX - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("collisionOffsetX"); - m_collisionOffsetX.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save collisionOffsetZ - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("collisionOffsetZ"); - m_collisionOffsetZ.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save collisionLength - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("collisionLength"); - m_collisionLength.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save cameraHeight - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("cameraHeight"); - m_cameraHeight.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save gender + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("gender"); + m_gender.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save niche + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("niche"); + m_niche.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save species + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("species"); + m_species.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save race + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("race"); + m_race.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save acceleration + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("acceleration"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_acceleration[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save speed + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("speed"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_speed[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save turnRate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("turnRate"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_turnRate[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save animationMapFilename + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("animationMapFilename"); + m_animationMapFilename.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save slopeModAngle + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("slopeModAngle"); + m_slopeModAngle.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save slopeModPercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("slopeModPercent"); + m_slopeModPercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save waterModPercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("waterModPercent"); + m_waterModPercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save stepHeight + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stepHeight"); + m_stepHeight.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save collisionHeight + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("collisionHeight"); + m_collisionHeight.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save collisionRadius + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("collisionRadius"); + m_collisionRadius.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save movementDatatable + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("movementDatatable"); + m_movementDatatable.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save postureAlignToTerrain + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("postureAlignToTerrain"); + count = 15; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 15; ++i) + m_postureAlignToTerrain[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save swimHeight + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("swimHeight"); + m_swimHeight.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save warpTolerance + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("warpTolerance"); + m_warpTolerance.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save collisionOffsetX + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("collisionOffsetX"); + m_collisionOffsetX.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save collisionOffsetZ + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("collisionOffsetZ"); + m_collisionOffsetZ.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save collisionLength + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("collisionLength"); + m_collisionLength.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save cameraHeight + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("cameraHeight"); + m_cameraHeight.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - SharedTangibleObjectTemplate::save(file); - file.exitForm(); -} // SharedCreatureObjectTemplate::save + file.exitForm(true); + SharedTangibleObjectTemplate::save(file); + file.exitForm(); +} // SharedCreatureObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp index 161d3c36..6bd68f53 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp @@ -19,85 +19,76 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -SharedDraftSchematicObjectTemplate::SharedDraftSchematicObjectTemplate(const std::string & filename) +SharedDraftSchematicObjectTemplate::SharedDraftSchematicObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : SharedIntangibleObjectTemplate(filename) - ,m_slotsLoaded(false) - ,m_slotsAppend(false) - ,m_attributesLoaded(false) - ,m_attributesAppend(false) + : SharedIntangibleObjectTemplate(filename), m_slotsLoaded(false), m_slotsAppend(false), + m_attributesLoaded(false), m_attributesAppend(false) //@END TFD INIT { -} // SharedDraftSchematicObjectTemplate::SharedDraftSchematicObjectTemplate +} // SharedDraftSchematicObjectTemplate::SharedDraftSchematicObjectTemplate /** * Class destructor. */ -SharedDraftSchematicObjectTemplate::~SharedDraftSchematicObjectTemplate() -{ +SharedDraftSchematicObjectTemplate::~SharedDraftSchematicObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_slots.clear(); - } - { - std::vector::iterator iter; - for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_attributes.clear(); - } + { + std::vector::iterator iter; + for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_slots.clear(); + } + { + std::vector::iterator iter; + for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_attributes.clear(); + } //@END TFD CLEANUP -} // SharedDraftSchematicObjectTemplate::~SharedDraftSchematicObjectTemplate +} // SharedDraftSchematicObjectTemplate::~SharedDraftSchematicObjectTemplate /** * Static function used to register this template. */ -void SharedDraftSchematicObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(SharedDraftSchematicObjectTemplate_tag, create); -} // SharedDraftSchematicObjectTemplate::registerMe +void SharedDraftSchematicObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(SharedDraftSchematicObjectTemplate_tag, create); +} // SharedDraftSchematicObjectTemplate::registerMe /** * Creates a SharedDraftSchematicObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * SharedDraftSchematicObjectTemplate::create(const std::string & filename) -{ - return new SharedDraftSchematicObjectTemplate(filename); -} // SharedDraftSchematicObjectTemplate::create +ObjectTemplate *SharedDraftSchematicObjectTemplate::create(const std::string &filename) { + return new SharedDraftSchematicObjectTemplate(filename); +} // SharedDraftSchematicObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag SharedDraftSchematicObjectTemplate::getId(void) const -{ - return SharedDraftSchematicObjectTemplate_tag; -} // SharedDraftSchematicObjectTemplate::getId +Tag SharedDraftSchematicObjectTemplate::getId(void) const { + return SharedDraftSchematicObjectTemplate_tag; +} // SharedDraftSchematicObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag SharedDraftSchematicObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag SharedDraftSchematicObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // SharedDraftSchematicObjectTemplate::getTemplateVersion /** @@ -105,166 +96,172 @@ Tag SharedDraftSchematicObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag SharedDraftSchematicObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const SharedDraftSchematicObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag SharedDraftSchematicObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const SharedDraftSchematicObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // SharedDraftSchematicObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * SharedDraftSchematicObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +SharedDraftSchematicObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::getCompilerIntegerParam -FloatParam * SharedDraftSchematicObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::getFloatParam +FloatParam *SharedDraftSchematicObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::getFloatParam -BoolParam * SharedDraftSchematicObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::getBoolParam +BoolParam *SharedDraftSchematicObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::getBoolParam -StringParam * SharedDraftSchematicObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "craftedSharedTemplate") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_craftedSharedTemplate; - } - fprintf(stderr, "trying to access single-parameter \"craftedSharedTemplate\" as an array\n"); - } - else - return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedDraftSchematicObjectTemplate::getStringParam +StringParam *SharedDraftSchematicObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "craftedSharedTemplate") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_craftedSharedTemplate; + } + fprintf(stderr, "trying to access single-parameter \"craftedSharedTemplate\" as an array\n"); + } else + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); + return nullptr; +} //SharedDraftSchematicObjectTemplate::getStringParam -StringIdParam * SharedDraftSchematicObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::getStringIdParam +StringIdParam *SharedDraftSchematicObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::getStringIdParam -VectorParam * SharedDraftSchematicObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::getVectorParam +VectorParam *SharedDraftSchematicObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::getVectorParam -DynamicVariableParam * SharedDraftSchematicObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +SharedDraftSchematicObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::getDynamicVariableParam -StructParamOT * SharedDraftSchematicObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "slots") == 0) - { - if (index >= 0 && index < static_cast(m_slots.size())) - return m_slots[index]; - if (index == static_cast(m_slots.size())) - { - StructParamOT *temp = new StructParamOT(); - m_slots.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"slots\" out of bounds\n"); - } - else if (strcmp(name, "attributes") == 0) - { - if (index >= 0 && index < static_cast(m_attributes.size())) - return m_attributes[index]; - if (index == static_cast(m_attributes.size())) - { - StructParamOT *temp = new StructParamOT(); - m_attributes.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"attributes\" out of bounds\n"); - } - else - return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //SharedDraftSchematicObjectTemplate::getStructParamOT +StructParamOT *SharedDraftSchematicObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("slots"): { + if (index >= 0 && index < static_cast(m_slots.size())) + return m_slots[index]; + if (index == static_cast(m_slots.size())) { + StructParamOT *temp = new StructParamOT(); + m_slots.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"slots\" out of bounds\n"); + } + break; + case constcrc("attributes"): { + if (index >= 0 && index < static_cast(m_attributes.size())) + return m_attributes[index]; + if (index == static_cast(m_attributes.size())) { + StructParamOT *temp = new StructParamOT(); + m_attributes.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"attributes\" out of bounds\n"); + } + break; + default: + return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); + break; + } + return nullptr; +} //SharedDraftSchematicObjectTemplate::getStructParamOT -TriggerVolumeParam * SharedDraftSchematicObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam * +SharedDraftSchematicObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::getTriggerVolumeParam -void SharedDraftSchematicObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "slots") == 0) - param.setValue(new _IngredientSlot("")); - else if (strcmp(name, "attributes") == 0) - param.setValue(new _SchematicAttribute("")); - else - SharedIntangibleObjectTemplate::initStructParamOT(param, name); -} // SharedDraftSchematicObjectTemplate::initStructParamOT +void SharedDraftSchematicObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + switch (runtimeCrc(name)) { + case constcrc("slots"): + param.setValue(new _IngredientSlot("")); + break; + case constcrc("attributes"): + param.setValue(new _SchematicAttribute("")); + break; + default: + SharedIntangibleObjectTemplate::initStructParamOT(param, name); + break; + } +} // SharedDraftSchematicObjectTemplate::initStructParamOT -void SharedDraftSchematicObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "slots") == 0) - { - m_slots.clear(); - m_slotsLoaded = true; - } - else if (strcmp(name, "attributes") == 0) - { - m_attributes.clear(); - m_attributesLoaded = true; - } - else - SharedIntangibleObjectTemplate::setAsEmptyList(name); -} // SharedDraftSchematicObjectTemplate::setAsEmptyList +void SharedDraftSchematicObjectTemplate::setAsEmptyList(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("slots"): { + m_slots.clear(); + m_slotsLoaded = true; + } + break; + case constcrc("attributes"): { + m_attributes.clear(); + m_attributesLoaded = true; + } + break; + default: + SharedIntangibleObjectTemplate::setAsEmptyList(name); + break; + } +} // SharedDraftSchematicObjectTemplate::setAsEmptyList -void SharedDraftSchematicObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "slots") == 0) - m_slotsAppend = true; - else if (strcmp(name, "attributes") == 0) - m_attributesAppend = true; - else - SharedIntangibleObjectTemplate::setAppend(name); -} // SharedDraftSchematicObjectTemplate::setAppend +void SharedDraftSchematicObjectTemplate::setAppend(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("slots"): + m_slotsAppend = true; + break; + case constcrc("attributes"): + m_attributesAppend = true; + break; + default: + SharedIntangibleObjectTemplate::setAppend(name); + break; + } +} // SharedDraftSchematicObjectTemplate::setAppend -bool SharedDraftSchematicObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "slots") == 0) - return m_slotsAppend; - else if (strcmp(name, "attributes") == 0) - return m_attributesAppend; - else - return SharedIntangibleObjectTemplate::isAppend(name); -} // SharedDraftSchematicObjectTemplate::isAppend +bool SharedDraftSchematicObjectTemplate::isAppend(const char *name) const { + switch (runtimeCrc(name)) { + case cosntcrc("slots"): + return m_slotsAppend; + break; + case constcrc("attributes"): + return m_attributesAppend; + break; + default: + return SharedIntangibleObjectTemplate::isAppend(name); + break; + } +} // SharedDraftSchematicObjectTemplate::isAppend -int SharedDraftSchematicObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "slots") == 0) - { - return m_slots.size(); - } - else if (strcmp(name, "attributes") == 0) - { - return m_attributes.size(); - } - else - return SharedIntangibleObjectTemplate::getListLength(name); -} // SharedDraftSchematicObjectTemplate::getListLength +int SharedDraftSchematicObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("slots"): { + return m_slots.size(); + } + break; + case constcrc("attributes"): { + return m_attributes.size(); + } + break; + default: + return SharedIntangibleObjectTemplate::getListLength(name); + break; + } +} // SharedDraftSchematicObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -272,102 +269,96 @@ int SharedDraftSchematicObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void SharedDraftSchematicObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedDraftSchematicObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != SharedDraftSchematicObjectTemplate_tag) - { - SharedIntangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != SharedDraftSchematicObjectTemplate_tag) { + SharedIntangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,3)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 3)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "slots") == 0) - { - std::vector::iterator iter; - for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_slots.clear(); - m_slotsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_slots.push_back(newData); - } - m_slotsLoaded = true; - } - else if (strcmp(paramName, "attributes") == 0) - { - std::vector::iterator iter; - for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_attributes.clear(); - m_attributesAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_attributes.push_back(newData); - } - m_attributesLoaded = true; - } - else if (strcmp(paramName, "craftedSharedTemplate") == 0) - m_craftedSharedTemplate.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - SharedIntangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // SharedDraftSchematicObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("slots"): { + std::vector::iterator iter; + for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_slots.clear(); + m_slotsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_slots.push_back(newData); + } + m_slotsLoaded = true; + } + break; + case constcrc("attributes"): { + std::vector::iterator iter; + for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_attributes.clear(); + m_attributesAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_attributes.push_back(newData); + } + m_attributesLoaded = true; + } + break; + case constcrc("craftedSharedTemplate"): + m_craftedSharedTemplate.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedDraftSchematicObjectTemplate::load /** * Saves the template data to an iff file. @@ -375,71 +366,71 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedDraftSchematicObjectTemplate::save(Iff &file) -{ -int count; +void SharedDraftSchematicObjectTemplate::save(Iff &file) { + int count; - file.insertForm(SharedDraftSchematicObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,3)); - file.allowNonlinearFunctions(); + file.insertForm(SharedDraftSchematicObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 3)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - if (!m_slotsLoaded) - { - // mark the list as empty and extending the base list - m_slotsAppend = true; - } - // save slots - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("slots"); - file.insertChunkData(&m_slotsAppend, sizeof(bool)); - count = m_slots.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_slots[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_attributesLoaded) - { - // mark the list as empty and extending the base list - m_attributesAppend = true; - } - // save attributes - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("attributes"); - file.insertChunkData(&m_attributesAppend, sizeof(bool)); - count = m_attributes.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_attributes[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save craftedSharedTemplate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("craftedSharedTemplate"); - m_craftedSharedTemplate.saveToIff(file); - file.exitChunk(); - ++paramCount; + if (!m_slotsLoaded) { + // mark the list as empty and extending the base list + m_slotsAppend = true; + } + // save slots + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("slots"); + file.insertChunkData(&m_slotsAppend, sizeof(bool)); + count = m_slots.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_slots[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_attributesLoaded) { + // mark the list as empty and extending the base list + m_attributesAppend = true; + } + // save attributes + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attributes"); + file.insertChunkData(&m_attributesAppend, sizeof(bool)); + count = m_attributes.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_attributes[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save craftedSharedTemplate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("craftedSharedTemplate"); + m_craftedSharedTemplate.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - SharedIntangibleObjectTemplate::save(file); - file.exitForm(); -} // SharedDraftSchematicObjectTemplate::save + file.exitForm(true); + SharedIntangibleObjectTemplate::save(file); + file.exitForm(); +} // SharedDraftSchematicObjectTemplate::save //============================================================================= @@ -448,150 +439,135 @@ int count; /** * Class constructor. */ -SharedDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string & filename) - : TpfTemplate(filename) -{ -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot +SharedDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string &filename) + : TpfTemplate(filename) { +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot /** * Class destructor. */ -SharedDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot() -{ -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot +SharedDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot() { +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::~_IngredientSlot /** * Static function used to register this template. */ -void SharedDraftSchematicObjectTemplate::_IngredientSlot::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_IngredientSlot_tag, create); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::registerMe +void SharedDraftSchematicObjectTemplate::_IngredientSlot::registerMe(void) { + ObjectTemplateList::registerTemplate(_IngredientSlot_tag, create); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::registerMe /** * Creates a SharedDraftSchematicObjectTemplate::_IngredientSlot template. * * @return a new instance of the template */ -ObjectTemplate * SharedDraftSchematicObjectTemplate::_IngredientSlot::create(const std::string & filename) -{ - return new SharedDraftSchematicObjectTemplate::_IngredientSlot(filename); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::create +ObjectTemplate *SharedDraftSchematicObjectTemplate::_IngredientSlot::create(const std::string &filename) { + return new SharedDraftSchematicObjectTemplate::_IngredientSlot(filename); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::create /** * Returns the template id. * * @return the template id */ -Tag SharedDraftSchematicObjectTemplate::_IngredientSlot::getId(void) const -{ - return _IngredientSlot_tag; -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::getId +Tag SharedDraftSchematicObjectTemplate::_IngredientSlot::getId(void) const { + return _IngredientSlot_tag; +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::getId -CompilerIntegerParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam +CompilerIntegerParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getCompilerIntegerParam -FloatParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam +FloatParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getFloatParam -BoolParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam +BoolParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getBoolParam -StringParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "hardpoint") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_hardpoint; - } - fprintf(stderr, "trying to access single-parameter \"hardpoint\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringParam +StringParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "hardpoint") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_hardpoint; + } + fprintf(stderr, "trying to access single-parameter \"hardpoint\" as an array\n"); + } else + return TpfTemplate::getStringParam(name, deepCheck, index); + return nullptr; +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringParam -StringIdParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "name") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_name; - } - fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); - } - else - return TpfTemplate::getStringIdParam(name, deepCheck, index); - return nullptr; -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam +StringIdParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam(const char *name, bool deepCheck, int index) { + if (strcmp(name, "name") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return nullptr; +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam -VectorParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam +VectorParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getVectorParam -DynamicVariableParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam +DynamicVariableParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getDynamicVariableParam -StructParamOT * SharedDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT +StructParamOT * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT -TriggerVolumeParam * SharedDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam +TriggerVolumeParam * +SharedDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getTriggerVolumeParam -void SharedDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT +void SharedDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::initStructParamOT -void SharedDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList +void SharedDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::setAsEmptyList -void SharedDraftSchematicObjectTemplate::_IngredientSlot::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::setAppend +void SharedDraftSchematicObjectTemplate::_IngredientSlot::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::setAppend -bool SharedDraftSchematicObjectTemplate::_IngredientSlot::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::isAppend +bool SharedDraftSchematicObjectTemplate::_IngredientSlot::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::isAppend -int SharedDraftSchematicObjectTemplate::_IngredientSlot::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::getListLength +int SharedDraftSchematicObjectTemplate::_IngredientSlot::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -599,30 +575,33 @@ int SharedDraftSchematicObjectTemplate::_IngredientSlot::getListLength(const cha * * @param file file to load from */ -void SharedDraftSchematicObjectTemplate::_IngredientSlot::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedDraftSchematicObjectTemplate::_IngredientSlot::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "name") == 0) - m_name.loadFromIff(file); - else if (strcmp(paramName, "hardpoint") == 0) - m_hardpoint.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - UNREF(file); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::load + switch (runtimeCrc(paramName)) { + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("hardpoint"): + m_hardpoint.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::load /** * Saves the template data to an iff file. @@ -630,36 +609,35 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedDraftSchematicObjectTemplate::_IngredientSlot::save(Iff &file) -{ -int count; +void SharedDraftSchematicObjectTemplate::_IngredientSlot::save(Iff &file) { + int count; - file.insertForm(_IngredientSlot_tag); + file.insertForm(_IngredientSlot_tag); - int paramCount = 0; + int paramCount = 0; - // save name - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("name"); - m_name.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save hardpoint - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("hardpoint"); - m_hardpoint.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save name + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("name"); + m_name.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save hardpoint + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("hardpoint"); + m_hardpoint.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // SharedDraftSchematicObjectTemplate::_IngredientSlot::save + file.exitForm(true); + UNREF(count); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::save //============================================================================= @@ -668,164 +646,153 @@ int count; /** * Class constructor. */ -SharedDraftSchematicObjectTemplate::_SchematicAttribute::_SchematicAttribute(const std::string & filename) - : TpfTemplate(filename) -{ -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::_SchematicAttribute +SharedDraftSchematicObjectTemplate::_SchematicAttribute::_SchematicAttribute(const std::string &filename) + : TpfTemplate(filename) { +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::_SchematicAttribute /** * Class destructor. */ -SharedDraftSchematicObjectTemplate::_SchematicAttribute::~_SchematicAttribute() -{ -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::~_SchematicAttribute +SharedDraftSchematicObjectTemplate::_SchematicAttribute::~_SchematicAttribute() { +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::~_SchematicAttribute /** * Static function used to register this template. */ -void SharedDraftSchematicObjectTemplate::_SchematicAttribute::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_SchematicAttribute_tag, create); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::registerMe +void SharedDraftSchematicObjectTemplate::_SchematicAttribute::registerMe(void) { + ObjectTemplateList::registerTemplate(_SchematicAttribute_tag, create); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::registerMe /** * Creates a SharedDraftSchematicObjectTemplate::_SchematicAttribute template. * * @return a new instance of the template */ -ObjectTemplate * SharedDraftSchematicObjectTemplate::_SchematicAttribute::create(const std::string & filename) -{ - return new SharedDraftSchematicObjectTemplate::_SchematicAttribute(filename); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::create +ObjectTemplate *SharedDraftSchematicObjectTemplate::_SchematicAttribute::create(const std::string &filename) { + return new SharedDraftSchematicObjectTemplate::_SchematicAttribute(filename); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::create /** * Returns the template id. * * @return the template id */ -Tag SharedDraftSchematicObjectTemplate::_SchematicAttribute::getId(void) const -{ - return _SchematicAttribute_tag; -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::getId +Tag SharedDraftSchematicObjectTemplate::_SchematicAttribute::getId(void) const { + return _SchematicAttribute_tag; +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::getId -CompilerIntegerParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "value") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_value; - } - fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getCompilerIntegerParam +CompilerIntegerParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getCompilerIntegerParam(const char *name, bool deepCheck, + int index) { + if (strcmp(name, "value") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return nullptr; +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getCompilerIntegerParam -FloatParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getFloatParam +FloatParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getFloatParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getFloatParam -BoolParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getBoolParam +BoolParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getBoolParam -StringParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringParam +StringParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringParam -StringIdParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringIdParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "name") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_name; - } - fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); - } - else if (strcmp(name, "experiment") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_experiment; - } - fprintf(stderr, "trying to access single-parameter \"experiment\" as an array\n"); - } - else - return TpfTemplate::getStringIdParam(name, deepCheck, index); - return nullptr; -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringIdParam +StringIdParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringIdParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("name"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } + break; + case constcrc("experiment"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_experiment; + } + fprintf(stderr, "trying to access single-parameter \"experiment\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringIdParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringIdParam -VectorParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getVectorParam +VectorParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getVectorParam -DynamicVariableParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getDynamicVariableParam +DynamicVariableParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getDynamicVariableParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getDynamicVariableParam -StructParamOT * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStructParamOT +StructParamOT * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStructParamOT -TriggerVolumeParam * SharedDraftSchematicObjectTemplate::_SchematicAttribute::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getTriggerVolumeParam +TriggerVolumeParam * +SharedDraftSchematicObjectTemplate::_SchematicAttribute::getTriggerVolumeParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getTriggerVolumeParam -void SharedDraftSchematicObjectTemplate::_SchematicAttribute::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::initStructParamOT +void +SharedDraftSchematicObjectTemplate::_SchematicAttribute::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::initStructParamOT -void SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAsEmptyList +void SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAsEmptyList -void SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAppend +void SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::setAppend -bool SharedDraftSchematicObjectTemplate::_SchematicAttribute::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::isAppend +bool SharedDraftSchematicObjectTemplate::_SchematicAttribute::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::isAppend -int SharedDraftSchematicObjectTemplate::_SchematicAttribute::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::getListLength +int SharedDraftSchematicObjectTemplate::_SchematicAttribute::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -833,32 +800,36 @@ int SharedDraftSchematicObjectTemplate::_SchematicAttribute::getListLength(const * * @param file file to load from */ -void SharedDraftSchematicObjectTemplate::_SchematicAttribute::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedDraftSchematicObjectTemplate::_SchematicAttribute::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "name") == 0) - m_name.loadFromIff(file); - else if (strcmp(paramName, "experiment") == 0) - m_experiment.loadFromIff(file); - else if (strcmp(paramName, "value") == 0) - m_value.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - UNREF(file); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::load + switch (runtimeCrc(paramName)) { + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("experiment"): + m_experiment.loadFromIff(file); + break; + case constcrc("value"): + m_value.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::load /** * Saves the template data to an iff file. @@ -866,41 +837,40 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedDraftSchematicObjectTemplate::_SchematicAttribute::save(Iff &file) -{ -int count; +void SharedDraftSchematicObjectTemplate::_SchematicAttribute::save(Iff &file) { + int count; - file.insertForm(_SchematicAttribute_tag); + file.insertForm(_SchematicAttribute_tag); - int paramCount = 0; + int paramCount = 0; - // save name - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("name"); - m_name.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save experiment - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("experiment"); - m_experiment.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save value - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("value"); - m_value.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save name + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("name"); + m_name.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save experiment + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("experiment"); + m_experiment.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save value + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("value"); + m_value.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::save + file.exitForm(true); + UNREF(count); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp index 1961d665..455de2ff 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp @@ -19,63 +19,58 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -SharedObjectTemplate::SharedObjectTemplate(const std::string & filename) +SharedObjectTemplate::SharedObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : TpfTemplate(filename) + : TpfTemplate(filename) //@END TFD INIT { -} // SharedObjectTemplate::SharedObjectTemplate +} // SharedObjectTemplate::SharedObjectTemplate /** * Class destructor. */ -SharedObjectTemplate::~SharedObjectTemplate() -{ +SharedObjectTemplate::~SharedObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // SharedObjectTemplate::~SharedObjectTemplate +} // SharedObjectTemplate::~SharedObjectTemplate /** * Static function used to register this template. */ -void SharedObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(SharedObjectTemplate_tag, create); -} // SharedObjectTemplate::registerMe +void SharedObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(SharedObjectTemplate_tag, create); +} // SharedObjectTemplate::registerMe /** * Creates a SharedObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * SharedObjectTemplate::create(const std::string & filename) -{ - return new SharedObjectTemplate(filename); -} // SharedObjectTemplate::create +ObjectTemplate *SharedObjectTemplate::create(const std::string &filename) { + return new SharedObjectTemplate(filename); +} // SharedObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag SharedObjectTemplate::getId(void) const -{ - return SharedObjectTemplate_tag; -} // SharedObjectTemplate::getId +Tag SharedObjectTemplate::getId(void) const { + return SharedObjectTemplate_tag; +} // SharedObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag SharedObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag SharedObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // SharedObjectTemplate::getTemplateVersion /** @@ -83,407 +78,363 @@ Tag SharedObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag SharedObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const SharedObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag SharedObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const SharedObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // SharedObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * SharedObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "containerType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_containerType; - } - fprintf(stderr, "trying to access single-parameter \"containerType\" as an array\n"); - } - else if (strcmp(name, "containerVolumeLimit") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_containerVolumeLimit; - } - fprintf(stderr, "trying to access single-parameter \"containerVolumeLimit\" as an array\n"); - } - else if (strcmp(name, "gameObjectType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_gameObjectType; - } - fprintf(stderr, "trying to access single-parameter \"gameObjectType\" as an array\n"); - } - else if (strcmp(name, "surfaceType") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_surfaceType; - } - fprintf(stderr, "trying to access single-parameter \"surfaceType\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //SharedObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam *SharedObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("containerType"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_containerType; + } + fprintf(stderr, "trying to access single-parameter \"containerType\" as an array\n"); + } + break; + case constcrc("containerVolumeLimit"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_containerVolumeLimit; + } + fprintf(stderr, "trying to access single-parameter \"containerVolumeLimit\" as an array\n"); + } + break; + case constcrc("gameObjectType"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_gameObjectType; + } + fprintf(stderr, "trying to access single-parameter \"gameObjectType\" as an array\n"); + } + break; + case constcrc("surfaceType"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_surfaceType; + } + fprintf(stderr, "trying to access single-parameter \"surfaceType\" as an array\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedObjectTemplate::getCompilerIntegerParam -FloatParam * SharedObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "scale") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_scale; - } - fprintf(stderr, "trying to access single-parameter \"scale\" as an array\n"); - } - else if (strcmp(name, "scaleThresholdBeforeExtentTest") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_scaleThresholdBeforeExtentTest; - } - fprintf(stderr, "trying to access single-parameter \"scaleThresholdBeforeExtentTest\" as an array\n"); - } - else if (strcmp(name, "clearFloraRadius") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_clearFloraRadius; - } - fprintf(stderr, "trying to access single-parameter \"clearFloraRadius\" as an array\n"); - } - else if (strcmp(name, "noBuildRadius") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_noBuildRadius; - } - fprintf(stderr, "trying to access single-parameter \"noBuildRadius\" as an array\n"); - } - else if (strcmp(name, "locationReservationRadius") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_locationReservationRadius; - } - fprintf(stderr, "trying to access single-parameter \"locationReservationRadius\" as an array\n"); - } - else - return TpfTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //SharedObjectTemplate::getFloatParam +FloatParam *SharedObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("scale"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_scale; + } + fprintf(stderr, "trying to access single-parameter \"scale\" as an array\n"); + } + break; + case constcrc("scaleThresholdBeforeExtentTest"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_scaleThresholdBeforeExtentTest; + } + fprintf(stderr, "trying to access single-parameter \"scaleThresholdBeforeExtentTest\" as an array\n"); + } + break; + case constcrc("clearFloraRadius"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_clearFloraRadius; + } + fprintf(stderr, "trying to access single-parameter \"clearFloraRadius\" as an array\n"); + } + break; + case constcrc("noBuildRadius"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_noBuildRadius; + } + fprintf(stderr, "trying to access single-parameter \"noBuildRadius\" as an array\n"); + } + break; + case constcrc("locationReservationRadius"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_locationReservationRadius; + } + fprintf(stderr, "trying to access single-parameter \"locationReservationRadius\" as an array\n"); + } + break; + default: + return TpfTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedObjectTemplate::getFloatParam -BoolParam * SharedObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "snapToTerrain") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_snapToTerrain; - } - fprintf(stderr, "trying to access single-parameter \"snapToTerrain\" as an array\n"); - } - else if (strcmp(name, "sendToClient") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_sendToClient; - } - fprintf(stderr, "trying to access single-parameter \"sendToClient\" as an array\n"); - } - else if (strcmp(name, "onlyVisibleInTools") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_onlyVisibleInTools; - } - fprintf(stderr, "trying to access single-parameter \"onlyVisibleInTools\" as an array\n"); - } - else if (strcmp(name, "forceNoCollision") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_forceNoCollision; - } - fprintf(stderr, "trying to access single-parameter \"forceNoCollision\" as an array\n"); - } - else - return TpfTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //SharedObjectTemplate::getBoolParam +BoolParam *SharedObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("snapToTerrain"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_snapToTerrain; + } + fprintf(stderr, "trying to access single-parameter \"snapToTerrain\" as an array\n"); + } + break; + case constcrc("sendToClient"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_sendToClient; + } + fprintf(stderr, "trying to access single-parameter \"sendToClient\" as an array\n"); + } + break; + case constcrc("onlyVisibleInTools"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_onlyVisibleInTools; + } + fprintf(stderr, "trying to access single-parameter \"onlyVisibleInTools\" as an array\n"); + } + break; + case constcrc("forceNoCollision"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_forceNoCollision; + } + fprintf(stderr, "trying to access single-parameter \"forceNoCollision\" as an array\n"); + } + break; + default: + return TpfTemplate::getBoolParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedObjectTemplate::getBoolParam -StringParam * SharedObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "tintPalette") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_tintPalette; - } - fprintf(stderr, "trying to access single-parameter \"tintPalette\" as an array\n"); - } - else if (strcmp(name, "slotDescriptorFilename") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_slotDescriptorFilename; - } - fprintf(stderr, "trying to access single-parameter \"slotDescriptorFilename\" as an array\n"); - } - else if (strcmp(name, "arrangementDescriptorFilename") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_arrangementDescriptorFilename; - } - fprintf(stderr, "trying to access single-parameter \"arrangementDescriptorFilename\" as an array\n"); - } - else if (strcmp(name, "appearanceFilename") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_appearanceFilename; - } - fprintf(stderr, "trying to access single-parameter \"appearanceFilename\" as an array\n"); - } - else if (strcmp(name, "portalLayoutFilename") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_portalLayoutFilename; - } - fprintf(stderr, "trying to access single-parameter \"portalLayoutFilename\" as an array\n"); - } - else if (strcmp(name, "clientDataFile") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_clientDataFile; - } - fprintf(stderr, "trying to access single-parameter \"clientDataFile\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedObjectTemplate::getStringParam +StringParam *SharedObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("tintPalette"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_tintPalette; + } + fprintf(stderr, "trying to access single-parameter \"tintPalette\" as an array\n"); + } + break; + case constcrc("slotDescriptorFilename"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_slotDescriptorFilename; + } + fprintf(stderr, "trying to access single-parameter \"slotDescriptorFilename\" as an array\n"); + } + break; + case constcrc("arrangementDescriptorFilename"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_arrangementDescriptorFilename; + } + fprintf(stderr, "trying to access single-parameter \"arrangementDescriptorFilename\" as an array\n"); + } + break; + case constcrc("appearanceFilename"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_appearanceFilename; + } + fprintf(stderr, "trying to access single-parameter \"appearanceFilename\" as an array\n"); + } + break; + case constcrc("portalLayoutFilename"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_portalLayoutFilename; + } + fprintf(stderr, "trying to access single-parameter \"portalLayoutFilename\" as an array\n"); + } + break; + case constcrc("clientDataFile"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_clientDataFile; + } + fprintf(stderr, "trying to access single-parameter \"clientDataFile\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedObjectTemplate::getStringParam -StringIdParam * SharedObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "objectName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_objectName; - } - fprintf(stderr, "trying to access single-parameter \"objectName\" as an array\n"); - } - else if (strcmp(name, "detailedDescription") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_detailedDescription; - } - fprintf(stderr, "trying to access single-parameter \"detailedDescription\" as an array\n"); - } - else if (strcmp(name, "lookAtText") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return nullptr; - } - return &m_lookAtText; - } - fprintf(stderr, "trying to access single-parameter \"lookAtText\" as an array\n"); - } - else - return TpfTemplate::getStringIdParam(name, deepCheck, index); - return nullptr; -} //SharedObjectTemplate::getStringIdParam +StringIdParam *SharedObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("objectName"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_objectName; + } + fprintf(stderr, "trying to access single-parameter \"objectName\" as an array\n"); + } + break; + case constcrc("detailedDescription"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_detailedDescription; + } + fprintf(stderr, "trying to access single-parameter \"detailedDescription\" as an array\n"); + } + break; + case constcrc("lookAtText"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return nullptr; + } + return &m_lookAtText; + } + fprintf(stderr, "trying to access single-parameter \"lookAtText\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringIdParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedObjectTemplate::getStringIdParam -VectorParam * SharedObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //SharedObjectTemplate::getVectorParam +VectorParam *SharedObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedObjectTemplate::getVectorParam -DynamicVariableParam * SharedObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedObjectTemplate::getDynamicVariableParam +DynamicVariableParam *SharedObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedObjectTemplate::getDynamicVariableParam -StructParamOT * SharedObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //SharedObjectTemplate::getStructParamOT +StructParamOT *SharedObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedObjectTemplate::getStructParamOT -TriggerVolumeParam * SharedObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *SharedObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedObjectTemplate::getTriggerVolumeParam -void SharedObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // SharedObjectTemplate::initStructParamOT +void SharedObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedObjectTemplate::initStructParamOT -void SharedObjectTemplate::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // SharedObjectTemplate::setAsEmptyList +void SharedObjectTemplate::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // SharedObjectTemplate::setAsEmptyList -void SharedObjectTemplate::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // SharedObjectTemplate::setAppend +void SharedObjectTemplate::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // SharedObjectTemplate::setAppend -bool SharedObjectTemplate::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // SharedObjectTemplate::isAppend +bool SharedObjectTemplate::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // SharedObjectTemplate::isAppend -int SharedObjectTemplate::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // SharedObjectTemplate::getListLength +int SharedObjectTemplate::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // SharedObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -491,106 +442,125 @@ int SharedObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void SharedObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != SharedObjectTemplate_tag) - { - TpfTemplate::load(file); - return; - } + if (file.getCurrentName() != SharedObjectTemplate_tag) { + TpfTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,1,0)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 1, 0)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "objectName") == 0) - m_objectName.loadFromIff(file); - else if (strcmp(paramName, "detailedDescription") == 0) - m_detailedDescription.loadFromIff(file); - else if (strcmp(paramName, "lookAtText") == 0) - m_lookAtText.loadFromIff(file); - else if (strcmp(paramName, "snapToTerrain") == 0) - m_snapToTerrain.loadFromIff(file); - else if (strcmp(paramName, "containerType") == 0) - m_containerType.loadFromIff(file); - else if (strcmp(paramName, "containerVolumeLimit") == 0) - m_containerVolumeLimit.loadFromIff(file); - else if (strcmp(paramName, "tintPalette") == 0) - m_tintPalette.loadFromIff(file); - else if (strcmp(paramName, "slotDescriptorFilename") == 0) - m_slotDescriptorFilename.loadFromIff(file); - else if (strcmp(paramName, "arrangementDescriptorFilename") == 0) - m_arrangementDescriptorFilename.loadFromIff(file); - else if (strcmp(paramName, "appearanceFilename") == 0) - m_appearanceFilename.loadFromIff(file); - else if (strcmp(paramName, "portalLayoutFilename") == 0) - m_portalLayoutFilename.loadFromIff(file); - else if (strcmp(paramName, "clientDataFile") == 0) - m_clientDataFile.loadFromIff(file); - else if (strcmp(paramName, "scale") == 0) - m_scale.loadFromIff(file); - else if (strcmp(paramName, "gameObjectType") == 0) - m_gameObjectType.loadFromIff(file); - else if (strcmp(paramName, "sendToClient") == 0) - m_sendToClient.loadFromIff(file); - else if (strcmp(paramName, "scaleThresholdBeforeExtentTest") == 0) - m_scaleThresholdBeforeExtentTest.loadFromIff(file); - else if (strcmp(paramName, "clearFloraRadius") == 0) - m_clearFloraRadius.loadFromIff(file); - else if (strcmp(paramName, "surfaceType") == 0) - m_surfaceType.loadFromIff(file); - else if (strcmp(paramName, "noBuildRadius") == 0) - m_noBuildRadius.loadFromIff(file); - else if (strcmp(paramName, "onlyVisibleInTools") == 0) - m_onlyVisibleInTools.loadFromIff(file); - else if (strcmp(paramName, "locationReservationRadius") == 0) - m_locationReservationRadius.loadFromIff(file); - else if (strcmp(paramName, "forceNoCollision") == 0) - m_forceNoCollision.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - TpfTemplate::load(file); - file.exitForm(); - return; -} // SharedObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("objectName"): + m_objectName.loadFromIff(file); + break; + case constcrc("detailedDescription"): + m_detailedDescription.loadFromIff(file); + break; + case constcrc("lookAtText"): + m_lookAtText.loadFromIff(file); + break; + case constcrc("snapToTerrain"): + m_snapToTerrain.loadFromIff(file); + break; + case constcrc("containerType"): + m_containerType.loadFromIff(file); + break; + case constcrc("containerVolumeLimit"): + m_containerVolumeLimit.loadFromIff(file); + break; + case constcrc("tintPalette"): + m_tintPalette.loadFromIff(file); + break; + case constcrc("slotDescriptorFilename"): + m_slotDescriptorFilename.loadFromIff(file); + break; + case constcrc("arrangementDescriptorFilename"): + m_arrangementDescriptorFilename.loadFromIff(file); + break; + case constcrc("appearanceFilename"): + m_appearanceFilename.loadFromIff(file); + break; + case constcrc("portalLayoutFilename"): + m_portalLayoutFilename.loadFromIff(file); + break; + case constcrc("clientDataFile"): + m_clientDataFile.loadFromIff(file); + break; + case constcrc("scale"): + m_scale.loadFromIff(file); + break; + case constcrc("gameObjectType"): + m_gameObjectType.loadFromIff(file); + break; + case constcrc("sendToClient"): + m_sendToClient.loadFromIff(file); + break; + case constcrc("scaleThresholdBeforeExtentTest"): + m_scaleThresholdBeforeExtentTest.loadFromIff(file); + break; + case constcrc("clearFloraRadius"): + m_clearFloraRadius.loadFromIff(file); + break; + case constcrc("surfaceType"): + m_surfaceType.loadFromIff(file); + break; + case constcrc("noBuildRadius"): + m_noBuildRadius.loadFromIff(file); + break; + case constcrc("onlyVisibleInTools"): + m_onlyVisibleInTools.loadFromIff(file); + break; + case constcrc("locationReservationRadius"): + m_locationReservationRadius.loadFromIff(file); + break; + case constcrc("forceNoCollision"): + m_forceNoCollision.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // SharedObjectTemplate::load /** * Saves the template data to an iff file. @@ -598,167 +568,165 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedObjectTemplate::save(Iff &file) -{ -int count; +void SharedObjectTemplate::save(Iff &file) { + int count; - file.insertForm(SharedObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,1,0)); - file.allowNonlinearFunctions(); + file.insertForm(SharedObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 1, 0)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save objectName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("objectName"); - m_objectName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save detailedDescription - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("detailedDescription"); - m_detailedDescription.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save lookAtText - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("lookAtText"); - m_lookAtText.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save snapToTerrain - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("snapToTerrain"); - m_snapToTerrain.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save containerType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("containerType"); - m_containerType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save containerVolumeLimit - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("containerVolumeLimit"); - m_containerVolumeLimit.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save tintPalette - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("tintPalette"); - m_tintPalette.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save slotDescriptorFilename - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("slotDescriptorFilename"); - m_slotDescriptorFilename.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save arrangementDescriptorFilename - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("arrangementDescriptorFilename"); - m_arrangementDescriptorFilename.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save appearanceFilename - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("appearanceFilename"); - m_appearanceFilename.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save portalLayoutFilename - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("portalLayoutFilename"); - m_portalLayoutFilename.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save clientDataFile - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("clientDataFile"); - m_clientDataFile.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save scale - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("scale"); - m_scale.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save gameObjectType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("gameObjectType"); - m_gameObjectType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save sendToClient - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("sendToClient"); - m_sendToClient.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save scaleThresholdBeforeExtentTest - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("scaleThresholdBeforeExtentTest"); - m_scaleThresholdBeforeExtentTest.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save clearFloraRadius - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("clearFloraRadius"); - m_clearFloraRadius.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save surfaceType - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("surfaceType"); - m_surfaceType.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save noBuildRadius - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("noBuildRadius"); - m_noBuildRadius.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save onlyVisibleInTools - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("onlyVisibleInTools"); - m_onlyVisibleInTools.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save locationReservationRadius - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("locationReservationRadius"); - m_locationReservationRadius.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save forceNoCollision - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("forceNoCollision"); - m_forceNoCollision.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save objectName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("objectName"); + m_objectName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save detailedDescription + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("detailedDescription"); + m_detailedDescription.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save lookAtText + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("lookAtText"); + m_lookAtText.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save snapToTerrain + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("snapToTerrain"); + m_snapToTerrain.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save containerType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("containerType"); + m_containerType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save containerVolumeLimit + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("containerVolumeLimit"); + m_containerVolumeLimit.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save tintPalette + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("tintPalette"); + m_tintPalette.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save slotDescriptorFilename + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("slotDescriptorFilename"); + m_slotDescriptorFilename.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save arrangementDescriptorFilename + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("arrangementDescriptorFilename"); + m_arrangementDescriptorFilename.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save appearanceFilename + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("appearanceFilename"); + m_appearanceFilename.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save portalLayoutFilename + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("portalLayoutFilename"); + m_portalLayoutFilename.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save clientDataFile + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("clientDataFile"); + m_clientDataFile.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save scale + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("scale"); + m_scale.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save gameObjectType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("gameObjectType"); + m_gameObjectType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save sendToClient + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("sendToClient"); + m_sendToClient.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save scaleThresholdBeforeExtentTest + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("scaleThresholdBeforeExtentTest"); + m_scaleThresholdBeforeExtentTest.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save clearFloraRadius + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("clearFloraRadius"); + m_clearFloraRadius.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save surfaceType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("surfaceType"); + m_surfaceType.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save noBuildRadius + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("noBuildRadius"); + m_noBuildRadius.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save onlyVisibleInTools + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("onlyVisibleInTools"); + m_onlyVisibleInTools.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save locationReservationRadius + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("locationReservationRadius"); + m_locationReservationRadius.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save forceNoCollision + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("forceNoCollision"); + m_forceNoCollision.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - TpfTemplate::save(file); - file.exitForm(); - UNREF(count); -} // SharedObjectTemplate::save + file.exitForm(true); + TpfTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedObjectTemplate::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp index 9ef7b561..dca87b90 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp @@ -19,7 +19,7 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. @@ -281,14 +281,21 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "cockpitFilename") == 0) - m_cockpitFilename.loadFromIff(file); - else if (strcmp(paramName, "hasWings") == 0) - m_hasWings.loadFromIff(file); - else if (strcmp(paramName, "playerControlled") == 0) - m_playerControlled.loadFromIff(file); - else if (strcmp(paramName, "interiorLayoutFileName") == 0) - m_interiorLayoutFileName.loadFromIff(file); + + switch(runtimeCrc(paramName)) { + case constcrc("cockpitFilename"): + m_cockpitFilename.loadFromIff(file); + break; + case constcrc("hasWings"): + m_hasWings.loadFromIff(file); + break; + case constcrc("playerControlled"): + m_playerControlled.loadFromIff(file); + break; + case constcrc("interiorLayoutFileName"): + m_interiorLayoutFileName.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp index 62846274..53c923fa 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp @@ -19,129 +19,115 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -SharedTangibleObjectTemplate::SharedTangibleObjectTemplate(const std::string & filename) +SharedTangibleObjectTemplate::SharedTangibleObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : SharedObjectTemplate(filename) - ,m_paletteColorCustomizationVariablesLoaded(false) - ,m_paletteColorCustomizationVariablesAppend(false) - ,m_rangedIntCustomizationVariablesLoaded(false) - ,m_rangedIntCustomizationVariablesAppend(false) - ,m_constStringCustomizationVariablesLoaded(false) - ,m_constStringCustomizationVariablesAppend(false) - ,m_socketDestinationsLoaded(false) - ,m_socketDestinationsAppend(false) - ,m_certificationsRequiredLoaded(false) - ,m_certificationsRequiredAppend(false) - ,m_customizationVariableMappingLoaded(false) - ,m_customizationVariableMappingAppend(false) + : SharedObjectTemplate(filename), m_paletteColorCustomizationVariablesLoaded(false), + m_paletteColorCustomizationVariablesAppend(false), m_rangedIntCustomizationVariablesLoaded(false), + m_rangedIntCustomizationVariablesAppend(false), m_constStringCustomizationVariablesLoaded(false), + m_constStringCustomizationVariablesAppend(false), m_socketDestinationsLoaded(false), + m_socketDestinationsAppend(false), m_certificationsRequiredLoaded(false), + m_certificationsRequiredAppend(false), m_customizationVariableMappingLoaded(false), + m_customizationVariableMappingAppend(false) //@END TFD INIT { -} // SharedTangibleObjectTemplate::SharedTangibleObjectTemplate +} // SharedTangibleObjectTemplate::SharedTangibleObjectTemplate /** * Class destructor. */ -SharedTangibleObjectTemplate::~SharedTangibleObjectTemplate() -{ +SharedTangibleObjectTemplate::~SharedTangibleObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_paletteColorCustomizationVariables.begin(); iter != m_paletteColorCustomizationVariables.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_paletteColorCustomizationVariables.clear(); - } - { - std::vector::iterator iter; - for (iter = m_rangedIntCustomizationVariables.begin(); iter != m_rangedIntCustomizationVariables.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_rangedIntCustomizationVariables.clear(); - } - { - std::vector::iterator iter; - for (iter = m_constStringCustomizationVariables.begin(); iter != m_constStringCustomizationVariables.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_constStringCustomizationVariables.clear(); - } - { - std::vector::iterator iter; - for (iter = m_socketDestinations.begin(); iter != m_socketDestinations.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_socketDestinations.clear(); - } - { - std::vector::iterator iter; - for (iter = m_certificationsRequired.begin(); iter != m_certificationsRequired.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_certificationsRequired.clear(); - } - { - std::vector::iterator iter; - for (iter = m_customizationVariableMapping.begin(); iter != m_customizationVariableMapping.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_customizationVariableMapping.clear(); - } + { + std::vector::iterator iter; + for (iter = m_paletteColorCustomizationVariables.begin(); + iter != m_paletteColorCustomizationVariables.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_paletteColorCustomizationVariables.clear(); + } + { + std::vector::iterator iter; + for (iter = m_rangedIntCustomizationVariables.begin(); + iter != m_rangedIntCustomizationVariables.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_rangedIntCustomizationVariables.clear(); + } + { + std::vector::iterator iter; + for (iter = m_constStringCustomizationVariables.begin(); + iter != m_constStringCustomizationVariables.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_constStringCustomizationVariables.clear(); + } + { + std::vector::iterator iter; + for (iter = m_socketDestinations.begin(); iter != m_socketDestinations.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_socketDestinations.clear(); + } + { + std::vector::iterator iter; + for (iter = m_certificationsRequired.begin(); iter != m_certificationsRequired.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_certificationsRequired.clear(); + } + { + std::vector::iterator iter; + for (iter = m_customizationVariableMapping.begin(); iter != m_customizationVariableMapping.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_customizationVariableMapping.clear(); + } //@END TFD CLEANUP -} // SharedTangibleObjectTemplate::~SharedTangibleObjectTemplate +} // SharedTangibleObjectTemplate::~SharedTangibleObjectTemplate /** * Static function used to register this template. */ -void SharedTangibleObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(SharedTangibleObjectTemplate_tag, create); -} // SharedTangibleObjectTemplate::registerMe +void SharedTangibleObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(SharedTangibleObjectTemplate_tag, create); +} // SharedTangibleObjectTemplate::registerMe /** * Creates a SharedTangibleObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * SharedTangibleObjectTemplate::create(const std::string & filename) -{ - return new SharedTangibleObjectTemplate(filename); -} // SharedTangibleObjectTemplate::create +ObjectTemplate *SharedTangibleObjectTemplate::create(const std::string &filename) { + return new SharedTangibleObjectTemplate(filename); +} // SharedTangibleObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag SharedTangibleObjectTemplate::getId(void) const -{ - return SharedTangibleObjectTemplate_tag; -} // SharedTangibleObjectTemplate::getId +Tag SharedTangibleObjectTemplate::getId(void) const { + return SharedTangibleObjectTemplate_tag; +} // SharedTangibleObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag SharedTangibleObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag SharedTangibleObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // SharedTangibleObjectTemplate::getTemplateVersion /** @@ -149,316 +135,334 @@ Tag SharedTangibleObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag SharedTangibleObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const SharedTangibleObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag SharedTangibleObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const SharedTangibleObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // SharedTangibleObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * SharedTangibleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "socketDestinations") == 0) - { - if (index >= 0 && index < static_cast(m_socketDestinations.size())) - return m_socketDestinations[index]; - if (index == static_cast(m_socketDestinations.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_socketDestinations.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"socketDestinations\" out of bounds\n"); - } - else if (strcmp(name, "clientVisabilityFlag") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_clientVisabilityFlag; - } - fprintf(stderr, "trying to access single-parameter \"clientVisabilityFlag\" as an array\n"); - } - else - return SharedObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +SharedTangibleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("socketDestinations"): { + if (index >= 0 && index < static_cast(m_socketDestinations.size())) + return m_socketDestinations[index]; + if (index == static_cast(m_socketDestinations.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_socketDestinations.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"socketDestinations\" out of bounds\n"); + } + break; + case constcrc("clientVisabilityFlag"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_clientVisabilityFlag; + } + fprintf(stderr, "trying to access single-parameter \"clientVisabilityFlag\" as an array\n"); + } + break; + default: + return SharedObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::getCompilerIntegerParam -FloatParam * SharedTangibleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - return SharedObjectTemplate::getFloatParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::getFloatParam +FloatParam *SharedTangibleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + return SharedObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::getFloatParam -BoolParam * SharedTangibleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "useStructureFootprintOutline") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_useStructureFootprintOutline; - } - fprintf(stderr, "trying to access single-parameter \"useStructureFootprintOutline\" as an array\n"); - } - else if (strcmp(name, "targetable") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return nullptr; - } - return &m_targetable; - } - fprintf(stderr, "trying to access single-parameter \"targetable\" as an array\n"); - } - else - return SharedObjectTemplate::getBoolParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::getBoolParam +BoolParam *SharedTangibleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("useStructureFootprintOutline"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_useStructureFootprintOutline; + } + fprintf(stderr, "trying to access single-parameter \"useStructureFootprintOutline\" as an array\n"); + } + break; + case constcrc("targetable"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return nullptr; + } + return &m_targetable; + } + fprintf(stderr, "trying to access single-parameter \"targetable\" as an array\n"); + } + break; + default: + return SharedObjectTemplate::getBoolParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::getBoolParam -StringParam * SharedTangibleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "structureFootprintFileName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_structureFootprintFileName; - } - fprintf(stderr, "trying to access single-parameter \"structureFootprintFileName\" as an array\n"); - } - else if (strcmp(name, "certificationsRequired") == 0) - { - if (index >= 0 && index < static_cast(m_certificationsRequired.size())) - return m_certificationsRequired[index]; - if (index == static_cast(m_certificationsRequired.size())) - { - StringParam *temp = new StringParam(); - m_certificationsRequired.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"certificationsRequired\" out of bounds\n"); - } - else - return SharedObjectTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::getStringParam +StringParam *SharedTangibleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("structureFootprintFileName"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_structureFootprintFileName; + } + fprintf(stderr, "trying to access single-parameter \"structureFootprintFileName\" as an array\n"); + } + break; + case constcrc("certificationsRequired"): { + if (index >= 0 && index < static_cast(m_certificationsRequired.size())) + return m_certificationsRequired[index]; + if (index == static_cast(m_certificationsRequired.size())) { + StringParam *temp = new StringParam(); + m_certificationsRequired.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"certificationsRequired\" out of bounds\n"); + } + break; + default: + return SharedObjectTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::getStringParam -StringIdParam * SharedTangibleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return SharedObjectTemplate::getStringIdParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::getStringIdParam +StringIdParam *SharedTangibleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return SharedObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::getStringIdParam -VectorParam * SharedTangibleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return SharedObjectTemplate::getVectorParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::getVectorParam +VectorParam *SharedTangibleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return SharedObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::getVectorParam -DynamicVariableParam * SharedTangibleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return SharedObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +SharedTangibleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return SharedObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::getDynamicVariableParam -StructParamOT * SharedTangibleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "paletteColorCustomizationVariables") == 0) - { - if (index >= 0 && index < static_cast(m_paletteColorCustomizationVariables.size())) - return m_paletteColorCustomizationVariables[index]; - if (index == static_cast(m_paletteColorCustomizationVariables.size())) - { - StructParamOT *temp = new StructParamOT(); - m_paletteColorCustomizationVariables.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"paletteColorCustomizationVariables\" out of bounds\n"); - } - else if (strcmp(name, "rangedIntCustomizationVariables") == 0) - { - if (index >= 0 && index < static_cast(m_rangedIntCustomizationVariables.size())) - return m_rangedIntCustomizationVariables[index]; - if (index == static_cast(m_rangedIntCustomizationVariables.size())) - { - StructParamOT *temp = new StructParamOT(); - m_rangedIntCustomizationVariables.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"rangedIntCustomizationVariables\" out of bounds\n"); - } - else if (strcmp(name, "constStringCustomizationVariables") == 0) - { - if (index >= 0 && index < static_cast(m_constStringCustomizationVariables.size())) - return m_constStringCustomizationVariables[index]; - if (index == static_cast(m_constStringCustomizationVariables.size())) - { - StructParamOT *temp = new StructParamOT(); - m_constStringCustomizationVariables.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"constStringCustomizationVariables\" out of bounds\n"); - } - else if (strcmp(name, "customizationVariableMapping") == 0) - { - if (index >= 0 && index < static_cast(m_customizationVariableMapping.size())) - return m_customizationVariableMapping[index]; - if (index == static_cast(m_customizationVariableMapping.size())) - { - StructParamOT *temp = new StructParamOT(); - m_customizationVariableMapping.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"customizationVariableMapping\" out of bounds\n"); - } - else - return SharedObjectTemplate::getStructParamOT(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::getStructParamOT +StructParamOT *SharedTangibleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("paletteColorCustomizationVariables"): { + if (index >= 0 && index < static_cast(m_paletteColorCustomizationVariables.size())) + return m_paletteColorCustomizationVariables[index]; + if (index == static_cast(m_paletteColorCustomizationVariables.size())) { + StructParamOT *temp = new StructParamOT(); + m_paletteColorCustomizationVariables.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"paletteColorCustomizationVariables\" out of bounds\n"); + } + break; + case constcrc("rangedIntCustomizationVariables"): { + if (index >= 0 && index < static_cast(m_rangedIntCustomizationVariables.size())) + return m_rangedIntCustomizationVariables[index]; + if (index == static_cast(m_rangedIntCustomizationVariables.size())) { + StructParamOT *temp = new StructParamOT(); + m_rangedIntCustomizationVariables.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"rangedIntCustomizationVariables\" out of bounds\n"); + } + break; + case constcrc("constStringCustomizationVariables"): { + if (index >= 0 && index < static_cast(m_constStringCustomizationVariables.size())) + return m_constStringCustomizationVariables[index]; + if (index == static_cast(m_constStringCustomizationVariables.size())) { + StructParamOT *temp = new StructParamOT(); + m_constStringCustomizationVariables.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"constStringCustomizationVariables\" out of bounds\n"); + } + break; + case constcrc("customizationVariableMapping"): { + if (index >= 0 && index < static_cast(m_customizationVariableMapping.size())) + return m_customizationVariableMapping[index]; + if (index == static_cast(m_customizationVariableMapping.size())) { + StructParamOT *temp = new StructParamOT(); + m_customizationVariableMapping.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"customizationVariableMapping\" out of bounds\n"); + } + break; + default: + return SharedObjectTemplate::getStructParamOT(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::getStructParamOT -TriggerVolumeParam * SharedTangibleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return SharedObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *SharedTangibleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return SharedObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::getTriggerVolumeParam -void SharedTangibleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "paletteColorCustomizationVariables") == 0) - param.setValue(new _PaletteColorCustomizationVariable("")); - else if (strcmp(name, "rangedIntCustomizationVariables") == 0) - param.setValue(new _RangedIntCustomizationVariable("")); - else if (strcmp(name, "constStringCustomizationVariables") == 0) - param.setValue(new _ConstStringCustomizationVariable("")); - else if (strcmp(name, "customizationVariableMapping") == 0) - param.setValue(new _CustomizationVariableMapping("")); - else - SharedObjectTemplate::initStructParamOT(param, name); -} // SharedTangibleObjectTemplate::initStructParamOT +void SharedTangibleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; -void SharedTangibleObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "paletteColorCustomizationVariables") == 0) - { - m_paletteColorCustomizationVariables.clear(); - m_paletteColorCustomizationVariablesLoaded = true; - } - else if (strcmp(name, "rangedIntCustomizationVariables") == 0) - { - m_rangedIntCustomizationVariables.clear(); - m_rangedIntCustomizationVariablesLoaded = true; - } - else if (strcmp(name, "constStringCustomizationVariables") == 0) - { - m_constStringCustomizationVariables.clear(); - m_constStringCustomizationVariablesLoaded = true; - } - else if (strcmp(name, "socketDestinations") == 0) - { - m_socketDestinations.clear(); - m_socketDestinationsLoaded = true; - } - else if (strcmp(name, "certificationsRequired") == 0) - { - m_certificationsRequired.clear(); - m_certificationsRequiredLoaded = true; - } - else if (strcmp(name, "customizationVariableMapping") == 0) - { - m_customizationVariableMapping.clear(); - m_customizationVariableMappingLoaded = true; - } - else - SharedObjectTemplate::setAsEmptyList(name); -} // SharedTangibleObjectTemplate::setAsEmptyList + switch (runtimeCrc(name)) { + case constcrc("paletteColorCustomizationVariables"): + param.setValue(new _PaletteColorCustomizationVariable("")); + break; + case constcrc("rangedIntCustomizationVariables"): + param.setValue(new _RangedIntCustomizationVariable("")); + break; + case constcrc("constStringCustomizationVariables"): + param.setValue(new _ConstStringCustomizationVariable("")); + break; + case constcrc("customizationVariableMapping"): + param.setValue(new _CustomizationVariableMapping("")); + break; + default: + SharedObjectTemplate::initStructParamOT(param, name); + break; + } +} // SharedTangibleObjectTemplate::initStructParamOT -void SharedTangibleObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "paletteColorCustomizationVariables") == 0) - m_paletteColorCustomizationVariablesAppend = true; - else if (strcmp(name, "rangedIntCustomizationVariables") == 0) - m_rangedIntCustomizationVariablesAppend = true; - else if (strcmp(name, "constStringCustomizationVariables") == 0) - m_constStringCustomizationVariablesAppend = true; - else if (strcmp(name, "socketDestinations") == 0) - m_socketDestinationsAppend = true; - else if (strcmp(name, "certificationsRequired") == 0) - m_certificationsRequiredAppend = true; - else if (strcmp(name, "customizationVariableMapping") == 0) - m_customizationVariableMappingAppend = true; - else - SharedObjectTemplate::setAppend(name); -} // SharedTangibleObjectTemplate::setAppend +void SharedTangibleObjectTemplate::setAsEmptyList(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("paletteColorCustomizationVariables"): { + m_paletteColorCustomizationVariables.clear(); + m_paletteColorCustomizationVariablesLoaded = true; + } + break; + case constcrc("rangedIntCustomizationVariables"): { + m_rangedIntCustomizationVariables.clear(); + m_rangedIntCustomizationVariablesLoaded = true; + } + break; + case constcrc("constStringCustomizationVariables"): { + m_constStringCustomizationVariables.clear(); + m_constStringCustomizationVariablesLoaded = true; + } + break; + case constcrc("socketDestinations"): { + m_socketDestinations.clear(); + m_socketDestinationsLoaded = true; + } + break; + case constcrc("certificationsRequired"): { + m_certificationsRequired.clear(); + m_certificationsRequiredLoaded = true; + } + break; + case constcrc("customizationVariableMapping"): { + m_customizationVariableMapping.clear(); + m_customizationVariableMappingLoaded = true; + } + break; + default: + SharedObjectTemplate::setAsEmptyList(name); + break; + } +} // SharedTangibleObjectTemplate::setAsEmptyList -bool SharedTangibleObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "paletteColorCustomizationVariables") == 0) - return m_paletteColorCustomizationVariablesAppend; - else if (strcmp(name, "rangedIntCustomizationVariables") == 0) - return m_rangedIntCustomizationVariablesAppend; - else if (strcmp(name, "constStringCustomizationVariables") == 0) - return m_constStringCustomizationVariablesAppend; - else if (strcmp(name, "socketDestinations") == 0) - return m_socketDestinationsAppend; - else if (strcmp(name, "certificationsRequired") == 0) - return m_certificationsRequiredAppend; - else if (strcmp(name, "customizationVariableMapping") == 0) - return m_customizationVariableMappingAppend; - else - return SharedObjectTemplate::isAppend(name); -} // SharedTangibleObjectTemplate::isAppend +void SharedTangibleObjectTemplate::setAppend(const char *name) { + + switch (runtimeCrc(name)) { + case constcrc("paletteColorCustomizationVariables"): + m_paletteColorCustomizationVariablesAppend = true; + break; + case constcrc("rangedIntCustomizationVariables"): + m_rangedIntCustomizationVariablesAppend = true; + break; + case constcrc("constStringCustomizationVariables"): + m_constStringCustomizationVariablesAppend = true; + break; + case constcrc("socketDestinations"): + m_socketDestinationsAppend = true; + break; + case constcrc("certificationsRequired"): + m_certificationsRequiredAppend = true; + break; + case constcrc("customizationVariableMapping"): + m_customizationVariableMappingAppend = true; + break; + default: + SharedObjectTemplate::setAppend(name); + break; + } +} // SharedTangibleObjectTemplate::setAppend + +bool SharedTangibleObjectTemplate::isAppend(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("paletteColorCustomizationVariables"): + return m_paletteColorCustomizationVariablesAppend; + break; + case constcrc("rangedIntCustomizationVariables"): + return m_rangedIntCustomizationVariablesAppend; + break; + case constcrc("constStringCustomizationVariables"): + return m_constStringCustomizationVariablesAppend; + break; + case constcrc("socketDestinations"): + return m_socketDestinationsAppend; + break; + case constcrc("certificationsRequired"): + return m_certificationsRequiredAppend; + break; + case constcrc("customizationVariableMapping"): + return m_customizationVariableMappingAppend; + break; + default: + return SharedObjectTemplate::isAppend(name); + break; + } +} // SharedTangibleObjectTemplate::isAppend -int SharedTangibleObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "paletteColorCustomizationVariables") == 0) - { - return m_paletteColorCustomizationVariables.size(); - } - else if (strcmp(name, "rangedIntCustomizationVariables") == 0) - { - return m_rangedIntCustomizationVariables.size(); - } - else if (strcmp(name, "constStringCustomizationVariables") == 0) - { - return m_constStringCustomizationVariables.size(); - } - else if (strcmp(name, "socketDestinations") == 0) - { - return m_socketDestinations.size(); - } - else if (strcmp(name, "certificationsRequired") == 0) - { - return m_certificationsRequired.size(); - } - else if (strcmp(name, "customizationVariableMapping") == 0) - { - return m_customizationVariableMapping.size(); - } - else - return SharedObjectTemplate::getListLength(name); -} // SharedTangibleObjectTemplate::getListLength +int SharedTangibleObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("paletteColorCustomizationVariables"): { + return m_paletteColorCustomizationVariables.size(); + } + break; + case constcrc("rangedIntCustomizationVariables"): { + return m_rangedIntCustomizationVariables.size(); + } + break; + case constcrc("constStringCustomizationVariables"): { + return m_constStringCustomizationVariables.size(); + } + break; + case constcrc("socketDestinations"): { + return m_socketDestinations.size(); + } + break; + case constcrc("certificationsRequired"): { + return m_certificationsRequired.size(); + } + break; + case constcrc("customizationVariableMapping"): { + return m_customizationVariableMapping.size(); + } + break; + default: + return SharedObjectTemplate::getListLength(name); + break; + } +} // SharedTangibleObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -466,184 +470,176 @@ int SharedTangibleObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void SharedTangibleObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedTangibleObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != SharedTangibleObjectTemplate_tag) - { - SharedObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != SharedTangibleObjectTemplate_tag) { + SharedObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,1,0)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 1, 0)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "paletteColorCustomizationVariables") == 0) - { - std::vector::iterator iter; - for (iter = m_paletteColorCustomizationVariables.begin(); iter != m_paletteColorCustomizationVariables.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_paletteColorCustomizationVariables.clear(); - m_paletteColorCustomizationVariablesAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_paletteColorCustomizationVariables.push_back(newData); - } - m_paletteColorCustomizationVariablesLoaded = true; - } - else if (strcmp(paramName, "rangedIntCustomizationVariables") == 0) - { - std::vector::iterator iter; - for (iter = m_rangedIntCustomizationVariables.begin(); iter != m_rangedIntCustomizationVariables.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_rangedIntCustomizationVariables.clear(); - m_rangedIntCustomizationVariablesAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_rangedIntCustomizationVariables.push_back(newData); - } - m_rangedIntCustomizationVariablesLoaded = true; - } - else if (strcmp(paramName, "constStringCustomizationVariables") == 0) - { - std::vector::iterator iter; - for (iter = m_constStringCustomizationVariables.begin(); iter != m_constStringCustomizationVariables.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_constStringCustomizationVariables.clear(); - m_constStringCustomizationVariablesAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_constStringCustomizationVariables.push_back(newData); - } - m_constStringCustomizationVariablesLoaded = true; - } - else if (strcmp(paramName, "socketDestinations") == 0) - { - std::vector::iterator iter; - for (iter = m_socketDestinations.begin(); iter != m_socketDestinations.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_socketDestinations.clear(); - m_socketDestinationsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_socketDestinations.push_back(newData); - } - m_socketDestinationsLoaded = true; - } - else if (strcmp(paramName, "structureFootprintFileName") == 0) - m_structureFootprintFileName.loadFromIff(file); - else if (strcmp(paramName, "useStructureFootprintOutline") == 0) - m_useStructureFootprintOutline.loadFromIff(file); - else if (strcmp(paramName, "targetable") == 0) - m_targetable.loadFromIff(file); - else if (strcmp(paramName, "certificationsRequired") == 0) - { - std::vector::iterator iter; - for (iter = m_certificationsRequired.begin(); iter != m_certificationsRequired.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_certificationsRequired.clear(); - m_certificationsRequiredAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_certificationsRequired.push_back(newData); - } - m_certificationsRequiredLoaded = true; - } - else if (strcmp(paramName, "customizationVariableMapping") == 0) - { - std::vector::iterator iter; - for (iter = m_customizationVariableMapping.begin(); iter != m_customizationVariableMapping.end(); ++iter) - { - delete *iter; - *iter = nullptr; - } - m_customizationVariableMapping.clear(); - m_customizationVariableMappingAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_customizationVariableMapping.push_back(newData); - } - m_customizationVariableMappingLoaded = true; - } - else if (strcmp(paramName, "clientVisabilityFlag") == 0) - m_clientVisabilityFlag.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); + switch (runtimeCrc(paramName)) { + case constcrc("paletteColorCustomizationVariables"): { + std::vector::iterator iter; + for (iter = m_paletteColorCustomizationVariables.begin(); + iter != m_paletteColorCustomizationVariables.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_paletteColorCustomizationVariables.clear(); + m_paletteColorCustomizationVariablesAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_paletteColorCustomizationVariables.push_back(newData); + } + m_paletteColorCustomizationVariablesLoaded = true; + } + break; + case constcrc("rangedIntCustomizationVariables"): { + std::vector::iterator iter; + for (iter = m_rangedIntCustomizationVariables.begin(); + iter != m_rangedIntCustomizationVariables.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_rangedIntCustomizationVariables.clear(); + m_rangedIntCustomizationVariablesAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_rangedIntCustomizationVariables.push_back(newData); + } + m_rangedIntCustomizationVariablesLoaded = true; + } + break; + case constcrc("constStringCustomizationVariables"): { + std::vector::iterator iter; + for (iter = m_constStringCustomizationVariables.begin(); + iter != m_constStringCustomizationVariables.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_constStringCustomizationVariables.clear(); + m_constStringCustomizationVariablesAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_constStringCustomizationVariables.push_back(newData); + } + m_constStringCustomizationVariablesLoaded = true; + } + break; + case constcrc("socketDestinations"): { + std::vector::iterator iter; + for (iter = m_socketDestinations.begin(); iter != m_socketDestinations.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_socketDestinations.clear(); + m_socketDestinationsAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_socketDestinations.push_back(newData); + } + m_socketDestinationsLoaded = true; + } + break; + case constcrc("structureFootprintFileName"): + m_structureFootprintFileName.loadFromIff(file); + break; + case constcrc("useStructureFootprintOutline"): + m_useStructureFootprintOutline.loadFromIff(file); + break; + case constcrc("targetable"): + m_targetable.loadFromIff(file); + break; + case constcrc("certificationsRequired"): { + std::vector::iterator iter; + for (iter = m_certificationsRequired.begin(); iter != m_certificationsRequired.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_certificationsRequired.clear(); + m_certificationsRequiredAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_certificationsRequired.push_back(newData); + } + m_certificationsRequiredLoaded = true; + } + break; + case constcrc("customizationVariableMapping"): { + std::vector::iterator iter; + for (iter = m_customizationVariableMapping.begin(); + iter != m_customizationVariableMapping.end(); ++iter) { + delete *iter; + *iter = nullptr; + } + m_customizationVariableMapping.clear(); + m_customizationVariableMappingAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_customizationVariableMapping.push_back(newData); + } + m_customizationVariableMappingLoaded = true; + } + break; + case constcrc("clientVisabilityFlag"): + m_clientVisabilityFlag.loadFromIff(file); + break; + } + file.exitChunk(true); + } - file.exitForm(); - SharedObjectTemplate::load(file); - file.exitForm(); - return; -} // SharedTangibleObjectTemplate::load + file.exitForm(); + SharedObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedTangibleObjectTemplate::load /** * Saves the template data to an iff file. @@ -651,149 +647,153 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedTangibleObjectTemplate::save(Iff &file) -{ -int count; +void SharedTangibleObjectTemplate::save(Iff &file) { + int count; - file.insertForm(SharedTangibleObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,1,0)); - file.allowNonlinearFunctions(); + file.insertForm(SharedTangibleObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 1, 0)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - if (!m_paletteColorCustomizationVariablesLoaded) - { - // mark the list as empty and extending the base list - m_paletteColorCustomizationVariablesAppend = true; - } - // save paletteColorCustomizationVariables - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("paletteColorCustomizationVariables"); - file.insertChunkData(&m_paletteColorCustomizationVariablesAppend, sizeof(bool)); - count = m_paletteColorCustomizationVariables.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_paletteColorCustomizationVariables[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_rangedIntCustomizationVariablesLoaded) - { - // mark the list as empty and extending the base list - m_rangedIntCustomizationVariablesAppend = true; - } - // save rangedIntCustomizationVariables - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("rangedIntCustomizationVariables"); - file.insertChunkData(&m_rangedIntCustomizationVariablesAppend, sizeof(bool)); - count = m_rangedIntCustomizationVariables.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_rangedIntCustomizationVariables[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_constStringCustomizationVariablesLoaded) - { - // mark the list as empty and extending the base list - m_constStringCustomizationVariablesAppend = true; - } - // save constStringCustomizationVariables - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("constStringCustomizationVariables"); - file.insertChunkData(&m_constStringCustomizationVariablesAppend, sizeof(bool)); - count = m_constStringCustomizationVariables.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_constStringCustomizationVariables[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_socketDestinationsLoaded) - { - // mark the list as empty and extending the base list - m_socketDestinationsAppend = true; - } - // save socketDestinations - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("socketDestinations"); - file.insertChunkData(&m_socketDestinationsAppend, sizeof(bool)); - count = m_socketDestinations.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_socketDestinations[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save structureFootprintFileName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("structureFootprintFileName"); - m_structureFootprintFileName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save useStructureFootprintOutline - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("useStructureFootprintOutline"); - m_useStructureFootprintOutline.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save targetable - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("targetable"); - m_targetable.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_certificationsRequiredLoaded) - { - // mark the list as empty and extending the base list - m_certificationsRequiredAppend = true; - } - // save certificationsRequired - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("certificationsRequired"); - file.insertChunkData(&m_certificationsRequiredAppend, sizeof(bool)); - count = m_certificationsRequired.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_certificationsRequired[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_customizationVariableMappingLoaded) - { - // mark the list as empty and extending the base list - m_customizationVariableMappingAppend = true; - } - // save customizationVariableMapping - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("customizationVariableMapping"); - file.insertChunkData(&m_customizationVariableMappingAppend, sizeof(bool)); - count = m_customizationVariableMapping.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_customizationVariableMapping[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save clientVisabilityFlag - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("clientVisabilityFlag"); - m_clientVisabilityFlag.saveToIff(file); - file.exitChunk(); - ++paramCount; + if (!m_paletteColorCustomizationVariablesLoaded) { + // mark the list as empty and extending the base list + m_paletteColorCustomizationVariablesAppend = true; + } + // save paletteColorCustomizationVariables + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("paletteColorCustomizationVariables"); + file.insertChunkData(&m_paletteColorCustomizationVariablesAppend, sizeof(bool)); + count = m_paletteColorCustomizationVariables.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_paletteColorCustomizationVariables[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_rangedIntCustomizationVariablesLoaded) { + // mark the list as empty and extending the base list + m_rangedIntCustomizationVariablesAppend = true; + } + // save rangedIntCustomizationVariables + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("rangedIntCustomizationVariables"); + file.insertChunkData(&m_rangedIntCustomizationVariablesAppend, sizeof(bool)); + count = m_rangedIntCustomizationVariables.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_rangedIntCustomizationVariables[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_constStringCustomizationVariablesLoaded) { + // mark the list as empty and extending the base list + m_constStringCustomizationVariablesAppend = true; + } + // save constStringCustomizationVariables + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("constStringCustomizationVariables"); + file.insertChunkData(&m_constStringCustomizationVariablesAppend, sizeof(bool)); + count = m_constStringCustomizationVariables.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_constStringCustomizationVariables[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_socketDestinationsLoaded) { + // mark the list as empty and extending the base list + m_socketDestinationsAppend = true; + } + // save socketDestinations + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("socketDestinations"); + file.insertChunkData(&m_socketDestinationsAppend, sizeof(bool)); + count = m_socketDestinations.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_socketDestinations[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save structureFootprintFileName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("structureFootprintFileName"); + m_structureFootprintFileName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save useStructureFootprintOutline + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("useStructureFootprintOutline"); + m_useStructureFootprintOutline.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save targetable + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("targetable"); + m_targetable.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_certificationsRequiredLoaded) { + // mark the list as empty and extending the base list + m_certificationsRequiredAppend = true; + } + // save certificationsRequired + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("certificationsRequired"); + file.insertChunkData(&m_certificationsRequiredAppend, sizeof(bool)); + count = m_certificationsRequired.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_certificationsRequired[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_customizationVariableMappingLoaded) { + // mark the list as empty and extending the base list + m_customizationVariableMappingAppend = true; + } + // save customizationVariableMapping + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("customizationVariableMapping"); + file.insertChunkData(&m_customizationVariableMappingAppend, sizeof(bool)); + count = m_customizationVariableMapping.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_customizationVariableMapping[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save clientVisabilityFlag + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("clientVisabilityFlag"); + m_clientVisabilityFlag.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - SharedObjectTemplate::save(file); - file.exitForm(); -} // SharedTangibleObjectTemplate::save + file.exitForm(true); + SharedObjectTemplate::save(file); + file.exitForm(); +} // SharedTangibleObjectTemplate::save //============================================================================= @@ -802,148 +802,148 @@ int count; /** * Class constructor. */ -SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::_ConstStringCustomizationVariable(const std::string & filename) - : TpfTemplate(filename) -{ -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::_ConstStringCustomizationVariable +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::_ConstStringCustomizationVariable( + const std::string &filename) + : TpfTemplate(filename) { +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::_ConstStringCustomizationVariable /** * Class destructor. */ -SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::~_ConstStringCustomizationVariable() -{ -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::~_ConstStringCustomizationVariable +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::~_ConstStringCustomizationVariable() { +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::~_ConstStringCustomizationVariable /** * Static function used to register this template. */ -void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_ConstStringCustomizationVariable_tag, create); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::registerMe +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::registerMe(void) { + ObjectTemplateList::registerTemplate(_ConstStringCustomizationVariable_tag, create); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::registerMe /** * Creates a SharedTangibleObjectTemplate::_ConstStringCustomizationVariable template. * * @return a new instance of the template */ -ObjectTemplate * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::create(const std::string & filename) -{ - return new SharedTangibleObjectTemplate::_ConstStringCustomizationVariable(filename); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::create +ObjectTemplate *SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::create(const std::string &filename) { + return new SharedTangibleObjectTemplate::_ConstStringCustomizationVariable(filename); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::create /** * Returns the template id. * * @return the template id */ -Tag SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getId(void) const -{ - return _ConstStringCustomizationVariable_tag; -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getId +Tag SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getId(void) const { + return _ConstStringCustomizationVariable_tag; +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getId -CompilerIntegerParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getCompilerIntegerParam +CompilerIntegerParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getCompilerIntegerParam(const char *name, + bool deepCheck, int index) { + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getCompilerIntegerParam -FloatParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getFloatParam +FloatParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getFloatParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getFloatParam -BoolParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getBoolParam +BoolParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getBoolParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getBoolParam -StringParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "variableName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_variableName; - } - fprintf(stderr, "trying to access single-parameter \"variableName\" as an array\n"); - } - else if (strcmp(name, "constValue") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_constValue; - } - fprintf(stderr, "trying to access single-parameter \"constValue\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringParam +StringParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringParam(const char *name, bool deepCheck, + int index) { + switch (runtimeCrc(name)) { + case constcrc("variableName"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_variableName; + } + fprintf(stderr, "trying to access single-parameter \"variableName\" as an array\n"); + } + break; + case constcrc("constValue"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_constValue; + } + fprintf(stderr, "trying to access single-parameter \"constValue\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringParam -StringIdParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringIdParam +StringIdParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringIdParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringIdParam -VectorParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getVectorParam +VectorParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getVectorParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getVectorParam -DynamicVariableParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getDynamicVariableParam +DynamicVariableParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getDynamicVariableParam(const char *name, + bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getDynamicVariableParam -StructParamOT * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStructParamOT +StructParamOT * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStructParamOT(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStructParamOT -TriggerVolumeParam * SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getTriggerVolumeParam +TriggerVolumeParam * +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getTriggerVolumeParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getTriggerVolumeParam -void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::initStructParamOT +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::initStructParamOT(StructParamOT ¶m, + const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::initStructParamOT -void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAsEmptyList +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAsEmptyList -void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAppend +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAppend -bool SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::isAppend +bool SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::isAppend -int SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getListLength +int SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -951,30 +951,34 @@ int SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getListLeng * * @param file file to load from */ -void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "variableName") == 0) - m_variableName.loadFromIff(file); - else if (strcmp(paramName, "constValue") == 0) - m_constValue.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - UNREF(file); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::load + switch (runtimeCrc(paramName)) { + case constcrc("variableName"): + m_variableName.loadFromIff(file); + break; + case constcrc("constValue"): + m_constValue.loadFromIff(file); + break; + } + + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::load /** * Saves the template data to an iff file. @@ -982,36 +986,35 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::save(Iff &file) -{ -int count; +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::save(Iff &file) { + int count; - file.insertForm(_ConstStringCustomizationVariable_tag); + file.insertForm(_ConstStringCustomizationVariable_tag); - int paramCount = 0; + int paramCount = 0; - // save variableName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("variableName"); - m_variableName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save constValue - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("constValue"); - m_constValue.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save variableName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("variableName"); + m_variableName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save constValue + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("constValue"); + m_constValue.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::save + file.exitForm(true); + UNREF(count); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::save //============================================================================= @@ -1020,148 +1023,145 @@ int count; /** * Class constructor. */ -SharedTangibleObjectTemplate::_CustomizationVariableMapping::_CustomizationVariableMapping(const std::string & filename) - : TpfTemplate(filename) -{ -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::_CustomizationVariableMapping +SharedTangibleObjectTemplate::_CustomizationVariableMapping::_CustomizationVariableMapping(const std::string &filename) + : TpfTemplate(filename) { +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::_CustomizationVariableMapping /** * Class destructor. */ -SharedTangibleObjectTemplate::_CustomizationVariableMapping::~_CustomizationVariableMapping() -{ -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::~_CustomizationVariableMapping +SharedTangibleObjectTemplate::_CustomizationVariableMapping::~_CustomizationVariableMapping() { +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::~_CustomizationVariableMapping /** * Static function used to register this template. */ -void SharedTangibleObjectTemplate::_CustomizationVariableMapping::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_CustomizationVariableMapping_tag, create); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::registerMe +void SharedTangibleObjectTemplate::_CustomizationVariableMapping::registerMe(void) { + ObjectTemplateList::registerTemplate(_CustomizationVariableMapping_tag, create); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::registerMe /** * Creates a SharedTangibleObjectTemplate::_CustomizationVariableMapping template. * * @return a new instance of the template */ -ObjectTemplate * SharedTangibleObjectTemplate::_CustomizationVariableMapping::create(const std::string & filename) -{ - return new SharedTangibleObjectTemplate::_CustomizationVariableMapping(filename); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::create +ObjectTemplate *SharedTangibleObjectTemplate::_CustomizationVariableMapping::create(const std::string &filename) { + return new SharedTangibleObjectTemplate::_CustomizationVariableMapping(filename); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::create /** * Returns the template id. * * @return the template id */ -Tag SharedTangibleObjectTemplate::_CustomizationVariableMapping::getId(void) const -{ - return _CustomizationVariableMapping_tag; -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::getId +Tag SharedTangibleObjectTemplate::_CustomizationVariableMapping::getId(void) const { + return _CustomizationVariableMapping_tag; +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::getId -CompilerIntegerParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getCompilerIntegerParam +CompilerIntegerParam * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getCompilerIntegerParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getCompilerIntegerParam -FloatParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getFloatParam +FloatParam *SharedTangibleObjectTemplate::_CustomizationVariableMapping::getFloatParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getFloatParam -BoolParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getBoolParam +BoolParam * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getBoolParam -StringParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "sourceVariable") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_sourceVariable; - } - fprintf(stderr, "trying to access single-parameter \"sourceVariable\" as an array\n"); - } - else if (strcmp(name, "dependentVariable") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_dependentVariable; - } - fprintf(stderr, "trying to access single-parameter \"dependentVariable\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringParam +StringParam * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringParam(const char *name, bool deepCheck, + int index) { + switch (runtimeCrc(name)) { + case constcrc("sourceVariable"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_sourceVariable; + } + fprintf(stderr, "trying to access single-parameter \"sourceVariable\" as an array\n"); + } + break; + case constcrc("dependentVariable"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_dependentVariable; + } + fprintf(stderr, "trying to access single-parameter \"dependentVariable\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringParam -StringIdParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringIdParam +StringIdParam * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringIdParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringIdParam -VectorParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getVectorParam +VectorParam * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getVectorParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getVectorParam -DynamicVariableParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getDynamicVariableParam +DynamicVariableParam * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getDynamicVariableParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getDynamicVariableParam -StructParamOT * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStructParamOT +StructParamOT * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStructParamOT(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStructParamOT -TriggerVolumeParam * SharedTangibleObjectTemplate::_CustomizationVariableMapping::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getTriggerVolumeParam +TriggerVolumeParam * +SharedTangibleObjectTemplate::_CustomizationVariableMapping::getTriggerVolumeParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getTriggerVolumeParam -void SharedTangibleObjectTemplate::_CustomizationVariableMapping::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::initStructParamOT +void +SharedTangibleObjectTemplate::_CustomizationVariableMapping::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::initStructParamOT -void SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAsEmptyList +void SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAsEmptyList -void SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAppend +void SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAppend -bool SharedTangibleObjectTemplate::_CustomizationVariableMapping::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::isAppend +bool SharedTangibleObjectTemplate::_CustomizationVariableMapping::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::isAppend -int SharedTangibleObjectTemplate::_CustomizationVariableMapping::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::getListLength +int SharedTangibleObjectTemplate::_CustomizationVariableMapping::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1169,30 +1169,34 @@ int SharedTangibleObjectTemplate::_CustomizationVariableMapping::getListLength(c * * @param file file to load from */ -void SharedTangibleObjectTemplate::_CustomizationVariableMapping::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedTangibleObjectTemplate::_CustomizationVariableMapping::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "sourceVariable") == 0) - m_sourceVariable.loadFromIff(file); - else if (strcmp(paramName, "dependentVariable") == 0) - m_dependentVariable.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - UNREF(file); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::load + switch (runtimeCrc(paramName)) { + case constcrc("sourceVariable"): + m_sourceVariable.loadFromIff(file); + break; + case constcrc("dependentVariable"): + m_dependentVariable.loadFromIff(file); + break; + } + + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::load /** * Saves the template data to an iff file. @@ -1200,36 +1204,35 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedTangibleObjectTemplate::_CustomizationVariableMapping::save(Iff &file) -{ -int count; +void SharedTangibleObjectTemplate::_CustomizationVariableMapping::save(Iff &file) { + int count; - file.insertForm(_CustomizationVariableMapping_tag); + file.insertForm(_CustomizationVariableMapping_tag); - int paramCount = 0; + int paramCount = 0; - // save sourceVariable - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("sourceVariable"); - m_sourceVariable.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save dependentVariable - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("dependentVariable"); - m_dependentVariable.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save sourceVariable + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("sourceVariable"); + m_sourceVariable.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save dependentVariable + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("dependentVariable"); + m_dependentVariable.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::save + file.exitForm(true); + UNREF(count); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::save //============================================================================= @@ -1238,164 +1241,160 @@ int count; /** * Class constructor. */ -SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::_PaletteColorCustomizationVariable(const std::string & filename) - : TpfTemplate(filename) -{ -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::_PaletteColorCustomizationVariable +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::_PaletteColorCustomizationVariable( + const std::string &filename) + : TpfTemplate(filename) { +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::_PaletteColorCustomizationVariable /** * Class destructor. */ -SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::~_PaletteColorCustomizationVariable() -{ -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::~_PaletteColorCustomizationVariable +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::~_PaletteColorCustomizationVariable() { +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::~_PaletteColorCustomizationVariable /** * Static function used to register this template. */ -void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_PaletteColorCustomizationVariable_tag, create); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::registerMe +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::registerMe(void) { + ObjectTemplateList::registerTemplate(_PaletteColorCustomizationVariable_tag, create); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::registerMe /** * Creates a SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable template. * * @return a new instance of the template */ -ObjectTemplate * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::create(const std::string & filename) -{ - return new SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable(filename); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::create +ObjectTemplate *SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::create(const std::string &filename) { + return new SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable(filename); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::create /** * Returns the template id. * * @return the template id */ -Tag SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getId(void) const -{ - return _PaletteColorCustomizationVariable_tag; -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getId +Tag SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getId(void) const { + return _PaletteColorCustomizationVariable_tag; +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getId -CompilerIntegerParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "defaultPaletteIndex") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_defaultPaletteIndex; - } - fprintf(stderr, "trying to access single-parameter \"defaultPaletteIndex\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getCompilerIntegerParam +CompilerIntegerParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getCompilerIntegerParam(const char *name, + bool deepCheck, int index) { + if (strcmp(name, "defaultPaletteIndex") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_defaultPaletteIndex; + } + fprintf(stderr, "trying to access single-parameter \"defaultPaletteIndex\" as an array\n"); + } else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return nullptr; +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getCompilerIntegerParam -FloatParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getFloatParam +FloatParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getFloatParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getFloatParam -BoolParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getBoolParam +BoolParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getBoolParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getBoolParam -StringParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "variableName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_variableName; - } - fprintf(stderr, "trying to access single-parameter \"variableName\" as an array\n"); - } - else if (strcmp(name, "palettePathName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_palettePathName; - } - fprintf(stderr, "trying to access single-parameter \"palettePathName\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringParam +StringParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringParam(const char *name, bool deepCheck, + int index) { + switch (runtimeCrc(name)) { + case constcrc("variableName"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_variableName; + } + fprintf(stderr, "trying to access single-parameter \"variableName\" as an array\n"); + } + break; + case constcrc("palettePathName"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_palettePathName; + } + fprintf(stderr, "trying to access single-parameter \"palettePathName\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringParam -StringIdParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringIdParam +StringIdParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringIdParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringIdParam -VectorParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getVectorParam +VectorParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getVectorParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getVectorParam -DynamicVariableParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getDynamicVariableParam +DynamicVariableParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getDynamicVariableParam(const char *name, + bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getDynamicVariableParam -StructParamOT * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStructParamOT +StructParamOT * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStructParamOT(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStructParamOT -TriggerVolumeParam * SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getTriggerVolumeParam +TriggerVolumeParam * +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getTriggerVolumeParam(const char *name, + bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getTriggerVolumeParam -void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::initStructParamOT +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::initStructParamOT(StructParamOT ¶m, + const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::initStructParamOT -void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAsEmptyList +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAsEmptyList -void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAppend +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAppend -bool SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::isAppend +bool SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::isAppend -int SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getListLength +int SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1403,32 +1402,37 @@ int SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getListLen * * @param file file to load from */ -void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "variableName") == 0) - m_variableName.loadFromIff(file); - else if (strcmp(paramName, "palettePathName") == 0) - m_palettePathName.loadFromIff(file); - else if (strcmp(paramName, "defaultPaletteIndex") == 0) - m_defaultPaletteIndex.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - UNREF(file); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::load + switch (runtimeCrc(paramName)) { + case constcrc("variableName"): + m_variableName.loadFromIff(file); + break; + case constcrc("palettePathName"): + m_palettePathName.loadFromIff(file); + break; + case constcrc("defaultPaletteIndex"): + m_defaultPaletteIndex.loadFromIff(file); + break; + } + + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::load /** * Saves the template data to an iff file. @@ -1436,42 +1440,41 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::save(Iff &file) -{ -int count; +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::save(Iff &file) { + int count; - file.insertForm(_PaletteColorCustomizationVariable_tag); + file.insertForm(_PaletteColorCustomizationVariable_tag); - int paramCount = 0; + int paramCount = 0; - // save variableName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("variableName"); - m_variableName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save palettePathName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("palettePathName"); - m_palettePathName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save defaultPaletteIndex - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("defaultPaletteIndex"); - m_defaultPaletteIndex.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save variableName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("variableName"); + m_variableName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save palettePathName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("palettePathName"); + m_palettePathName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save defaultPaletteIndex + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("defaultPaletteIndex"); + m_defaultPaletteIndex.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::save + file.exitForm(true); + UNREF(count); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::save //============================================================================= @@ -1480,178 +1483,171 @@ int count; /** * Class constructor. */ -SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::_RangedIntCustomizationVariable(const std::string & filename) - : TpfTemplate(filename) -{ -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::_RangedIntCustomizationVariable +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::_RangedIntCustomizationVariable( + const std::string &filename) + : TpfTemplate(filename) { +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::_RangedIntCustomizationVariable /** * Class destructor. */ -SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::~_RangedIntCustomizationVariable() -{ -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::~_RangedIntCustomizationVariable +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::~_RangedIntCustomizationVariable() { +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::~_RangedIntCustomizationVariable /** * Static function used to register this template. */ -void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_RangedIntCustomizationVariable_tag, create); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::registerMe +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::registerMe(void) { + ObjectTemplateList::registerTemplate(_RangedIntCustomizationVariable_tag, create); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::registerMe /** * Creates a SharedTangibleObjectTemplate::_RangedIntCustomizationVariable template. * * @return a new instance of the template */ -ObjectTemplate * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::create(const std::string & filename) -{ - return new SharedTangibleObjectTemplate::_RangedIntCustomizationVariable(filename); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::create +ObjectTemplate *SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::create(const std::string &filename) { + return new SharedTangibleObjectTemplate::_RangedIntCustomizationVariable(filename); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::create /** * Returns the template id. * * @return the template id */ -Tag SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getId(void) const -{ - return _RangedIntCustomizationVariable_tag; -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getId +Tag SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getId(void) const { + return _RangedIntCustomizationVariable_tag; +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getId -CompilerIntegerParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "minValueInclusive") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_minValueInclusive; - } - fprintf(stderr, "trying to access single-parameter \"minValueInclusive\" as an array\n"); - } - else if (strcmp(name, "defaultValue") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_defaultValue; - } - fprintf(stderr, "trying to access single-parameter \"defaultValue\" as an array\n"); - } - else if (strcmp(name, "maxValueExclusive") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return nullptr; - } - return &m_maxValueExclusive; - } - fprintf(stderr, "trying to access single-parameter \"maxValueExclusive\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getCompilerIntegerParam +CompilerIntegerParam * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getCompilerIntegerParam(const char *name, bool deepCheck, + int index) { + switch (runtimeCrc(name)) { + case constcrc("minValueInclusive"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_minValueInclusive; + } + fprintf(stderr, "trying to access single-parameter \"minValueInclusive\" as an array\n"); + } + break; + case constcrc("defaultValue"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_defaultValue; + } + fprintf(stderr, "trying to access single-parameter \"defaultValue\" as an array\n"); + } + break; + case constcrc("maxValueExclusive"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return nullptr; + } + return &m_maxValueExclusive; + } + fprintf(stderr, "trying to access single-parameter \"maxValueExclusive\" as an array\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getCompilerIntegerParam -FloatParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getFloatParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getFloatParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getFloatParam +FloatParam * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getFloatParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getFloatParam -BoolParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getBoolParam +BoolParam *SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getBoolParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getBoolParam -StringParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "variableName") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return nullptr; - } - return &m_variableName; - } - fprintf(stderr, "trying to access single-parameter \"variableName\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return nullptr; -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringParam +StringParam * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringParam(const char *name, bool deepCheck, + int index) { + if (strcmp(name, "variableName") == 0) { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return nullptr; + } + return &m_variableName; + } + fprintf(stderr, "trying to access single-parameter \"variableName\" as an array\n"); + } else + return TpfTemplate::getStringParam(name, deepCheck, index); + return nullptr; +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringParam -StringIdParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringIdParam +StringIdParam * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringIdParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringIdParam -VectorParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getVectorParam +VectorParam * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getVectorParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getVectorParam -DynamicVariableParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getDynamicVariableParam +DynamicVariableParam * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getDynamicVariableParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getDynamicVariableParam -StructParamOT * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStructParamOT +StructParamOT * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStructParamOT(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStructParamOT -TriggerVolumeParam * SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getTriggerVolumeParam +TriggerVolumeParam * +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getTriggerVolumeParam(const char *name, bool deepCheck, + int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getTriggerVolumeParam -void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::initStructParamOT +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::initStructParamOT(StructParamOT ¶m, + const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::initStructParamOT -void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAsEmptyList +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAsEmptyList -void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAppend +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAppend -bool SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::isAppend +bool SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::isAppend -int SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getListLength +int SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1659,34 +1655,40 @@ int SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getListLength * * @param file file to load from */ -void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "variableName") == 0) - m_variableName.loadFromIff(file); - else if (strcmp(paramName, "minValueInclusive") == 0) - m_minValueInclusive.loadFromIff(file); - else if (strcmp(paramName, "defaultValue") == 0) - m_defaultValue.loadFromIff(file); - else if (strcmp(paramName, "maxValueExclusive") == 0) - m_maxValueExclusive.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - UNREF(file); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::load + + switch (runtimeCrc(paramName)) { + case constcrc("variableName"): + m_variableName.loadFromIff(file); + break; + case constcrc("minValueInclusive"): + m_minValueInclusive.loadFromIff(file); + break; + case constcrc("defaultValue"): + m_defaultValue.loadFromIff(file); + break; + case constcrc("maxValueExclusive"): + m_maxValueExclusive.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::load /** * Saves the template data to an iff file. @@ -1694,47 +1696,46 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::save(Iff &file) -{ -int count; +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::save(Iff &file) { + int count; - file.insertForm(_RangedIntCustomizationVariable_tag); + file.insertForm(_RangedIntCustomizationVariable_tag); - int paramCount = 0; + int paramCount = 0; - // save variableName - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("variableName"); - m_variableName.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save minValueInclusive - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("minValueInclusive"); - m_minValueInclusive.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save defaultValue - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("defaultValue"); - m_defaultValue.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxValueExclusive - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxValueExclusive"); - m_maxValueExclusive.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save variableName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("variableName"); + m_variableName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save minValueInclusive + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("minValueInclusive"); + m_minValueInclusive.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save defaultValue + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("defaultValue"); + m_defaultValue.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxValueExclusive + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxValueExclusive"); + m_maxValueExclusive.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - UNREF(count); -} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::save + file.exitForm(true); + UNREF(count); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::save //@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp index a63cda29..3a3a190e 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp @@ -19,63 +19,58 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -SharedVehicleObjectTemplate::SharedVehicleObjectTemplate(const std::string & filename) +SharedVehicleObjectTemplate::SharedVehicleObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : SharedTangibleObjectTemplate(filename) + : SharedTangibleObjectTemplate(filename) //@END TFD INIT { -} // SharedVehicleObjectTemplate::SharedVehicleObjectTemplate +} // SharedVehicleObjectTemplate::SharedVehicleObjectTemplate /** * Class destructor. */ -SharedVehicleObjectTemplate::~SharedVehicleObjectTemplate() -{ +SharedVehicleObjectTemplate::~SharedVehicleObjectTemplate() { //@BEGIN TFD CLEANUP //@END TFD CLEANUP -} // SharedVehicleObjectTemplate::~SharedVehicleObjectTemplate +} // SharedVehicleObjectTemplate::~SharedVehicleObjectTemplate /** * Static function used to register this template. */ -void SharedVehicleObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(SharedVehicleObjectTemplate_tag, create); -} // SharedVehicleObjectTemplate::registerMe +void SharedVehicleObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(SharedVehicleObjectTemplate_tag, create); +} // SharedVehicleObjectTemplate::registerMe /** * Creates a SharedVehicleObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * SharedVehicleObjectTemplate::create(const std::string & filename) -{ - return new SharedVehicleObjectTemplate(filename); -} // SharedVehicleObjectTemplate::create +ObjectTemplate *SharedVehicleObjectTemplate::create(const std::string &filename) { + return new SharedVehicleObjectTemplate(filename); +} // SharedVehicleObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag SharedVehicleObjectTemplate::getId(void) const -{ - return SharedVehicleObjectTemplate_tag; -} // SharedVehicleObjectTemplate::getId +Tag SharedVehicleObjectTemplate::getId(void) const { + return SharedVehicleObjectTemplate_tag; +} // SharedVehicleObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag SharedVehicleObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag SharedVehicleObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // SharedVehicleObjectTemplate::getTemplateVersion /** @@ -83,194 +78,168 @@ Tag SharedVehicleObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag SharedVehicleObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const SharedVehicleObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag SharedVehicleObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const SharedVehicleObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // SharedVehicleObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * SharedVehicleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam * +SharedVehicleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getCompilerIntegerParam -FloatParam * SharedVehicleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "speed") == 0) - { - if (index >= 0 && index < 5) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_speed[index]; - } - fprintf(stderr, "index for parameter \"speed\" out of bounds\n"); - } - else if (strcmp(name, "slopeAversion") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_slopeAversion; - } - fprintf(stderr, "trying to access single-parameter \"slopeAversion\" as an array\n"); - } - else if (strcmp(name, "hoverValue") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_hoverValue; - } - fprintf(stderr, "trying to access single-parameter \"hoverValue\" as an array\n"); - } - else if (strcmp(name, "turnRate") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_turnRate; - } - fprintf(stderr, "trying to access single-parameter \"turnRate\" as an array\n"); - } - else if (strcmp(name, "maxVelocity") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_maxVelocity; - } - fprintf(stderr, "trying to access single-parameter \"maxVelocity\" as an array\n"); - } - else if (strcmp(name, "acceleration") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_acceleration; - } - fprintf(stderr, "trying to access single-parameter \"acceleration\" as an array\n"); - } - else if (strcmp(name, "braking") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != nullptr) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return nullptr; - } - return &m_braking; - } - fprintf(stderr, "trying to access single-parameter \"braking\" as an array\n"); - } - else - return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); - return nullptr; -} //SharedVehicleObjectTemplate::getFloatParam +FloatParam *SharedVehicleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("speed"): { + if (index >= 0 && index < 5) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_speed[index]; + } + fprintf(stderr, "index for parameter \"speed\" out of bounds\n"); + } + break; + case constcrc("slopeAversion"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_slopeAversion; + } + fprintf(stderr, "trying to access single-parameter \"slopeAversion\" as an array\n"); + } + break; + case constcrc("hoverValue"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_hoverValue; + } + fprintf(stderr, "trying to access single-parameter \"hoverValue\" as an array\n"); + } + break; + case constcrc("turnRate"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_turnRate; + } + fprintf(stderr, "trying to access single-parameter \"turnRate\" as an array\n"); + } + break; + case constcrc("maxVelocity"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_maxVelocity; + } + fprintf(stderr, "trying to access single-parameter \"maxVelocity\" as an array\n"); + } + break; + case constcrc("acceleration"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_acceleration; + } + fprintf(stderr, "trying to access single-parameter \"acceleration\" as an array\n"); + } + break; + case constcrc("braking"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != nullptr) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return nullptr; + } + return &m_braking; + } + fprintf(stderr, "trying to access single-parameter \"braking\" as an array\n"); + } + break; + default: + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + break; + } + return nullptr; +} //SharedVehicleObjectTemplate::getFloatParam -BoolParam * SharedVehicleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getBoolParam +BoolParam *SharedVehicleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getBoolParam -StringParam * SharedVehicleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getStringParam +StringParam *SharedVehicleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getStringParam -StringIdParam * SharedVehicleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getStringIdParam +StringIdParam *SharedVehicleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getStringIdParam -VectorParam * SharedVehicleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getVectorParam +VectorParam *SharedVehicleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getVectorParam -DynamicVariableParam * SharedVehicleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getDynamicVariableParam +DynamicVariableParam * +SharedVehicleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getDynamicVariableParam -StructParamOT * SharedVehicleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getStructParamOT +StructParamOT *SharedVehicleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getStructParamOT -TriggerVolumeParam * SharedVehicleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //SharedVehicleObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *SharedVehicleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedVehicleObjectTemplate::getTriggerVolumeParam -void SharedVehicleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - SharedTangibleObjectTemplate::initStructParamOT(param, name); -} // SharedVehicleObjectTemplate::initStructParamOT +void SharedVehicleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedVehicleObjectTemplate::initStructParamOT -void SharedVehicleObjectTemplate::setAsEmptyList(const char *name) -{ - SharedTangibleObjectTemplate::setAsEmptyList(name); -} // SharedVehicleObjectTemplate::setAsEmptyList +void SharedVehicleObjectTemplate::setAsEmptyList(const char *name) { + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedVehicleObjectTemplate::setAsEmptyList -void SharedVehicleObjectTemplate::setAppend(const char *name) -{ - SharedTangibleObjectTemplate::setAppend(name); -} // SharedVehicleObjectTemplate::setAppend +void SharedVehicleObjectTemplate::setAppend(const char *name) { + SharedTangibleObjectTemplate::setAppend(name); +} // SharedVehicleObjectTemplate::setAppend -bool SharedVehicleObjectTemplate::isAppend(const char *name) const -{ - return SharedTangibleObjectTemplate::isAppend(name); -} // SharedVehicleObjectTemplate::isAppend +bool SharedVehicleObjectTemplate::isAppend(const char *name) const { + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedVehicleObjectTemplate::isAppend -int SharedVehicleObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "speed") == 0) - { - return sizeof(m_speed) / sizeof(FloatParam); - } - else - return SharedTangibleObjectTemplate::getListLength(name); -} // SharedVehicleObjectTemplate::getListLength +int SharedVehicleObjectTemplate::getListLength(const char *name) const { + if (strcmp(name, "speed") == 0) { + return sizeof(m_speed) / sizeof(FloatParam); + } else + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedVehicleObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -278,88 +247,91 @@ int SharedVehicleObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void SharedVehicleObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void SharedVehicleObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != SharedVehicleObjectTemplate_tag) - { - SharedTangibleObjectTemplate::load(file); - return; - } + if (file.getCurrentName() != SharedVehicleObjectTemplate_tag) { + SharedTangibleObjectTemplate::load(file); + return; + } - file.enterForm(); - m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) - { - file.enterForm(); - file.enterChunk(); - std::string baseFilename; - file.read_string(baseFilename); - file.exitChunk(); - const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); - DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); - if (m_baseData == base && base != nullptr) - base->releaseReference(); - else - { - if (m_baseData != nullptr) - m_baseData->releaseReference(); - m_baseData = base; - } - file.exitForm(); - m_templateVersion = file.getCurrentName(); - } - if (getHighestTemplateVersion() != TAG(0,0,0,0)) - { - if (DataLint::isEnabled()) - DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); - } + file.enterForm(); + m_templateVersion = file.getCurrentName(); + if (m_templateVersion == TAG(D, E, R, V)) { + file.enterForm(); + file.enterChunk(); + std::string baseFilename; + file.read_string(baseFilename); + file.exitChunk(); + const ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename); + DEBUG_WARNING(base == nullptr, ("was unable to load base template %s", baseFilename.c_str())); + if (m_baseData == base && base != nullptr) + base->releaseReference(); + else { + if (m_baseData != nullptr) + m_baseData->releaseReference(); + m_baseData = base; + } + file.exitForm(); + m_templateVersion = file.getCurrentName(); + } + if (getHighestTemplateVersion() != TAG(0, 0, 0, 0)) { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } - file.enterForm(); + file.enterForm(); - file.enterChunk(); - int paramCount = file.read_int32(); - file.exitChunk(); - for (int i = 0; i < paramCount; ++i) - { - file.enterChunk(); - file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "speed") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 5, ("Template %s: read array size of %d for array \"speed\" of size 5, reading values anyway", file.getFileName(), listCount)); - int j; - for (j = 0; j < 5 && j < listCount; ++j) - m_speed[j].loadFromIff(file); - // if there are more params for speed read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "slopeAversion") == 0) - m_slopeAversion.loadFromIff(file); - else if (strcmp(paramName, "hoverValue") == 0) - m_hoverValue.loadFromIff(file); - else if (strcmp(paramName, "turnRate") == 0) - m_turnRate.loadFromIff(file); - else if (strcmp(paramName, "maxVelocity") == 0) - m_maxVelocity.loadFromIff(file); - else if (strcmp(paramName, "acceleration") == 0) - m_acceleration.loadFromIff(file); - else if (strcmp(paramName, "braking") == 0) - m_braking.loadFromIff(file); - file.exitChunk(true); - } + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + for (int i = 0; i < paramCount; ++i) { + file.enterChunk(); + file.read_string(paramName, MAX_NAME_SIZE); - file.exitForm(); - SharedTangibleObjectTemplate::load(file); - file.exitForm(); - return; -} // SharedVehicleObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("speed"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 5, + ("Template %s: read array size of %d for array \"speed\" of size 5, reading values anyway", file.getFileName(), listCount)); + int j; + for (j = 0; j < 5 && j < listCount; ++j) + m_speed[j].loadFromIff(file); + // if there are more params for speed read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("slopeAversion"): + m_slopeAversion.loadFromIff(file); + break; + case constcrc("hoverValue"): + m_hoverValue.loadFromIff(file); + break; + case constcrc("turnRate"): + m_turnRate.loadFromIff(file); + break; + case constcrc("maxVelocity"): + m_maxVelocity.loadFromIff(file); + break; + case constcrc("acceleration"): + m_acceleration.loadFromIff(file); + break; + case constcrc("braking"): + m_braking.loadFromIff(file); + break; + } + file.exitChunk(true); + } + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedVehicleObjectTemplate::load /** * Saves the template data to an iff file. @@ -367,79 +339,79 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void SharedVehicleObjectTemplate::save(Iff &file) -{ -int count; +void SharedVehicleObjectTemplate::save(Iff &file) { + int count; - file.insertForm(SharedVehicleObjectTemplate_tag); - if (m_baseTemplateName.size() != 0) - { - file.insertForm(TAG(D,E,R,V)); - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); - file.exitChunk(); - file.exitForm(); - } - file.insertForm(TAG(0,0,0,0)); - file.allowNonlinearFunctions(); + file.insertForm(SharedVehicleObjectTemplate_tag); + if (m_baseTemplateName.size() != 0) { + file.insertForm(TAG(D, E, R, V)); + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkData(m_baseTemplateName.c_str(), m_baseTemplateName.size() + 1); + file.exitChunk(); + file.exitForm(); + } + file.insertForm(TAG(0, 0, 0, 0)); + file.allowNonlinearFunctions(); - int paramCount = 0; + int paramCount = 0; - // save speed - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("speed"); - count = 5; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 5; ++i) - m_speed[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save slopeAversion - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("slopeAversion"); - m_slopeAversion.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save hoverValue - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("hoverValue"); - m_hoverValue.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save turnRate - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("turnRate"); - m_turnRate.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save maxVelocity - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("maxVelocity"); - m_maxVelocity.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save acceleration - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("acceleration"); - m_acceleration.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save braking - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("braking"); - m_braking.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save speed + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("speed"); + count = 5; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 5; ++i) + m_speed[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save slopeAversion + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("slopeAversion"); + m_slopeAversion.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save hoverValue + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("hoverValue"); + m_hoverValue.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save turnRate + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("turnRate"); + m_turnRate.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save maxVelocity + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxVelocity"); + m_maxVelocity.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save acceleration + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("acceleration"); + m_acceleration.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save braking + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("braking"); + m_braking.saveToIff(file); + file.exitChunk(); + ++paramCount; - // write number of parameters - file.goToTopOfForm(); - file.insertChunk(TAG(P, C, N, T)); - file.insertChunkData(¶mCount, sizeof(paramCount)); - file.exitChunk(); + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); - file.exitForm(true); - SharedTangibleObjectTemplate::save(file); - file.exitForm(); -} // SharedVehicleObjectTemplate::save + file.exitForm(true); + SharedTangibleObjectTemplate::save(file); + file.exitForm(); +} // SharedVehicleObjectTemplate::save //@END TFD