diff --git a/CMakeLists.txt b/CMakeLists.txt index 40916b37..bf7130a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,8 +29,8 @@ find_package(Threads) find_package(ZLIB REQUIRED) find_package(CURL REQUIRED) -# c++14 yeah! -set(CMAKE_CXX_STANDARD 14) +# c++17 yeah! +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -105,7 +105,7 @@ elseif (UNIX) set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_RELEASE} -flto -fwhole-program-vtables") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # O3 and Ofast include one or more flags that cause java to crash when using gcc6 - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fno-signed-zeros -freciprocal-math -fno-unroll-loops -fno-tree-loop-optimize") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fno-signed-zeros -freciprocal-math -fno-unroll-loops -fno-tree-loop-optimize -fno-plt") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") diff --git a/engine/client/CMakeLists.txt b/engine/client/CMakeLists.txt index 09869e54..9fb3c9e0 100644 --- a/engine/client/CMakeLists.txt +++ b/engine/client/CMakeLists.txt @@ -1,2 +1,3 @@ - -add_subdirectory(application) +if (DEFINED _MIFF OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + add_subdirectory(application) +endif() diff --git a/engine/server/application/CentralServer/src/linux/CentralServer.profdata b/engine/server/application/CentralServer/src/linux/CentralServer.profdata index 91647fb3..33735827 100644 Binary files a/engine/server/application/CentralServer/src/linux/CentralServer.profdata and b/engine/server/application/CentralServer/src/linux/CentralServer.profdata differ diff --git a/engine/server/application/CentralServer/src/linux/main.cpp b/engine/server/application/CentralServer/src/linux/main.cpp index f7eeb540..4277ba80 100755 --- a/engine/server/application/CentralServer/src/linux/main.cpp +++ b/engine/server/application/CentralServer/src/linux/main.cpp @@ -1,3 +1,5 @@ +#include + #include "sharedFoundation/FirstSharedFoundation.h" #include "ConfigCentralServer.h" @@ -12,17 +14,29 @@ #include "sharedRandom/SetupSharedRandom.h" #include "sharedThread/SetupSharedThread.h" -#ifndef STELLA_INTERNAL -#include "webAPIHeartbeat.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); #endif +inline void signalHandler(int s){ + printf("PlanetServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== int main(int argc, char ** argv) { -#ifndef STELLA_INTERNAL - StellaBellum::webAPIHeartbeat(); -#endif + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -60,6 +74,7 @@ int main(int argc, char ** argv) SetupSharedFoundation::remove(); #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); exit(0); #endif diff --git a/engine/server/application/CentralServer/src/shared/CentralServer.cpp b/engine/server/application/CentralServer/src/shared/CentralServer.cpp index 2da16b79..d8454a06 100755 --- a/engine/server/application/CentralServer/src/shared/CentralServer.cpp +++ b/engine/server/application/CentralServer/src/shared/CentralServer.cpp @@ -1233,7 +1233,7 @@ void CentralServer::receiveMessage(const MessageDispatch::Emitter & source, cons DEBUG_REPORT_LOG(true, ("Pending character %lu is logging in or dropping\n", m.getAccountNumber())); // Once they're logged in, Central doesn't need to know about them anymore: - removeSuidFromAccountConnectionMap(m.getAccountNumber()); + removeFromAccountConnectionMap(m.getAccountNumber()); break; } case constcrc("CharacterListMessage") : { @@ -1998,7 +1998,7 @@ void CentralServer::receiveMessage(const MessageDispatch::Emitter & source, cons break; } case constcrc("DatabaseSaveStart") : { - LOG("CentralServer", ("Received DatabaseSaveStart network message.")); + //LOG("CentralServer", ("Received DatabaseSaveStart network message.")); if (m_shutdownPhase == 4) { LOG("CentralServerShutdown", ("Shutdown Phase %d: Setting indicator for receipt of DatabaseSaveStart.", m_shutdownPhase)); m_shutdownHaveDatabaseSaveStart = true; @@ -2014,7 +2014,7 @@ void CentralServer::receiveMessage(const MessageDispatch::Emitter & source, cons case constcrc("DatabaseSaveComplete") : { Archive::ReadIterator ri = static_cast(message).getByteStream().begin(); GenericValueTypeMessage msg(ri); - LOG("CentralServer", ("Received DatabaseSaveComplete network message.")); + //LOG("CentralServer", ("Received DatabaseSaveComplete network message.")); // tell all the Planet Servers that the save finished sendToAllPlanetServers(msg, true); @@ -3419,7 +3419,7 @@ void CentralServer::addToAccountConnectionMap(StationId suid, ConnectionServerCo // ---------------------------------------------------------------------- -void CentralServer::removeSuidFromAccountConnectionMap(StationId suid) +void CentralServer::removeFromAccountConnectionMap(StationId suid) { ConnectionServerSUIDMap::iterator i=m_accountConnectionMap.find(suid); if (i!=m_accountConnectionMap.end()) diff --git a/engine/server/application/CentralServer/src/shared/CentralServer.h b/engine/server/application/CentralServer/src/shared/CentralServer.h index 95b6dd25..22e6a7de 100755 --- a/engine/server/application/CentralServer/src/shared/CentralServer.h +++ b/engine/server/application/CentralServer/src/shared/CentralServer.h @@ -169,7 +169,7 @@ public: void getCharacterMatchStatistics(int & numberOfCharacterMatchRequests, int & numberOfCharacterMatchResultsPerRequest, int & timeSpentPerCharacterMatchRequestMs); - void removeSuidFromAccountConnectionMap(StationId suid); + void removeFromAccountConnectionMap(StationId suid); private: void handleRequestGameServerForLoginMessage (const RequestGameServerForLoginMessage & msg); diff --git a/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp b/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp index 3c6f6335..196f5a18 100755 --- a/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp +++ b/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp @@ -254,7 +254,7 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) s_pseudoClientConnectionMap[info.getValue().first] = std::make_pair(static_cast(info.getValue().second), this); // remove corresponding "non pseudo client connection" - CentralServer::getInstance().removeSuidFromAccountConnectionMap(static_cast(info.getValue().first)); + CentralServer::getInstance().removeFromAccountConnectionMap(static_cast(info.getValue().first)); break; } case constcrc("DestroyPseudoClientConnection") : @@ -443,4 +443,4 @@ void ConnectionServerConnection::removeFromAccountConnectionMap(unsigned int sta { s_pseudoClientConnectionMap.erase(f); } -} +} \ No newline at end of file diff --git a/engine/server/application/ChatServer/src/linux/ChatServer.profdata b/engine/server/application/ChatServer/src/linux/ChatServer.profdata index 26bbd877..7bbe178c 100644 Binary files a/engine/server/application/ChatServer/src/linux/ChatServer.profdata and b/engine/server/application/ChatServer/src/linux/ChatServer.profdata differ diff --git a/engine/server/application/ChatServer/src/linux/main.cpp b/engine/server/application/ChatServer/src/linux/main.cpp index 09aa339e..59e8de14 100755 --- a/engine/server/application/ChatServer/src/linux/main.cpp +++ b/engine/server/application/ChatServer/src/linux/main.cpp @@ -12,10 +12,31 @@ #include "sharedRandom/SetupSharedRandom.h" #include "sharedThread/SetupSharedThread.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); +#endif + +inline void signalHandler(int s){ + printf("PlanetServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== int main(int argc, char ** argv) { + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); + + SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -40,6 +61,7 @@ int main(int argc, char ** argv) SetupSharedFoundation::remove(); #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); exit(0); #endif diff --git a/engine/server/application/CommoditiesServer/src/linux/CommoditiesServer.profdata b/engine/server/application/CommoditiesServer/src/linux/CommoditiesServer.profdata index 72c10de4..1c8c6862 100644 Binary files a/engine/server/application/CommoditiesServer/src/linux/CommoditiesServer.profdata and b/engine/server/application/CommoditiesServer/src/linux/CommoditiesServer.profdata differ diff --git a/engine/server/application/CommoditiesServer/src/linux/main.cpp b/engine/server/application/CommoditiesServer/src/linux/main.cpp index ce3735d1..9becf1ab 100755 --- a/engine/server/application/CommoditiesServer/src/linux/main.cpp +++ b/engine/server/application/CommoditiesServer/src/linux/main.cpp @@ -3,6 +3,7 @@ // Author: Justin Randall //----------------------------------------------------------------------- +#include #include "FirstCommodityServer.h" @@ -27,10 +28,30 @@ #include "LocalizationManager.h" #include "UnicodeUtils.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); +#endif + +inline void signalHandler(int s){ + printf("CommoditiesServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + //----------------------------------------------------------------------- int main(int argc, char ** argv) { + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); + SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -74,6 +95,10 @@ int main(int argc, char ** argv) SetupSharedFoundation::remove(); SetupSharedThread::remove(); +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); + exit(0); +#endif return 0; } diff --git a/engine/server/application/ConnectionServer/src/linux/ConnectionServer.profdata b/engine/server/application/ConnectionServer/src/linux/ConnectionServer.profdata index 29282771..31a153e7 100644 Binary files a/engine/server/application/ConnectionServer/src/linux/ConnectionServer.profdata and b/engine/server/application/ConnectionServer/src/linux/ConnectionServer.profdata differ diff --git a/engine/server/application/ConnectionServer/src/linux/main.cpp b/engine/server/application/ConnectionServer/src/linux/main.cpp index 0bc0d1a3..5f37bbd5 100755 --- a/engine/server/application/ConnectionServer/src/linux/main.cpp +++ b/engine/server/application/ConnectionServer/src/linux/main.cpp @@ -1,3 +1,5 @@ +#include + #include "FirstConnectionServer.h" #include "ConfigConnectionServer.h" #include "ConnectionServer.h" @@ -12,10 +14,20 @@ #include "sharedRandom/SetupSharedRandom.h" #include "sharedThread/SetupSharedThread.h" -#ifndef STELLA_INTERNAL -#include "webAPIHeartbeat.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); #endif +inline void signalHandler(int s){ + printf("ConnectionServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== void dumpPid(const char * argv) @@ -29,9 +41,11 @@ void dumpPid(const char * argv) int main(int argc, char ** argv) { -#ifndef STELLA_INTERNAL - StellaBellum::webAPIHeartbeat(); -#endif + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -63,7 +77,7 @@ int main(int argc, char ** argv) SetupSharedThread::remove(); #ifdef ENABLE_PROFILING - exit(0); + __llvm_profile_write_file(); #endif return 0; diff --git a/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp b/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp index d8f3c142..55fb16e6 100755 --- a/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp +++ b/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp @@ -161,7 +161,7 @@ void ConnectionServer::addGameConnection(unsigned long gameServerId, GameConnect //----------------------------------------------------------------------- bool -ConnectionServer::decryptToken(const KeyShare::Token &token, StationId &stationUserId, bool &secure, std::string &accountName) { +ConnectionServer::decryptToken(const KeyShare::Token &token, uint32 &stationUserId, bool &secure, std::string &accountName) { static ConnectionServer &cs = instance(); //Also the sizeof(int) is likewise magic from the session api @@ -179,7 +179,7 @@ ConnectionServer::decryptToken(const KeyShare::Token &token, StationId &stationU char *tmpBuffer = new char[MAX_ACCOUNT_NAME_LENGTH + 1]; memset(tmpBuffer, 0, MAX_ACCOUNT_NAME_LENGTH + 1); - memcpy(&stationUserId, keyBufferPointer, sizeof(StationId)); + memcpy(&stationUserId, keyBufferPointer, sizeof(uint32)); keyBufferPointer += sizeof(uint32); memcpy(&secure, keyBufferPointer, sizeof(bool)); keyBufferPointer += sizeof(bool); diff --git a/engine/server/application/ConnectionServer/src/shared/ConnectionServer.h b/engine/server/application/ConnectionServer/src/shared/ConnectionServer.h index 1e337661..36abc449 100755 --- a/engine/server/application/ConnectionServer/src/shared/ConnectionServer.h +++ b/engine/server/application/ConnectionServer/src/shared/ConnectionServer.h @@ -48,7 +48,7 @@ class ConnectionServer : public MessageDispatch::Receiver static void addNewClient(ClientConnection* cconn, const NetworkId &oid, GameConnection* gconn, const std::string &sceneName, bool sendToStarport ); static void addConnectedClient(uint32 suid, ClientConnection* conn); static void addGameConnection(unsigned long gameServerId, GameConnection* gc); - static bool decryptToken(const KeyShare::Token & token, StationId & stationUserId, bool & secure, std::string & accountName); + static bool decryptToken(const KeyShare::Token & token, uint32 & stationUserId, bool & secure, std::string & accountName); static bool decryptToken(const KeyShare::Token & token, char* sessionKey, StationId & stationId); static CentralConnection * getCentralConnection(); static void dropClient(ClientConnection * conn, const std::string &description); diff --git a/engine/server/application/LogServer/src/linux/LogServer.profdata b/engine/server/application/LogServer/src/linux/LogServer.profdata index 43f50088..116f2177 100644 Binary files a/engine/server/application/LogServer/src/linux/LogServer.profdata and b/engine/server/application/LogServer/src/linux/LogServer.profdata differ diff --git a/engine/server/application/LogServer/src/linux/main.cpp b/engine/server/application/LogServer/src/linux/main.cpp index 5fe224ec..9e384084 100755 --- a/engine/server/application/LogServer/src/linux/main.cpp +++ b/engine/server/application/LogServer/src/linux/main.cpp @@ -6,6 +6,8 @@ // // ====================================================================== +#include + #include "sharedFoundation/FirstSharedFoundation.h" #include "LogServer.h" @@ -17,16 +19,30 @@ #include "sharedNetworkMessages/SetupSharedNetworkMessages.h" #include "sharedThread/SetupSharedThread.h" -#ifndef STELLA_INTERNAL -#include "webAPIHeartbeat.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); #endif + + +inline void signalHandler(int s){ + printf("LogServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== int main(int argc, char **argv) { -#ifndef STELLA_INTERNAL - StellaBellum::webAPIHeartbeat(); -#endif + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -55,9 +71,9 @@ int main(int argc, char **argv) SetupSharedThread::remove(); #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); exit(0); #endif - return 0; } diff --git a/engine/server/application/LoginServer/src/linux/LoginServer.profdata b/engine/server/application/LoginServer/src/linux/LoginServer.profdata index 296b1ffe..edb7f415 100644 Binary files a/engine/server/application/LoginServer/src/linux/LoginServer.profdata and b/engine/server/application/LoginServer/src/linux/LoginServer.profdata differ diff --git a/engine/server/application/LoginServer/src/linux/main.cpp b/engine/server/application/LoginServer/src/linux/main.cpp index 03efc534..3cbc9951 100755 --- a/engine/server/application/LoginServer/src/linux/main.cpp +++ b/engine/server/application/LoginServer/src/linux/main.cpp @@ -1,9 +1,6 @@ -#include "sharedFoundation/FirstSharedFoundation.h" - -#ifdef ENABLE_PROFILING #include -#endif +#include "sharedFoundation/FirstSharedFoundation.h" #include "ConfigLoginServer.h" #include "LoginServer.h" @@ -17,23 +14,28 @@ #include "sharedRandom/SetupSharedRandom.h" #include "sharedThread/SetupSharedThread.h" -// ====================================================================== - #ifdef ENABLE_PROFILING -inline void signalHandler(int s){ - printf("LoginServer terminating, signal %d\n",s); - exit(0); -} +extern "C" int __llvm_profile_write_file(void); #endif -int main(int argc, char **argv) { +// ====================================================================== + +inline void signalHandler(int s){ + printf("LoginServer terminating, signal %d\n",s); + #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + +int main(int argc, char **argv) { struct sigaction sigIntHandler; sigIntHandler.sa_handler = signalHandler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0; sigaction(SIGINT, &sigIntHandler, NULL); -#endif SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -63,5 +65,9 @@ int main(int argc, char **argv) { SetupSharedFoundation::callbackWithExceptionHandling(LoginServer::run); SetupSharedFoundation::remove(); +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); + exit(0); +#endif return 0; } diff --git a/engine/server/application/LoginServer/src/shared/ClientConnection.cpp b/engine/server/application/LoginServer/src/shared/ClientConnection.cpp index dc5bd08f..9610e931 100755 --- a/engine/server/application/LoginServer/src/shared/ClientConnection.cpp +++ b/engine/server/application/LoginServer/src/shared/ClientConnection.cpp @@ -154,6 +154,7 @@ void ClientConnection::validateClient(const std::string &id, const std::string & bool authOK = false; bool testMode = false; static const std::string authURL(ConfigLoginServer::getExternalAuthUrl()); + static const bool useSimpleAuth = ConfigLoginServer::getUseSimpleAuth(); std::string uname; std::string parentAccount; @@ -161,55 +162,90 @@ void ClientConnection::validateClient(const std::string &id, const std::string & StationId user_id; StationId parent_id; - std::unordered_map childAccounts; + std::unordered_map childAccounts; if (!authURL.empty()) { // create the object webAPI api(authURL); - // add our data - api.addJsonData("user_name", id); - api.addJsonData("user_password", key); - api.addJsonData("ip", getRemoteAddress()); + if (useSimpleAuth) { + if (!user_id) { + uname = id; - if (api.submit()) { - bool status = api.getNullableValue("status"); - uname = api.getString("username"); - sessionID = api.getString("session_key"); + if (uname.length() > MAX_ACCOUNT_NAME_LENGTH) { + uname.resize(MAX_ACCOUNT_NAME_LENGTH); + } - if (status && !sessionID.empty() && !uname.empty()) { - authOK = true; + user_id = std::hash < std::string > {}(uname.c_str()); + } - parentAccount = api.getString("mainAccount"); - childAccounts = api.getStringMap64("subAccounts"); + std::ostringstream postBuf; + postBuf << "user_name=" << id << "&user_password=" << key << "&stationID=" << user_id << "&ip=" << getRemoteAddress(); + std::string postData = postBuf.str(); - if (!ConfigLoginServer::getUseOldSuidGenerator()) { - user_id = static_cast(api.getNullableValue("user_id")); - parent_id = static_cast(api.getNullableValue("parent_id")); + bool done = api.setData(postData); + if (done) { + done = api.submit(1,1,1); + } + + if (done) { + std::string response = api.getRaw(); + + if (response == "success") { + authOK = true; } else { - if (parentAccount.length() > MAX_ACCOUNT_NAME_LENGTH) { - parentAccount.resize(MAX_ACCOUNT_NAME_LENGTH); - } - - if (uname.length() > MAX_ACCOUNT_NAME_LENGTH) { - uname.resize(MAX_ACCOUNT_NAME_LENGTH); - } - - parent_id = std::hash < std::string > {}(parentAccount.c_str()); - user_id = std::hash < std::string > {}(uname.c_str()); + ErrorMessage err("Login Failed", response); + this->send(err, true); } } else { - std::string msg(api.getString("message")); - if (msg.empty()) { - msg = "Invalid username or password."; - } - - ErrorMessage err("Login Failed", msg); + ErrorMessage err("Failed to contact auth provider", "Please contact a server admin"); this->send(err, true); } } else { - ErrorMessage err("Login Failed", "Could not connect to remote."); - this->send(err, true); + // add our data + api.addJsonData("user_name", id); + api.addJsonData("user_password", key); + api.addJsonData("ip", getRemoteAddress()); + + if (api.submit()) { + bool status = api.getNullableValue("status"); + uname = api.getString("username"); + sessionID = api.getString("session_key"); + + if (status && !sessionID.empty() && !uname.empty()) { + authOK = true; + + parentAccount = api.getString("mainAccount"); + childAccounts = api.getStringMap("subAccounts"); + + if (!ConfigLoginServer::getUseOldSuidGenerator()) { + user_id = static_cast(api.getNullableValue("user_id")); + parent_id = static_cast(api.getNullableValue("parent_id")); + } else { + if (parentAccount.length() > MAX_ACCOUNT_NAME_LENGTH) { + parentAccount.resize(MAX_ACCOUNT_NAME_LENGTH); + } + + if (uname.length() > MAX_ACCOUNT_NAME_LENGTH) { + uname.resize(MAX_ACCOUNT_NAME_LENGTH); + } + + parent_id = std::hash < std::string > {}(parentAccount.c_str()); + user_id = std::hash < std::string > {}(uname.c_str()); + } + } else { + std::string msg(api.getString("message")); + if (msg.empty()) { + msg = "Invalid username or password."; + } + + ErrorMessage err("Login Failed", msg); + this->send(err, true); + } + } else { + ErrorMessage err("Login Failed", "Could not connect to remote."); + this->send(err, true); + } } } else { // test mode @@ -230,36 +266,41 @@ void ClientConnection::validateClient(const std::string &id, const std::string & if (!testMode) { REPORT_LOG(true, ("Client connected. Username: %s (%i) \n", uname.c_str(), user_id)); - if (!parentAccount.empty()) { - if (parentAccount != uname) { - REPORT_LOG(true, ("\t%s's parent is %s (%i) \n", uname.c_str(), parentAccount.c_str(), parent_id)); - } - } else { - parentAccount = "(Empty Parent!) " + uname; - } - - for (auto i : childAccounts) { - StationId child_id = static_cast(i.first); - std::string child(i.second); - - if (!child.empty() && i.first > 0) { - if (ConfigLoginServer::getUseOldSuidGenerator()) { - if (child.length() > MAX_ACCOUNT_NAME_LENGTH) { - child.resize(MAX_ACCOUNT_NAME_LENGTH); - } - - child_id = std::hash < std::string > {}(child.c_str()); - } - - REPORT_LOG((parent_id != - child_id), ("\tchild of %s (%i) is %s (%i) \n", parentAccount.c_str(), parent_id, child.c_str(), child_id)); - - // insert all related accounts, if not already there, into the db - if (parent_id != child_id) { - DatabaseConnection::getInstance().upsertAccountRelationship(parent_id, child_id); + if (!useSimpleAuth) { + if (!parentAccount.empty()) { + if (parentAccount != uname) { + REPORT_LOG(true, + ("\t%s's parent is %s (%i) \n", uname.c_str(), parentAccount.c_str(), parent_id)); } } else { - WARNING(true, ("Login API returned empty child account(s).")); + parentAccount = "(Empty Parent!) " + uname; + } + + + for (auto i : childAccounts) { + StationId child_id = static_cast(i.first); + std::string child(i.second); + + if (!child.empty() && i.first > 0) { + if (ConfigLoginServer::getUseOldSuidGenerator()) { + if (child.length() > MAX_ACCOUNT_NAME_LENGTH) { + child.resize(MAX_ACCOUNT_NAME_LENGTH); + } + + child_id = std::hash < std::string > {}(child.c_str()); + } + + REPORT_LOG((parent_id != + child_id), + ("\tchild of %s (%i) is %s (%i) \n", parentAccount.c_str(), parent_id, child.c_str(), child_id)); + + // insert all related accounts, if not already there, into the db + if (parent_id != child_id) { + DatabaseConnection::getInstance().upsertAccountRelationship(parent_id, child_id); + } + } else { + WARNING(true, ("Login API returned empty child account(s).")); + } } } diff --git a/engine/server/application/LoginServer/src/shared/ClientConnection.h b/engine/server/application/LoginServer/src/shared/ClientConnection.h index 8f92f68f..cc8cac60 100755 --- a/engine/server/application/LoginServer/src/shared/ClientConnection.h +++ b/engine/server/application/LoginServer/src/shared/ClientConnection.h @@ -74,20 +74,6 @@ private: //----------------------------------------------------------------------- -// stolen from http://www.codeproject.com/Articles/10880/A-trim-implementation-for-std-string -// i'm rusty and haven't gotten to lambdas yet -inline const std::string trim(std::string str) -{ - - str.erase(str.begin(), std::find_if(str.begin(), str.end(), - [](char& ch)->bool { return !isspace(ch); })); - str.erase(std::find_if(str.rbegin(), str.rend(), - [](char& ch)->bool { return !isspace(ch); }).base(), str.end()); - return str; -} - -//----------------------------------------------------------------------- - inline const StationId ClientConnection::getStationId() const { return m_stationId; diff --git a/engine/server/application/LoginServer/src/shared/ConfigLoginServer.cpp b/engine/server/application/LoginServer/src/shared/ConfigLoginServer.cpp index 6279494e..b4fdd29b 100755 --- a/engine/server/application/LoginServer/src/shared/ConfigLoginServer.cpp +++ b/engine/server/application/LoginServer/src/shared/ConfigLoginServer.cpp @@ -87,6 +87,7 @@ void ConfigLoginServer::install(void) KEY_INT (maxCharactersPerAccount, 20); KEY_BOOL (validateClientVersion, true); KEY_BOOL (validateStationKey, false); + KEY_BOOL (easyExternalAccess, false); KEY_BOOL (doSessionLogin, false); KEY_BOOL (doConsumption, false); KEY_STRING (sessionServers, "localhost:3004"); @@ -116,6 +117,7 @@ void ConfigLoginServer::install(void) KEY_BOOL(requireSecureLoginForCsTool, true); KEY_BOOL(useExternalAuth, false); KEY_STRING(externalAuthURL, ""); + KEY_BOOL(useSimpleAuth, true); KEY_BOOL(useOldSuidGenerator, false); int index = 0; @@ -163,7 +165,7 @@ void ConfigLoginServer::install(void) } { - char keyName[500]; + char keyName[500]; for (int index=0; index < ms_numPurgePhases; index++) { snprintf(keyName,sizeof(keyName),"purgePhaseAdvanceDays%i",index); diff --git a/engine/server/application/LoginServer/src/shared/ConfigLoginServer.h b/engine/server/application/LoginServer/src/shared/ConfigLoginServer.h index 484071f6..25b38fd0 100755 --- a/engine/server/application/LoginServer/src/shared/ConfigLoginServer.h +++ b/engine/server/application/LoginServer/src/shared/ConfigLoginServer.h @@ -20,6 +20,7 @@ class ConfigLoginServer int httpServicePort; bool validateClientVersion; bool validateStationKey; + bool easyExternalAccess; bool doSessionLogin; bool doConsumption; const char * sessionServers; @@ -64,12 +65,13 @@ class ConfigLoginServer int populationLightThresholdPercent; int csToolPort; - bool requireSecureLoginForCsTool; - bool useExternalAuth; + bool requireSecureLoginForCsTool; + bool useExternalAuth; + bool useSimpleAuth; const char * externalAuthURL; - bool useOldSuidGenerator; + bool useOldSuidGenerator; }; static const uint16 getCentralServicePort(); @@ -80,6 +82,7 @@ class ConfigLoginServer static const uint16 getHttpServicePort(); static const bool getValidateClientVersion(); static const bool getValidateStationKey(); + static const bool getEasyExternalAccess(); static const bool getDoSessionLogin(); static const bool getDoConsumption(); static const char * getSessionServers(); @@ -132,8 +135,9 @@ class ConfigLoginServer static int getPopulationMediumThresholdPercent(); static int getPopulationLightThresholdPercent(); - static bool getUseExternalAuth(); + static bool getUseExternalAuth(); static const char * getExternalAuthUrl(); + static const bool getUseSimpleAuth(); static bool getUseOldSuidGenerator(); // has character creation for this cluster been disabled through config option @@ -217,6 +221,13 @@ inline const bool ConfigLoginServer::getValidateStationKey() // ---------------------------------------------------------------------- +inline const bool ConfigLoginServer::getEasyExternalAccess() +{ + return (data->easyExternalAccess); +} + +// ---------------------------------------------------------------------- + inline const bool ConfigLoginServer::getDoSessionLogin() { return (data->doSessionLogin); @@ -487,6 +498,10 @@ inline const char * ConfigLoginServer::getExternalAuthUrl() return data->externalAuthURL; } +inline const bool ConfigLoginServer::getUseSimpleAuth() +{ + return data->useSimpleAuth; +} inline bool ConfigLoginServer::getUseOldSuidGenerator() { diff --git a/engine/server/application/LoginServer/src/shared/LoginServer.cpp b/engine/server/application/LoginServer/src/shared/LoginServer.cpp index 342a2dfb..677ad357 100755 --- a/engine/server/application/LoginServer/src/shared/LoginServer.cpp +++ b/engine/server/application/LoginServer/src/shared/LoginServer.cpp @@ -1438,7 +1438,11 @@ void LoginServer::sendClusterStatus(ClientConnection &conn) const { // size_t connectionServerChoice = Random::random(cle->m_connectionServers.size() - 1); //lint !e713 !e732 // loss of precision (arg no 1) ConnectionServerEntry &connServer = cle->m_connectionServers[0]; - item.m_connectionServerAddress = connServer.clientServiceAddress; + if (ConfigLoginServer::getEasyExternalAccess()) { + item.m_connectionServerAddress = cle->m_address; + } else { + item.m_connectionServerAddress = connServer.clientServiceAddress; + } if (clientIsPrivate) { item.m_connectionServerPort = connServer.clientServicePortPrivate; } else { diff --git a/engine/server/application/PlanetServer/src/linux/PlanetServer.profdata b/engine/server/application/PlanetServer/src/linux/PlanetServer.profdata index 9ae349d2..bfe2b34b 100644 Binary files a/engine/server/application/PlanetServer/src/linux/PlanetServer.profdata and b/engine/server/application/PlanetServer/src/linux/PlanetServer.profdata differ diff --git a/engine/server/application/PlanetServer/src/linux/main.cpp b/engine/server/application/PlanetServer/src/linux/main.cpp index fff64b5e..20dd2b65 100755 --- a/engine/server/application/PlanetServer/src/linux/main.cpp +++ b/engine/server/application/PlanetServer/src/linux/main.cpp @@ -1,3 +1,5 @@ +#include + #include "FirstPlanetServer.h" #include "ConfigPlanetServer.h" #include "PlanetServer.h" @@ -14,10 +16,20 @@ #include "sharedThread/SetupSharedThread.h" #include "sharedUtility/SetupSharedUtility.h" -#ifndef STELLA_INTERNAL -#include "webAPIHeartbeat.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); #endif +inline void signalHandler(int s){ + printf("PlanetServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== void dumpPid(const char * argv) @@ -31,9 +43,11 @@ void dumpPid(const char * argv) int main(int argc, char ** argv) { -#ifndef STELLA_INTERNAL - StellaBellum::webAPIHeartbeat(); -#endif + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); // dumpPid(argv[0]); @@ -75,8 +89,8 @@ int main(int argc, char ** argv) SetupSharedThread::remove(); #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); exit(0); #endif - return 0; } diff --git a/engine/server/application/TaskManager/src/linux/ProcessSpawner.cpp b/engine/server/application/TaskManager/src/linux/ProcessSpawner.cpp index e63ffd6b..f0327e4a 100755 --- a/engine/server/application/TaskManager/src/linux/ProcessSpawner.cpp +++ b/engine/server/application/TaskManager/src/linux/ProcessSpawner.cpp @@ -152,7 +152,7 @@ bool ProcessSpawner::isProcessActive(uint32 pid) void ProcessSpawner::kill(uint32 pid) { - IGNORE_RETURN(::kill(static_cast(pid), SIGKILL)); + IGNORE_RETURN(::kill(static_cast(pid), SIGTERM)); int status; IGNORE_RETURN(waitpid(static_cast(pid), &status, 0)); } diff --git a/engine/server/application/TaskManager/src/linux/TaskManager.profdata b/engine/server/application/TaskManager/src/linux/TaskManager.profdata index aab8dc18..1419c2eb 100644 Binary files a/engine/server/application/TaskManager/src/linux/TaskManager.profdata and b/engine/server/application/TaskManager/src/linux/TaskManager.profdata differ diff --git a/engine/server/application/TaskManager/src/linux/main.cpp b/engine/server/application/TaskManager/src/linux/main.cpp index 8ee0052f..21c69818 100755 --- a/engine/server/application/TaskManager/src/linux/main.cpp +++ b/engine/server/application/TaskManager/src/linux/main.cpp @@ -1,3 +1,5 @@ +#include + #include "sharedFoundation/FirstSharedFoundation.h" #include "ConfigTaskManager.h" @@ -13,10 +15,30 @@ #include "sharedRandom/SetupSharedRandom.h" #include "sharedThread/SetupSharedThread.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); +#endif + +inline void signalHandler(int s){ + printf("TaskManager terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== int main(int argc, char ** argv) { + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); + SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -42,6 +64,7 @@ int main(int argc, char ** argv) SetupSharedFoundation::remove(); #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); exit(0); #endif diff --git a/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.cpp b/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.cpp index c8bc4b45..120936ae 100755 --- a/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.cpp +++ b/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.cpp @@ -39,7 +39,7 @@ bool CharacterNameLocator::locateObjects(DB::Session *session, const std::string break; m_characterIds.push_back(i->character_id.getValue()); - m_stationIds.push_back(i->character_station_id.getValue()); + m_stationIds.push_back(static_cast(i->character_station_id.getValue())); m_characterNames.push_back(i->character_name.getValueASCII()); m_characterFullNames.push_back(i->character_full_name.getValueASCII()); m_characterCreateTime.push_back(i->character_create_time.getValue() + (7 * 60 * 60)); diff --git a/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.h b/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.h index 6227b30e..3ca8cd55 100755 --- a/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.h +++ b/engine/server/library/serverDatabase/src/shared/CharacterNameLocator.h @@ -14,7 +14,6 @@ #include "sharedDatabaseInterface/BindableNetworkId.h" #include "sharedDatabaseInterface/DbQuery.h" #include "serverDatabase/ObjectLocator.h" -#include "sharedFoundation/StationId.h" #include // ====================================================================== @@ -33,11 +32,11 @@ class CharacterNameLocator : public ObjectLocator struct CharacterNameRow { DB::BindableNetworkId character_id; - DB::BindableInt64 character_station_id; + DB::BindableLong character_station_id; DB::BindableString<127> character_name; DB::BindableString<127> character_full_name; - DB::BindableInt64 character_create_time; - DB::BindableInt64 character_last_login_time; + DB::BindableLong character_create_time; + DB::BindableLong character_last_login_time; }; class CharacterNameQuery : public DB::Query @@ -64,11 +63,11 @@ class CharacterNameLocator : public ObjectLocator private: std::vector m_characterIds; - std::vector m_stationIds; + std::vector m_stationIds; std::vector m_characterNames; std::vector m_characterFullNames; - std::vector m_characterCreateTime; - std::vector m_characterLastLoginTime; + std::vector m_characterCreateTime; + std::vector m_characterLastLoginTime; }; // ====================================================================== diff --git a/engine/server/library/serverDatabase/src/shared/Persister.cpp b/engine/server/library/serverDatabase/src/shared/Persister.cpp index 461cf7a0..0982765d 100755 --- a/engine/server/library/serverDatabase/src/shared/Persister.cpp +++ b/engine/server/library/serverDatabase/src/shared/Persister.cpp @@ -290,10 +290,10 @@ void Persister::onFrameBarrierReached() void Persister::startSave(void) { - DEBUG_REPORT_LOG(ConfigServerDatabase::getReportSaveTimes(),("Starting save with data for %i objects (%i new)\n",m_objectSnapshotMap.size(), m_newObjectCount)); - LOG("SaveTimes",("Starting save with data for %i objects (%i new)",m_objectSnapshotMap.size(), m_newObjectCount)); + //DEBUG_REPORT_LOG(ConfigServerDatabase::getReportSaveTimes(),("Starting save with data for %i objects (%i new)\n",m_objectSnapshotMap.size(), m_newObjectCount)); + //LOG("SaveTimes",("Starting save with data for %i objects (%i new)",m_objectSnapshotMap.size(), m_newObjectCount)); // notify Central that a save is starting. It needs this to determine when it can perform graceful shutdowns - LOG("Database",("Sending DatabaseSaveStart network message to Central.")); + //LOG("Database",("Sending DatabaseSaveStart network message to Central.")); DatabaseSaveStart const startSaveMessage; DatabaseProcess::getInstance().sendToCentralServer(startSaveMessage, true); @@ -347,7 +347,7 @@ void Persister::startSave(void) { GenericValueTypeMessage const saveCompleteMessage("DatabaseSaveComplete", ++m_saveCounter); DatabaseProcess::getInstance().sendToCentralServer(saveCompleteMessage, true); - LOG("Database",("Sending DatabaseSaveComplete network message to Central.")); + //LOG("Database",("Sending DatabaseSaveComplete network message to Central.")); } // clear the buffers @@ -619,19 +619,19 @@ void Persister::saveCompleted(Snapshot *completedSnapshot) if (saveTime > m_maxSaveTime) m_maxSaveTime = saveTime; - DEBUG_REPORT_LOG(true,("Save completed in %i. (Average %i, max %i)\n", saveTime, m_totalSaveTime/m_saveCount, m_maxSaveTime)); - LOG("SaveTimes",("Save completed in %i. (Average %i, max %i)", saveTime, m_totalSaveTime/m_saveCount, m_maxSaveTime)); + //DEBUG_REPORT_LOG(true,("Save completed in %i. (Average %i, max %i)\n", saveTime, m_totalSaveTime/m_saveCount, m_maxSaveTime)); + //LOG("SaveTimes",("Save completed in %i. (Average %i, max %i)", saveTime, m_totalSaveTime/m_saveCount, m_maxSaveTime)); m_lastSaveTime = saveTime; } - LOG("Database",("Sending DatabaseSaveComplete network message to Central.")); + //LOG("Database",("Sending DatabaseSaveComplete network message to Central.")); // TODO: so do we send this for the other snapshot type or not? hrmph // message Central Server that the current save cycle is complete GenericValueTypeMessage const saveCompleteMessage("DatabaseSaveComplete", ++m_saveCounter); DatabaseProcess::getInstance().sendToCentralServer(saveCompleteMessage, true); - LOG("Database",("Sending DatabaseSaveComplete network message to Central.")); + //LOG("Database",("Sending DatabaseSaveComplete network message to Central.")); } if (!found) { @@ -644,7 +644,7 @@ void Persister::saveCompleted(Snapshot *completedSnapshot) } } - DEBUG_REPORT_LOG(ConfigServerDatabase::getReportSaveTimes(),("New character save completed\n")); + //DEBUG_REPORT_LOG(ConfigServerDatabase::getReportSaveTimes(),("New character save completed\n")); } if (found && completedSnapshot != nullptr) { @@ -716,7 +716,7 @@ void Persister::receiveMessage(const MessageDispatch::Emitter & source, const Me { auto ri = static_cast(message).getByteStream().begin(); AddCharacterMessage ocm(ri); - DEBUG_REPORT_LOG(true, ("Got AddCharacterMessage for object %s.\n",ocm.getObjectId().getValueString().c_str())); + //DEBUG_REPORT_LOG(true, ("Got AddCharacterMessage for object %s.\n",ocm.getObjectId().getValueString().c_str())); addCharacter(ocm.getAccountNumber(), ocm.getObjectId(), ocm.getProcess(), ocm.getName(), ocm.getSpecial()); break; diff --git a/engine/server/library/serverDatabase/src/shared/Snapshot.cpp b/engine/server/library/serverDatabase/src/shared/Snapshot.cpp index c61520c0..80a9670b 100755 --- a/engine/server/library/serverDatabase/src/shared/Snapshot.cpp +++ b/engine/server/library/serverDatabase/src/shared/Snapshot.cpp @@ -31,7 +31,7 @@ Snapshot::Snapshot(DB::ModeQuery::Mode mode, bool useGoldDatabase) : m_mode(mode), m_timestamp(0) { - LOG("Snapshot",("Created snapshot")); + //LOG("Snapshot",("Created snapshot")); ++ms_creationCount; } @@ -54,7 +54,7 @@ Snapshot::~Snapshot() m_customStepList.clear(); ++ms_deletionCount; - LOG("Snapshot",("Deleted snapshot. %i outstanding, %i created, %i deleted", ms_creationCount-ms_deletionCount,ms_creationCount,ms_deletionCount)); + //LOG("Snapshot",("Deleted snapshot. %i outstanding, %i created, %i deleted", ms_creationCount-ms_deletionCount,ms_creationCount,ms_deletionCount)); } // ---------------------------------------------------------------------- diff --git a/engine/server/library/serverGame/src/shared/controller/AiCreatureController.cpp b/engine/server/library/serverGame/src/shared/controller/AiCreatureController.cpp index a51091c6..121e6383 100755 --- a/engine/server/library/serverGame/src/shared/controller/AiCreatureController.cpp +++ b/engine/server/library/serverGame/src/shared/controller/AiCreatureController.cpp @@ -574,7 +574,7 @@ float AICreatureController::realAlter(float time) setRetreating(false); - WARNING(true, ("AICreatureController::realAlter() owner(%s) inCombat(%s) Retreating has lasted(%d) > %d seconds. Auto-releasing retreat.", getDebugInformation().c_str(), getCreature()->isInCombat() ? "yes" : "no", retreatingTime, maxRetreatTime)); + DEBUG_WARNING(true, ("AICreatureController::realAlter() owner(%s) inCombat(%s) Retreating has lasted(%d) > %d seconds. Auto-releasing retreat.", getDebugInformation().c_str(), getCreature()->isInCombat() ? "yes" : "no", retreatingTime, maxRetreatTime)); } } } @@ -685,7 +685,7 @@ float AICreatureController::realAlter(float time) std::string warningString; m_movement->getDebugInfo(warningString); - WARNING(true, (FormattedString<4096>().sprintf("AICreatureController::realAlter() owner(%s) movement(%s) alter took %.0fms. Dumping movement info - %s\n", getDebugInformation().c_str(), AiMovementBase::getMovementString(m_movement->getType()), msec, warningString.c_str()))); + DEBUG_WARNING(true, (FormattedString<4096>().sprintf("AICreatureController::realAlter() owner(%s) movement(%s) alter took %.0fms. Dumping movement info - %s\n", getDebugInformation().c_str(), AiMovementBase::getMovementString(m_movement->getType()), msec, warningString.c_str()))); } } } @@ -751,7 +751,7 @@ bool AICreatureController::suspendMovement() else if (m_movement != AiMovementBaseNullPtr) { result = false; - WARNING(true, ("AICreatureController::suspendMovement called for creature %s when there is already a suspended movement type %d", + DEBUG_WARNING(true, ("AICreatureController::suspendMovement called for creature %s when there is already a suspended movement type %d", getOwner()->getNetworkId().getValueString().c_str(), static_cast(m_movement->getType()))); } return result; @@ -1117,7 +1117,7 @@ bool AICreatureController::faceTo( NetworkId const & targetId ) if (!target) { - WARNING(true, ("AICreatureController::faceTo() owner(%s) Unable to resolve target(%s) to a ServerObject", getDebugInformation().c_str(), targetId.getValueString().c_str())); + DEBUG_WARNING(true, ("AICreatureController::faceTo() owner(%s) Unable to resolve target(%s) to a ServerObject", getDebugInformation().c_str(), targetId.getValueString().c_str())); return false; } @@ -1162,7 +1162,7 @@ bool AICreatureController::follow( NetworkId const & targetId, float minDistance if (!target) { - WARNING(true, ("AICreatureController::follow() owner(%s) distance[%.2f...%.2f] Unable to resolve target(%s) to a ServerObject", getDebugInformation().c_str(), minDistance, maxDistance, targetId.getValueString().c_str())); + DEBUG_WARNING(true, ("AICreatureController::follow() owner(%s) distance[%.2f...%.2f] Unable to resolve target(%s) to a ServerObject", getDebugInformation().c_str(), minDistance, maxDistance, targetId.getValueString().c_str())); return false; } @@ -1210,7 +1210,7 @@ bool AICreatureController::follow( NetworkId const & targetId, Vector const & of if (!target) { - WARNING(true, ("AICreatureController::follow() owner(%s) offset(%.0f, %.0f, %.0f) Unable to resolve target(%s) to a ServerObject", getDebugInformation().c_str(), offset.x, offset.y, offset.z, targetId.getValueString().c_str())); + DEBUG_WARNING(true, ("AICreatureController::follow() owner(%s) offset(%.0f, %.0f, %.0f) Unable to resolve target(%s) to a ServerObject", getDebugInformation().c_str(), offset.x, offset.y, offset.z, targetId.getValueString().c_str())); return false; } @@ -1905,7 +1905,7 @@ float AICreatureController::getRespectRadius(NetworkId const & target) const } else { - WARNING(true, ("AICreatureController::getRespectRadius() owner(%s) master(%s) The owner has a master who is not a player. Why does this happen?", getDebugInformation().c_str(), (respectCreatureObject != nullptr) ? respectCreatureObject->getDebugInformation().c_str() : masterId.getValueString().c_str())); + DEBUG_WARNING(true, ("AICreatureController::getRespectRadius() owner(%s) master(%s) The owner has a master who is not a player. Why does this happen?", getDebugInformation().c_str(), (respectCreatureObject != nullptr) ? respectCreatureObject->getDebugInformation().c_str() : masterId.getValueString().c_str())); } } @@ -2402,7 +2402,7 @@ NetworkId AICreatureController::createWeapon(char const * const functionName, Cr if (inventory == nullptr) { - WARNING(true, ("AICreatureController::%s() Unable to find inventory for (%s) to place a weapon(%s)", functionName, getDebugInformation().c_str(), weaponName.getString())); + DEBUG_WARNING(true, ("AICreatureController::%s() Unable to find inventory for (%s) to place a weapon(%s)", functionName, getDebugInformation().c_str(), weaponName.getString())); } else { @@ -2432,7 +2432,7 @@ NetworkId AICreatureController::createWeapon(char const * const functionName, Cr if (weaponCrcName.getCrc() == 0) { - WARNING(true, ("AICreatureController::%s() Unable to resolve a weapon(%s) crc for (%s)", functionName, weaponTemplateName.c_str(), getDebugInformation().c_str())); + DEBUG_WARNING(true, ("AICreatureController::%s() Unable to resolve a weapon(%s) crc for (%s)", functionName, weaponTemplateName.c_str(), getDebugInformation().c_str())); } else { @@ -2445,7 +2445,7 @@ NetworkId AICreatureController::createWeapon(char const * const functionName, Cr } else { - WARNING(true, ("AICreatureController::%s() Unable to create a WeaponObject(%s) for (%s)", functionName, weaponTemplateName.c_str(), getDebugInformation().c_str())); + DEBUG_WARNING(true, ("AICreatureController::%s() Unable to create a WeaponObject(%s) for (%s)", functionName, weaponTemplateName.c_str(), getDebugInformation().c_str())); } } } @@ -2484,7 +2484,7 @@ void AICreatureController::equipPrimaryWeapon() { if (!isCombatAi()) { - WARNING(true, ("AICreatureController::equipPrimaryWeapon() owner(%s) A non-combat AI is trying to equip a weapon", getDebugInformation().c_str())); + DEBUG_WARNING(true, ("AICreatureController::equipPrimaryWeapon() owner(%s) A non-combat AI is trying to equip a weapon", getDebugInformation().c_str())); return; } @@ -2524,13 +2524,13 @@ void AICreatureController::equipPrimaryWeapon() } else { - WARNING(true, ("AICreatureController::equipPrimaryWeapon() owner(%s) Transfer of primaryWeapon(%s) to the visible equipped slot failed(%d).", getDebugInformation().c_str(), primaryWeaponServerObject->getDebugInformation().c_str(), errorCode)); + DEBUG_WARNING(true, ("AICreatureController::equipPrimaryWeapon() owner(%s) Transfer of primaryWeapon(%s) to the visible equipped slot failed(%d).", getDebugInformation().c_str(), primaryWeaponServerObject->getDebugInformation().c_str(), errorCode)); } } } else { - WARNING(true, ("AICreatureController::equipPrimaryWeapon() owner(%s) Unable to resolve primaryWeapon(%s:%s) to a WeaponObject.", getDebugInformation().c_str(), m_primaryWeapon.get().getValueString().c_str(), m_aiCreatureData->m_primaryWeapon.getString())); + DEBUG_WARNING(true, ("AICreatureController::equipPrimaryWeapon() owner(%s) Unable to resolve primaryWeapon(%s:%s) to a WeaponObject.", getDebugInformation().c_str(), m_primaryWeapon.get().getValueString().c_str(), m_aiCreatureData->m_primaryWeapon.getString())); } } } @@ -2549,7 +2549,7 @@ void AICreatureController::equipSecondaryWeapon() { if (!isCombatAi()) { - WARNING(true, ("AICreatureController::equipSecondaryWeapon() owner(%s) A non-combat AI is trying to equip a weapon", getDebugInformation().c_str())); + DEBUG_WARNING(true, ("AICreatureController::equipSecondaryWeapon() owner(%s) A non-combat AI is trying to equip a weapon", getDebugInformation().c_str())); return; } @@ -2589,13 +2589,13 @@ void AICreatureController::equipSecondaryWeapon() } else { - WARNING(true, ("AICreatureController::equipSecondaryWeapon() owner(%s) Transfer of secondaryWeapon(%s) to the visible equipped slot failed(%d).", getDebugInformation().c_str(), secondaryWeaponServerObject->getDebugInformation().c_str(), errorCode)); + DEBUG_WARNING(true, ("AICreatureController::equipSecondaryWeapon() owner(%s) Transfer of secondaryWeapon(%s) to the visible equipped slot failed(%d).", getDebugInformation().c_str(), secondaryWeaponServerObject->getDebugInformation().c_str(), errorCode)); } } } else { - WARNING(true, ("AICreatureController::equipSecondaryWeapon() owner(%s) Unable to resolve secondaryWeapon(%s:%s) to a WeaponObject.", getDebugInformation().c_str(), m_secondaryWeapon.get().getValueString().c_str(), m_aiCreatureData->m_secondaryWeapon.getString())); + DEBUG_WARNING(true, ("AICreatureController::equipSecondaryWeapon() owner(%s) Unable to resolve secondaryWeapon(%s:%s) to a WeaponObject.", getDebugInformation().c_str(), m_secondaryWeapon.get().getValueString().c_str(), m_aiCreatureData->m_secondaryWeapon.getString())); } } } @@ -2614,7 +2614,7 @@ void AICreatureController::unEquipWeapons() { if (!isCombatAi()) { - WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) A non-combat AI is trying to unequip a weapon", getDebugInformation().c_str())); + DEBUG_WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) A non-combat AI is trying to unequip a weapon", getDebugInformation().c_str())); return; } @@ -2636,12 +2636,12 @@ void AICreatureController::unEquipWeapons() if (!ContainerInterface::transferItemToVolumeContainer(*inventory, *currentWeaponObject, creatureOwner, error)) { - WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) Transfer of the currentWeapon(%s) to the inventory failed(%d).", getDebugInformation().c_str(), currentWeaponObject->getDebugInformation().c_str(), error)); + DEBUG_WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) Transfer of the currentWeapon(%s) to the inventory failed(%d).", getDebugInformation().c_str(), currentWeaponObject->getDebugInformation().c_str(), error)); } } else { - WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) Unable to find an inventory.", getDebugInformation().c_str())); + DEBUG_WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) Unable to find an inventory.", getDebugInformation().c_str())); } } @@ -2653,7 +2653,7 @@ void AICreatureController::unEquipWeapons() } else { - WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) nullptr default weapon", getDebugInformation().c_str())); + DEBUG_WARNING(true, ("AICreatureController::unEquipWeapons() owner(%s) nullptr default weapon", getDebugInformation().c_str())); } } } @@ -2822,7 +2822,7 @@ void AICreatureController::setRetreating(bool const retreating) } else { - WARNING(true, ("AICreatureController::setRetreating() ai(%s) Unable to resolve the cellId(%s) to a CellObject", creatureOwner->getDebugInformation().c_str(), cellId.getValueString().c_str())); + DEBUG_WARNING(true, ("AICreatureController::setRetreating() ai(%s) Unable to resolve the cellId(%s) to a CellObject", creatureOwner->getDebugInformation().c_str(), cellId.getValueString().c_str())); } } else diff --git a/engine/server/library/serverGame/src/shared/core/NameManager.cpp b/engine/server/library/serverGame/src/shared/core/NameManager.cpp index 2ee27216..3724892f 100755 --- a/engine/server/library/serverGame/src/shared/core/NameManager.cpp +++ b/engine/server/library/serverGame/src/shared/core/NameManager.cpp @@ -189,7 +189,7 @@ int NameManager::getTotalPlayerCount() const // ---------------------------------------------------------------------- -void NameManager::addPlayer(const NetworkId &id, StationId stationId, const std::string &name, const std::string &fullName, time_t createTime, time_t lastLoginTime, bool notifyOtherServers) +void NameManager::addPlayer(const NetworkId &id, uint32 stationId, const std::string &name, const std::string &fullName, time_t createTime, time_t lastLoginTime, bool notifyOtherServers) { std::string normalizedName(normalizeName(name)); @@ -221,18 +221,18 @@ void NameManager::addPlayer(const NetworkId &id, StationId stationId, const std: if (notifyOtherServers) { std::vector ids; - std::vector stationIds; + std::vector stationIds; std::vector characterNames; std::vector characterFullNames; - std::vector characterCreateTimes; - std::vector characterLastLoginTimes; + std::vector characterCreateTimes; + std::vector characterLastLoginTimes; ids.push_back(id); - stationIds.push_back(stationId); + stationIds.push_back(static_cast(stationId)); characterNames.push_back(normalizedName); characterFullNames.push_back(fullName); - characterCreateTimes.push_back(static_cast(createTime)); - characterLastLoginTimes.push_back(static_cast(lastLoginTime)); + characterCreateTimes.push_back(static_cast(createTime)); + characterLastLoginTimes.push_back(static_cast(lastLoginTime)); ServerMessageForwarding::beginBroadcast(); @@ -247,7 +247,7 @@ void NameManager::addPlayer(const NetworkId &id, StationId stationId, const std: void NameManager::renamePlayer(const NetworkId &id, const Unicode::String &name, const Unicode::String &fullName) { - StationId stationId = 0; + uint32 stationId = 0; time_t createTime = 0; time_t lastLoginTime = 0; @@ -279,7 +279,7 @@ const NetworkId & NameManager::getPlayerId(const std::string &name) const // ---------------------------------------------------------------------- -StationId NameManager::getPlayerStationId(const NetworkId &id) const +uint32 NameManager::getPlayerStationId(const NetworkId &id) const { IdToCharacterDataMapType::const_iterator i=m_idToCharacterDataMap->find(id); if (i==m_idToCharacterDataMap->end()) @@ -316,24 +316,24 @@ const std::string & NameManager::getPlayerFullName(const NetworkId &id) const // ---------------------------------------------------------------------- -int64 NameManager::getPlayerCreateTime(const NetworkId &id) const +int NameManager::getPlayerCreateTime(const NetworkId &id) const { IdToCharacterDataMapType::const_iterator i=m_idToCharacterDataMap->find(id); if (i==m_idToCharacterDataMap->end()) return -1; else - return static_cast(i->second.createTime); + return static_cast(i->second.createTime); } // ---------------------------------------------------------------------- -int64 NameManager::getPlayerLastLoginTime(const NetworkId &id) const +int NameManager::getPlayerLastLoginTime(const NetworkId &id) const { IdToCharacterDataMapType::const_iterator i=m_idToCharacterDataMap->find(id); if (i==m_idToCharacterDataMap->end()) return -1; else - return static_cast(i->second.lastLoginTime); + return static_cast(i->second.lastLoginTime); } // ---------------------------------------------------------------------- @@ -464,7 +464,7 @@ void NameManager::releasePlayerName(const NetworkId &id) // ---------------------------------------------------------------------- -void NameManager::addPlayers(const std::vector &ids, const std::vector &stationIds, const std::vector &names, const std::vector &fullNames, const std::vector &createTimes, const std::vector &lastLoginTimes) +void NameManager::addPlayers(const std::vector &ids, const std::vector &stationIds, const std::vector &names, const std::vector &fullNames, const std::vector &createTimes, const std::vector &lastLoginTimes) { DEBUG_FATAL(ids.size() != stationIds.size(),("Programmer bug: Vectors ids and stationIds must be the same size.\n")); DEBUG_FATAL(ids.size() != names.size(),("Programmer bug: Vectors ids and names must be the same size.\n")); @@ -483,20 +483,20 @@ void NameManager::addPlayers(const std::vector &ids, const std::vecto void NameManager::sendAllNamesToServer (std::vector const & servers) const { std::vector ids; - std::vector stationIds; + std::vector stationIds; std::vector characterNames; std::vector characterFullNames; - std::vector characterCreateTimes; - std::vector characterLastLoginTimes; + std::vector characterCreateTimes; + std::vector characterLastLoginTimes; for (IdToCharacterDataMapType::const_iterator i=m_idToCharacterDataMap->begin(); i!=m_idToCharacterDataMap->end(); ++i) { ids.push_back(i->first); - stationIds.push_back(i->second.stationId); + stationIds.push_back(static_cast(i->second.stationId)); characterNames.push_back(i->second.characterName); characterFullNames.push_back(i->second.characterFullName); - characterCreateTimes.push_back(static_cast(i->second.createTime)); - characterLastLoginTimes.push_back(static_cast(i->second.lastLoginTime)); + characterCreateTimes.push_back(static_cast(i->second.createTime)); + characterLastLoginTimes.push_back(static_cast(i->second.lastLoginTime)); } ServerMessageForwarding::begin(servers); diff --git a/engine/server/library/serverGame/src/shared/core/NameManager.h b/engine/server/library/serverGame/src/shared/core/NameManager.h index 453ba626..6d440b16 100755 --- a/engine/server/library/serverGame/src/shared/core/NameManager.h +++ b/engine/server/library/serverGame/src/shared/core/NameManager.h @@ -8,8 +8,6 @@ #ifndef INCLUDED_NameManager_H #define INCLUDED_NameManager_H -#include "sharedFoundation/StationId.h" - // ====================================================================== class NameGenerator; @@ -34,17 +32,17 @@ class NameManager public: int getTotalPlayerCount () const; - void addPlayer (const NetworkId &id, StationId stationId, const std::string &name, const std::string &fullName, time_t createTime, time_t lastLoginTime, bool notifyOtherServers); - void addPlayers (const std::vector &ids, const std::vector &stationIds, const std::vector &names, const std::vector &fullNames, const std::vector &createTimes, const std::vector &lastLoginTimes); + void addPlayer (const NetworkId &id, uint32 stationId, const std::string &name, const std::string &fullName, time_t createTime, time_t lastLoginTime, bool notifyOtherServers); + void addPlayers (const std::vector &ids, const std::vector &stationIds, const std::vector &names, const std::vector &fullNames, const std::vector &createTimes, const std::vector &lastLoginTimes); void renamePlayer (const NetworkId &id, const Unicode::String &name, const Unicode::String &fullName); std::string debugGetNameList () const; bool isPlayer (NetworkId const & possiblePlayer) const; const NetworkId & getPlayerId (const std::string &name) const; - StationId getPlayerStationId (const NetworkId &id) const; + uint32 getPlayerStationId (const NetworkId &id) const; const std::string & getPlayerName (const NetworkId &id) const; const std::string & getPlayerFullName (const NetworkId &id) const; - int64 getPlayerCreateTime (const NetworkId &id) const; - int64 getPlayerLastLoginTime (const NetworkId &id) const; + int getPlayerCreateTime (const NetworkId &id) const; + int getPlayerLastLoginTime (const NetworkId &id) const; void getPlayerWithLastLoginTimeAfter (time_t time, std::multimap, std::string> > &result) const; void getPlayerWithLastLoginTimeBefore (time_t time, std::multimap, std::string> > &result) const; void getPlayerWithLastLoginTimeBetween (time_t timeLowerRange, time_t timeUpperRange, std::multimap, std::string> > &result) const; @@ -80,7 +78,7 @@ class NameManager struct CharacterData { - StationId stationId; + uint32 stationId; std::string characterName; std::string characterFullName; time_t createTime; diff --git a/engine/server/library/serverGame/src/shared/core/ServerUniverse.cpp b/engine/server/library/serverGame/src/shared/core/ServerUniverse.cpp index 8878ba49..f55131f3 100755 --- a/engine/server/library/serverGame/src/shared/core/ServerUniverse.cpp +++ b/engine/server/library/serverGame/src/shared/core/ServerUniverse.cpp @@ -570,8 +570,8 @@ void ServerUniverse::updateAndValidateData() m_masterCityObject->addToWorld(); } + if (!m_thisPlanet) { // this entire section of code is fucking stupid but less fucking stupid than before, since this loop ran EVERY TIME //-- create planet objects if they don't exist - { //-- load planet table Iff iff; if (iff.open ("universe/planets.iff", true)) @@ -605,11 +605,7 @@ void ServerUniverse::updateAndValidateData() } else DEBUG_WARNING (true, ("universe/planets.iff not found")); - } - //-- create this planet, in case it's not in the table - if (!m_thisPlanet) - { FATAL(!ConfigServerGame::getAllowMasterObjectCreation(), ("Planet object %s was not found!", ServerWorld::getSceneId().c_str())); DEBUG_WARNING(true,("Spawning planet %s, which was not listed in planets.iff", ServerWorld::getSceneId().c_str())); IGNORE_RETURN(createPlanetObject(ServerWorld::getSceneId())); diff --git a/engine/server/library/serverGame/src/shared/object/GuildObject.cpp b/engine/server/library/serverGame/src/shared/object/GuildObject.cpp index 0ee903a1..b3b87ac4 100755 --- a/engine/server/library/serverGame/src/shared/object/GuildObject.cpp +++ b/engine/server/library/serverGame/src/shared/object/GuildObject.cpp @@ -398,7 +398,7 @@ GuildInfo const * GuildObject::getGuildInfo(int guildId) const GuildMemberInfo const * GuildObject::getGuildMemberInfo(int guildId, NetworkId const &memberId) const { - std::map, GuildMemberInfo, GuildObject>::const_iterator const iterFind = m_membersInfo.find(std::make_pair(guildId, memberId)); + const auto iterFind = m_membersInfo.find(std::make_pair(guildId, memberId)); if (iterFind != m_membersInfo.end()) return &(iterFind->second); @@ -486,7 +486,7 @@ void GuildObject::getGuildMemberIds(int guildId, std::vector &results { results.clear(); - for (std::map, GuildMemberInfo, GuildObject>::const_iterator iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) + for (auto iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) { if (iter->first.first != guildId) break; @@ -501,7 +501,7 @@ void GuildObject::getMemberIdsWithPermissions(int guildId, int permissions, std: { results.clear(); - for (std::map, GuildMemberInfo, GuildObject>::const_iterator iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) + for (auto iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) { if (iter->first.first != guildId) break; @@ -635,7 +635,7 @@ void GuildObject::disbandGuild(int guildId) // remove all members { std::vector memberIds; - for (std::map, GuildMemberInfo, GuildObject>::const_iterator iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) + for (auto iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) { if (iter->first.first != guildId) break; @@ -647,7 +647,7 @@ void GuildObject::disbandGuild(int guildId) m_members.erase(memberSpec); } - for (std::vector::const_iterator iterMemberId = memberIds.begin(); iterMemberId != memberIds.end(); ++iterMemberId) + for (auto iterMemberId = memberIds.begin(); iterMemberId != memberIds.end(); ++iterMemberId) { std::map::const_iterator iterFind = m_fullMembers.find(*iterMemberId); if ((iterFind != m_fullMembers.end()) && (iterFind->second == guildId)) diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerArmorTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerArmorTemplate.cpp index c154863d..b1084421 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerArmorTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerArmorTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -1101,46 +1104,55 @@ char paramName[MAX_NAME_SIZE]; { 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) + + 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"): { - delete *iter; - *iter = nullptr; + 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; } - m_specialProtection.clear(); - m_specialProtectionAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) + break; + case constcrc("vulnerability"): + m_vulnerability.loadFromIff(file); + break; + case constcrc("encumbrance"): { - 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) - { - IntegerParam dummy; - dummy.loadFromIff(file); + 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) + { + IntegerParam dummy; + dummy.loadFromIff(file); + } } + break; } file.exitChunk(true); } @@ -1462,10 +1474,16 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch (runtimeCrc(paramName)) { + case constcrc("type"): + m_type.loadFromIff(file); + break; + case constcrc("effectiveness"): + m_effectiveness.loadFromIff(file); + break; + } + file.exitChunk(true); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerBuildingObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerBuildingObjectTemplate.cpp index 81490168..9d6d3f67 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerBuildingObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerBuildingObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -414,10 +417,15 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("maintenanceCost"): + m_maintenanceCost.loadFromIff(file); + break; + case constcrc("isPublic"): + m_isPublic.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerCreatureObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerCreatureObjectTemplate.cpp index afc3dcdc..f520b26c 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerCreatureObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerCreatureObjectTemplate.cpp @@ -19,6 +19,9 @@ #include "sharedObject/ObjectTemplateList.h" #include "sharedUtility/NameGenerator.h" #include "sharedNetworkMessages/NameErrors.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS #include "ServerWeaponObjectTemplate.h" //@END TFD TEMPLATE REFS @@ -2372,112 +2375,129 @@ char paramName[MAX_NAME_SIZE]; { 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) + switch(runtimeCrc(paramName)) { + case constcrc("defaultWeapon"): + m_defaultWeapon.loadFromIff(file); + break; + case constcrc("attributes"): { - IntegerParam dummy; - dummy.loadFromIff(file); + 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) + { + IntegerParam 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) + break; + case constcrc("minAttributes"): { - IntegerParam dummy; - dummy.loadFromIff(file); + 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) + { + IntegerParam 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) + break; + case constcrc("maxAttributes"): { - IntegerParam dummy; - dummy.loadFromIff(file); + 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) + { + IntegerParam 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) + 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"): { - delete *iter; - *iter = nullptr; + 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; } - m_attribMods.clear(); - m_attribModsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) + 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"): { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_attribMods.push_back(newData); + 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); + } } - 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) + break; + case constcrc("mentalStatesDecay"): { - 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); + 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); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerDraftSchematicObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerDraftSchematicObjectTemplate.cpp index 80d70837..38193c35 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerDraftSchematicObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerDraftSchematicObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS #include "ServerFactoryObjectTemplate.h" #include "ServerObjectTemplate.h" @@ -1280,77 +1283,90 @@ char paramName[MAX_NAME_SIZE]; { 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) + + 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"): { - delete *iter; - *iter = nullptr; + 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; } - m_slots.clear(); - m_slotsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) + break; + case constcrc("skillCommands"): { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_slots.push_back(newData); + 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; } - m_slotsLoaded = 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; } - 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); } @@ -1990,35 +2006,44 @@ char paramName[MAX_NAME_SIZE]; { 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) + + switch(runtimeCrc(paramName)) { + case constcrc("optional"): + m_optional.loadFromIff(file); + break; + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("options"): { - delete *iter; - *iter = nullptr; + 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; } - 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; + break; + case constcrc("optionalSkillCommand"): + m_optionalSkillCommand.loadFromIff(file); + break; + case constcrc("complexity"): + m_complexity.loadFromIff(file); + break; + case constcrc("appearance"): + m_appearance.loadFromIff(file); + break; } - 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); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerHarvesterInstallationObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerHarvesterInstallationObjectTemplate.cpp index 01f1d037..c4eb410a 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerHarvesterInstallationObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerHarvesterInstallationObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -802,14 +805,21 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("maxExtractionRate"): + m_maxExtractionRate.loadFromIff(file); + break; + case constcrc("currentExtractionRate"): + m_currentExtractionRate.loadFromIff(file); + break; + case constcrc("maxHopperSize"): + m_maxHopperSize.loadFromIff(file); + break; + case constcrc("masterClassName"): + m_masterClassName.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerIntangibleObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerIntangibleObjectTemplate.cpp index b5bba948..81bca859 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerIntangibleObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerIntangibleObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -371,7 +374,7 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "count") == 0) + if (strcmp(paramName, "count")) m_count.loadFromIff(file); file.exitChunk(true); } @@ -905,31 +908,38 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "ingredientType") == 0) - m_ingredientType.loadFromIff(file); - else if (strcmp(paramName, "ingredients") == 0) - { - std::vector::iterator iter; - for (iter = m_ingredients.begin(); iter != m_ingredients.end(); ++iter) + + switch(runtimeCrc(paramName)) { + case constcrc("ingredientType"): + m_ingredientType.loadFromIff(file); + break; + case constcrc("ingredients"): { - delete *iter; + 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; } - 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("complexity"): + m_complexity.loadFromIff(file); + break; + case constcrc("skillCommand"): + m_skillCommand.loadFromIff(file); + break; } - else if (strcmp(paramName, "complexity") == 0) - m_complexity.loadFromIff(file); - else if (strcmp(paramName, "skillCommand") == 0) - m_skillCommand.loadFromIff(file); file.exitChunk(true); } @@ -1250,10 +1260,15 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "name") == 0) - m_name.loadFromIff(file); - else if (strcmp(paramName, "value") == 0) - m_value.loadFromIff(file); + + switch(runtimeCrc(paramName)) { + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("value"): + m_value.loadFromIff(file); + break; + } file.exitChunk(true); } @@ -1617,12 +1632,18 @@ char paramName[MAX_NAME_SIZE]; { 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); - else if (strcmp(paramName, "count") == 0) - m_count.loadFromIff(file); + + switch(runtimeCrc(paramName)) { + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("ingredient"): + m_ingredient.loadFromIff(file); + break; + case constcrc("count"): + m_count.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerManufactureSchematicObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerManufactureSchematicObjectTemplate.cpp index 67025cdc..2d518a39 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerManufactureSchematicObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerManufactureSchematicObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -821,49 +824,57 @@ char paramName[MAX_NAME_SIZE]; { 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) + + switch(runtimeCrc(paramName)) { + case constcrc("draftSchematic"): + m_draftSchematic.loadFromIff(file); + break; + case constcrc("creator"): + m_creator.loadFromIff(file); + break; + case constcrc("ingredients"): { - delete *iter; - *iter = nullptr; + 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; } - m_ingredients.clear(); - m_ingredientsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) + break; + case constcrc("itemCount"): + m_itemCount.loadFromIff(file); + break; + case constcrc("attributes"): { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_ingredients.push_back(newData); + 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; } - 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; + break; } file.exitChunk(true); } @@ -1110,10 +1121,16 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("ingredient"): + m_ingredient.loadFromIff(file); + break; + } + file.exitChunk(true); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerObjectTemplate.cpp index 7fa2c531..5ce1ec05 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS #include "ServerObjectTemplate.h" //@END TFD TEMPLATE REFS @@ -1900,150 +1903,168 @@ char paramName[MAX_NAME_SIZE]; { 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) + + switch(runtimeCrc(paramName)) { + case constcrc("sharedTemplate"): + m_sharedTemplate.loadFromIff(file); + break; + case constcrc("scripts"): { - delete *iter; - *iter = nullptr; + 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; } - m_scripts.clear(); - m_scriptsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) + break; + case constcrc("objvars"): + m_objvars.loadFromIff(file); + break; + case constcrc("volume"): + m_volume.loadFromIff(file); + break; + case constcrc("visibleFlags"): { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_scripts.push_back(newData); + 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) + { + IntegerParam * newData = new IntegerParam; + newData->loadFromIff(file); + m_visibleFlags.push_back(newData); + } + m_visibleFlagsLoaded = true; } - m_scriptsLoaded = 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) + { + IntegerParam * newData = new IntegerParam; + 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) + { + IntegerParam * newData = new IntegerParam; + 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; } - 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) - { - IntegerParam * newData = new IntegerParam; - 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) - { - IntegerParam * newData = new IntegerParam; - 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) - { - IntegerParam * newData = new IntegerParam; - 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); } @@ -2946,16 +2967,24 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("target"): + m_target.loadFromIff(file); + break; + case constcrc("value"): + m_value.loadFromIff(file); + break; + case constcrc("time"): + m_time.loadFromIff(file); + break; + case constcrc("timeAtValue"): + m_timeAtValue.loadFromIff(file); + break; + case constcrc("decay"): + m_decay.loadFromIff(file); + break; + } file.exitChunk(true); } @@ -3205,12 +3234,18 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("slotName"): + m_slotName.loadFromIff(file); + break; + case constcrc("equipObject"): + m_equipObject.loadFromIff(file); + break; + case constcrc("content"): + m_content.loadFromIff(file); + break; + } file.exitChunk(true); } @@ -4113,16 +4148,24 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("target"): + m_target.loadFromIff(file); + break; + case constcrc("value"): + m_value.loadFromIff(file); + break; + case constcrc("time"): + m_time.loadFromIff(file); + break; + case constcrc("timeAtValue"): + m_timeAtValue.loadFromIff(file); + break; + case constcrc("decay"): + m_decay.loadFromIff(file); + break; + } file.exitChunk(true); } @@ -4637,12 +4680,18 @@ char paramName[MAX_NAME_SIZE]; { 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); + + 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); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerTangibleObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerTangibleObjectTemplate.cpp index 2b4722d3..ab870769 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerTangibleObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerTangibleObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS #include "ServerArmorTemplate.h" //@END TFD TEMPLATE REFS @@ -1143,39 +1146,50 @@ char paramName[MAX_NAME_SIZE]; { 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) + + switch(runtimeCrc(paramName)) { + case constcrc("triggerVolumes"): { - delete *iter; - *iter = nullptr; + 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; } - 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; } - 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); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerVehicleObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerVehicleObjectTemplate.cpp index d014163a..bceba6d7 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerVehicleObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerVehicleObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -802,14 +805,21 @@ char paramName[MAX_NAME_SIZE]; { 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); + + 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); } diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerWeaponObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerWeaponObjectTemplate.cpp index e4716a76..51c8b8ca 100644 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerWeaponObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerWeaponObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -2483,36 +2486,54 @@ char paramName[MAX_NAME_SIZE]; { 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); + + 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); } diff --git a/engine/server/library/serverGame/src/shared/space/ShipComponentDataEngine.cpp b/engine/server/library/serverGame/src/shared/space/ShipComponentDataEngine.cpp index d571626e..d69578c6 100755 --- a/engine/server/library/serverGame/src/shared/space/ShipComponentDataEngine.cpp +++ b/engine/server/library/serverGame/src/shared/space/ShipComponentDataEngine.cpp @@ -116,43 +116,43 @@ bool ShipComponentDataEngine::readDataFromComponent (TangibleObject const & comp DynamicVariableList const & objvars = component.getObjVars (); if (!objvars.getItem (Objvars::engineAccelerationRate, m_engineAccelerationRate)) - WARNING (true, ("ShipComponentDataEngine [%s] has no engineAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineAccelerationRate.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no engineAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineAccelerationRate.c_str ())); if (!objvars.getItem (Objvars::engineDecelerationRate, m_engineDecelerationRate)) - WARNING (true, ("ShipComponentDataEngine [%s] has no engineDecelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineDecelerationRate.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no engineDecelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineDecelerationRate.c_str ())); if (!objvars.getItem (Objvars::enginePitchAccelerationRate, m_enginePitchAccelerationRate)) - WARNING (true, ("ShipComponentDataEngine [%s] has no enginePitchAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::enginePitchAccelerationRate.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no enginePitchAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::enginePitchAccelerationRate.c_str ())); else m_enginePitchAccelerationRate = convertDegreesToRadians(m_enginePitchAccelerationRate); if (!objvars.getItem (Objvars::engineYawAccelerationRate, m_engineYawAccelerationRate)) - WARNING (true, ("ShipComponentDataEngine [%s] has no engineYawAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineYawAccelerationRate.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no engineYawAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineYawAccelerationRate.c_str ())); else m_engineYawAccelerationRate = convertDegreesToRadians(m_engineYawAccelerationRate); if (!objvars.getItem (Objvars::engineRollAccelerationRate, m_engineRollAccelerationRate)) - WARNING (true, ("ShipComponentDataEngine [%s] has no engineRollAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineRollAccelerationRate.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no engineRollAccelerationRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineRollAccelerationRate.c_str ())); else m_engineRollAccelerationRate = convertDegreesToRadians(m_engineRollAccelerationRate); if (!objvars.getItem (Objvars::enginePitchRateMaximum, m_enginePitchRateMaximum)) - WARNING (true, ("ShipComponentDataEngine [%s] has no enginePitchRateMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::enginePitchRateMaximum.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no enginePitchRateMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::enginePitchRateMaximum.c_str ())); else m_enginePitchRateMaximum = convertDegreesToRadians(m_enginePitchRateMaximum); if (!objvars.getItem (Objvars::engineYawRateMaximum, m_engineYawRateMaximum)) - WARNING (true, ("ShipComponentDataEngine [%s] has no engineYawRateMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineYawRateMaximum.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no engineYawRateMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineYawRateMaximum.c_str ())); else m_engineYawRateMaximum = convertDegreesToRadians(m_engineYawRateMaximum); if (!objvars.getItem (Objvars::engineRollRateMaximum, m_engineRollRateMaximum)) - WARNING (true, ("ShipComponentDataEngine [%s] has no engineRollRateMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineRollRateMaximum.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no engineRollRateMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineRollRateMaximum.c_str ())); else m_engineRollRateMaximum = convertDegreesToRadians(m_engineRollRateMaximum); if (!objvars.getItem (Objvars::engineSpeedMaximum, m_engineSpeedMaximum)) - WARNING (true, ("ShipComponentDataEngine [%s] has no engineSpeedMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineSpeedMaximum.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataEngine [%s] has no engineSpeedMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::engineSpeedMaximum.c_str ())); if (!objvars.getItem(Objvars::engineSpeedRotationFactorMaximum, m_engineSpeedRotationFactorMaximum)) { diff --git a/engine/server/library/serverGame/src/shared/space/ShipComponentDataWeapon.cpp b/engine/server/library/serverGame/src/shared/space/ShipComponentDataWeapon.cpp index fc0dd86f..4c51194f 100755 --- a/engine/server/library/serverGame/src/shared/space/ShipComponentDataWeapon.cpp +++ b/engine/server/library/serverGame/src/shared/space/ShipComponentDataWeapon.cpp @@ -104,32 +104,32 @@ bool ShipComponentDataWeapon::readDataFromComponent (TangibleObject const & comp DynamicVariableList const & objvars = component.getObjVars (); if (!objvars.getItem (Objvars::weaponDamageMaximum, m_weaponDamageMaximum)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponDamageMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponDamageMaximum.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponDamageMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponDamageMaximum.c_str ())); if (!objvars.getItem (Objvars::weaponDamageMinimum, m_weaponDamageMinimum)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponDamageMinimum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponDamageMinimum.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponDamageMinimum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponDamageMinimum.c_str ())); if (!objvars.getItem (Objvars::weaponEffectivenessShields, m_weaponEffectivenessShields)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponEffectivenessShields [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponEffectivenessShields.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponEffectivenessShields [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponEffectivenessShields.c_str ())); if (!objvars.getItem (Objvars::weaponEffectivenessArmor, m_weaponEffectivenessArmor)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponEffectivenessArmor [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponEffectivenessArmor.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponEffectivenessArmor [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponEffectivenessArmor.c_str ())); if (!objvars.getItem (Objvars::weaponEnergyPerShot, m_weaponEnergyPerShot)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponEnergyPerShot [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponEnergyPerShot.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponEnergyPerShot [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponEnergyPerShot.c_str ())); if (!objvars.getItem (Objvars::weaponRefireRate, m_weaponRefireRate)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponRefireRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponRefireRate.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no weaponRefireRate [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponRefireRate.c_str ())); if (!objvars.getItem (Objvars::weaponAmmoCurrent, m_weaponAmmoCurrent)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no m_weaponAmmoCurrent [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponAmmoCurrent.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no m_weaponAmmoCurrent [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponAmmoCurrent.c_str ())); if (!objvars.getItem (Objvars::weaponAmmoMaximum, m_weaponAmmoMaximum)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no m_weaponAmmoMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponAmmoMaximum.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no m_weaponAmmoMaximum [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponAmmoMaximum.c_str ())); int ammoType = 0; if (!objvars.getItem (Objvars::weaponAmmoType, ammoType)) - WARNING (true, ("ShipComponentDataWeapon [%s] has no m_weaponAmmoType [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponAmmoType.c_str ())); + DEBUG_WARNING (true, ("ShipComponentDataWeapon [%s] has no m_weaponAmmoType [%s]", component.getNetworkId ().getValueString ().c_str (), Objvars::weaponAmmoType.c_str ())); else m_weaponAmmoType = static_cast(ammoType); diff --git a/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.cpp b/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.cpp index 3bd27763..587764ac 100755 --- a/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.cpp +++ b/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.cpp @@ -10,7 +10,7 @@ // ====================================================================== -CharacterNamesMessage::CharacterNamesMessage(const std::vector &ids, const std::vector &stationIds, const std::vector &characterNames, const std::vector &characterFullNames, const std::vector &createTimes, const std::vector &loginTimes) : +CharacterNamesMessage::CharacterNamesMessage(const std::vector &ids, const std::vector &stationIds, const std::vector &characterNames, const std::vector &characterFullNames, const std::vector &createTimes, const std::vector &loginTimes) : GameNetworkMessage("CharacterNamesMessage"), m_ids(), m_stationIds(), diff --git a/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.h b/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.h index bb1aef7b..a693698b 100755 --- a/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.h +++ b/engine/server/library/serverNetworkMessages/src/shared/gameGameServer/CharacterNamesMessage.h @@ -8,7 +8,6 @@ #ifndef INCLUDED_CharacterNamesMessage_H #define INCLUDED_CharacterNamesMessage_H -#include "sharedFoundation/StationId.h" #include "sharedNetworkMessages/GameNetworkMessage.h" // ====================================================================== @@ -22,24 +21,24 @@ class CharacterNamesMessage : public GameNetworkMessage { public: - CharacterNamesMessage(const std::vector &ids, const std::vector &stationIds, const std::vector &characterNames, const std::vector &characterFullNames, const std::vector &createTimes, const std::vector &loginTimes); + CharacterNamesMessage(const std::vector &ids, const std::vector &stationIds, const std::vector &characterNames, const std::vector &characterFullNames, const std::vector &createTimes, const std::vector &loginTimes); CharacterNamesMessage(Archive::ReadIterator & source); ~CharacterNamesMessage(); const std::vector &getIds() const; - const std::vector &getStationIds() const; + const std::vector &getStationIds() const; const std::vector &getNames() const; const std::vector &getFullNames() const; - const std::vector &getCreateTimes() const; - const std::vector &getLoginTimes() const; + const std::vector &getCreateTimes() const; + const std::vector &getLoginTimes() const; private: Archive::AutoArray m_ids; - Archive::AutoArray m_stationIds; + Archive::AutoArray m_stationIds; Archive::AutoArray m_names; Archive::AutoArray m_fullNames; - Archive::AutoArray m_createTimes; - Archive::AutoArray m_loginTimes; + Archive::AutoArray m_createTimes; + Archive::AutoArray m_loginTimes; private: //disabled functions: @@ -58,7 +57,7 @@ inline const std::vector & CharacterNamesMessage::getIds() const // ---------------------------------------------------------------------- -inline const std::vector & CharacterNamesMessage::getStationIds() const +inline const std::vector & CharacterNamesMessage::getStationIds() const { return m_stationIds.get(); } @@ -79,14 +78,14 @@ inline const std::vector & CharacterNamesMessage::getFullNames() co // ---------------------------------------------------------------------- -inline const std::vector & CharacterNamesMessage::getCreateTimes() const +inline const std::vector & CharacterNamesMessage::getCreateTimes() const { return m_createTimes.get(); } // ---------------------------------------------------------------------- -inline const std::vector & CharacterNamesMessage::getLoginTimes() const +inline const std::vector & CharacterNamesMessage::getLoginTimes() const { return m_loginTimes.get(); } diff --git a/engine/server/library/serverPathfinding/src/shared/CityPathNode.cpp b/engine/server/library/serverPathfinding/src/shared/CityPathNode.cpp index 11000b37..c430246c 100755 --- a/engine/server/library/serverPathfinding/src/shared/CityPathNode.cpp +++ b/engine/server/library/serverPathfinding/src/shared/CityPathNode.cpp @@ -424,12 +424,12 @@ bool CityPathNode::sanityCheck ( bool doWarnings ) const { DEBUG_WARNING(doWarnings,("CityPathNode::sanityCheck - Node has an edge to a non-existent node\n")); insaneCount++; - } - - if(!neighborNode->hasEdge(getIndex())) - { - DEBUG_WARNING(doWarnings,("CityPathNode::sanityCheck - Node has a one-way edge to another node\n")); - insaneCount++; + } else { + if(!neighborNode->hasEdge(getIndex())) + { + DEBUG_WARNING(doWarnings,("CityPathNode::sanityCheck - Node has a one-way edge to another node\n")); + insaneCount++; + } } } diff --git a/engine/server/library/serverPathfinding/src/shared/ServerPathBuilder.cpp b/engine/server/library/serverPathfinding/src/shared/ServerPathBuilder.cpp index 109ba9c4..c4abfb29 100755 --- a/engine/server/library/serverPathfinding/src/shared/ServerPathBuilder.cpp +++ b/engine/server/library/serverPathfinding/src/shared/ServerPathBuilder.cpp @@ -1141,30 +1141,31 @@ void ServerPathBuilder::addPathNode ( CellProperty const * cell, PathNode const float dist2 = REAL_MAX; - if(m_path && !m_path->empty()) dist2 = m_path->back().getPosition_w().magnitudeBetweenSquared(loc.getPosition_w()); + if(m_path && !m_path->empty()) { + dist2 = m_path->back().getPosition_w().magnitudeBetweenSquared(loc.getPosition_w()); - if(dist2 > 0.01) - { - // jitter the node if it's a city waypoint - - if(m_enableJitter && (node->getType() == PNT_CityWaypoint)) + if(dist2 > 0.01) { - Vector offset = Vector::zero; - - do + // jitter the node if it's a city waypoint + if(m_enableJitter && (node->getType() == PNT_CityWaypoint)) { - offset = Vector( Random::randomReal(-1.0f,1.0f), 0.0f, Random::randomReal(-1.0f,1.0f) ); + Vector offset = Vector::zero; + + do + { + offset = Vector( Random::randomReal(-1.0f,1.0f), 0.0f, Random::randomReal(-1.0f,1.0f) ); + } + while(offset.magnitudeSquared() > 1.0f); + + static float tweakValue = 1.0f; + + offset *= tweakValue; + + loc.setPosition_p( loc.getPosition_p() + offset ); } - while(offset.magnitudeSquared() > 1.0f); - - static float tweakValue = 1.0f; - - offset *= tweakValue; - - loc.setPosition_p( loc.getPosition_p() + offset ); + + m_path->push_back(loc); } - - m_path->push_back(loc); } } diff --git a/engine/server/library/serverScript/src/shared/JavaLibrary.cpp b/engine/server/library/serverScript/src/shared/JavaLibrary.cpp index 75f83e68..7668bb28 100755 --- a/engine/server/library/serverScript/src/shared/JavaLibrary.cpp +++ b/engine/server/library/serverScript/src/shared/JavaLibrary.cpp @@ -954,13 +954,13 @@ void JavaLibrary::install(void) if (ms_instance == nullptr) { JavaLibrary *lib = new JavaLibrary; - if (lib != ms_instance) + if (lib) { - if (ms_instance == nullptr) - { - delete lib; - if (ms_javaVmType != JV_none) - FATAL(true, ("Unable to initialize Java")); + ms_instance = lib; + } else { + delete lib; + if (ms_javaVmType != JV_none) { + FATAL(true, ("Unable to initialize Java")); } } } @@ -975,7 +975,7 @@ void JavaLibrary::install(void) */ void JavaLibrary::remove(void) { - if (ms_instance != nullptr) + if (ms_instance) { JavaLibrary * temp = ms_instance; ms_instance = nullptr; @@ -1065,7 +1065,7 @@ void JavaLibrary::initializeJavaThread() } // initial and minimum jvm allocation size - tempOption.optionString = "-Xms128m"; + tempOption.optionString = "-Xms1m"; options.push_back(tempOption); // maximum jvm allocation - max 512m on 32-bit @@ -3985,6 +3985,7 @@ void JavaLibrary::alterScriptParams(jobjectArray jparams, const std::string& arg else { WARNING_STRICT_FATAL(true, ("Error getting back string id param on script return")); + delete value; } } break; diff --git a/engine/shared/application/TemplateDefinitionCompiler/src/shared/core/TemplateDefinitionCompiler.cpp b/engine/shared/application/TemplateDefinitionCompiler/src/shared/core/TemplateDefinitionCompiler.cpp index 2aae0b08..a9af01dd 100755 --- a/engine/shared/application/TemplateDefinitionCompiler/src/shared/core/TemplateDefinitionCompiler.cpp +++ b/engine/shared/application/TemplateDefinitionCompiler/src/shared/core/TemplateDefinitionCompiler.cpp @@ -118,13 +118,10 @@ File fp; return; File temp_fp; - char tmpname[] = "/tmp/templatecompXXXXXX"; - int tmpfd = mkstemp(tmpname); - - if (tmpfd >= 0 && temp_fp.open(tmpname, "wt")) + if (!temp_fp.open(tmpnam(nullptr), "wt")) { fprintf(stderr, "error opening temp file for template header " - "replacement [%s]\n", fp.getFilename().getFullFilename().c_str()); + "replacement [%s]\n", temp_fp.getFilename().getFullFilename().c_str()); return; } @@ -175,7 +172,7 @@ File fp; } else if (temp_fp.puts(buffer) < 0) { - fprintf(stderr, "error writing to temp header file [%s]\n", fp.getFilename().getFullFilename().c_str()); + fprintf(stderr, "error writing to temp header file [%s]\n", temp_fp.getFilename().getFullFilename().c_str()); return; } } @@ -246,11 +243,8 @@ int result; return -1; } - File temp_fp; - char tmpname[] = "/tmp/templatecompXXXXXX"; - int tmpfd = mkstemp(tmpname); - - if (tmpfd >= 0 && temp_fp.open(tmpname, "wt")) + File temp_fp; + if (!temp_fp.open(tmpnam(nullptr), "wt")) { fprintf(stderr, "error opening temp file for template source " "replacement [%s]\n", temp_fp.getFilename().getFullFilename().c_str()); diff --git a/engine/shared/library/sharedDatabaseInterface/src/shared/core/DbBindableLong.h b/engine/shared/library/sharedDatabaseInterface/src/shared/core/DbBindableLong.h index f4dc519c..2e72b2c1 100755 --- a/engine/shared/library/sharedDatabaseInterface/src/shared/core/DbBindableLong.h +++ b/engine/shared/library/sharedDatabaseInterface/src/shared/core/DbBindableLong.h @@ -29,14 +29,10 @@ namespace DB { void setValue(const long int rhs); BindableLong &operator=(const long int rhs); - // following alternate getValue's are provided for convenience, particularly in - // the auto-generated code: - void getValue(unsigned int &buffer) const; - void getValue(uint32 &buffer) const; // for some reason, our compiler is convinced that uint32 != unsigned int - void getValue(long int &buffer) const; - void getValue(int &buffer) const; - void getValue(int8 &buffer) const; - void getValue(uint8 &buffer) const; + template + inline void getValue(T &buffer) const { + buffer = static_cast(getValue()); + } void *getBuffer(); @@ -48,48 +44,4 @@ namespace DB { } -// ---------------------------------------------------------------------- - -inline void DB::BindableLong::getValue(unsigned int &buffer) const -{ - buffer=static_cast(getValue()); -} - -// ---------------------------------------------------------------------- - -inline void DB::BindableLong::getValue(uint32 &buffer) const -{ - buffer=static_cast(getValue()); -} - -// ---------------------------------------------------------------------- - -inline void DB::BindableLong::getValue(long int &buffer) const -{ - buffer=getValue(); -} - -// ---------------------------------------------------------------------- - -inline void DB::BindableLong::getValue(int &buffer) const -{ - buffer=getValue(); -} - -// ---------------------------------------------------------------------- - -inline void DB::BindableLong::getValue(int8 &buffer) const -{ - buffer=static_cast(getValue()); -} - -// ---------------------------------------------------------------------- - -inline void DB::BindableLong::getValue(uint8 &buffer) const -{ - buffer=static_cast(getValue()); -} - -// ====================================================================== - #endif diff --git a/engine/shared/library/sharedDatabaseInterface/src_oci/OciServer.cpp b/engine/shared/library/sharedDatabaseInterface/src_oci/OciServer.cpp index ed5d8ddf..d8edb262 100755 --- a/engine/shared/library/sharedDatabaseInterface/src_oci/OciServer.cpp +++ b/engine/shared/library/sharedDatabaseInterface/src_oci/OciServer.cpp @@ -68,18 +68,17 @@ bool DB::OCIServer::checkerr(OCISession const & session, int status) WARNING(true,("Database error: %.*s",512,errbuf)); LOG("DatabaseError",("Database error: %.*s",512,errbuf)); - FATAL(DB::Server::getFatalOnError() || session.getFatalOnError(),("Database error: %.*s",512,errbuf)); switch ((int) errcode) { case 1013: - FATAL(true,("Cancelled by user request (ctrl-c or kill signal).\n")); + FATAL(DB::Server::getFatalOnError() || session.getFatalOnError(),("Cancelled by user request (ctrl-c or kill signal).\n")); break; case 12541: REPORT_LOG(true,("Database Error - %.*s\n", 512, errbuf)); return false; default: - FATAL(true,("Unhandled Database Error - %.*s\n", 512, errbuf)); + FATAL(DB::Server::getFatalOnError() || session.getFatalOnError(),("Unhandled Database Error - %.*s\n", 512, errbuf)); break; } diff --git a/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp b/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp index 8e3ba4bc..c1639ebd 100755 --- a/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp +++ b/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp @@ -81,7 +81,13 @@ char SymbolCache::ms_memPool[SymbolCache::cms_memPoolMaxBytes]; char *SymbolCache::ms_memPoolFreeList; Mutex SymbolCache::ms_memPoolMutex; SymbolCache::SymbolInfo SymbolCache::ms_nullSym; -typedef std::map, SymbolCacheAllocator > > SymbolMap; + +typedef std::map< + void const *, + SymbolCache::SymbolInfo +> SymbolMap; + + typedef std::vector > UniqueStringVector; static SymbolMap ms_cacheMap; static UniqueStringVector ms_uniqueStringVector; @@ -567,7 +573,7 @@ static bool stabsFind(void const *addr, Dl_info const &info, char const *& retSr SymbolCache::SymbolInfo const &SymbolCache::lookup(void const *addr) { - SymbolMap::const_iterator i = ms_cacheMap.find(addr); + auto i = ms_cacheMap.find(addr); if (i != ms_cacheMap.end()) return (*i).second; diff --git a/engine/shared/library/sharedFoundation/include/public/sharedFoundation/CrcConstexpr.hpp b/engine/shared/library/sharedFoundation/include/public/sharedFoundation/CrcConstexpr.hpp index d70fed60..b2029e5c 100644 --- a/engine/shared/library/sharedFoundation/include/public/sharedFoundation/CrcConstexpr.hpp +++ b/engine/shared/library/sharedFoundation/include/public/sharedFoundation/CrcConstexpr.hpp @@ -3,6 +3,7 @@ // CrcConstexpr.hpp // // adapted from Ross Williams' public domain crc code. +// copied and modified to work as a constexpr by Darth // // Portions copyright 1998 Bootprint Entertainment // Portions copyright 2002 Sony Online Entertainment @@ -54,16 +55,27 @@ constexpr uint32 CRC_INIT = 0xFFFFFFFF; constexpr const uint32 constcrc(const char *string) { - uint32 crc = 0; - if (!string) return 0; + uint32 crc = 0; for (crc = CRC_INIT; *string; ++string) crc = crctable[((crc>>24) ^ static_cast(*string)) & 0xFF] ^ (crc << 8); return (crc ^ CRC_INIT); } +inline const uint32 runtimeCrc(const char *string) +{ + if (!string) + return 0; + + uint32 crc = 0; + for (crc = CRC_INIT; *string; ++string) + crc = crctable[((crc>>24) ^ static_cast(*string)) & 0xFF] ^ (crc << 8); + + return (crc ^ CRC_INIT); +} + // ====================================================================== diff --git a/engine/shared/library/sharedFoundation/src/shared/Crc.cpp b/engine/shared/library/sharedFoundation/src/shared/Crc.cpp index 8ae9cb51..d75b22db 100755 --- a/engine/shared/library/sharedFoundation/src/shared/Crc.cpp +++ b/engine/shared/library/sharedFoundation/src/shared/Crc.cpp @@ -57,7 +57,6 @@ static const uint32 crctable[256] = }; const uint32 CRC_INIT = 0xFFFFFFFF; - const uint32 Crc::crcInit = CRC_INIT; @@ -65,11 +64,10 @@ const uint32 Crc::crcInit = CRC_INIT; uint32 Crc::calculate(const char *string) { - uint32 crc; - if (!string) return 0; + uint32 crc = 0; for (crc = CRC_INIT; *string; ++string) crc = crctable[((crc>>24) ^ static_cast(*string)) & 0xFF] ^ (crc << 8); diff --git a/engine/shared/library/sharedFoundation/src/shared/StationId.h b/engine/shared/library/sharedFoundation/src/shared/StationId.h index 8633f774..ab64acd8 100755 --- a/engine/shared/library/sharedFoundation/src/shared/StationId.h +++ b/engine/shared/library/sharedFoundation/src/shared/StationId.h @@ -10,7 +10,8 @@ // ====================================================================== -typedef int64 StationId; +// if this is per the SOE provided types header, this is acutally an unsigned long and not a uint32_t +typedef uint32 StationId; // ====================================================================== diff --git a/engine/shared/library/sharedFoundationTypes/src/linux/FoundationTypesLinux.h b/engine/shared/library/sharedFoundationTypes/src/linux/FoundationTypesLinux.h index 8d7e87b2..386c4ffb 100755 --- a/engine/shared/library/sharedFoundationTypes/src/linux/FoundationTypesLinux.h +++ b/engine/shared/library/sharedFoundationTypes/src/linux/FoundationTypesLinux.h @@ -10,8 +10,6 @@ #define PLATFORM_LINUX #include -#include - // ====================================================================== // basic types that we assume to be around @@ -22,12 +20,11 @@ typedef unsigned long uint32; typedef signed char int8; typedef signed short int16; typedef signed long int32; +typedef signed long long int int64; +typedef unsigned long long int uint64; typedef float real; typedef FILE* FILE_HANDLE; -typedef int64_t int64; -typedef u_int64_t uint64; - #endif diff --git a/engine/shared/library/sharedFoundationTypes/src/win32/FoundationTypesWin32.h b/engine/shared/library/sharedFoundationTypes/src/win32/FoundationTypesWin32.h index 64864f82..622039d8 100755 --- a/engine/shared/library/sharedFoundationTypes/src/win32/FoundationTypesWin32.h +++ b/engine/shared/library/sharedFoundationTypes/src/win32/FoundationTypesWin32.h @@ -7,8 +7,6 @@ // // ====================================================================== -#include - #ifndef INCLUDED_FoundationTypesWin32_H #define INCLUDED_FoundationTypesWin32_H @@ -30,10 +28,6 @@ typedef signed long int32; typedef signed __int64 int64; typedef int FILE_HANDLE; -typedef int64_t int64; -typedef u_int64_t uint64; - - // ====================================================================== #endif diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBattlefieldMarkerObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBattlefieldMarkerObjectTemplate.cpp index a83d8b7f..e39d521d 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBattlefieldMarkerObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBattlefieldMarkerObjectTemplate.cpp @@ -17,6 +17,9 @@ #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -557,10 +560,15 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "numberOfPoles") == 0) - m_numberOfPoles.loadFromIff(file); - else if (strcmp(paramName, "radius") == 0) - m_radius.loadFromIff(file); + + switch(runtimeCrc(paramName)) { + case constcrc("numberOfPoles"): + m_numberOfPoles.loadFromIff(file); + break; + case constcrc("radius"): + m_radius.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBuildingObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBuildingObjectTemplate.cpp index 89b64952..0eff8f06 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBuildingObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedBuildingObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -254,10 +257,15 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "terrainModificationFileName") == 0) - m_terrainModificationFileName.loadFromIff(file); - else if (strcmp(paramName, "interiorLayoutFileName") == 0) - m_interiorLayoutFileName.loadFromIff(file); + + switch(runtimeCrc(paramName)) { + case constcrc("terrainModificationFileName"): + m_terrainModificationFileName.loadFromIff(file); + break; + case constcrc("interiorLayoutFileName"): + m_interiorLayoutFileName.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedCreatureObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedCreatureObjectTemplate.cpp index 78098e21..a78eb3ec 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedCreatureObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedCreatureObjectTemplate.cpp @@ -22,6 +22,9 @@ #include "sharedObject/Object.h" #include "sharedObject/ObjectTemplateList.h" #include "sharedObject/BasicRangedIntCustomizationVariable.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -3286,98 +3289,123 @@ char paramName[MAX_NAME_SIZE]; { 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) + + 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"): { - FloatParam dummy; - dummy.loadFromIff(file); + 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) + break; + case constcrc("speed"): { - FloatParam dummy; - dummy.loadFromIff(file); + 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) + break; + case constcrc("turnRate"): { - FloatParam dummy; - dummy.loadFromIff(file); + 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) + 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"): { - BoolParam dummy; - dummy.loadFromIff(file); + 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; } - 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); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedDraftSchematicObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedDraftSchematicObjectTemplate.cpp index 961cebca..ca8d1fb0 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedDraftSchematicObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedDraftSchematicObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -542,46 +545,52 @@ char paramName[MAX_NAME_SIZE]; { 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) + + switch(runtimeCrc(paramName)) { + case constcrc("slots"): { - delete *iter; - *iter = nullptr; + 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; } - m_slots.clear(); - m_slotsAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) + break; + case constcrc("attributes"): { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_slots.push_back(newData); + 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; } - m_slotsLoaded = true; + break; + case constcrc("craftedSharedTemplate"): + m_craftedSharedTemplate.loadFromIff(file); + break; } - 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); } @@ -753,10 +762,14 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("hardpoint"): + m_hardpoint.loadFromIff(file); + } file.exitChunk(true); } @@ -1120,12 +1133,18 @@ char paramName[MAX_NAME_SIZE]; { 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); + + 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); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedObjectTemplate.cpp index dc0fe57a..070aacba 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedObjectTemplate.cpp @@ -26,6 +26,9 @@ #include "sharedObject/PortalPropertyTemplateList.h" #include "sharedObject/SlotDescriptor.h" #include "sharedObject/SlotDescriptorList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -2135,8 +2138,8 @@ void SharedObjectTemplate::testValues(void) const */ void SharedObjectTemplate::load(Iff &file) { -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; if (file.getCurrentName() != SharedObjectTemplate_tag) { @@ -2177,54 +2180,81 @@ char paramName[MAX_NAME_SIZE]; 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) + + switch (runtimeCrc(paramName)) { + case constcrc("objectName"): m_objectName.loadFromIff(file); - else if (strcmp(paramName, "detailedDescription") == 0) + break; + case constcrc("detailedDescription"): m_detailedDescription.loadFromIff(file); - else if (strcmp(paramName, "lookAtText") == 0) + break; + case constcrc("lookAtText"): m_lookAtText.loadFromIff(file); - else if (strcmp(paramName, "snapToTerrain") == 0) + break; + case constcrc("snapToTerrain"): m_snapToTerrain.loadFromIff(file); - else if (strcmp(paramName, "containerType") == 0) + break; + case constcrc("containerType"): m_containerType.loadFromIff(file); - else if (strcmp(paramName, "containerVolumeLimit") == 0) + break; + case constcrc("containerVolumeLimit"): m_containerVolumeLimit.loadFromIff(file); - else if (strcmp(paramName, "tintPalette") == 0) + break; + case constcrc("tintPalette"): m_tintPalette.loadFromIff(file); - else if (strcmp(paramName, "slotDescriptorFilename") == 0) + break; + case constcrc("slotDescriptorFilename"): m_slotDescriptorFilename.loadFromIff(file); - else if (strcmp(paramName, "arrangementDescriptorFilename") == 0) + break; + case constcrc("arrangementDescriptorFilename"): m_arrangementDescriptorFilename.loadFromIff(file); - else if (strcmp(paramName, "appearanceFilename") == 0) + break; + case constcrc("appearanceFilename"): m_appearanceFilename.loadFromIff(file); - else if (strcmp(paramName, "portalLayoutFilename") == 0) + break; + case constcrc("portalLayoutFilename"): m_portalLayoutFilename.loadFromIff(file); - else if (strcmp(paramName, "clientDataFile") == 0) + break; + case constcrc("clientDataFile"): m_clientDataFile.loadFromIff(file); - else if (strcmp(paramName, "scale") == 0) + break; + case constcrc("scale"): m_scale.loadFromIff(file); - else if (strcmp(paramName, "gameObjectType") == 0) + break; + case constcrc("gameObjectType"): m_gameObjectType.loadFromIff(file); - else if (strcmp(paramName, "sendToClient") == 0) + break; + case constcrc("sendToClient"): m_sendToClient.loadFromIff(file); - else if (strcmp(paramName, "scaleThresholdBeforeExtentTest") == 0) + break; + case constcrc("scaleThresholdBeforeExtentTest"): m_scaleThresholdBeforeExtentTest.loadFromIff(file); - else if (strcmp(paramName, "clearFloraRadius") == 0) + break; + case constcrc("clearFloraRadius"): m_clearFloraRadius.loadFromIff(file); - else if (strcmp(paramName, "surfaceType") == 0) + break; + case constcrc("surfaceType"): m_surfaceType.loadFromIff(file); - else if (strcmp(paramName, "noBuildRadius") == 0) + break; + case constcrc("noBuildRadius"): m_noBuildRadius.loadFromIff(file); - else if (strcmp(paramName, "onlyVisibleInTools") == 0) + break; + case constcrc("onlyVisibleInTools"): m_onlyVisibleInTools.loadFromIff(file); - else if (strcmp(paramName, "locationReservationRadius") == 0) + break; + case constcrc("locationReservationRadius"): m_locationReservationRadius.loadFromIff(file); - else if (strcmp(paramName, "forceNoCollision") == 0) + break; + case constcrc("forceNoCollision"): m_forceNoCollision.loadFromIff(file); + break; + } + file.exitChunk(true); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedShipObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedShipObjectTemplate.cpp index e374302c..26434b25 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedShipObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedShipObjectTemplate.cpp @@ -23,6 +23,8 @@ #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -384,14 +386,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/sharedGame/src/shared/objectTemplate/SharedTangibleObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedTangibleObjectTemplate.cpp index 95742f60..5075412d 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedTangibleObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedTangibleObjectTemplate.cpp @@ -25,6 +25,9 @@ #include "sharedObject/PaletteColorCustomizationVariable.h" #include "sharedObject/StructureFootprint.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -1328,128 +1331,141 @@ char paramName[MAX_NAME_SIZE]; { 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) + + switch(runtimeCrc(paramName)) { + case constcrc("paletteColorCustomizationVariables"): { - delete *iter; - *iter = nullptr; + 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; } - m_paletteColorCustomizationVariables.clear(); - m_paletteColorCustomizationVariablesAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) + break; + case constcrc("rangedIntCustomizationVariables"): { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_paletteColorCustomizationVariables.push_back(newData); + 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; } - m_paletteColorCustomizationVariablesLoaded = 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) + { + IntegerParam * newData = new IntegerParam; + 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; } - 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) - { - IntegerParam * newData = new IntegerParam; - 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); } @@ -1621,10 +1637,15 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)){ + case constcrc("variableName"): + m_variableName.loadFromIff(file); + break; + case constcrc("constValue"): + m_constValue.loadFromIff(file); + break; + } file.exitChunk(true); } @@ -1794,10 +1815,15 @@ char paramName[MAX_NAME_SIZE]; { 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); + + switch(runtimeCrc(paramName)) { + case constcrc("sourceVariable"): + m_sourceVariable.loadFromIff(file); + break; + case constcrc("dependentVariable"): + m_dependentVariable.loadFromIff(file); + break; + } file.exitChunk(true); } @@ -2161,12 +2187,18 @@ char paramName[MAX_NAME_SIZE]; { 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); + + 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); } @@ -2875,14 +2907,21 @@ char paramName[MAX_NAME_SIZE]; { 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); + + 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); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedTerrainSurfaceObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedTerrainSurfaceObjectTemplate.cpp index 4c9d5e0c..087f3b00 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedTerrainSurfaceObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedTerrainSurfaceObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedFile/Iff.h" #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -403,10 +406,15 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "cover") == 0) - m_cover.loadFromIff(file); - else if (strcmp(paramName, "surfaceType") == 0) - m_surfaceType.loadFromIff(file); + + switch(runtimeCrc(paramName)) { + case constcrc("cover"): + m_cover.loadFromIff(file); + break; + case constcrc("surfaceType"): + m_surfaceType.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedVehicleObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedVehicleObjectTemplate.cpp index 7467cf59..463cd18f 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedVehicleObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedVehicleObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -1479,32 +1482,42 @@ char paramName[MAX_NAME_SIZE]; { 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) + + switch(runtimeCrc(paramName)) { + case constcrc("speed"): { - FloatParam dummy; - dummy.loadFromIff(file); + 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; } - 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); } diff --git a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedWeaponObjectTemplate.cpp b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedWeaponObjectTemplate.cpp index 193d4ac7..d4897b17 100644 --- a/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedWeaponObjectTemplate.cpp +++ b/engine/shared/library/sharedGame/src/shared/objectTemplate/SharedWeaponObjectTemplate.cpp @@ -16,6 +16,9 @@ #include "sharedMath/Vector.h" #include "sharedObject/ObjectTemplate.h" #include "sharedObject/ObjectTemplateList.h" + +#include "sharedFoundation/CrcConstexpr.hpp" + //@BEGIN TFD TEMPLATE REFS //@END TFD TEMPLATE REFS #include @@ -448,12 +451,18 @@ char paramName[MAX_NAME_SIZE]; { file.enterChunk(); file.read_string(paramName, MAX_NAME_SIZE); - if (strcmp(paramName, "weaponEffect") == 0) - m_weaponEffect.loadFromIff(file); - else if (strcmp(paramName, "weaponEffectIndex") == 0) - m_weaponEffectIndex.loadFromIff(file); - else if (strcmp(paramName, "attackType") == 0) - m_attackType.loadFromIff(file); + + switch(runtimeCrc(paramName)) { + case constcrc("weaponEffect"): + m_weaponEffect.loadFromIff(file); + break; + case constcrc("weaponEffectIndex"): + m_weaponEffectIndex.loadFromIff(file); + break; + case constcrc("attackType"): + m_attackType.loadFromIff(file); + break; + } file.exitChunk(true); } diff --git a/engine/shared/library/sharedLog/src/shared/LogManager.cpp b/engine/shared/library/sharedLog/src/shared/LogManager.cpp index 8affa781..e6c49d4d 100755 --- a/engine/shared/library/sharedLog/src/shared/LogManager.cpp +++ b/engine/shared/library/sharedLog/src/shared/LogManager.cpp @@ -258,7 +258,7 @@ void LogManager::registerObserverType(std::string const &name, LogObserverCreate // run through SharedLog keys looking for logTarget#=name: { - char key[16]; + char key[25]; strcpy(key, "logTarget"); for (int i = 0; i < 20; ++i) diff --git a/engine/shared/library/sharedNetwork/src/shared/Connection.cpp b/engine/shared/library/sharedNetwork/src/shared/Connection.cpp index 04770848..1b161b1c 100755 --- a/engine/shared/library/sharedNetwork/src/shared/Connection.cpp +++ b/engine/shared/library/sharedNetwork/src/shared/Connection.cpp @@ -765,16 +765,16 @@ void Connection::receive(const Archive::ByteStream & bs) m_recvAverageBytesPerSecond = m_bytesReceived / lifeTime; - std::string logChan = "Network:ConnectionStatsRecv:" + getRemoteAddress() + ":"; + //std::string logChan = "Network:ConnectionStatsRecv:" + getRemoteAddress() + ":"; char portBuf[7] = {"\0"}; snprintf(portBuf, sizeof(portBuf), "%d", getRemotePort()); - logChan += portBuf; - LOG(logChan, ("Current(%d/sec), Average(%d/sec), Peak(%d/sec) Total Bytes(%d) Total Time(%lu)", bytesPerSecond, m_recvAverageBytesPerSecond, m_recvPeakBytesPerSecond, m_bytesReceived, lifeTime)); + //logChan += portBuf; + //LOG(logChan, ("Current(%d/sec), Average(%d/sec), Peak(%d/sec) Total Bytes(%d) Total Time(%lu)", bytesPerSecond, m_recvAverageBytesPerSecond, m_recvPeakBytesPerSecond, m_bytesReceived, lifeTime)); m_lastRecvReportTime = m_lastRecvTime; m_recvBytesReportInterval = 0; - if (m_managerHandler->getRecvCompressedByteCount() > 0) - LOG(logChan, ("Compression Ratio: %.2f : 1.0 - Recv(%d / %d)", m_managerHandler->getCompressionRatio(), m_managerHandler->getRecvUncompressedByteCount(), m_managerHandler->getRecvCompressedByteCount())); + //if (m_managerHandler->getRecvCompressedByteCount() > 0) + // LOG(logChan, ("Compression Ratio: %.2f : 1.0 - Recv(%d / %d)", m_managerHandler->getCompressionRatio(), m_managerHandler->getRecvUncompressedByteCount(), m_managerHandler->getRecvCompressedByteCount())); } } } @@ -833,16 +833,16 @@ void Connection::reportSend(const int sendSize) m_sendAverageBytesPerSecond = m_bytesSent / lifeTime; - std::string logChan = "Network:ConnectionStatsSend:" + getRemoteAddress() + ":"; + //std::string logChan = "Network:ConnectionStatsSend:" + getRemoteAddress() + ":"; char portBuf[7] = {"\0"}; snprintf(portBuf, sizeof(portBuf), "%d", getRemotePort()); - logChan += portBuf; - LOG(logChan, ("Current(%d/sec), Average(%d/sec), Peak(%d/sec) Total Bytes(%d) Total Time(%lu)", bytesPerSecond, m_sendAverageBytesPerSecond, m_sendPeakBytesPerSecond, m_bytesSent, lifeTime)); + //logChan += portBuf; + //LOG(logChan, ("Current(%d/sec), Average(%d/sec), Peak(%d/sec) Total Bytes(%d) Total Time(%lu)", bytesPerSecond, m_sendAverageBytesPerSecond, m_sendPeakBytesPerSecond, m_bytesSent, lifeTime)); m_lastSendReportTime = m_lastSendTime; m_sendBytesReportInterval = 0; - if (m_managerHandler->getSendCompressedByteCount() > 0) - LOG(logChan, ("Compression Ratio: %.2f : 1.0 Send(%d / %d)", m_managerHandler->getCompressionRatio(), m_managerHandler->getSendUncompressedByteCount(), m_managerHandler->getSendCompressedByteCount())); + // if (m_managerHandler->getSendCompressedByteCount() > 0) + // LOG(logChan, ("Compression Ratio: %.2f : 1.0 Send(%d / %d)", m_managerHandler->getCompressionRatio(), m_managerHandler->getSendUncompressedByteCount(), m_managerHandler->getSendCompressedByteCount())); } } } diff --git a/engine/shared/library/sharedObject/src/shared/appearance/AppearanceTemplateList.cpp b/engine/shared/library/sharedObject/src/shared/appearance/AppearanceTemplateList.cpp index d2afe802..eaadbf3c 100755 --- a/engine/shared/library/sharedObject/src/shared/appearance/AppearanceTemplateList.cpp +++ b/engine/shared/library/sharedObject/src/shared/appearance/AppearanceTemplateList.cpp @@ -600,7 +600,7 @@ AppearanceTemplate *AppearanceTemplateListNamespace::create(const char *const fi { char tagString[5]; ConvertTagToString(tag, tagString); - WARNING(true, ("AppearanceTemplate binding %s not found for file %s", tagString, actualFileName.getString())); + DEBUG_WARNING(true, ("AppearanceTemplate binding %s not found for file %s", tagString, actualFileName.getString())); } } diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp index f4833a9e..d791ef15 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,33 @@ 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); + + switch(runtimeCrc(paramName)) { + case constcrc("type"): + m_type.loadFromIff(file); + break; + case constcrc("effectiveness"): + m_effectiveness.loadFromIff(file); + break; } + 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 +614,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..e10613ab 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,59 @@ 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); + + switch(runtimeCrc(paramName)) { + case constcrc("optional"): + m_optional.loadFromIff(file); + break; + case constcrc("name"): + m_name.loadFromIff(file); + break; + 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; + } + break; + case constcrc("optionalSkillCommand"): + m_optionalSkillCommand.loadFromIff(file); + break; + case constcrc("complexity"): + m_complexity.loadFromIff(file); + break; + case constcrc("appearance"): + m_appearance.loadFromIff(file); + break; } + 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 +908,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..5bdb7434 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,34 @@ 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); + + switch(runtimeCrc(paramName)) { + case constcrc("name"): + m_name.loadFromIff(file); + break; + case constcrc("ingredient"): + m_ingredient.loadFromIff(file); + break; } - file.exitForm(); - UNREF(file); -} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::load + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::load /** * Saves the template data to an iff file. @@ -679,35 +663,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..19a339d8 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,42 @@ 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); + + switch(runtimeCrc(paramName)) { + case constcrc("target"): + m_target.loadFromIff(file); + break; + case constcrc("value"): + m_value.loadFromIff(file); + break; + case constcrc("time"): + m_time.loadFromIff(file); + break; + case constcrc("timeAtValue"): + m_timeAtValue.loadFromIff(file); + break; + case constcrc("decay"): + m_decay.loadFromIff(file); + break; } + 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 +1131,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 +1186,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 +1330,36 @@ 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); + + switch(runtimeCrc(paramName)) { + case constcrc("slotName"): + m_slotName.loadFromIff(file); + break; + case constcrc("equipObject"): + m_equipObject.loadFromIff(file); + break; + case constcrc("content"): + m_content.loadFromIff(file); + break; } + 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 +1367,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 +1410,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 +1578,42 @@ 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); + + switch(runtimeCrc(paramName)) { + case constcrc("target"): + m_target.loadFromIff(file); + break; + case constcrc("value"): + m_value.loadFromIff(file); + break; + case constcrc("time"): + m_time.loadFromIff(file); + break; + case constcrc("timeAtValue"): + m_timeAtValue.loadFromIff(file); + break; + case constcrc("decay"): + m_decay.loadFromIff(file); + break; } + 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 +1621,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 +1676,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 +1817,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 +1853,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/ServerUberObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.cpp index 12a2714a..bd90132a 100644 --- a/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.cpp +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.cpp @@ -19,283 +19,228 @@ #include "sharedTemplateDefinition/ObjectTemplate.h" #include - +#include "sharedFoundation/CrcConstexpr.hpp" /** * Class constructor. */ -ServerUberObjectTemplate::ServerUberObjectTemplate(const std::string & filename) +ServerUberObjectTemplate::ServerUberObjectTemplate(const std::string &filename) //@BEGIN TFD INIT - : TpfTemplate(filename) - ,m_intListSimpleLoaded(false) - ,m_intListSimpleAppend(false) - ,m_intListWeightedListLoaded(false) - ,m_intListWeightedListAppend(false) - ,m_intListRandomRangeLoaded(false) - ,m_intListRandomRangeAppend(false) - ,m_intListDiceRollLoaded(false) - ,m_intListDiceRollAppend(false) - ,m_floatListSimpleLoaded(false) - ,m_floatListSimpleAppend(false) - ,m_floatListWeightedListLoaded(false) - ,m_floatListWeightedListAppend(false) - ,m_floatListRandomRangeLoaded(false) - ,m_floatListRandomRangeAppend(false) - ,m_enumListIndexedLoaded(false) - ,m_enumListIndexedAppend(false) - ,m_enumListWeightedListLoaded(false) - ,m_enumListWeightedListAppend(false) - ,m_stringIdListSimpleLoaded(false) - ,m_stringIdListSimpleAppend(false) - ,m_stringIdListWeightedListLoaded(false) - ,m_stringIdListWeightedListAppend(false) - ,m_stringListSimpleLoaded(false) - ,m_stringListSimpleAppend(false) - ,m_stringListWeightedListLoaded(false) - ,m_stringListWeightedListAppend(false) - ,m_triggerVolumeListLoaded(false) - ,m_triggerVolumeListAppend(false) - ,m_triggerVolumesListWeightedListLoaded(false) - ,m_triggerVolumesListWeightedListAppend(false) - ,m_boolListDerivedLoaded(false) - ,m_boolListDerivedAppend(false) - ,m_boolListSimpleLoaded(false) - ,m_boolListSimpleAppend(false) - ,m_boolListWeightedListLoaded(false) - ,m_boolListWeightedListAppend(false) - ,m_vectorListSimpleLoaded(false) - ,m_vectorListSimpleAppend(false) - ,m_filenameListSimpleLoaded(false) - ,m_filenameListSimpleAppend(false) - ,m_templateListSimpleLoaded(false) - ,m_templateListSimpleAppend(false) - ,m_structListSimpleLoaded(false) - ,m_structListSimpleAppend(false) + : TpfTemplate(filename), m_intListSimpleLoaded(false), m_intListSimpleAppend(false), + m_intListWeightedListLoaded(false), m_intListWeightedListAppend(false), m_intListRandomRangeLoaded(false), + m_intListRandomRangeAppend(false), m_intListDiceRollLoaded(false), m_intListDiceRollAppend(false), + m_floatListSimpleLoaded(false), m_floatListSimpleAppend(false), m_floatListWeightedListLoaded(false), + m_floatListWeightedListAppend(false), m_floatListRandomRangeLoaded(false), + m_floatListRandomRangeAppend(false), m_enumListIndexedLoaded(false), m_enumListIndexedAppend(false), + m_enumListWeightedListLoaded(false), m_enumListWeightedListAppend(false), m_stringIdListSimpleLoaded(false), + m_stringIdListSimpleAppend(false), m_stringIdListWeightedListLoaded(false), + m_stringIdListWeightedListAppend(false), m_stringListSimpleLoaded(false), m_stringListSimpleAppend(false), + m_stringListWeightedListLoaded(false), m_stringListWeightedListAppend(false), + m_triggerVolumeListLoaded(false), m_triggerVolumeListAppend(false), + m_triggerVolumesListWeightedListLoaded(false), m_triggerVolumesListWeightedListAppend(false), + m_boolListDerivedLoaded(false), m_boolListDerivedAppend(false), m_boolListSimpleLoaded(false), + m_boolListSimpleAppend(false), m_boolListWeightedListLoaded(false), m_boolListWeightedListAppend(false), + m_vectorListSimpleLoaded(false), m_vectorListSimpleAppend(false), m_filenameListSimpleLoaded(false), + m_filenameListSimpleAppend(false), m_templateListSimpleLoaded(false), m_templateListSimpleAppend(false), + m_structListSimpleLoaded(false), m_structListSimpleAppend(false) //@END TFD INIT { -} // ServerUberObjectTemplate::ServerUberObjectTemplate +} // ServerUberObjectTemplate::ServerUberObjectTemplate /** * Class destructor. */ -ServerUberObjectTemplate::~ServerUberObjectTemplate() -{ +ServerUberObjectTemplate::~ServerUberObjectTemplate() { //@BEGIN TFD CLEANUP - { - std::vector::iterator iter; - for (iter = m_intListSimple.begin(); iter != m_intListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_intListWeightedList.begin(); iter != m_intListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_intListRandomRange.begin(); iter != m_intListRandomRange.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_intListDiceRoll.begin(); iter != m_intListDiceRoll.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_floatListSimple.begin(); iter != m_floatListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_floatListWeightedList.begin(); iter != m_floatListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_floatListRandomRange.begin(); iter != m_floatListRandomRange.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_enumListIndexed.begin(); iter != m_enumListIndexed.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_enumListWeightedList.begin(); iter != m_enumListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_stringIdListSimple.begin(); iter != m_stringIdListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_stringIdListWeightedList.begin(); iter != m_stringIdListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_stringListSimple.begin(); iter != m_stringListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_stringListWeightedList.begin(); iter != m_stringListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_triggerVolumeList.begin(); iter != m_triggerVolumeList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_triggerVolumesListWeightedList.begin(); iter != m_triggerVolumesListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_boolListDerived.begin(); iter != m_boolListDerived.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_boolListSimple.begin(); iter != m_boolListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_boolListWeightedList.begin(); iter != m_boolListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_vectorListSimple.begin(); iter != m_vectorListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_filenameListSimple.begin(); iter != m_filenameListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_templateListSimple.begin(); iter != m_templateListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } - { - std::vector::iterator iter; - for (iter = m_structListSimple.begin(); iter != m_structListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - } + { + std::vector::iterator iter; + for (iter = m_intListSimple.begin(); iter != m_intListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_intListWeightedList.begin(); iter != m_intListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_intListRandomRange.begin(); iter != m_intListRandomRange.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_intListDiceRoll.begin(); iter != m_intListDiceRoll.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_floatListSimple.begin(); iter != m_floatListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_floatListWeightedList.begin(); iter != m_floatListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_floatListRandomRange.begin(); iter != m_floatListRandomRange.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_enumListIndexed.begin(); iter != m_enumListIndexed.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_enumListWeightedList.begin(); iter != m_enumListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_stringIdListSimple.begin(); iter != m_stringIdListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_stringIdListWeightedList.begin(); iter != m_stringIdListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_stringListSimple.begin(); iter != m_stringListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_stringListWeightedList.begin(); iter != m_stringListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_triggerVolumeList.begin(); iter != m_triggerVolumeList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_triggerVolumesListWeightedList.begin(); iter != m_triggerVolumesListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_boolListDerived.begin(); iter != m_boolListDerived.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_boolListSimple.begin(); iter != m_boolListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_boolListWeightedList.begin(); iter != m_boolListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_vectorListSimple.begin(); iter != m_vectorListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_filenameListSimple.begin(); iter != m_filenameListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_templateListSimple.begin(); iter != m_templateListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } + { + std::vector::iterator iter; + for (iter = m_structListSimple.begin(); iter != m_structListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + } //@END TFD CLEANUP -} // ServerUberObjectTemplate::~ServerUberObjectTemplate +} // ServerUberObjectTemplate::~ServerUberObjectTemplate /** * Static function used to register this template. */ -void ServerUberObjectTemplate::registerMe(void) -{ - ObjectTemplateList::registerTemplate(ServerUberObjectTemplate_tag, create); -} // ServerUberObjectTemplate::registerMe +void ServerUberObjectTemplate::registerMe(void) { + ObjectTemplateList::registerTemplate(ServerUberObjectTemplate_tag, create); +} // ServerUberObjectTemplate::registerMe /** * Creates a ServerUberObjectTemplate template. * * @return a new instance of the template */ -ObjectTemplate * ServerUberObjectTemplate::create(const std::string & filename) -{ - return new ServerUberObjectTemplate(filename); -} // ServerUberObjectTemplate::create +ObjectTemplate *ServerUberObjectTemplate::create(const std::string &filename) { + return new ServerUberObjectTemplate(filename); +} // ServerUberObjectTemplate::create /** * Returns the template id. * * @return the template id */ -Tag ServerUberObjectTemplate::getId(void) const -{ - return ServerUberObjectTemplate_tag; -} // ServerUberObjectTemplate::getId +Tag ServerUberObjectTemplate::getId(void) const { + return ServerUberObjectTemplate_tag; +} // ServerUberObjectTemplate::getId /** * Returns this template's version. * * @return the version */ -Tag ServerUberObjectTemplate::getTemplateVersion(void) const -{ - return m_templateVersion; +Tag ServerUberObjectTemplate::getTemplateVersion(void) const { + return m_templateVersion; } // ServerUberObjectTemplate::getTemplateVersion /** @@ -303,1616 +248,1541 @@ Tag ServerUberObjectTemplate::getTemplateVersion(void) const * * @return the highest version */ -Tag ServerUberObjectTemplate::getHighestTemplateVersion(void) const -{ - if (m_baseData == NULL) - return m_templateVersion; - const ServerUberObjectTemplate * base = dynamic_cast(m_baseData); - if (base == NULL) - return m_templateVersion; - return std::max(m_templateVersion, base->getHighestTemplateVersion()); +Tag ServerUberObjectTemplate::getHighestTemplateVersion(void) const { + if (m_baseData == NULL) + return m_templateVersion; + const ServerUberObjectTemplate *base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); } // ServerUberObjectTemplate::getHighestTemplateVersion //@BEGIN TFD -CompilerIntegerParam * ServerUberObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "intAtDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intAtDerived; - } - fprintf(stderr, "trying to access single-parameter \"intAtDerived\" as an array\n"); - } - else if (strcmp(name, "intSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intSimple; - } - fprintf(stderr, "trying to access single-parameter \"intSimple\" as an array\n"); - } - else if (strcmp(name, "intSimpleDeltaPositive") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intSimpleDeltaPositive; - } - fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaPositive\" as an array\n"); - } - else if (strcmp(name, "intSimpleDeltaNegative") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intSimpleDeltaNegative; - } - fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaNegative\" as an array\n"); - } - else if (strcmp(name, "intSimpleDeltaPositivePercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intSimpleDeltaPositivePercent; - } - fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaPositivePercent\" as an array\n"); - } - else if (strcmp(name, "intSimpleDeltaNegativePercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intSimpleDeltaNegativePercent; - } - fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaNegativePercent\" as an array\n"); - } - else if (strcmp(name, "intWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"intWeightedList\" as an array\n"); - } - else if (strcmp(name, "intWeightedListDeltaPositive") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intWeightedListDeltaPositive; - } - fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaPositive\" as an array\n"); - } - else if (strcmp(name, "intWeightedListDeltaNegative") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intWeightedListDeltaNegative; - } - fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaNegative\" as an array\n"); - } - else if (strcmp(name, "intWeightedListDeltaPositivePercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intWeightedListDeltaPositivePercent; - } - fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaPositivePercent\" as an array\n"); - } - else if (strcmp(name, "intWeightedListDeltaNegativePercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intWeightedListDeltaNegativePercent; - } - fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaNegativePercent\" as an array\n"); - } - else if (strcmp(name, "intRandomRange1") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intRandomRange1; - } - fprintf(stderr, "trying to access single-parameter \"intRandomRange1\" as an array\n"); - } - else if (strcmp(name, "intRandomRange2") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intRandomRange2; - } - fprintf(stderr, "trying to access single-parameter \"intRandomRange2\" as an array\n"); - } - else if (strcmp(name, "intRandomRange3") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intRandomRange3; - } - fprintf(stderr, "trying to access single-parameter \"intRandomRange3\" as an array\n"); - } - else if (strcmp(name, "intRandomRange4") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intRandomRange4; - } - fprintf(stderr, "trying to access single-parameter \"intRandomRange4\" as an array\n"); - } - else if (strcmp(name, "intDiceRoll1") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intDiceRoll1; - } - fprintf(stderr, "trying to access single-parameter \"intDiceRoll1\" as an array\n"); - } - else if (strcmp(name, "intDiceRoll2") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_intDiceRoll2; - } - fprintf(stderr, "trying to access single-parameter \"intDiceRoll2\" as an array\n"); - } - else if (strcmp(name, "intListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_intListSimple.size())) - return m_intListSimple[index]; - if (index == static_cast(m_intListSimple.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_intListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"intListSimple\" out of bounds\n"); - } - else if (strcmp(name, "intListWeightedList") == 0) - { - if (index >= 0 && index < static_cast(m_intListWeightedList.size())) - return m_intListWeightedList[index]; - if (index == static_cast(m_intListWeightedList.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_intListWeightedList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"intListWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "intListRandomRange") == 0) - { - if (index >= 0 && index < static_cast(m_intListRandomRange.size())) - return m_intListRandomRange[index]; - if (index == static_cast(m_intListRandomRange.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_intListRandomRange.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"intListRandomRange\" out of bounds\n"); - } - else if (strcmp(name, "intListDiceRoll") == 0) - { - if (index >= 0 && index < static_cast(m_intListDiceRoll.size())) - return m_intListDiceRoll[index]; - if (index == static_cast(m_intListDiceRoll.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_intListDiceRoll.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"intListDiceRoll\" out of bounds\n"); - } - else if (strcmp(name, "enumIndexedByEnumSingle") == 0) - { - if (index >= 0 && index < 3) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_enumIndexedByEnumSingle[index]; - } - fprintf(stderr, "index for parameter \"enumIndexedByEnumSingle\" out of bounds\n"); - } - else if (strcmp(name, "enumIndexedByEnumWeightedList") == 0) - { - if (index >= 0 && index < 3) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_enumIndexedByEnumWeightedList[index]; - } - fprintf(stderr, "index for parameter \"enumIndexedByEnumWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "enumListIndexed") == 0) - { - if (index >= 0 && index < static_cast(m_enumListIndexed.size())) - return m_enumListIndexed[index]; - if (index == static_cast(m_enumListIndexed.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_enumListIndexed.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"enumListIndexed\" out of bounds\n"); - } - else if (strcmp(name, "enumListWeightedList") == 0) - { - if (index >= 0 && index < static_cast(m_enumListWeightedList.size())) - return m_enumListWeightedList[index]; - if (index == static_cast(m_enumListWeightedList.size())) - { - CompilerIntegerParam *temp = new CompilerIntegerParam(); - m_enumListWeightedList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"enumListWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "integerArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_integerArray[index]; - } - fprintf(stderr, "index for parameter \"integerArray\" out of bounds\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getCompilerIntegerParam +CompilerIntegerParam *ServerUberObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("intAtDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intAtDerived; + } + fprintf(stderr, "trying to access single-parameter \"intAtDerived\" as an array\n"); + } + break; + case constcrc("intSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intSimple; + } + fprintf(stderr, "trying to access single-parameter \"intSimple\" as an array\n"); + } + break; + case constcrc("intSimpleDeltaPositive"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intSimpleDeltaPositive; + } + fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaPositive\" as an array\n"); + } + break; + case constcrc("intSimpleDeltaNegative"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intSimpleDeltaNegative; + } + fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaNegative\" as an array\n"); + } + break; + case constcrc("intSimpleDeltaPositivePercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intSimpleDeltaPositivePercent; + } + fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaPositivePercent\" as an array\n"); + } + break; + case constcrc("intSimpleDeltaNegativePercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intSimpleDeltaNegativePercent; + } + fprintf(stderr, "trying to access single-parameter \"intSimpleDeltaNegativePercent\" as an array\n"); + } + break; + case constcrc("intWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"intWeightedList\" as an array\n"); + } + break; + case constcrc("intWeightedListDeltaPositive"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intWeightedListDeltaPositive; + } + fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaPositive\" as an array\n"); + } + break; + case constcrc("intWeightedListDeltaNegative"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intWeightedListDeltaNegative; + } + fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaNegative\" as an array\n"); + } + break; + case constcrc("intWeightedListDeltaPositivePercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intWeightedListDeltaPositivePercent; + } + fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaPositivePercent\" as an array\n"); + } + break; + case constcrc("intWeightedListDeltaNegativePercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intWeightedListDeltaNegativePercent; + } + fprintf(stderr, "trying to access single-parameter \"intWeightedListDeltaNegativePercent\" as an array\n"); + } + break; + case constcrc("intRandomRange1"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intRandomRange1; + } + fprintf(stderr, "trying to access single-parameter \"intRandomRange1\" as an array\n"); + } + break; + case constcrc("intRandomRange2"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intRandomRange2; + } + fprintf(stderr, "trying to access single-parameter \"intRandomRange2\" as an array\n"); + } + break; + case constcrc("intRandomRange3"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intRandomRange3; + } + fprintf(stderr, "trying to access single-parameter \"intRandomRange3\" as an array\n"); + } + break; + case constcrc("intRandomRange4"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intRandomRange4; + } + fprintf(stderr, "trying to access single-parameter \"intRandomRange4\" as an array\n"); + } + break; + case constcrc("intDiceRoll1"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intDiceRoll1; + } + fprintf(stderr, "trying to access single-parameter \"intDiceRoll1\" as an array\n"); + } + break; + case constcrc("intDiceRoll2"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_intDiceRoll2; + } + fprintf(stderr, "trying to access single-parameter \"intDiceRoll2\" as an array\n"); + } + break; + case constcrc("intListSimple"): { + if (index >= 0 && index < static_cast(m_intListSimple.size())) + return m_intListSimple[index]; + if (index == static_cast(m_intListSimple.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_intListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"intListSimple\" out of bounds\n"); + } + break; + case constcrc("intListWeightedList"): { + if (index >= 0 && index < static_cast(m_intListWeightedList.size())) + return m_intListWeightedList[index]; + if (index == static_cast(m_intListWeightedList.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_intListWeightedList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"intListWeightedList\" out of bounds\n"); + } + break; + case constcrc("intListRandomRange"): { + if (index >= 0 && index < static_cast(m_intListRandomRange.size())) + return m_intListRandomRange[index]; + if (index == static_cast(m_intListRandomRange.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_intListRandomRange.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"intListRandomRange\" out of bounds\n"); + } + break; + case constcrc("intListDiceRoll"): { + if (index >= 0 && index < static_cast(m_intListDiceRoll.size())) + return m_intListDiceRoll[index]; + if (index == static_cast(m_intListDiceRoll.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_intListDiceRoll.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"intListDiceRoll\" out of bounds\n"); + } + break; + case constcrc("enumIndexedByEnumSingle"): { + if (index >= 0 && index < 3) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_enumIndexedByEnumSingle[index]; + } + fprintf(stderr, "index for parameter \"enumIndexedByEnumSingle\" out of bounds\n"); + } + break; + case constcrc("enumIndexedByEnumWeightedList"): { + if (index >= 0 && index < 3) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_enumIndexedByEnumWeightedList[index]; + } + fprintf(stderr, "index for parameter \"enumIndexedByEnumWeightedList\" out of bounds\n"); + } + break; + case constcrc("enumListIndexed"): { + if (index >= 0 && index < static_cast(m_enumListIndexed.size())) + return m_enumListIndexed[index]; + if (index == static_cast(m_enumListIndexed.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_enumListIndexed.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"enumListIndexed\" out of bounds\n"); + } + break; + case constcrc("enumListWeightedList"): { + if (index >= 0 && index < static_cast(m_enumListWeightedList.size())) + return m_enumListWeightedList[index]; + if (index == static_cast(m_enumListWeightedList.size())) { + CompilerIntegerParam *temp = new CompilerIntegerParam(); + m_enumListWeightedList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"enumListWeightedList\" out of bounds\n"); + } + break; + case constcrc("integerArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_integerArray[index]; + } + fprintf(stderr, "index for parameter \"integerArray\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getCompilerIntegerParam -FloatParam * ServerUberObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "floatAtDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatAtDerived; - } - fprintf(stderr, "trying to access single-parameter \"floatAtDerived\" as an array\n"); - } - else if (strcmp(name, "floatSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatSimple; - } - fprintf(stderr, "trying to access single-parameter \"floatSimple\" as an array\n"); - } - else if (strcmp(name, "floatSimpleDeltaPositive") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatSimpleDeltaPositive; - } - fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaPositive\" as an array\n"); - } - else if (strcmp(name, "floatSimpleDeltaNegative") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatSimpleDeltaNegative; - } - fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaNegative\" as an array\n"); - } - else if (strcmp(name, "floatSimpleDeltaPositivePercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatSimpleDeltaPositivePercent; - } - fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaPositivePercent\" as an array\n"); - } - else if (strcmp(name, "floatSimpleDeltaNegativePercent") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatSimpleDeltaNegativePercent; - } - fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaNegativePercent\" as an array\n"); - } - else if (strcmp(name, "floatWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"floatWeightedList\" as an array\n"); - } - else if (strcmp(name, "floatRandomRange1") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatRandomRange1; - } - fprintf(stderr, "trying to access single-parameter \"floatRandomRange1\" as an array\n"); - } - else if (strcmp(name, "floatRandomRange2") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatRandomRange2; - } - fprintf(stderr, "trying to access single-parameter \"floatRandomRange2\" as an array\n"); - } - else if (strcmp(name, "floatRandomRange3") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatRandomRange3; - } - fprintf(stderr, "trying to access single-parameter \"floatRandomRange3\" as an array\n"); - } - else if (strcmp(name, "floatRandomRange4") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatRandomRange4; - } - fprintf(stderr, "trying to access single-parameter \"floatRandomRange4\" as an array\n"); - } - else if (strcmp(name, "floatListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_floatListSimple.size())) - return m_floatListSimple[index]; - if (index == static_cast(m_floatListSimple.size())) - { - FloatParam *temp = new FloatParam(); - m_floatListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"floatListSimple\" out of bounds\n"); - } - else if (strcmp(name, "floatListWeightedList") == 0) - { - if (index >= 0 && index < static_cast(m_floatListWeightedList.size())) - return m_floatListWeightedList[index]; - if (index == static_cast(m_floatListWeightedList.size())) - { - FloatParam *temp = new FloatParam(); - m_floatListWeightedList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"floatListWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "floatListRandomRange") == 0) - { - if (index >= 0 && index < static_cast(m_floatListRandomRange.size())) - return m_floatListRandomRange[index]; - if (index == static_cast(m_floatListRandomRange.size())) - { - FloatParam *temp = new FloatParam(); - m_floatListRandomRange.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"floatListRandomRange\" out of bounds\n"); - } - else if (strcmp(name, "floatArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_floatArray[index]; - } - fprintf(stderr, "index for parameter \"floatArray\" out of bounds\n"); - } - else - return TpfTemplate::getFloatParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getFloatParam +FloatParam *ServerUberObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("floatAtDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatAtDerived; + } + fprintf(stderr, "trying to access single-parameter \"floatAtDerived\" as an array\n"); + } + break; + case constcrc("floatSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatSimple; + } + fprintf(stderr, "trying to access single-parameter \"floatSimple\" as an array\n"); + } + break; + case constcrc("floatSimpleDeltaPositive"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatSimpleDeltaPositive; + } + fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaPositive\" as an array\n"); + } + break; + case constcrc("floatSimpleDeltaNegative"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatSimpleDeltaNegative; + } + fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaNegative\" as an array\n"); + } + break; + case constcrc("floatSimpleDeltaPositivePercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatSimpleDeltaPositivePercent; + } + fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaPositivePercent\" as an array\n"); + } + break; + case constcrc("floatSimpleDeltaNegativePercent"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatSimpleDeltaNegativePercent; + } + fprintf(stderr, "trying to access single-parameter \"floatSimpleDeltaNegativePercent\" as an array\n"); + } + break; + case constcrc("floatWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"floatWeightedList\" as an array\n"); + } + break; + case constcrc("floatRandomRange1"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatRandomRange1; + } + fprintf(stderr, "trying to access single-parameter \"floatRandomRange1\" as an array\n"); + } + break; + case constcrc("floatRandomRange2"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatRandomRange2; + } + fprintf(stderr, "trying to access single-parameter \"floatRandomRange2\" as an array\n"); + } + break; + case constcrc("floatRandomRange3"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatRandomRange3; + } + fprintf(stderr, "trying to access single-parameter \"floatRandomRange3\" as an array\n"); + } + break; + case constcrc("floatRandomRange4"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatRandomRange4; + } + fprintf(stderr, "trying to access single-parameter \"floatRandomRange4\" as an array\n"); + } + break; + case constcrc("floatListSimple"): { + if (index >= 0 && index < static_cast(m_floatListSimple.size())) + return m_floatListSimple[index]; + if (index == static_cast(m_floatListSimple.size())) { + FloatParam *temp = new FloatParam(); + m_floatListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"floatListSimple\" out of bounds\n"); + } + break; + case constcrc("floatListWeightedList"): { + if (index >= 0 && index < static_cast(m_floatListWeightedList.size())) + return m_floatListWeightedList[index]; + if (index == static_cast(m_floatListWeightedList.size())) { + FloatParam *temp = new FloatParam(); + m_floatListWeightedList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"floatListWeightedList\" out of bounds\n"); + } + break; + case constcrc("floatListRandomRange"): { + if (index >= 0 && index < static_cast(m_floatListRandomRange.size())) + return m_floatListRandomRange[index]; + if (index == static_cast(m_floatListRandomRange.size())) { + FloatParam *temp = new FloatParam(); + m_floatListRandomRange.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"floatListRandomRange\" out of bounds\n"); + } + break; + case constcrc("floatArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_floatArray[index]; + } + fprintf(stderr, "index for parameter \"floatArray\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getFloatParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getFloatParam -BoolParam * ServerUberObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "boolDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return NULL; - } - return &m_boolDerived; - } - fprintf(stderr, "trying to access single-parameter \"boolDerived\" as an array\n"); - } - else if (strcmp(name, "boolSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return NULL; - } - return &m_boolSimple; - } - fprintf(stderr, "trying to access single-parameter \"boolSimple\" as an array\n"); - } - else if (strcmp(name, "boolWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return NULL; - } - return &m_boolWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"boolWeightedList\" as an array\n"); - } - else if (strcmp(name, "boolListDerived") == 0) - { - if (index >= 0 && index < static_cast(m_boolListDerived.size())) - return m_boolListDerived[index]; - if (index == static_cast(m_boolListDerived.size())) - { - BoolParam *temp = new BoolParam(); - m_boolListDerived.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"boolListDerived\" out of bounds\n"); - } - else if (strcmp(name, "boolListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_boolListSimple.size())) - return m_boolListSimple[index]; - if (index == static_cast(m_boolListSimple.size())) - { - BoolParam *temp = new BoolParam(); - m_boolListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"boolListSimple\" out of bounds\n"); - } - else if (strcmp(name, "boolListWeightedList") == 0) - { - if (index >= 0 && index < static_cast(m_boolListWeightedList.size())) - return m_boolListWeightedList[index]; - if (index == static_cast(m_boolListWeightedList.size())) - { - BoolParam *temp = new BoolParam(); - m_boolListWeightedList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"boolListWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "boolArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getBoolParam(name, deepCheck, index); - return NULL; - } - return &m_boolArray[index]; - } - fprintf(stderr, "index for parameter \"boolArray\" out of bounds\n"); - } - else - return TpfTemplate::getBoolParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getBoolParam +BoolParam *ServerUberObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("boolDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_boolDerived; + } + fprintf(stderr, "trying to access single-parameter \"boolDerived\" as an array\n"); + } + break; + case constcrc("boolSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_boolSimple; + } + fprintf(stderr, "trying to access single-parameter \"boolSimple\" as an array\n"); + } + break; + case constcrc("boolWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_boolWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"boolWeightedList\" as an array\n"); + } + break; + case constcrc("boolListDerived"): { + if (index >= 0 && index < static_cast(m_boolListDerived.size())) + return m_boolListDerived[index]; + if (index == static_cast(m_boolListDerived.size())) { + BoolParam *temp = new BoolParam(); + m_boolListDerived.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"boolListDerived\" out of bounds\n"); + } + break; + case constcrc("boolListSimple"): { + if (index >= 0 && index < static_cast(m_boolListSimple.size())) + return m_boolListSimple[index]; + if (index == static_cast(m_boolListSimple.size())) { + BoolParam *temp = new BoolParam(); + m_boolListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"boolListSimple\" out of bounds\n"); + } + break; + case constcrc("boolListWeightedList"): { + if (index >= 0 && index < static_cast(m_boolListWeightedList.size())) + return m_boolListWeightedList[index]; + if (index == static_cast(m_boolListWeightedList.size())) { + BoolParam *temp = new BoolParam(); + m_boolListWeightedList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"boolListWeightedList\" out of bounds\n"); + } + break; + case constcrc("boolArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_boolArray[index]; + } + fprintf(stderr, "index for parameter \"boolArray\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getBoolParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getBoolParam -StringParam * ServerUberObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "stringDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_stringDerived; - } - fprintf(stderr, "trying to access single-parameter \"stringDerived\" as an array\n"); - } - else if (strcmp(name, "stringSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_stringSimple; - } - fprintf(stderr, "trying to access single-parameter \"stringSimple\" as an array\n"); - } - else if (strcmp(name, "stringWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_stringWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"stringWeightedList\" as an array\n"); - } - else if (strcmp(name, "stringListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_stringListSimple.size())) - return m_stringListSimple[index]; - if (index == static_cast(m_stringListSimple.size())) - { - StringParam *temp = new StringParam(); - m_stringListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"stringListSimple\" out of bounds\n"); - } - else if (strcmp(name, "stringListWeightedList") == 0) - { - if (index >= 0 && index < static_cast(m_stringListWeightedList.size())) - return m_stringListWeightedList[index]; - if (index == static_cast(m_stringListWeightedList.size())) - { - StringParam *temp = new StringParam(); - m_stringListWeightedList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"stringListWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "filenameAtDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_filenameAtDerived; - } - fprintf(stderr, "trying to access single-parameter \"filenameAtDerived\" as an array\n"); - } - else if (strcmp(name, "filenameSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_filenameSimple; - } - fprintf(stderr, "trying to access single-parameter \"filenameSimple\" as an array\n"); - } - else if (strcmp(name, "filenameWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_filenameWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"filenameWeightedList\" as an array\n"); - } - else if (strcmp(name, "filenameListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_filenameListSimple.size())) - return m_filenameListSimple[index]; - if (index == static_cast(m_filenameListSimple.size())) - { - StringParam *temp = new StringParam(); - m_filenameListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"filenameListSimple\" out of bounds\n"); - } - else if (strcmp(name, "templateDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_templateDerived; - } - fprintf(stderr, "trying to access single-parameter \"templateDerived\" as an array\n"); - } - else if (strcmp(name, "templateSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_templateSimple; - } - fprintf(stderr, "trying to access single-parameter \"templateSimple\" as an array\n"); - } - else if (strcmp(name, "templateWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_templateWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"templateWeightedList\" as an array\n"); - } - else if (strcmp(name, "templateListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_templateListSimple.size())) - return m_templateListSimple[index]; - if (index == static_cast(m_templateListSimple.size())) - { - StringParam *temp = new StringParam(); - m_templateListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"templateListSimple\" out of bounds\n"); - } - else if (strcmp(name, "stringArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_stringArray[index]; - } - fprintf(stderr, "index for parameter \"stringArray\" out of bounds\n"); - } - else if (strcmp(name, "fileNameArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_fileNameArray[index]; - } - fprintf(stderr, "index for parameter \"fileNameArray\" out of bounds\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getStringParam +StringParam *ServerUberObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("stringDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_stringDerived; + } + fprintf(stderr, "trying to access single-parameter \"stringDerived\" as an array\n"); + } + break; + case constcrc("stringSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_stringSimple; + } + fprintf(stderr, "trying to access single-parameter \"stringSimple\" as an array\n"); + } + break; + case constcrc("stringWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_stringWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"stringWeightedList\" as an array\n"); + } + break; + case constcrc("stringListSimple"): { + if (index >= 0 && index < static_cast(m_stringListSimple.size())) + return m_stringListSimple[index]; + if (index == static_cast(m_stringListSimple.size())) { + StringParam *temp = new StringParam(); + m_stringListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"stringListSimple\" out of bounds\n"); + } + break; + case constcrc("stringListWeightedList"): { + if (index >= 0 && index < static_cast(m_stringListWeightedList.size())) + return m_stringListWeightedList[index]; + if (index == static_cast(m_stringListWeightedList.size())) { + StringParam *temp = new StringParam(); + m_stringListWeightedList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"stringListWeightedList\" out of bounds\n"); + } + break; + case constcrc("filenameAtDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_filenameAtDerived; + } + fprintf(stderr, "trying to access single-parameter \"filenameAtDerived\" as an array\n"); + } + break; + case constcrc("filenameSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_filenameSimple; + } + fprintf(stderr, "trying to access single-parameter \"filenameSimple\" as an array\n"); + } + break; + case constcrc("filenameWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_filenameWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"filenameWeightedList\" as an array\n"); + } + break; + case constcrc("filenameListSimple"): { + if (index >= 0 && index < static_cast(m_filenameListSimple.size())) + return m_filenameListSimple[index]; + if (index == static_cast(m_filenameListSimple.size())) { + StringParam *temp = new StringParam(); + m_filenameListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"filenameListSimple\" out of bounds\n"); + } + break; + case constcrc("templateDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_templateDerived; + } + fprintf(stderr, "trying to access single-parameter \"templateDerived\" as an array\n"); + } + break; + case constcrc("templateSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_templateSimple; + } + fprintf(stderr, "trying to access single-parameter \"templateSimple\" as an array\n"); + } + break; + case constcrc("templateWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_templateWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"templateWeightedList\" as an array\n"); + } + break; + case constcrc("templateListSimple"): { + if (index >= 0 && index < static_cast(m_templateListSimple.size())) + return m_templateListSimple[index]; + if (index == static_cast(m_templateListSimple.size())) { + StringParam *temp = new StringParam(); + m_templateListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"templateListSimple\" out of bounds\n"); + } + break; + case constcrc("stringArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_stringArray[index]; + } + fprintf(stderr, "index for parameter \"stringArray\" out of bounds\n"); + } + break; + case constcrc("fileNameArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_fileNameArray[index]; + } + fprintf(stderr, "index for parameter \"fileNameArray\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getStringParam -StringIdParam * ServerUberObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "stringIdDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return NULL; - } - return &m_stringIdDerived; - } - fprintf(stderr, "trying to access single-parameter \"stringIdDerived\" as an array\n"); - } - else if (strcmp(name, "stringIdSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return NULL; - } - return &m_stringIdSimple; - } - fprintf(stderr, "trying to access single-parameter \"stringIdSimple\" as an array\n"); - } - else if (strcmp(name, "stringIdWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return NULL; - } - return &m_stringIdWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"stringIdWeightedList\" as an array\n"); - } - else if (strcmp(name, "stringIdListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_stringIdListSimple.size())) - return m_stringIdListSimple[index]; - if (index == static_cast(m_stringIdListSimple.size())) - { - StringIdParam *temp = new StringIdParam(); - m_stringIdListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"stringIdListSimple\" out of bounds\n"); - } - else if (strcmp(name, "stringIdListWeightedList") == 0) - { - if (index >= 0 && index < static_cast(m_stringIdListWeightedList.size())) - return m_stringIdListWeightedList[index]; - if (index == static_cast(m_stringIdListWeightedList.size())) - { - StringIdParam *temp = new StringIdParam(); - m_stringIdListWeightedList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"stringIdListWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "stringIdArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringIdParam(name, deepCheck, index); - return NULL; - } - return &m_stringIdArray[index]; - } - fprintf(stderr, "index for parameter \"stringIdArray\" out of bounds\n"); - } - else - return TpfTemplate::getStringIdParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getStringIdParam +StringIdParam *ServerUberObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("stringIdDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_stringIdDerived; + } + fprintf(stderr, "trying to access single-parameter \"stringIdDerived\" as an array\n"); + } + break; + case constcrc("stringIdSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_stringIdSimple; + } + fprintf(stderr, "trying to access single-parameter \"stringIdSimple\" as an array\n"); + } + break; + case constcrc("stringIdWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_stringIdWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"stringIdWeightedList\" as an array\n"); + } + break; + case constcrc("stringIdListSimple"): { + if (index >= 0 && index < static_cast(m_stringIdListSimple.size())) + return m_stringIdListSimple[index]; + if (index == static_cast(m_stringIdListSimple.size())) { + StringIdParam *temp = new StringIdParam(); + m_stringIdListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"stringIdListSimple\" out of bounds\n"); + } + break; + case constcrc("stringIdListWeightedList"): { + if (index >= 0 && index < static_cast(m_stringIdListWeightedList.size())) + return m_stringIdListWeightedList[index]; + if (index == static_cast(m_stringIdListWeightedList.size())) { + StringIdParam *temp = new StringIdParam(); + m_stringIdListWeightedList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"stringIdListWeightedList\" out of bounds\n"); + } + break; + case constcrc("stringIdArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_stringIdArray[index]; + } + fprintf(stderr, "index for parameter \"stringIdArray\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getStringIdParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getStringIdParam -VectorParam * ServerUberObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "vectorAtDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getVectorParam(name, deepCheck, index); - return NULL; - } - return &m_vectorAtDerived; - } - fprintf(stderr, "trying to access single-parameter \"vectorAtDerived\" as an array\n"); - } - else if (strcmp(name, "vectorSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getVectorParam(name, deepCheck, index); - return NULL; - } - return &m_vectorSimple; - } - fprintf(stderr, "trying to access single-parameter \"vectorSimple\" as an array\n"); - } - else if (strcmp(name, "vectorListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_vectorListSimple.size())) - return m_vectorListSimple[index]; - if (index == static_cast(m_vectorListSimple.size())) - { - VectorParam *temp = new VectorParam(); - m_vectorListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"vectorListSimple\" out of bounds\n"); - } - else if (strcmp(name, "vectorArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getVectorParam(name, deepCheck, index); - return NULL; - } - return &m_vectorArray[index]; - } - fprintf(stderr, "index for parameter \"vectorArray\" out of bounds\n"); - } - else - return TpfTemplate::getVectorParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getVectorParam +VectorParam *ServerUberObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("vectorAtDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getVectorParam(name, deepCheck, index); + return NULL; + } + return &m_vectorAtDerived; + } + fprintf(stderr, "trying to access single-parameter \"vectorAtDerived\" as an array\n"); + } + break; + case constcrc("vectorSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getVectorParam(name, deepCheck, index); + return NULL; + } + return &m_vectorSimple; + } + fprintf(stderr, "trying to access single-parameter \"vectorSimple\" as an array\n"); + } + break; + case constcrc("vectorListSimple"): { + if (index >= 0 && index < static_cast(m_vectorListSimple.size())) + return m_vectorListSimple[index]; + if (index == static_cast(m_vectorListSimple.size())) { + VectorParam *temp = new VectorParam(); + m_vectorListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"vectorListSimple\" out of bounds\n"); + } + break; + case constcrc("vectorArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getVectorParam(name, deepCheck, index); + return NULL; + } + return &m_vectorArray[index]; + } + fprintf(stderr, "index for parameter \"vectorArray\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getVectorParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getVectorParam -DynamicVariableParam * ServerUberObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "objvarDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getDynamicVariableParam(name, deepCheck, index); - return NULL; - } - return &m_objvarDerived; - } - fprintf(stderr, "trying to access single-parameter \"objvarDerived\" as an array\n"); - } - else if (strcmp(name, "objvarSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getDynamicVariableParam(name, deepCheck, index); - return NULL; - } - return &m_objvarSimple; - } - fprintf(stderr, "trying to access single-parameter \"objvarSimple\" as an array\n"); - } - else - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getDynamicVariableParam +DynamicVariableParam *ServerUberObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("objvarDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getDynamicVariableParam(name, deepCheck, index); + return NULL; + } + return &m_objvarDerived; + } + fprintf(stderr, "trying to access single-parameter \"objvarDerived\" as an array\n"); + } + break; + case constcrc("objvarSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getDynamicVariableParam(name, deepCheck, index); + return NULL; + } + return &m_objvarSimple; + } + fprintf(stderr, "trying to access single-parameter \"objvarSimple\" as an array\n"); + } + break; + default: + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getDynamicVariableParam -StructParamOT * ServerUberObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "structAtDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStructParamOT(name, deepCheck, index); - return NULL; - } - return &m_structAtDerived; - } - fprintf(stderr, "trying to access single-parameter \"structAtDerived\" as an array\n"); - } - else if (strcmp(name, "structSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStructParamOT(name, deepCheck, index); - return NULL; - } - return &m_structSimple; - } - fprintf(stderr, "trying to access single-parameter \"structSimple\" as an array\n"); - } - else if (strcmp(name, "structListSimple") == 0) - { - if (index >= 0 && index < static_cast(m_structListSimple.size())) - return m_structListSimple[index]; - if (index == static_cast(m_structListSimple.size())) - { - StructParamOT *temp = new StructParamOT(); - m_structListSimple.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"structListSimple\" out of bounds\n"); - } - else if (strcmp(name, "structArrayEnum") == 0) - { - if (index >= 0 && index < 3) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStructParamOT(name, deepCheck, index); - return NULL; - } - return &m_structArrayEnum[index]; - } - fprintf(stderr, "index for parameter \"structArrayEnum\" out of bounds\n"); - } - else if (strcmp(name, "structArrayInteger") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStructParamOT(name, deepCheck, index); - return NULL; - } - return &m_structArrayInteger[index]; - } - fprintf(stderr, "index for parameter \"structArrayInteger\" out of bounds\n"); - } - else - return TpfTemplate::getStructParamOT(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getStructParamOT +StructParamOT *ServerUberObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("structAtDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStructParamOT(name, deepCheck, index); + return NULL; + } + return &m_structAtDerived; + } + fprintf(stderr, "trying to access single-parameter \"structAtDerived\" as an array\n"); + } + break; + case constcrc("structSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStructParamOT(name, deepCheck, index); + return NULL; + } + return &m_structSimple; + } + fprintf(stderr, "trying to access single-parameter \"structSimple\" as an array\n"); + } + break; + case constcrc("structListSimple"): { + if (index >= 0 && index < static_cast(m_structListSimple.size())) + return m_structListSimple[index]; + if (index == static_cast(m_structListSimple.size())) { + StructParamOT *temp = new StructParamOT(); + m_structListSimple.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"structListSimple\" out of bounds\n"); + } + break; + case constcrc("structArrayEnum"): { + if (index >= 0 && index < 3) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStructParamOT(name, deepCheck, index); + return NULL; + } + return &m_structArrayEnum[index]; + } + fprintf(stderr, "index for parameter \"structArrayEnum\" out of bounds\n"); + } + break; + case constcrc("structArrayInteger"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStructParamOT(name, deepCheck, index); + return NULL; + } + return &m_structArrayInteger[index]; + } + fprintf(stderr, "index for parameter \"structArrayInteger\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getStructParamOT(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getStructParamOT -TriggerVolumeParam * ServerUberObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "triggerVolumeDerived") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); - return NULL; - } - return &m_triggerVolumeDerived; - } - fprintf(stderr, "trying to access single-parameter \"triggerVolumeDerived\" as an array\n"); - } - else if (strcmp(name, "triggerVolumeSimple") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); - return NULL; - } - return &m_triggerVolumeSimple; - } - fprintf(stderr, "trying to access single-parameter \"triggerVolumeSimple\" as an array\n"); - } - else if (strcmp(name, "triggerVolumeWeightedList") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); - return NULL; - } - return &m_triggerVolumeWeightedList; - } - fprintf(stderr, "trying to access single-parameter \"triggerVolumeWeightedList\" as an array\n"); - } - else if (strcmp(name, "triggerVolumeList") == 0) - { - if (index >= 0 && index < static_cast(m_triggerVolumeList.size())) - return m_triggerVolumeList[index]; - if (index == static_cast(m_triggerVolumeList.size())) - { - TriggerVolumeParam *temp = new TriggerVolumeParam(); - m_triggerVolumeList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"triggerVolumeList\" out of bounds\n"); - } - else if (strcmp(name, "triggerVolumesListWeightedList") == 0) - { - if (index >= 0 && index < static_cast(m_triggerVolumesListWeightedList.size())) - return m_triggerVolumesListWeightedList[index]; - if (index == static_cast(m_triggerVolumesListWeightedList.size())) - { - TriggerVolumeParam *temp = new TriggerVolumeParam(); - m_triggerVolumesListWeightedList.push_back(temp); - return temp; - } - fprintf(stderr, "index for parameter \"triggerVolumesListWeightedList\" out of bounds\n"); - } - else if (strcmp(name, "triggerArray") == 0) - { - if (index >= 0 && index < 2) - { - if (deepCheck && !isParamLoaded(name, false, index)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); - return NULL; - } - return &m_triggerArray[index]; - } - fprintf(stderr, "index for parameter \"triggerArray\" out of bounds\n"); - } - else - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::getTriggerVolumeParam +TriggerVolumeParam *ServerUberObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("triggerVolumeDerived"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); + return NULL; + } + return &m_triggerVolumeDerived; + } + fprintf(stderr, "trying to access single-parameter \"triggerVolumeDerived\" as an array\n"); + } + break; + case constcrc("triggerVolumeSimple"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); + return NULL; + } + return &m_triggerVolumeSimple; + } + fprintf(stderr, "trying to access single-parameter \"triggerVolumeSimple\" as an array\n"); + } + break; + case constcrc("triggerVolumeWeightedList"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); + return NULL; + } + return &m_triggerVolumeWeightedList; + } + fprintf(stderr, "trying to access single-parameter \"triggerVolumeWeightedList\" as an array\n"); + } + break; + case constcrc("triggerVolumeList"): { + if (index >= 0 && index < static_cast(m_triggerVolumeList.size())) + return m_triggerVolumeList[index]; + if (index == static_cast(m_triggerVolumeList.size())) { + TriggerVolumeParam *temp = new TriggerVolumeParam(); + m_triggerVolumeList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"triggerVolumeList\" out of bounds\n"); + } + break; + case constcrc("triggerVolumesListWeightedList"): { + if (index >= 0 && index < static_cast(m_triggerVolumesListWeightedList.size())) + return m_triggerVolumesListWeightedList[index]; + if (index == static_cast(m_triggerVolumesListWeightedList.size())) { + TriggerVolumeParam *temp = new TriggerVolumeParam(); + m_triggerVolumesListWeightedList.push_back(temp); + return temp; + } + fprintf(stderr, "index for parameter \"triggerVolumesListWeightedList\" out of bounds\n"); + } + break; + case constcrc("triggerArray"): { + if (index >= 0 && index < 2) { + if (deepCheck && !isParamLoaded(name, false, index)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getTriggerVolumeParam(name, deepCheck, index); + return NULL; + } + return &m_triggerArray[index]; + } + fprintf(stderr, "index for parameter \"triggerArray\" out of bounds\n"); + } + break; + default: + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::getTriggerVolumeParam -void ServerUberObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - if (strcmp(name, "structAtDerived") == 0) - param.setValue(new _Foo("")); - else if (strcmp(name, "structSimple") == 0) - param.setValue(new _Foo("")); - else if (strcmp(name, "structListSimple") == 0) - param.setValue(new _Foo("")); - else if (strcmp(name, "structArrayEnum") == 0) - param.setValue(new _Foo("")); - else if (strcmp(name, "structArrayInteger") == 0) - param.setValue(new _Foo("")); - else - TpfTemplate::initStructParamOT(param, name); -} // ServerUberObjectTemplate::initStructParamOT +void ServerUberObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + switch (runtimeCrc(name)) { + case constcrc("structAtDerived"): + param.setValue(new _Foo("")); + break; + case constcrc("structSimple"): + param.setValue(new _Foo("")); + break; + case constcrc("structListSimple"): + param.setValue(new _Foo("")); + break; + case constcrc("structArrayEnum"): + param.setValue(new _Foo("")); + break; + case constcrc("structArrayInteger"): + param.setValue(new _Foo("")); + break; + default: + TpfTemplate::initStructParamOT(param, name); + break; + } +} // ServerUberObjectTemplate::initStructParamOT -void ServerUberObjectTemplate::setAsEmptyList(const char *name) -{ - if (strcmp(name, "intListSimple") == 0) - { - m_intListSimple.clear(); - m_intListSimpleLoaded = true; - } - else if (strcmp(name, "intListWeightedList") == 0) - { - m_intListWeightedList.clear(); - m_intListWeightedListLoaded = true; - } - else if (strcmp(name, "intListRandomRange") == 0) - { - m_intListRandomRange.clear(); - m_intListRandomRangeLoaded = true; - } - else if (strcmp(name, "intListDiceRoll") == 0) - { - m_intListDiceRoll.clear(); - m_intListDiceRollLoaded = true; - } - else if (strcmp(name, "floatListSimple") == 0) - { - m_floatListSimple.clear(); - m_floatListSimpleLoaded = true; - } - else if (strcmp(name, "floatListWeightedList") == 0) - { - m_floatListWeightedList.clear(); - m_floatListWeightedListLoaded = true; - } - else if (strcmp(name, "floatListRandomRange") == 0) - { - m_floatListRandomRange.clear(); - m_floatListRandomRangeLoaded = true; - } - else if (strcmp(name, "enumListIndexed") == 0) - { - m_enumListIndexed.clear(); - m_enumListIndexedLoaded = true; - } - else if (strcmp(name, "enumListWeightedList") == 0) - { - m_enumListWeightedList.clear(); - m_enumListWeightedListLoaded = true; - } - else if (strcmp(name, "stringIdListSimple") == 0) - { - m_stringIdListSimple.clear(); - m_stringIdListSimpleLoaded = true; - } - else if (strcmp(name, "stringIdListWeightedList") == 0) - { - m_stringIdListWeightedList.clear(); - m_stringIdListWeightedListLoaded = true; - } - else if (strcmp(name, "stringListSimple") == 0) - { - m_stringListSimple.clear(); - m_stringListSimpleLoaded = true; - } - else if (strcmp(name, "stringListWeightedList") == 0) - { - m_stringListWeightedList.clear(); - m_stringListWeightedListLoaded = true; - } - else if (strcmp(name, "triggerVolumeList") == 0) - { - m_triggerVolumeList.clear(); - m_triggerVolumeListLoaded = true; - } - else if (strcmp(name, "triggerVolumesListWeightedList") == 0) - { - m_triggerVolumesListWeightedList.clear(); - m_triggerVolumesListWeightedListLoaded = true; - } - else if (strcmp(name, "boolListDerived") == 0) - { - m_boolListDerived.clear(); - m_boolListDerivedLoaded = true; - } - else if (strcmp(name, "boolListSimple") == 0) - { - m_boolListSimple.clear(); - m_boolListSimpleLoaded = true; - } - else if (strcmp(name, "boolListWeightedList") == 0) - { - m_boolListWeightedList.clear(); - m_boolListWeightedListLoaded = true; - } - else if (strcmp(name, "vectorListSimple") == 0) - { - m_vectorListSimple.clear(); - m_vectorListSimpleLoaded = true; - } - else if (strcmp(name, "filenameListSimple") == 0) - { - m_filenameListSimple.clear(); - m_filenameListSimpleLoaded = true; - } - else if (strcmp(name, "templateListSimple") == 0) - { - m_templateListSimple.clear(); - m_templateListSimpleLoaded = true; - } - else if (strcmp(name, "structListSimple") == 0) - { - m_structListSimple.clear(); - m_structListSimpleLoaded = true; - } - else - TpfTemplate::setAsEmptyList(name); -} // ServerUberObjectTemplate::setAsEmptyList +void ServerUberObjectTemplate::setAsEmptyList(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("intListSimple"): { + m_intListSimple.clear(); + m_intListSimpleLoaded = true; + } + break; + case constcrc("intListWeightedList"): { + m_intListWeightedList.clear(); + m_intListWeightedListLoaded = true; + } + break; + case constcrc("intListRandomRange"): { + m_intListRandomRange.clear(); + m_intListRandomRangeLoaded = true; + } + break; + case constcrc("intListDiceRoll"): { + m_intListDiceRoll.clear(); + m_intListDiceRollLoaded = true; + } + break; + case constcrc("floatListSimple"): { + m_floatListSimple.clear(); + m_floatListSimpleLoaded = true; + } + break; + case constcrc("floatListWeightedList"): { + m_floatListWeightedList.clear(); + m_floatListWeightedListLoaded = true; + } + break; + case constcrc("floatListRandomRange"): { + m_floatListRandomRange.clear(); + m_floatListRandomRangeLoaded = true; + } + break; + case constcrc("enumListIndexed"): { + m_enumListIndexed.clear(); + m_enumListIndexedLoaded = true; + } + break; + case constcrc("enumListWeightedList"): { + m_enumListWeightedList.clear(); + m_enumListWeightedListLoaded = true; + } + break; + case constcrc("stringIdListSimple"): { + m_stringIdListSimple.clear(); + m_stringIdListSimpleLoaded = true; + } + break; + case constcrc("stringIdListWeightedList"): { + m_stringIdListWeightedList.clear(); + m_stringIdListWeightedListLoaded = true; + } + break; + case constcrc("stringListSimple"): { + m_stringListSimple.clear(); + m_stringListSimpleLoaded = true; + } + break; + case constcrc("stringListWeightedList"): { + m_stringListWeightedList.clear(); + m_stringListWeightedListLoaded = true; + } + break; + case constcrc("triggerVolumeList"): { + m_triggerVolumeList.clear(); + m_triggerVolumeListLoaded = true; + } + break; + case constcrc("triggerVolumesListWeightedList"): { + m_triggerVolumesListWeightedList.clear(); + m_triggerVolumesListWeightedListLoaded = true; + } + break; + case constcrc("boolListDerived"): { + m_boolListDerived.clear(); + m_boolListDerivedLoaded = true; + } + break; + case constcrc("boolListSimple"): { + m_boolListSimple.clear(); + m_boolListSimpleLoaded = true; + } + break; + case constcrc("boolListWeightedList"): { + m_boolListWeightedList.clear(); + m_boolListWeightedListLoaded = true; + } + break; + case constcrc("vectorListSimple"): { + m_vectorListSimple.clear(); + m_vectorListSimpleLoaded = true; + } + break; + case constcrc("filenameListSimple"): { + m_filenameListSimple.clear(); + m_filenameListSimpleLoaded = true; + } + break; + case constcrc("templateListSimple"): { + m_templateListSimple.clear(); + m_templateListSimpleLoaded = true; + } + break; + case constcrc("structListSimple"): { + m_structListSimple.clear(); + m_structListSimpleLoaded = true; + } + break; + default: + TpfTemplate::setAsEmptyList(name); + break; + } +} // ServerUberObjectTemplate::setAsEmptyList -void ServerUberObjectTemplate::setAppend(const char *name) -{ - if (strcmp(name, "intListSimple") == 0) - m_intListSimpleAppend = true; - else if (strcmp(name, "intListWeightedList") == 0) - m_intListWeightedListAppend = true; - else if (strcmp(name, "intListRandomRange") == 0) - m_intListRandomRangeAppend = true; - else if (strcmp(name, "intListDiceRoll") == 0) - m_intListDiceRollAppend = true; - else if (strcmp(name, "floatListSimple") == 0) - m_floatListSimpleAppend = true; - else if (strcmp(name, "floatListWeightedList") == 0) - m_floatListWeightedListAppend = true; - else if (strcmp(name, "floatListRandomRange") == 0) - m_floatListRandomRangeAppend = true; - else if (strcmp(name, "enumListIndexed") == 0) - m_enumListIndexedAppend = true; - else if (strcmp(name, "enumListWeightedList") == 0) - m_enumListWeightedListAppend = true; - else if (strcmp(name, "stringIdListSimple") == 0) - m_stringIdListSimpleAppend = true; - else if (strcmp(name, "stringIdListWeightedList") == 0) - m_stringIdListWeightedListAppend = true; - else if (strcmp(name, "stringListSimple") == 0) - m_stringListSimpleAppend = true; - else if (strcmp(name, "stringListWeightedList") == 0) - m_stringListWeightedListAppend = true; - else if (strcmp(name, "triggerVolumeList") == 0) - m_triggerVolumeListAppend = true; - else if (strcmp(name, "triggerVolumesListWeightedList") == 0) - m_triggerVolumesListWeightedListAppend = true; - else if (strcmp(name, "boolListDerived") == 0) - m_boolListDerivedAppend = true; - else if (strcmp(name, "boolListSimple") == 0) - m_boolListSimpleAppend = true; - else if (strcmp(name, "boolListWeightedList") == 0) - m_boolListWeightedListAppend = true; - else if (strcmp(name, "vectorListSimple") == 0) - m_vectorListSimpleAppend = true; - else if (strcmp(name, "filenameListSimple") == 0) - m_filenameListSimpleAppend = true; - else if (strcmp(name, "templateListSimple") == 0) - m_templateListSimpleAppend = true; - else if (strcmp(name, "structListSimple") == 0) - m_structListSimpleAppend = true; - else - TpfTemplate::setAppend(name); -} // ServerUberObjectTemplate::setAppend +void ServerUberObjectTemplate::setAppend(const char *name) { + switch (runtimeCrc(name)) { + case constcrc("intListSimple"): + m_intListSimpleAppend = true; + break; + case constcrc("intListWeightedList"): + m_intListWeightedListAppend = true; + break; + case constcrc("intListRandomRange"): + m_intListRandomRangeAppend = true; + break; + case constcrc("intListDiceRoll"): + m_intListDiceRollAppend = true; + break; + case constcrc("floatListSimple"): + m_floatListSimpleAppend = true; + break; + case constcrc("floatListWeightedList"): + m_floatListWeightedListAppend = true; + break; + case constcrc("floatListRandomRange"): + m_floatListRandomRangeAppend = true; + break; + case constcrc("enumListIndexed"): + m_enumListIndexedAppend = true; + break; + case constcrc("enumListWeightedList"): + m_enumListWeightedListAppend = true; + break; + case constcrc("stringIdListSimple"): + m_stringIdListSimpleAppend = true; + break; + case constcrc("stringIdListWeightedList"): + m_stringIdListWeightedListAppend = true; + break; + case constcrc("stringListSimple"): + m_stringListSimpleAppend = true; + break; + case constcrc("stringListWeightedList"): + m_stringListWeightedListAppend = true; + break; + case constcrc("triggerVolumeList"): + m_triggerVolumeListAppend = true; + break; + case constcrc("triggerVolumesListWeightedList"): + m_triggerVolumesListWeightedListAppend = true; + break; + case constcrc("boolListDerived"): + m_boolListDerivedAppend = true; + break; + case constcrc("boolListSimple"): + m_boolListSimpleAppend = true; + break; + case constcrc("boolListWeightedList"): + m_boolListWeightedListAppend = true; + break; + case constcrc("vectorListSimple"): + m_vectorListSimpleAppend = true; + break; + case constcrc("filenameListSimple"): + m_filenameListSimpleAppend = true; + break; + case constcrc("templateListSimple"): + m_templateListSimpleAppend = true; + break; + case constcrc("structListSimple"): + m_structListSimpleAppend = true; + break; + default: + TpfTemplate::setAppend(name); + break; + } +} // ServerUberObjectTemplate::setAppend -bool ServerUberObjectTemplate::isAppend(const char *name) const -{ - if (strcmp(name, "intListSimple") == 0) - return m_intListSimpleAppend; - else if (strcmp(name, "intListWeightedList") == 0) - return m_intListWeightedListAppend; - else if (strcmp(name, "intListRandomRange") == 0) - return m_intListRandomRangeAppend; - else if (strcmp(name, "intListDiceRoll") == 0) - return m_intListDiceRollAppend; - else if (strcmp(name, "floatListSimple") == 0) - return m_floatListSimpleAppend; - else if (strcmp(name, "floatListWeightedList") == 0) - return m_floatListWeightedListAppend; - else if (strcmp(name, "floatListRandomRange") == 0) - return m_floatListRandomRangeAppend; - else if (strcmp(name, "enumListIndexed") == 0) - return m_enumListIndexedAppend; - else if (strcmp(name, "enumListWeightedList") == 0) - return m_enumListWeightedListAppend; - else if (strcmp(name, "stringIdListSimple") == 0) - return m_stringIdListSimpleAppend; - else if (strcmp(name, "stringIdListWeightedList") == 0) - return m_stringIdListWeightedListAppend; - else if (strcmp(name, "stringListSimple") == 0) - return m_stringListSimpleAppend; - else if (strcmp(name, "stringListWeightedList") == 0) - return m_stringListWeightedListAppend; - else if (strcmp(name, "triggerVolumeList") == 0) - return m_triggerVolumeListAppend; - else if (strcmp(name, "triggerVolumesListWeightedList") == 0) - return m_triggerVolumesListWeightedListAppend; - else if (strcmp(name, "boolListDerived") == 0) - return m_boolListDerivedAppend; - else if (strcmp(name, "boolListSimple") == 0) - return m_boolListSimpleAppend; - else if (strcmp(name, "boolListWeightedList") == 0) - return m_boolListWeightedListAppend; - else if (strcmp(name, "vectorListSimple") == 0) - return m_vectorListSimpleAppend; - else if (strcmp(name, "filenameListSimple") == 0) - return m_filenameListSimpleAppend; - else if (strcmp(name, "templateListSimple") == 0) - return m_templateListSimpleAppend; - else if (strcmp(name, "structListSimple") == 0) - return m_structListSimpleAppend; - else - return TpfTemplate::isAppend(name); -} // ServerUberObjectTemplate::isAppend +bool ServerUberObjectTemplate::isAppend(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("intListSimple"): + return m_intListSimpleAppend; + break; + case constcrc("intListWeightedList"): + return m_intListWeightedListAppend; + break; + case constcrc("intListRandomRange"): + return m_intListRandomRangeAppend; + break; + case constcrc("intListDiceRoll"): + return m_intListDiceRollAppend; + break; + case constcrc("floatListSimple"): + return m_floatListSimpleAppend; + break; + case constcrc("floatListWeightedList"): + return m_floatListWeightedListAppend; + break; + case constcrc("floatListRandomRange"): + return m_floatListRandomRangeAppend; + break; + case constcrc("enumListIndexed"): + return m_enumListIndexedAppend; + break; + case constcrc("enumListWeightedList"): + return m_enumListWeightedListAppend; + break; + case constcrc("stringIdListSimple"): + return m_stringIdListSimpleAppend; + break; + case constcrc("stringIdListWeightedList"): + return m_stringIdListWeightedListAppend; + break; + case constcrc("stringListSimple"): + return m_stringListSimpleAppend; + break; + case constcrc("stringListWeightedList"): + return m_stringListWeightedListAppend; + break; + case constcrc("triggerVolumeList"): + return m_triggerVolumeListAppend; + break; + case constcrc("triggerVolumesListWeightedList"): + return m_triggerVolumesListWeightedListAppend; + break; + case constcrc("boolListDerived"): + return m_boolListDerivedAppend; + break; + case constcrc("boolListSimple"): + return m_boolListSimpleAppend; + break; + case constcrc("boolListWeightedList"): + return m_boolListWeightedListAppend; + break; + case constcrc("vectorListSimple"): + return m_vectorListSimpleAppend; + break; + case constcrc("filenameListSimple"): + return m_filenameListSimpleAppend; + break; + case constcrc("templateListSimple"): + return m_templateListSimpleAppend; + break; + case constcrc("structListSimple"): + return m_structListSimpleAppend; + break; + default: + return TpfTemplate::isAppend(name); + } +} // ServerUberObjectTemplate::isAppend -int ServerUberObjectTemplate::getListLength(const char *name) const -{ - if (strcmp(name, "intListSimple") == 0) - { - return m_intListSimple.size(); - } - else if (strcmp(name, "intListWeightedList") == 0) - { - return m_intListWeightedList.size(); - } - else if (strcmp(name, "intListRandomRange") == 0) - { - return m_intListRandomRange.size(); - } - else if (strcmp(name, "intListDiceRoll") == 0) - { - return m_intListDiceRoll.size(); - } - else if (strcmp(name, "floatListSimple") == 0) - { - return m_floatListSimple.size(); - } - else if (strcmp(name, "floatListWeightedList") == 0) - { - return m_floatListWeightedList.size(); - } - else if (strcmp(name, "floatListRandomRange") == 0) - { - return m_floatListRandomRange.size(); - } - else if (strcmp(name, "enumIndexedByEnumSingle") == 0) - { - return sizeof(m_enumIndexedByEnumSingle) / sizeof(CompilerIntegerParam); - } - else if (strcmp(name, "enumIndexedByEnumWeightedList") == 0) - { - return sizeof(m_enumIndexedByEnumWeightedList) / sizeof(CompilerIntegerParam); - } - else if (strcmp(name, "enumListIndexed") == 0) - { - return m_enumListIndexed.size(); - } - else if (strcmp(name, "enumListWeightedList") == 0) - { - return m_enumListWeightedList.size(); - } - else if (strcmp(name, "stringIdListSimple") == 0) - { - return m_stringIdListSimple.size(); - } - else if (strcmp(name, "stringIdListWeightedList") == 0) - { - return m_stringIdListWeightedList.size(); - } - else if (strcmp(name, "stringListSimple") == 0) - { - return m_stringListSimple.size(); - } - else if (strcmp(name, "stringListWeightedList") == 0) - { - return m_stringListWeightedList.size(); - } - else if (strcmp(name, "triggerVolumeList") == 0) - { - return m_triggerVolumeList.size(); - } - else if (strcmp(name, "triggerVolumesListWeightedList") == 0) - { - return m_triggerVolumesListWeightedList.size(); - } - else if (strcmp(name, "boolListDerived") == 0) - { - return m_boolListDerived.size(); - } - else if (strcmp(name, "boolListSimple") == 0) - { - return m_boolListSimple.size(); - } - else if (strcmp(name, "boolListWeightedList") == 0) - { - return m_boolListWeightedList.size(); - } - else if (strcmp(name, "vectorListSimple") == 0) - { - return m_vectorListSimple.size(); - } - else if (strcmp(name, "filenameListSimple") == 0) - { - return m_filenameListSimple.size(); - } - else if (strcmp(name, "templateListSimple") == 0) - { - return m_templateListSimple.size(); - } - else if (strcmp(name, "structListSimple") == 0) - { - return m_structListSimple.size(); - } - else if (strcmp(name, "structArrayEnum") == 0) - { - return sizeof(m_structArrayEnum) / sizeof(StructParamOT); - } - else if (strcmp(name, "structArrayInteger") == 0) - { - return sizeof(m_structArrayInteger) / sizeof(StructParamOT); - } - else if (strcmp(name, "integerArray") == 0) - { - return sizeof(m_integerArray) / sizeof(CompilerIntegerParam); - } - else if (strcmp(name, "floatArray") == 0) - { - return sizeof(m_floatArray) / sizeof(FloatParam); - } - else if (strcmp(name, "stringArray") == 0) - { - return sizeof(m_stringArray) / sizeof(StringParam); - } - else if (strcmp(name, "boolArray") == 0) - { - return sizeof(m_boolArray) / sizeof(BoolParam); - } - else if (strcmp(name, "stringIdArray") == 0) - { - return sizeof(m_stringIdArray) / sizeof(StringIdParam); - } - else if (strcmp(name, "triggerArray") == 0) - { - return sizeof(m_triggerArray) / sizeof(TriggerVolumeParam); - } - else if (strcmp(name, "vectorArray") == 0) - { - return sizeof(m_vectorArray) / sizeof(VectorParam); - } - else if (strcmp(name, "fileNameArray") == 0) - { - return sizeof(m_fileNameArray) / sizeof(StringParam); - } - else - return TpfTemplate::getListLength(name); -} // ServerUberObjectTemplate::getListLength +int ServerUberObjectTemplate::getListLength(const char *name) const { + switch (runtimeCrc(name)) { + case constcrc("intListSimple"): { + return m_intListSimple.size(); + } + break; + case constcrc("intListWeightedList"): { + return m_intListWeightedList.size(); + } + break; + case constcrc("intListRandomRange"): { + return m_intListRandomRange.size(); + } + break; + case constcrc("intListDiceRoll"): { + return m_intListDiceRoll.size(); + } + break; + case constcrc("floatListSimple"): { + return m_floatListSimple.size(); + } + break; + case constcrc("floatListWeightedList"): { + return m_floatListWeightedList.size(); + } + break; + case constcrc("floatListRandomRange"): { + return m_floatListRandomRange.size(); + } + break; + case constcrc("enumIndexedByEnumSingle"): { + return sizeof(m_enumIndexedByEnumSingle) / sizeof(CompilerIntegerParam); + } + break; + case constcrc("enumIndexedByEnumWeightedList"): { + return sizeof(m_enumIndexedByEnumWeightedList) / sizeof(CompilerIntegerParam); + } + break; + case constcrc("enumListIndexed"): { + return m_enumListIndexed.size(); + } + break; + case constcrc("enumListWeightedList"): { + return m_enumListWeightedList.size(); + } + break; + case constcrc("stringIdListSimple"): { + return m_stringIdListSimple.size(); + } + break; + case constcrc("stringIdListWeightedList"): { + return m_stringIdListWeightedList.size(); + } + break; + case constcrc("stringListSimple"): { + return m_stringListSimple.size(); + } + break; + case constcrc("stringListWeightedList"): { + return m_stringListWeightedList.size(); + } + break; + case constcrc("triggerVolumeList"): { + return m_triggerVolumeList.size(); + } + break; + case constcrc("triggerVolumesListWeightedList"): { + return m_triggerVolumesListWeightedList.size(); + } + break; + case constcrc("boolListDerived"): { + return m_boolListDerived.size(); + } + break; + case constcrc("boolListSimple"): { + return m_boolListSimple.size(); + } + break; + case constcrc("boolListWeightedList"): { + return m_boolListWeightedList.size(); + } + break; + case constcrc("vectorListSimple"): { + return m_vectorListSimple.size(); + } + break; + case constcrc("filenameListSimple"): { + return m_filenameListSimple.size(); + } + break; + case constcrc("templateListSimple"): { + return m_templateListSimple.size(); + } + break; + case constcrc("structListSimple"): { + return m_structListSimple.size(); + } + break; + case constcrc("structArrayEnum"): { + return sizeof(m_structArrayEnum) / sizeof(StructParamOT); + } + break; + case constcrc("structArrayInteger"): { + return sizeof(m_structArrayInteger) / sizeof(StructParamOT); + } + break; + case constcrc("integerArray"): { + return sizeof(m_integerArray) / sizeof(CompilerIntegerParam); + } + break; + case constcrc("floatArray"): { + return sizeof(m_floatArray) / sizeof(FloatParam); + } + break; + case constcrc("stringArray"): { + return sizeof(m_stringArray) / sizeof(StringParam); + } + break; + case constcrc("boolArray"): { + return sizeof(m_boolArray) / sizeof(BoolParam); + } + break; + case constcrc("stringIdArray"): { + return sizeof(m_stringIdArray) / sizeof(StringIdParam); + } + break; + case constcrc("triggerArray"): { + return sizeof(m_triggerArray) / sizeof(TriggerVolumeParam); + } + break; + case constcrc("vectorArray"): { + return sizeof(m_vectorArray) / sizeof(VectorParam); + } + break; + case constcrc("fileNameArray"): { + return sizeof(m_fileNameArray) / sizeof(StringParam); + } + break; + default: + return TpfTemplate::getListLength(name); + break; + } +} // ServerUberObjectTemplate::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -1920,730 +1790,736 @@ int ServerUberObjectTemplate::getListLength(const char *name) const * * @param file file to load from */ -void ServerUberObjectTemplate::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerUberObjectTemplate::load(Iff &file) { + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; - if (file.getCurrentName() != ServerUberObjectTemplate_tag) - { - TpfTemplate::load(file); - return; - } + if (file.getCurrentName() != ServerUberObjectTemplate_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 == 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, "intAtDerived") == 0) - m_intAtDerived.loadFromIff(file); - else if (strcmp(paramName, "intSimple") == 0) - m_intSimple.loadFromIff(file); - else if (strcmp(paramName, "intSimpleDeltaPositive") == 0) - m_intSimpleDeltaPositive.loadFromIff(file); - else if (strcmp(paramName, "intSimpleDeltaNegative") == 0) - m_intSimpleDeltaNegative.loadFromIff(file); - else if (strcmp(paramName, "intSimpleDeltaPositivePercent") == 0) - m_intSimpleDeltaPositivePercent.loadFromIff(file); - else if (strcmp(paramName, "intSimpleDeltaNegativePercent") == 0) - m_intSimpleDeltaNegativePercent.loadFromIff(file); - else if (strcmp(paramName, "intWeightedList") == 0) - m_intWeightedList.loadFromIff(file); - else if (strcmp(paramName, "intWeightedListDeltaPositive") == 0) - m_intWeightedListDeltaPositive.loadFromIff(file); - else if (strcmp(paramName, "intWeightedListDeltaNegative") == 0) - m_intWeightedListDeltaNegative.loadFromIff(file); - else if (strcmp(paramName, "intWeightedListDeltaPositivePercent") == 0) - m_intWeightedListDeltaPositivePercent.loadFromIff(file); - else if (strcmp(paramName, "intWeightedListDeltaNegativePercent") == 0) - m_intWeightedListDeltaNegativePercent.loadFromIff(file); - else if (strcmp(paramName, "intRandomRange1") == 0) - m_intRandomRange1.loadFromIff(file); - else if (strcmp(paramName, "intRandomRange2") == 0) - m_intRandomRange2.loadFromIff(file); - else if (strcmp(paramName, "intRandomRange3") == 0) - m_intRandomRange3.loadFromIff(file); - else if (strcmp(paramName, "intRandomRange4") == 0) - m_intRandomRange4.loadFromIff(file); - else if (strcmp(paramName, "intDiceRoll1") == 0) - m_intDiceRoll1.loadFromIff(file); - else if (strcmp(paramName, "intDiceRoll2") == 0) - m_intDiceRoll2.loadFromIff(file); - else if (strcmp(paramName, "intListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_intListSimple.begin(); iter != m_intListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_intListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_intListSimple.push_back(newData); - } - m_intListSimpleLoaded = true; - } - else if (strcmp(paramName, "intListWeightedList") == 0) - { - std::vector::iterator iter; - for (iter = m_intListWeightedList.begin(); iter != m_intListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_intListWeightedListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_intListWeightedList.push_back(newData); - } - m_intListWeightedListLoaded = true; - } - else if (strcmp(paramName, "intListRandomRange") == 0) - { - std::vector::iterator iter; - for (iter = m_intListRandomRange.begin(); iter != m_intListRandomRange.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_intListRandomRangeAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_intListRandomRange.push_back(newData); - } - m_intListRandomRangeLoaded = true; - } - else if (strcmp(paramName, "intListDiceRoll") == 0) - { - std::vector::iterator iter; - for (iter = m_intListDiceRoll.begin(); iter != m_intListDiceRoll.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_intListDiceRollAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_intListDiceRoll.push_back(newData); - } - m_intListDiceRollLoaded = true; - } - else if (strcmp(paramName, "floatAtDerived") == 0) - m_floatAtDerived.loadFromIff(file); - else if (strcmp(paramName, "floatSimple") == 0) - m_floatSimple.loadFromIff(file); - else if (strcmp(paramName, "floatSimpleDeltaPositive") == 0) - m_floatSimpleDeltaPositive.loadFromIff(file); - else if (strcmp(paramName, "floatSimpleDeltaNegative") == 0) - m_floatSimpleDeltaNegative.loadFromIff(file); - else if (strcmp(paramName, "floatSimpleDeltaPositivePercent") == 0) - m_floatSimpleDeltaPositivePercent.loadFromIff(file); - else if (strcmp(paramName, "floatSimpleDeltaNegativePercent") == 0) - m_floatSimpleDeltaNegativePercent.loadFromIff(file); - else if (strcmp(paramName, "floatWeightedList") == 0) - m_floatWeightedList.loadFromIff(file); - else if (strcmp(paramName, "floatRandomRange1") == 0) - m_floatRandomRange1.loadFromIff(file); - else if (strcmp(paramName, "floatRandomRange2") == 0) - m_floatRandomRange2.loadFromIff(file); - else if (strcmp(paramName, "floatRandomRange3") == 0) - m_floatRandomRange3.loadFromIff(file); - else if (strcmp(paramName, "floatRandomRange4") == 0) - m_floatRandomRange4.loadFromIff(file); - else if (strcmp(paramName, "floatListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_floatListSimple.begin(); iter != m_floatListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_floatListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - FloatParam * newData = new FloatParam; - newData->loadFromIff(file); - m_floatListSimple.push_back(newData); - } - m_floatListSimpleLoaded = true; - } - else if (strcmp(paramName, "floatListWeightedList") == 0) - { - std::vector::iterator iter; - for (iter = m_floatListWeightedList.begin(); iter != m_floatListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_floatListWeightedListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - FloatParam * newData = new FloatParam; - newData->loadFromIff(file); - m_floatListWeightedList.push_back(newData); - } - m_floatListWeightedListLoaded = true; - } - else if (strcmp(paramName, "floatListRandomRange") == 0) - { - std::vector::iterator iter; - for (iter = m_floatListRandomRange.begin(); iter != m_floatListRandomRange.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_floatListRandomRangeAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - FloatParam * newData = new FloatParam; - newData->loadFromIff(file); - m_floatListRandomRange.push_back(newData); - } - m_floatListRandomRangeLoaded = true; - } - else if (strcmp(paramName, "enumIndexedByEnumSingle") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 3, ("read array size of %d for an array of size 3, reading values anyway", listCount)); - int j; - for (j = 0; j < 3 && j < listCount; ++j) - m_enumIndexedByEnumSingle[j].loadFromIff(file); - // if there are more params for enumIndexedByEnumSingle read and dump them - for (; j < listCount; ++j) - { - CompilerIntegerParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "enumIndexedByEnumWeightedList") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 3, ("read array size of %d for an array of size 3, reading values anyway", listCount)); - int j; - for (j = 0; j < 3 && j < listCount; ++j) - m_enumIndexedByEnumWeightedList[j].loadFromIff(file); - // if there are more params for enumIndexedByEnumWeightedList read and dump them - for (; j < listCount; ++j) - { - CompilerIntegerParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "enumListIndexed") == 0) - { - std::vector::iterator iter; - for (iter = m_enumListIndexed.begin(); iter != m_enumListIndexed.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_enumListIndexedAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_enumListIndexed.push_back(newData); - } - m_enumListIndexedLoaded = true; - } - else if (strcmp(paramName, "enumListWeightedList") == 0) - { - std::vector::iterator iter; - for (iter = m_enumListWeightedList.begin(); iter != m_enumListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_enumListWeightedListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - CompilerIntegerParam * newData = new CompilerIntegerParam; - newData->loadFromIff(file); - m_enumListWeightedList.push_back(newData); - } - m_enumListWeightedListLoaded = true; - } - else if (strcmp(paramName, "stringIdDerived") == 0) - m_stringIdDerived.loadFromIff(file); - else if (strcmp(paramName, "stringIdSimple") == 0) - m_stringIdSimple.loadFromIff(file); - else if (strcmp(paramName, "stringIdWeightedList") == 0) - m_stringIdWeightedList.loadFromIff(file); - else if (strcmp(paramName, "stringIdListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_stringIdListSimple.begin(); iter != m_stringIdListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_stringIdListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringIdParam * newData = new StringIdParam; - newData->loadFromIff(file); - m_stringIdListSimple.push_back(newData); - } - m_stringIdListSimpleLoaded = true; - } - else if (strcmp(paramName, "stringIdListWeightedList") == 0) - { - std::vector::iterator iter; - for (iter = m_stringIdListWeightedList.begin(); iter != m_stringIdListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_stringIdListWeightedListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringIdParam * newData = new StringIdParam; - newData->loadFromIff(file); - m_stringIdListWeightedList.push_back(newData); - } - m_stringIdListWeightedListLoaded = true; - } - else if (strcmp(paramName, "stringDerived") == 0) - m_stringDerived.loadFromIff(file); - else if (strcmp(paramName, "stringSimple") == 0) - m_stringSimple.loadFromIff(file); - else if (strcmp(paramName, "stringWeightedList") == 0) - m_stringWeightedList.loadFromIff(file); - else if (strcmp(paramName, "stringListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_stringListSimple.begin(); iter != m_stringListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_stringListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_stringListSimple.push_back(newData); - } - m_stringListSimpleLoaded = true; - } - else if (strcmp(paramName, "stringListWeightedList") == 0) - { - std::vector::iterator iter; - for (iter = m_stringListWeightedList.begin(); iter != m_stringListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_stringListWeightedListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_stringListWeightedList.push_back(newData); - } - m_stringListWeightedListLoaded = true; - } - else if (strcmp(paramName, "triggerVolumeDerived") == 0) - m_triggerVolumeDerived.loadFromIff(file); - else if (strcmp(paramName, "triggerVolumeSimple") == 0) - m_triggerVolumeSimple.loadFromIff(file); - else if (strcmp(paramName, "triggerVolumeWeightedList") == 0) - m_triggerVolumeWeightedList.loadFromIff(file); - else if (strcmp(paramName, "triggerVolumeList") == 0) - { - std::vector::iterator iter; - for (iter = m_triggerVolumeList.begin(); iter != m_triggerVolumeList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_triggerVolumeListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - TriggerVolumeParam * newData = new TriggerVolumeParam; - newData->loadFromIff(file); - m_triggerVolumeList.push_back(newData); - } - m_triggerVolumeListLoaded = true; - } - else if (strcmp(paramName, "triggerVolumesListWeightedList") == 0) - { - std::vector::iterator iter; - for (iter = m_triggerVolumesListWeightedList.begin(); iter != m_triggerVolumesListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_triggerVolumesListWeightedListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - TriggerVolumeParam * newData = new TriggerVolumeParam; - newData->loadFromIff(file); - m_triggerVolumesListWeightedList.push_back(newData); - } - m_triggerVolumesListWeightedListLoaded = true; - } - else if (strcmp(paramName, "boolDerived") == 0) - m_boolDerived.loadFromIff(file); - else if (strcmp(paramName, "boolSimple") == 0) - m_boolSimple.loadFromIff(file); - else if (strcmp(paramName, "boolWeightedList") == 0) - m_boolWeightedList.loadFromIff(file); - else if (strcmp(paramName, "boolListDerived") == 0) - { - std::vector::iterator iter; - for (iter = m_boolListDerived.begin(); iter != m_boolListDerived.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_boolListDerivedAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - BoolParam * newData = new BoolParam; - newData->loadFromIff(file); - m_boolListDerived.push_back(newData); - } - m_boolListDerivedLoaded = true; - } - else if (strcmp(paramName, "boolListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_boolListSimple.begin(); iter != m_boolListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_boolListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - BoolParam * newData = new BoolParam; - newData->loadFromIff(file); - m_boolListSimple.push_back(newData); - } - m_boolListSimpleLoaded = true; - } - else if (strcmp(paramName, "boolListWeightedList") == 0) - { - std::vector::iterator iter; - for (iter = m_boolListWeightedList.begin(); iter != m_boolListWeightedList.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_boolListWeightedListAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - BoolParam * newData = new BoolParam; - newData->loadFromIff(file); - m_boolListWeightedList.push_back(newData); - } - m_boolListWeightedListLoaded = true; - } - else if (strcmp(paramName, "vectorAtDerived") == 0) - m_vectorAtDerived.loadFromIff(file); - else if (strcmp(paramName, "vectorSimple") == 0) - m_vectorSimple.loadFromIff(file); - else if (strcmp(paramName, "vectorListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_vectorListSimple.begin(); iter != m_vectorListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_vectorListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - VectorParam * newData = new VectorParam; - newData->loadFromIff(file); - m_vectorListSimple.push_back(newData); - } - m_vectorListSimpleLoaded = true; - } - else if (strcmp(paramName, "filenameAtDerived") == 0) - m_filenameAtDerived.loadFromIff(file); - else if (strcmp(paramName, "filenameSimple") == 0) - m_filenameSimple.loadFromIff(file); - else if (strcmp(paramName, "filenameWeightedList") == 0) - m_filenameWeightedList.loadFromIff(file); - else if (strcmp(paramName, "filenameListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_filenameListSimple.begin(); iter != m_filenameListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_filenameListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_filenameListSimple.push_back(newData); - } - m_filenameListSimpleLoaded = true; - } - else if (strcmp(paramName, "objvarDerived") == 0) - m_objvarDerived.loadFromIff(file); - else if (strcmp(paramName, "objvarSimple") == 0) - m_objvarSimple.loadFromIff(file); - else if (strcmp(paramName, "templateDerived") == 0) - m_templateDerived.loadFromIff(file); - else if (strcmp(paramName, "templateSimple") == 0) - m_templateSimple.loadFromIff(file); - else if (strcmp(paramName, "templateWeightedList") == 0) - m_templateWeightedList.loadFromIff(file); - else if (strcmp(paramName, "templateListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_templateListSimple.begin(); iter != m_templateListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_templateListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StringParam * newData = new StringParam; - newData->loadFromIff(file); - m_templateListSimple.push_back(newData); - } - m_templateListSimpleLoaded = true; - } - else if (strcmp(paramName, "structAtDerived") == 0) - m_structAtDerived.loadFromIff(file); - else if (strcmp(paramName, "structSimple") == 0) - m_structSimple.loadFromIff(file); - else if (strcmp(paramName, "structListSimple") == 0) - { - std::vector::iterator iter; - for (iter = m_structListSimple.begin(); iter != m_structListSimple.end(); ++iter) - { - delete *iter; - *iter = NULL; - } - m_structListSimpleAppend = file.read_bool8(); - int listCount = file.read_int32(); - for (int j = 0; j < listCount; ++j) - { - StructParamOT * newData = new StructParamOT; - newData->loadFromIff(file); - m_structListSimple.push_back(newData); - } - m_structListSimpleLoaded = true; - } - else if (strcmp(paramName, "structArrayEnum") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 3, ("read array size of %d for an array of size 3, reading values anyway", listCount)); - int j; - for (j = 0; j < 3 && j < listCount; ++j) - m_structArrayEnum[j].loadFromIff(file); - // if there are more params for structArrayEnum read and dump them - for (; j < listCount; ++j) - { - StructParamOT dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "structArrayInteger") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_structArrayInteger[j].loadFromIff(file); - // if there are more params for structArrayInteger read and dump them - for (; j < listCount; ++j) - { - StructParamOT dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "integerArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_integerArray[j].loadFromIff(file); - // if there are more params for integerArray read and dump them - for (; j < listCount; ++j) - { - CompilerIntegerParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "floatArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_floatArray[j].loadFromIff(file); - // if there are more params for floatArray read and dump them - for (; j < listCount; ++j) - { - FloatParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "stringArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_stringArray[j].loadFromIff(file); - // if there are more params for stringArray read and dump them - for (; j < listCount; ++j) - { - StringParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "boolArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_boolArray[j].loadFromIff(file); - // if there are more params for boolArray read and dump them - for (; j < listCount; ++j) - { - BoolParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "stringIdArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_stringIdArray[j].loadFromIff(file); - // if there are more params for stringIdArray read and dump them - for (; j < listCount; ++j) - { - StringIdParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "triggerArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_triggerArray[j].loadFromIff(file); - // if there are more params for triggerArray read and dump them - for (; j < listCount; ++j) - { - TriggerVolumeParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "vectorArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_vectorArray[j].loadFromIff(file); - // if there are more params for vectorArray read and dump them - for (; j < listCount; ++j) - { - VectorParam dummy; - dummy.loadFromIff(file); - } - } - else if (strcmp(paramName, "fileNameArray") == 0) - { - int listCount = file.read_int32(); - DEBUG_WARNING(listCount != 2, ("read array size of %d for an array of size 2, reading values anyway", listCount)); - int j; - for (j = 0; j < 2 && j < listCount; ++j) - m_fileNameArray[j].loadFromIff(file); - // if there are more params for fileNameArray read and dump them - for (; j < listCount; ++j) - { - StringParam 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; -} // ServerUberObjectTemplate::load + switch (runtimeCrc(paramName)) { + case constcrc("intAtDerived"): + m_intAtDerived.loadFromIff(file); + break; + case constcrc("intSimple"): + m_intSimple.loadFromIff(file); + break; + case constcrc("intSimpleDeltaPositive"): + m_intSimpleDeltaPositive.loadFromIff(file); + break; + case constcrc("intSimpleDeltaNegative"): + m_intSimpleDeltaNegative.loadFromIff(file); + break; + case constcrc("intSimpleDeltaPositivePercent"): + m_intSimpleDeltaPositivePercent.loadFromIff(file); + break; + case constcrc("intSimpleDeltaNegativePercent"): + m_intSimpleDeltaNegativePercent.loadFromIff(file); + break; + case constcrc("intWeightedList"): + m_intWeightedList.loadFromIff(file); + break; + case constcrc("intWeightedListDeltaPositive"): + m_intWeightedListDeltaPositive.loadFromIff(file); + break; + case constcrc("intWeightedListDeltaNegative"): + m_intWeightedListDeltaNegative.loadFromIff(file); + break; + case constcrc("intWeightedListDeltaPositivePercent"): + m_intWeightedListDeltaPositivePercent.loadFromIff(file); + break; + case constcrc("intWeightedListDeltaNegativePercent"): + m_intWeightedListDeltaNegativePercent.loadFromIff(file); + break; + case constcrc("intRandomRange1"): + m_intRandomRange1.loadFromIff(file); + break; + case constcrc("intRandomRange2"): + m_intRandomRange2.loadFromIff(file); + break; + case constcrc("intRandomRange3"): + m_intRandomRange3.loadFromIff(file); + break; + case constcrc("intRandomRange4"): + m_intRandomRange4.loadFromIff(file); + break; + case constcrc("intDiceRoll1"): + m_intDiceRoll1.loadFromIff(file); + break; + case constcrc("intDiceRoll2"): + m_intDiceRoll2.loadFromIff(file); + break; + case constcrc("intListSimple"): { + std::vector::iterator iter; + for (iter = m_intListSimple.begin(); iter != m_intListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_intListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_intListSimple.push_back(newData); + } + m_intListSimpleLoaded = true; + } + break; + case constcrc("intListWeightedList"): { + std::vector::iterator iter; + for (iter = m_intListWeightedList.begin(); iter != m_intListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_intListWeightedListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_intListWeightedList.push_back(newData); + } + m_intListWeightedListLoaded = true; + } + break; + case constcrc("intListRandomRange"): { + std::vector::iterator iter; + for (iter = m_intListRandomRange.begin(); iter != m_intListRandomRange.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_intListRandomRangeAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_intListRandomRange.push_back(newData); + } + m_intListRandomRangeLoaded = true; + } + break; + case constcrc("intListDiceRoll"): { + std::vector::iterator iter; + for (iter = m_intListDiceRoll.begin(); iter != m_intListDiceRoll.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_intListDiceRollAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_intListDiceRoll.push_back(newData); + } + m_intListDiceRollLoaded = true; + } + break; + case constcrc("floatAtDerived"): + m_floatAtDerived.loadFromIff(file); + break; + case constcrc("floatSimple"): + m_floatSimple.loadFromIff(file); + break; + case constcrc("floatSimpleDeltaPositive"): + m_floatSimpleDeltaPositive.loadFromIff(file); + break; + case constcrc("floatSimpleDeltaNegative"): + m_floatSimpleDeltaNegative.loadFromIff(file); + break; + case constcrc("floatSimpleDeltaPositivePercent"): + m_floatSimpleDeltaPositivePercent.loadFromIff(file); + break; + case constcrc("floatSimpleDeltaNegativePercent"): + m_floatSimpleDeltaNegativePercent.loadFromIff(file); + break; + case constcrc("floatWeightedList"): + m_floatWeightedList.loadFromIff(file); + break; + case constcrc("floatRandomRange1"): + m_floatRandomRange1.loadFromIff(file); + break; + case constcrc("floatRandomRange2"): + m_floatRandomRange2.loadFromIff(file); + break; + case constcrc("floatRandomRange3"): + m_floatRandomRange3.loadFromIff(file); + break; + case constcrc("floatRandomRange4"): + m_floatRandomRange4.loadFromIff(file); + break; + case constcrc("floatListSimple"): { + std::vector::iterator iter; + for (iter = m_floatListSimple.begin(); iter != m_floatListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_floatListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + FloatParam *newData = new FloatParam; + newData->loadFromIff(file); + m_floatListSimple.push_back(newData); + } + m_floatListSimpleLoaded = true; + } + break; + case constcrc("floatListWeightedList"): { + std::vector::iterator iter; + for (iter = m_floatListWeightedList.begin(); iter != m_floatListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_floatListWeightedListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + FloatParam *newData = new FloatParam; + newData->loadFromIff(file); + m_floatListWeightedList.push_back(newData); + } + m_floatListWeightedListLoaded = true; + } + break; + case constcrc("floatListRandomRange"): { + std::vector::iterator iter; + for (iter = m_floatListRandomRange.begin(); iter != m_floatListRandomRange.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_floatListRandomRangeAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + FloatParam *newData = new FloatParam; + newData->loadFromIff(file); + m_floatListRandomRange.push_back(newData); + } + m_floatListRandomRangeLoaded = true; + } + break; + case constcrc("enumIndexedByEnumSingle"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 3, + ("read array size of %d for an array of size 3, reading values anyway", listCount)); + int j; + for (j = 0; j < 3 && j < listCount; ++j) + m_enumIndexedByEnumSingle[j].loadFromIff(file); + // if there are more params for enumIndexedByEnumSingle read and dump them + for (; j < listCount; ++j) { + CompilerIntegerParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("enumIndexedByEnumWeightedList"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 3, + ("read array size of %d for an array of size 3, reading values anyway", listCount)); + int j; + for (j = 0; j < 3 && j < listCount; ++j) + m_enumIndexedByEnumWeightedList[j].loadFromIff(file); + // if there are more params for enumIndexedByEnumWeightedList read and dump them + for (; j < listCount; ++j) { + CompilerIntegerParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("enumListIndexed"): { + std::vector::iterator iter; + for (iter = m_enumListIndexed.begin(); iter != m_enumListIndexed.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_enumListIndexedAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_enumListIndexed.push_back(newData); + } + m_enumListIndexedLoaded = true; + } + break; + case constcrc("enumListWeightedList"): { + std::vector::iterator iter; + for (iter = m_enumListWeightedList.begin(); iter != m_enumListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_enumListWeightedListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + CompilerIntegerParam *newData = new CompilerIntegerParam; + newData->loadFromIff(file); + m_enumListWeightedList.push_back(newData); + } + m_enumListWeightedListLoaded = true; + } + break; + case constcrc("stringIdDerived"): + m_stringIdDerived.loadFromIff(file); + break; + case constcrc("stringIdSimple"): + m_stringIdSimple.loadFromIff(file); + break; + case constcrc("stringIdWeightedList"): + m_stringIdWeightedList.loadFromIff(file); + break; + case constcrc("stringIdListSimple"): { + std::vector::iterator iter; + for (iter = m_stringIdListSimple.begin(); iter != m_stringIdListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_stringIdListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringIdParam *newData = new StringIdParam; + newData->loadFromIff(file); + m_stringIdListSimple.push_back(newData); + } + m_stringIdListSimpleLoaded = true; + } + break; + case constcrc("stringIdListWeightedList"): { + std::vector::iterator iter; + for (iter = m_stringIdListWeightedList.begin(); iter != m_stringIdListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_stringIdListWeightedListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringIdParam *newData = new StringIdParam; + newData->loadFromIff(file); + m_stringIdListWeightedList.push_back(newData); + } + m_stringIdListWeightedListLoaded = true; + } + break; + case constcrc("stringDerived"): + m_stringDerived.loadFromIff(file); + break; + case constcrc("stringSimple"): + m_stringSimple.loadFromIff(file); + break; + case constcrc("stringWeightedList"): + m_stringWeightedList.loadFromIff(file); + break; + case constcrc("stringListSimple"): { + std::vector::iterator iter; + for (iter = m_stringListSimple.begin(); iter != m_stringListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_stringListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_stringListSimple.push_back(newData); + } + m_stringListSimpleLoaded = true; + } + break; + case constcrc("stringListWeightedList"): { + std::vector::iterator iter; + for (iter = m_stringListWeightedList.begin(); iter != m_stringListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_stringListWeightedListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_stringListWeightedList.push_back(newData); + } + m_stringListWeightedListLoaded = true; + } + break; + case constcrc("triggerVolumeDerived"): + m_triggerVolumeDerived.loadFromIff(file); + break; + case constcrc("triggerVolumeSimple"): + m_triggerVolumeSimple.loadFromIff(file); + break; + case constcrc("triggerVolumeWeightedList"): + m_triggerVolumeWeightedList.loadFromIff(file); + break; + case constcrc("triggerVolumeList"): { + std::vector::iterator iter; + for (iter = m_triggerVolumeList.begin(); iter != m_triggerVolumeList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_triggerVolumeListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + TriggerVolumeParam *newData = new TriggerVolumeParam; + newData->loadFromIff(file); + m_triggerVolumeList.push_back(newData); + } + m_triggerVolumeListLoaded = true; + } + break; + case constcrc("triggerVolumesListWeightedList"): { + std::vector::iterator iter; + for (iter = m_triggerVolumesListWeightedList.begin(); + iter != m_triggerVolumesListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_triggerVolumesListWeightedListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + TriggerVolumeParam *newData = new TriggerVolumeParam; + newData->loadFromIff(file); + m_triggerVolumesListWeightedList.push_back(newData); + } + m_triggerVolumesListWeightedListLoaded = true; + } + break; + case constcrc("boolDerived"): + m_boolDerived.loadFromIff(file); + break; + case constcrc("boolSimple"): + m_boolSimple.loadFromIff(file); + break; + case constcrc("boolWeightedList"): + m_boolWeightedList.loadFromIff(file); + break; + case constcrc("boolListDerived"): { + std::vector::iterator iter; + for (iter = m_boolListDerived.begin(); iter != m_boolListDerived.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_boolListDerivedAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + BoolParam *newData = new BoolParam; + newData->loadFromIff(file); + m_boolListDerived.push_back(newData); + } + m_boolListDerivedLoaded = true; + } + break; + case constcrc("boolListSimple"): { + std::vector::iterator iter; + for (iter = m_boolListSimple.begin(); iter != m_boolListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_boolListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + BoolParam *newData = new BoolParam; + newData->loadFromIff(file); + m_boolListSimple.push_back(newData); + } + m_boolListSimpleLoaded = true; + } + break; + case constcrc("boolListWeightedList"): { + std::vector::iterator iter; + for (iter = m_boolListWeightedList.begin(); iter != m_boolListWeightedList.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_boolListWeightedListAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + BoolParam *newData = new BoolParam; + newData->loadFromIff(file); + m_boolListWeightedList.push_back(newData); + } + m_boolListWeightedListLoaded = true; + } + break; + case constcrc("vectorAtDerived"): + m_vectorAtDerived.loadFromIff(file); + break; + case constcrc("vectorSimple"): + m_vectorSimple.loadFromIff(file); + break; + case constcrc("vectorListSimple"): { + std::vector::iterator iter; + for (iter = m_vectorListSimple.begin(); iter != m_vectorListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_vectorListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + VectorParam *newData = new VectorParam; + newData->loadFromIff(file); + m_vectorListSimple.push_back(newData); + } + m_vectorListSimpleLoaded = true; + } + break; + case constcrc("filenameAtDerived"): + m_filenameAtDerived.loadFromIff(file); + break; + case constcrc("filenameSimple"): + m_filenameSimple.loadFromIff(file); + break; + case constcrc("filenameWeightedList"): + m_filenameWeightedList.loadFromIff(file); + break; + case constcrc("filenameListSimple"): { + std::vector::iterator iter; + for (iter = m_filenameListSimple.begin(); iter != m_filenameListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_filenameListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_filenameListSimple.push_back(newData); + } + m_filenameListSimpleLoaded = true; + } + break; + case constcrc("objvarDerived"): + m_objvarDerived.loadFromIff(file); + break; + case constcrc("objvarSimple"): + m_objvarSimple.loadFromIff(file); + break; + case constcrc("templateDerived"): + m_templateDerived.loadFromIff(file); + break; + case constcrc("templateSimple"): + m_templateSimple.loadFromIff(file); + break; + case constcrc("templateWeightedList"): + m_templateWeightedList.loadFromIff(file); + break; + case constcrc("templateListSimple"): { + std::vector::iterator iter; + for (iter = m_templateListSimple.begin(); iter != m_templateListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_templateListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StringParam *newData = new StringParam; + newData->loadFromIff(file); + m_templateListSimple.push_back(newData); + } + m_templateListSimpleLoaded = true; + } + break; + case constcrc("structAtDerived"): + m_structAtDerived.loadFromIff(file); + break; + case constcrc("structSimple"): + m_structSimple.loadFromIff(file); + break; + case constcrc("structListSimple"): { + std::vector::iterator iter; + for (iter = m_structListSimple.begin(); iter != m_structListSimple.end(); ++iter) { + delete *iter; + *iter = NULL; + } + m_structListSimpleAppend = file.read_bool8(); + int listCount = file.read_int32(); + for (int j = 0; j < listCount; ++j) { + StructParamOT *newData = new StructParamOT; + newData->loadFromIff(file); + m_structListSimple.push_back(newData); + } + m_structListSimpleLoaded = true; + } + break; + case constcrc("structArrayEnum"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 3, + ("read array size of %d for an array of size 3, reading values anyway", listCount)); + int j; + for (j = 0; j < 3 && j < listCount; ++j) + m_structArrayEnum[j].loadFromIff(file); + // if there are more params for structArrayEnum read and dump them + for (; j < listCount; ++j) { + StructParamOT dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("structArrayInteger"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_structArrayInteger[j].loadFromIff(file); + // if there are more params for structArrayInteger read and dump them + for (; j < listCount; ++j) { + StructParamOT dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("integerArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_integerArray[j].loadFromIff(file); + // if there are more params for integerArray read and dump them + for (; j < listCount; ++j) { + CompilerIntegerParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("floatArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_floatArray[j].loadFromIff(file); + // if there are more params for floatArray read and dump them + for (; j < listCount; ++j) { + FloatParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("stringArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_stringArray[j].loadFromIff(file); + // if there are more params for stringArray read and dump them + for (; j < listCount; ++j) { + StringParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("boolArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_boolArray[j].loadFromIff(file); + // if there are more params for boolArray read and dump them + for (; j < listCount; ++j) { + BoolParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("stringIdArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_stringIdArray[j].loadFromIff(file); + // if there are more params for stringIdArray read and dump them + for (; j < listCount; ++j) { + StringIdParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("triggerArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_triggerArray[j].loadFromIff(file); + // if there are more params for triggerArray read and dump them + for (; j < listCount; ++j) { + TriggerVolumeParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("vectorArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_vectorArray[j].loadFromIff(file); + // if there are more params for vectorArray read and dump them + for (; j < listCount; ++j) { + VectorParam dummy; + dummy.loadFromIff(file); + } + } + break; + case constcrc("fileNameArray"): { + int listCount = file.read_int32(); + DEBUG_WARNING(listCount != 2, + ("read array size of %d for an array of size 2, reading values anyway", listCount)); + int j; + for (j = 0; j < 2 && j < listCount; ++j) + m_fileNameArray[j].loadFromIff(file); + // if there are more params for fileNameArray read and dump them + for (; j < listCount; ++j) { + StringParam dummy; + dummy.loadFromIff(file); + } + } + break; + } + file.exitChunk(true); + } + + file.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // ServerUberObjectTemplate::load /** * Saves the template data to an iff file. @@ -2651,785 +2527,829 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerUberObjectTemplate::save(Iff &file) -{ -int count; +void ServerUberObjectTemplate::save(Iff &file) { + int count; - file.insertForm(ServerUberObjectTemplate_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(ServerUberObjectTemplate_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 intAtDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intAtDerived"); - m_intAtDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intSimple"); - m_intSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intSimpleDeltaPositive - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intSimpleDeltaPositive"); - m_intSimpleDeltaPositive.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intSimpleDeltaNegative - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intSimpleDeltaNegative"); - m_intSimpleDeltaNegative.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intSimpleDeltaPositivePercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intSimpleDeltaPositivePercent"); - m_intSimpleDeltaPositivePercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intSimpleDeltaNegativePercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intSimpleDeltaNegativePercent"); - m_intSimpleDeltaNegativePercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intWeightedList"); - m_intWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intWeightedListDeltaPositive - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intWeightedListDeltaPositive"); - m_intWeightedListDeltaPositive.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intWeightedListDeltaNegative - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intWeightedListDeltaNegative"); - m_intWeightedListDeltaNegative.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intWeightedListDeltaPositivePercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intWeightedListDeltaPositivePercent"); - m_intWeightedListDeltaPositivePercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intWeightedListDeltaNegativePercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intWeightedListDeltaNegativePercent"); - m_intWeightedListDeltaNegativePercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intRandomRange1 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intRandomRange1"); - m_intRandomRange1.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intRandomRange2 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intRandomRange2"); - m_intRandomRange2.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intRandomRange3 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intRandomRange3"); - m_intRandomRange3.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intRandomRange4 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intRandomRange4"); - m_intRandomRange4.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intDiceRoll1 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intDiceRoll1"); - m_intDiceRoll1.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save intDiceRoll2 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intDiceRoll2"); - m_intDiceRoll2.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_intListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_intListSimpleAppend = true; - } - // save intListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intListSimple"); - file.insertChunkData(&m_intListSimpleAppend, sizeof(bool)); - count = m_intListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_intListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_intListWeightedListLoaded) - { - // mark the list as empty and extending the base list - m_intListWeightedListAppend = true; - } - // save intListWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intListWeightedList"); - file.insertChunkData(&m_intListWeightedListAppend, sizeof(bool)); - count = m_intListWeightedList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_intListWeightedList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_intListRandomRangeLoaded) - { - // mark the list as empty and extending the base list - m_intListRandomRangeAppend = true; - } - // save intListRandomRange - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intListRandomRange"); - file.insertChunkData(&m_intListRandomRangeAppend, sizeof(bool)); - count = m_intListRandomRange.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_intListRandomRange[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_intListDiceRollLoaded) - { - // mark the list as empty and extending the base list - m_intListDiceRollAppend = true; - } - // save intListDiceRoll - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("intListDiceRoll"); - file.insertChunkData(&m_intListDiceRollAppend, sizeof(bool)); - count = m_intListDiceRoll.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_intListDiceRoll[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save floatAtDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatAtDerived"); - m_floatAtDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatSimple"); - m_floatSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatSimpleDeltaPositive - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatSimpleDeltaPositive"); - m_floatSimpleDeltaPositive.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatSimpleDeltaNegative - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatSimpleDeltaNegative"); - m_floatSimpleDeltaNegative.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatSimpleDeltaPositivePercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatSimpleDeltaPositivePercent"); - m_floatSimpleDeltaPositivePercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatSimpleDeltaNegativePercent - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatSimpleDeltaNegativePercent"); - m_floatSimpleDeltaNegativePercent.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatWeightedList"); - m_floatWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatRandomRange1 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatRandomRange1"); - m_floatRandomRange1.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatRandomRange2 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatRandomRange2"); - m_floatRandomRange2.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatRandomRange3 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatRandomRange3"); - m_floatRandomRange3.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save floatRandomRange4 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatRandomRange4"); - m_floatRandomRange4.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_floatListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_floatListSimpleAppend = true; - } - // save floatListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatListSimple"); - file.insertChunkData(&m_floatListSimpleAppend, sizeof(bool)); - count = m_floatListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_floatListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_floatListWeightedListLoaded) - { - // mark the list as empty and extending the base list - m_floatListWeightedListAppend = true; - } - // save floatListWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatListWeightedList"); - file.insertChunkData(&m_floatListWeightedListAppend, sizeof(bool)); - count = m_floatListWeightedList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_floatListWeightedList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_floatListRandomRangeLoaded) - { - // mark the list as empty and extending the base list - m_floatListRandomRangeAppend = true; - } - // save floatListRandomRange - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatListRandomRange"); - file.insertChunkData(&m_floatListRandomRangeAppend, sizeof(bool)); - count = m_floatListRandomRange.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_floatListRandomRange[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save enumIndexedByEnumSingle - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("enumIndexedByEnumSingle"); - count = 3; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 3; ++i) - m_enumIndexedByEnumSingle[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save enumIndexedByEnumWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("enumIndexedByEnumWeightedList"); - count = 3; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 3; ++i) - m_enumIndexedByEnumWeightedList[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_enumListIndexedLoaded) - { - // mark the list as empty and extending the base list - m_enumListIndexedAppend = true; - } - // save enumListIndexed - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("enumListIndexed"); - file.insertChunkData(&m_enumListIndexedAppend, sizeof(bool)); - count = m_enumListIndexed.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_enumListIndexed[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_enumListWeightedListLoaded) - { - // mark the list as empty and extending the base list - m_enumListWeightedListAppend = true; - } - // save enumListWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("enumListWeightedList"); - file.insertChunkData(&m_enumListWeightedListAppend, sizeof(bool)); - count = m_enumListWeightedList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_enumListWeightedList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save stringIdDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringIdDerived"); - m_stringIdDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save stringIdSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringIdSimple"); - m_stringIdSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save stringIdWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringIdWeightedList"); - m_stringIdWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_stringIdListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_stringIdListSimpleAppend = true; - } - // save stringIdListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringIdListSimple"); - file.insertChunkData(&m_stringIdListSimpleAppend, sizeof(bool)); - count = m_stringIdListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_stringIdListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_stringIdListWeightedListLoaded) - { - // mark the list as empty and extending the base list - m_stringIdListWeightedListAppend = true; - } - // save stringIdListWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringIdListWeightedList"); - file.insertChunkData(&m_stringIdListWeightedListAppend, sizeof(bool)); - count = m_stringIdListWeightedList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_stringIdListWeightedList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save stringDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringDerived"); - m_stringDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save stringSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringSimple"); - m_stringSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save stringWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringWeightedList"); - m_stringWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_stringListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_stringListSimpleAppend = true; - } - // save stringListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringListSimple"); - file.insertChunkData(&m_stringListSimpleAppend, sizeof(bool)); - count = m_stringListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_stringListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_stringListWeightedListLoaded) - { - // mark the list as empty and extending the base list - m_stringListWeightedListAppend = true; - } - // save stringListWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringListWeightedList"); - file.insertChunkData(&m_stringListWeightedListAppend, sizeof(bool)); - count = m_stringListWeightedList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_stringListWeightedList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save triggerVolumeDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("triggerVolumeDerived"); - m_triggerVolumeDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save triggerVolumeSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("triggerVolumeSimple"); - m_triggerVolumeSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save triggerVolumeWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("triggerVolumeWeightedList"); - m_triggerVolumeWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_triggerVolumeListLoaded) - { - // mark the list as empty and extending the base list - m_triggerVolumeListAppend = true; - } - // save triggerVolumeList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("triggerVolumeList"); - file.insertChunkData(&m_triggerVolumeListAppend, sizeof(bool)); - count = m_triggerVolumeList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_triggerVolumeList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_triggerVolumesListWeightedListLoaded) - { - // mark the list as empty and extending the base list - m_triggerVolumesListWeightedListAppend = true; - } - // save triggerVolumesListWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("triggerVolumesListWeightedList"); - file.insertChunkData(&m_triggerVolumesListWeightedListAppend, sizeof(bool)); - count = m_triggerVolumesListWeightedList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_triggerVolumesListWeightedList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save boolDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("boolDerived"); - m_boolDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save boolSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("boolSimple"); - m_boolSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save boolWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("boolWeightedList"); - m_boolWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_boolListDerivedLoaded) - { - // mark the list as empty and extending the base list - m_boolListDerivedAppend = true; - } - // save boolListDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("boolListDerived"); - file.insertChunkData(&m_boolListDerivedAppend, sizeof(bool)); - count = m_boolListDerived.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_boolListDerived[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_boolListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_boolListSimpleAppend = true; - } - // save boolListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("boolListSimple"); - file.insertChunkData(&m_boolListSimpleAppend, sizeof(bool)); - count = m_boolListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_boolListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - if (!m_boolListWeightedListLoaded) - { - // mark the list as empty and extending the base list - m_boolListWeightedListAppend = true; - } - // save boolListWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("boolListWeightedList"); - file.insertChunkData(&m_boolListWeightedListAppend, sizeof(bool)); - count = m_boolListWeightedList.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_boolListWeightedList[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save vectorAtDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("vectorAtDerived"); - m_vectorAtDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save vectorSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("vectorSimple"); - m_vectorSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_vectorListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_vectorListSimpleAppend = true; - } - // save vectorListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("vectorListSimple"); - file.insertChunkData(&m_vectorListSimpleAppend, sizeof(bool)); - count = m_vectorListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_vectorListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save filenameAtDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("filenameAtDerived"); - m_filenameAtDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save filenameSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("filenameSimple"); - m_filenameSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save filenameWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("filenameWeightedList"); - m_filenameWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_filenameListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_filenameListSimpleAppend = true; - } - // save filenameListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("filenameListSimple"); - file.insertChunkData(&m_filenameListSimpleAppend, sizeof(bool)); - count = m_filenameListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_filenameListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save objvarDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("objvarDerived"); - m_objvarDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save objvarSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("objvarSimple"); - m_objvarSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save templateDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("templateDerived"); - m_templateDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save templateSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("templateSimple"); - m_templateSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save templateWeightedList - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("templateWeightedList"); - m_templateWeightedList.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_templateListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_templateListSimpleAppend = true; - } - // save templateListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("templateListSimple"); - file.insertChunkData(&m_templateListSimpleAppend, sizeof(bool)); - count = m_templateListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_templateListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save structAtDerived - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("structAtDerived"); - m_structAtDerived.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save structSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("structSimple"); - m_structSimple.saveToIff(file); - file.exitChunk(); - ++paramCount; - if (!m_structListSimpleLoaded) - { - // mark the list as empty and extending the base list - m_structListSimpleAppend = true; - } - // save structListSimple - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("structListSimple"); - file.insertChunkData(&m_structListSimpleAppend, sizeof(bool)); - count = m_structListSimple.size(); - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < count; ++i) - m_structListSimple[i]->saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save structArrayEnum - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("structArrayEnum"); - count = 3; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 3; ++i) - m_structArrayEnum[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save structArrayInteger - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("structArrayInteger"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_structArrayInteger[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save integerArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("integerArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_integerArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save floatArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("floatArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_floatArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save stringArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_stringArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save boolArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("boolArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_boolArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save stringIdArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("stringIdArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_stringIdArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save triggerArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("triggerArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_triggerArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save vectorArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("vectorArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_vectorArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; - // save fileNameArray - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("fileNameArray"); - count = 2; - file.insertChunkData(&count, sizeof(count)); - {for (int i = 0; i < 2; ++i) - m_fileNameArray[i].saveToIff(file);} - file.exitChunk(); - ++paramCount; + // save intAtDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intAtDerived"); + m_intAtDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intSimple"); + m_intSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intSimpleDeltaPositive + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intSimpleDeltaPositive"); + m_intSimpleDeltaPositive.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intSimpleDeltaNegative + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intSimpleDeltaNegative"); + m_intSimpleDeltaNegative.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intSimpleDeltaPositivePercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intSimpleDeltaPositivePercent"); + m_intSimpleDeltaPositivePercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intSimpleDeltaNegativePercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intSimpleDeltaNegativePercent"); + m_intSimpleDeltaNegativePercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intWeightedList"); + m_intWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intWeightedListDeltaPositive + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intWeightedListDeltaPositive"); + m_intWeightedListDeltaPositive.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intWeightedListDeltaNegative + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intWeightedListDeltaNegative"); + m_intWeightedListDeltaNegative.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intWeightedListDeltaPositivePercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intWeightedListDeltaPositivePercent"); + m_intWeightedListDeltaPositivePercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intWeightedListDeltaNegativePercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intWeightedListDeltaNegativePercent"); + m_intWeightedListDeltaNegativePercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intRandomRange1 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intRandomRange1"); + m_intRandomRange1.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intRandomRange2 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intRandomRange2"); + m_intRandomRange2.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intRandomRange3 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intRandomRange3"); + m_intRandomRange3.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intRandomRange4 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intRandomRange4"); + m_intRandomRange4.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intDiceRoll1 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intDiceRoll1"); + m_intDiceRoll1.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save intDiceRoll2 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intDiceRoll2"); + m_intDiceRoll2.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_intListSimpleLoaded) { + // mark the list as empty and extending the base list + m_intListSimpleAppend = true; + } + // save intListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intListSimple"); + file.insertChunkData(&m_intListSimpleAppend, sizeof(bool)); + count = m_intListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_intListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_intListWeightedListLoaded) { + // mark the list as empty and extending the base list + m_intListWeightedListAppend = true; + } + // save intListWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intListWeightedList"); + file.insertChunkData(&m_intListWeightedListAppend, sizeof(bool)); + count = m_intListWeightedList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_intListWeightedList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_intListRandomRangeLoaded) { + // mark the list as empty and extending the base list + m_intListRandomRangeAppend = true; + } + // save intListRandomRange + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intListRandomRange"); + file.insertChunkData(&m_intListRandomRangeAppend, sizeof(bool)); + count = m_intListRandomRange.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_intListRandomRange[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_intListDiceRollLoaded) { + // mark the list as empty and extending the base list + m_intListDiceRollAppend = true; + } + // save intListDiceRoll + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("intListDiceRoll"); + file.insertChunkData(&m_intListDiceRollAppend, sizeof(bool)); + count = m_intListDiceRoll.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_intListDiceRoll[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save floatAtDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatAtDerived"); + m_floatAtDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatSimple"); + m_floatSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatSimpleDeltaPositive + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatSimpleDeltaPositive"); + m_floatSimpleDeltaPositive.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatSimpleDeltaNegative + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatSimpleDeltaNegative"); + m_floatSimpleDeltaNegative.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatSimpleDeltaPositivePercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatSimpleDeltaPositivePercent"); + m_floatSimpleDeltaPositivePercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatSimpleDeltaNegativePercent + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatSimpleDeltaNegativePercent"); + m_floatSimpleDeltaNegativePercent.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatWeightedList"); + m_floatWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatRandomRange1 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatRandomRange1"); + m_floatRandomRange1.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatRandomRange2 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatRandomRange2"); + m_floatRandomRange2.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatRandomRange3 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatRandomRange3"); + m_floatRandomRange3.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save floatRandomRange4 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatRandomRange4"); + m_floatRandomRange4.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_floatListSimpleLoaded) { + // mark the list as empty and extending the base list + m_floatListSimpleAppend = true; + } + // save floatListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatListSimple"); + file.insertChunkData(&m_floatListSimpleAppend, sizeof(bool)); + count = m_floatListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_floatListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_floatListWeightedListLoaded) { + // mark the list as empty and extending the base list + m_floatListWeightedListAppend = true; + } + // save floatListWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatListWeightedList"); + file.insertChunkData(&m_floatListWeightedListAppend, sizeof(bool)); + count = m_floatListWeightedList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_floatListWeightedList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_floatListRandomRangeLoaded) { + // mark the list as empty and extending the base list + m_floatListRandomRangeAppend = true; + } + // save floatListRandomRange + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatListRandomRange"); + file.insertChunkData(&m_floatListRandomRangeAppend, sizeof(bool)); + count = m_floatListRandomRange.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_floatListRandomRange[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save enumIndexedByEnumSingle + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("enumIndexedByEnumSingle"); + count = 3; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 3; ++i) + m_enumIndexedByEnumSingle[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save enumIndexedByEnumWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("enumIndexedByEnumWeightedList"); + count = 3; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 3; ++i) + m_enumIndexedByEnumWeightedList[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_enumListIndexedLoaded) { + // mark the list as empty and extending the base list + m_enumListIndexedAppend = true; + } + // save enumListIndexed + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("enumListIndexed"); + file.insertChunkData(&m_enumListIndexedAppend, sizeof(bool)); + count = m_enumListIndexed.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_enumListIndexed[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_enumListWeightedListLoaded) { + // mark the list as empty and extending the base list + m_enumListWeightedListAppend = true; + } + // save enumListWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("enumListWeightedList"); + file.insertChunkData(&m_enumListWeightedListAppend, sizeof(bool)); + count = m_enumListWeightedList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_enumListWeightedList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save stringIdDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringIdDerived"); + m_stringIdDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save stringIdSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringIdSimple"); + m_stringIdSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save stringIdWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringIdWeightedList"); + m_stringIdWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_stringIdListSimpleLoaded) { + // mark the list as empty and extending the base list + m_stringIdListSimpleAppend = true; + } + // save stringIdListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringIdListSimple"); + file.insertChunkData(&m_stringIdListSimpleAppend, sizeof(bool)); + count = m_stringIdListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_stringIdListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_stringIdListWeightedListLoaded) { + // mark the list as empty and extending the base list + m_stringIdListWeightedListAppend = true; + } + // save stringIdListWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringIdListWeightedList"); + file.insertChunkData(&m_stringIdListWeightedListAppend, sizeof(bool)); + count = m_stringIdListWeightedList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_stringIdListWeightedList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save stringDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringDerived"); + m_stringDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save stringSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringSimple"); + m_stringSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save stringWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringWeightedList"); + m_stringWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_stringListSimpleLoaded) { + // mark the list as empty and extending the base list + m_stringListSimpleAppend = true; + } + // save stringListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringListSimple"); + file.insertChunkData(&m_stringListSimpleAppend, sizeof(bool)); + count = m_stringListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_stringListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_stringListWeightedListLoaded) { + // mark the list as empty and extending the base list + m_stringListWeightedListAppend = true; + } + // save stringListWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringListWeightedList"); + file.insertChunkData(&m_stringListWeightedListAppend, sizeof(bool)); + count = m_stringListWeightedList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_stringListWeightedList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save triggerVolumeDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("triggerVolumeDerived"); + m_triggerVolumeDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save triggerVolumeSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("triggerVolumeSimple"); + m_triggerVolumeSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save triggerVolumeWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("triggerVolumeWeightedList"); + m_triggerVolumeWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_triggerVolumeListLoaded) { + // mark the list as empty and extending the base list + m_triggerVolumeListAppend = true; + } + // save triggerVolumeList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("triggerVolumeList"); + file.insertChunkData(&m_triggerVolumeListAppend, sizeof(bool)); + count = m_triggerVolumeList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_triggerVolumeList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_triggerVolumesListWeightedListLoaded) { + // mark the list as empty and extending the base list + m_triggerVolumesListWeightedListAppend = true; + } + // save triggerVolumesListWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("triggerVolumesListWeightedList"); + file.insertChunkData(&m_triggerVolumesListWeightedListAppend, sizeof(bool)); + count = m_triggerVolumesListWeightedList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_triggerVolumesListWeightedList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save boolDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("boolDerived"); + m_boolDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save boolSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("boolSimple"); + m_boolSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save boolWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("boolWeightedList"); + m_boolWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_boolListDerivedLoaded) { + // mark the list as empty and extending the base list + m_boolListDerivedAppend = true; + } + // save boolListDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("boolListDerived"); + file.insertChunkData(&m_boolListDerivedAppend, sizeof(bool)); + count = m_boolListDerived.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_boolListDerived[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_boolListSimpleLoaded) { + // mark the list as empty and extending the base list + m_boolListSimpleAppend = true; + } + // save boolListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("boolListSimple"); + file.insertChunkData(&m_boolListSimpleAppend, sizeof(bool)); + count = m_boolListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_boolListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + if (!m_boolListWeightedListLoaded) { + // mark the list as empty and extending the base list + m_boolListWeightedListAppend = true; + } + // save boolListWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("boolListWeightedList"); + file.insertChunkData(&m_boolListWeightedListAppend, sizeof(bool)); + count = m_boolListWeightedList.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_boolListWeightedList[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save vectorAtDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("vectorAtDerived"); + m_vectorAtDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save vectorSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("vectorSimple"); + m_vectorSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_vectorListSimpleLoaded) { + // mark the list as empty and extending the base list + m_vectorListSimpleAppend = true; + } + // save vectorListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("vectorListSimple"); + file.insertChunkData(&m_vectorListSimpleAppend, sizeof(bool)); + count = m_vectorListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_vectorListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save filenameAtDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("filenameAtDerived"); + m_filenameAtDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save filenameSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("filenameSimple"); + m_filenameSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save filenameWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("filenameWeightedList"); + m_filenameWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_filenameListSimpleLoaded) { + // mark the list as empty and extending the base list + m_filenameListSimpleAppend = true; + } + // save filenameListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("filenameListSimple"); + file.insertChunkData(&m_filenameListSimpleAppend, sizeof(bool)); + count = m_filenameListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_filenameListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save objvarDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("objvarDerived"); + m_objvarDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save objvarSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("objvarSimple"); + m_objvarSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save templateDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("templateDerived"); + m_templateDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save templateSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("templateSimple"); + m_templateSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save templateWeightedList + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("templateWeightedList"); + m_templateWeightedList.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_templateListSimpleLoaded) { + // mark the list as empty and extending the base list + m_templateListSimpleAppend = true; + } + // save templateListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("templateListSimple"); + file.insertChunkData(&m_templateListSimpleAppend, sizeof(bool)); + count = m_templateListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_templateListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save structAtDerived + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("structAtDerived"); + m_structAtDerived.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save structSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("structSimple"); + m_structSimple.saveToIff(file); + file.exitChunk(); + ++paramCount; + if (!m_structListSimpleLoaded) { + // mark the list as empty and extending the base list + m_structListSimpleAppend = true; + } + // save structListSimple + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("structListSimple"); + file.insertChunkData(&m_structListSimpleAppend, sizeof(bool)); + count = m_structListSimple.size(); + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < count; ++i) + m_structListSimple[i]->saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save structArrayEnum + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("structArrayEnum"); + count = 3; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 3; ++i) + m_structArrayEnum[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save structArrayInteger + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("structArrayInteger"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_structArrayInteger[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save integerArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("integerArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_integerArray[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save floatArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("floatArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_floatArray[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save stringArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_stringArray[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save boolArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("boolArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_boolArray[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save stringIdArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("stringIdArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_stringIdArray[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save triggerArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("triggerArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_triggerArray[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save vectorArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("vectorArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_vectorArray[i].saveToIff(file); + } + file.exitChunk(); + ++paramCount; + // save fileNameArray + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("fileNameArray"); + count = 2; + file.insertChunkData(&count, sizeof(count)); + { + for (int i = 0; i < 2; ++i) + m_fileNameArray[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(); -} // ServerUberObjectTemplate::save + file.exitForm(true); + TpfTemplate::save(file); + file.exitForm(); +} // ServerUberObjectTemplate::save //============================================================================= @@ -3438,166 +3358,152 @@ int count; /** * Class constructor. */ -ServerUberObjectTemplate::_Foo::_Foo(const std::string & filename) - : TpfTemplate(filename) -{ -} // ServerUberObjectTemplate::_Foo::_Foo +ServerUberObjectTemplate::_Foo::_Foo(const std::string &filename) + : TpfTemplate(filename) { +} // ServerUberObjectTemplate::_Foo::_Foo /** * Class destructor. */ -ServerUberObjectTemplate::_Foo::~_Foo() -{ -} // ServerUberObjectTemplate::_Foo::~_Foo +ServerUberObjectTemplate::_Foo::~_Foo() { +} // ServerUberObjectTemplate::_Foo::~_Foo /** * Static function used to register this template. */ -void ServerUberObjectTemplate::_Foo::registerMe(void) -{ - ObjectTemplateList::registerTemplate(_Foo_tag, create); -} // ServerUberObjectTemplate::_Foo::registerMe +void ServerUberObjectTemplate::_Foo::registerMe(void) { + ObjectTemplateList::registerTemplate(_Foo_tag, create); +} // ServerUberObjectTemplate::_Foo::registerMe /** * Creates a ServerUberObjectTemplate::_Foo template. * * @return a new instance of the template */ -ObjectTemplate * ServerUberObjectTemplate::_Foo::create(const std::string & filename) -{ - return new ServerUberObjectTemplate::_Foo(filename); -} // ServerUberObjectTemplate::_Foo::create +ObjectTemplate *ServerUberObjectTemplate::_Foo::create(const std::string &filename) { + return new ServerUberObjectTemplate::_Foo(filename); +} // ServerUberObjectTemplate::_Foo::create /** * Returns the template id. * * @return the template id */ -Tag ServerUberObjectTemplate::_Foo::getId(void) const -{ - return _Foo_tag; -} // ServerUberObjectTemplate::_Foo::getId +Tag ServerUberObjectTemplate::_Foo::getId(void) const { + return _Foo_tag; +} // ServerUberObjectTemplate::_Foo::getId -CompilerIntegerParam * ServerUberObjectTemplate::_Foo::getCompilerIntegerParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "item1") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); - return NULL; - } - return &m_item1; - } - fprintf(stderr, "trying to access single-parameter \"item1\" as an array\n"); - } - else - return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::_Foo::getCompilerIntegerParam +CompilerIntegerParam * +ServerUberObjectTemplate::_Foo::getCompilerIntegerParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("item1"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_item1; + } + fprintf(stderr, "trying to access single-parameter \"item1\" as an array\n"); + } + break; + default: + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::_Foo::getCompilerIntegerParam -FloatParam * ServerUberObjectTemplate::_Foo::getFloatParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "item2") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getFloatParam(name, deepCheck, index); - return NULL; - } - return &m_item2; - } - fprintf(stderr, "trying to access single-parameter \"item2\" as an array\n"); - } - else - return TpfTemplate::getFloatParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::_Foo::getFloatParam +FloatParam *ServerUberObjectTemplate::_Foo::getFloatParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("item2"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_item2; + } + fprintf(stderr, "trying to access single-parameter \"item2\" as an array\n"); + } + break; + default: + return TpfTemplate::getFloatParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::_Foo::getFloatParam -BoolParam * ServerUberObjectTemplate::_Foo::getBoolParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getBoolParam(name, deepCheck, index); -} //ServerUberObjectTemplate::_Foo::getBoolParam +BoolParam *ServerUberObjectTemplate::_Foo::getBoolParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerUberObjectTemplate::_Foo::getBoolParam -StringParam * ServerUberObjectTemplate::_Foo::getStringParam(const char *name, bool deepCheck, int index) -{ - if (strcmp(name, "item3") == 0) - { - if (index == 0) - { - if (deepCheck && !isParamLoaded(name, false, 0)) - { - if (getBaseTemplate() != NULL) - return getBaseTemplate()->getStringParam(name, deepCheck, index); - return NULL; - } - return &m_item3; - } - fprintf(stderr, "trying to access single-parameter \"item3\" as an array\n"); - } - else - return TpfTemplate::getStringParam(name, deepCheck, index); - return NULL; -} //ServerUberObjectTemplate::_Foo::getStringParam +StringParam *ServerUberObjectTemplate::_Foo::getStringParam(const char *name, bool deepCheck, int index) { + switch (runtimeCrc(name)) { + case constcrc("item3"): { + if (index == 0) { + if (deepCheck && !isParamLoaded(name, false, 0)) { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_item3; + } + fprintf(stderr, "trying to access single-parameter \"item3\" as an array\n"); + } + break; + default: + return TpfTemplate::getStringParam(name, deepCheck, index); + break; + } + return NULL; +} //ServerUberObjectTemplate::_Foo::getStringParam -StringIdParam * ServerUberObjectTemplate::_Foo::getStringIdParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStringIdParam(name, deepCheck, index); -} //ServerUberObjectTemplate::_Foo::getStringIdParam +StringIdParam *ServerUberObjectTemplate::_Foo::getStringIdParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerUberObjectTemplate::_Foo::getStringIdParam -VectorParam * ServerUberObjectTemplate::_Foo::getVectorParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getVectorParam(name, deepCheck, index); -} //ServerUberObjectTemplate::_Foo::getVectorParam +VectorParam *ServerUberObjectTemplate::_Foo::getVectorParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerUberObjectTemplate::_Foo::getVectorParam -DynamicVariableParam * ServerUberObjectTemplate::_Foo::getDynamicVariableParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); -} //ServerUberObjectTemplate::_Foo::getDynamicVariableParam +DynamicVariableParam * +ServerUberObjectTemplate::_Foo::getDynamicVariableParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerUberObjectTemplate::_Foo::getDynamicVariableParam -StructParamOT * ServerUberObjectTemplate::_Foo::getStructParamOT(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getStructParamOT(name, deepCheck, index); -} //ServerUberObjectTemplate::_Foo::getStructParamOT +StructParamOT *ServerUberObjectTemplate::_Foo::getStructParamOT(const char *name, bool deepCheck, int index) { + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerUberObjectTemplate::_Foo::getStructParamOT -TriggerVolumeParam * ServerUberObjectTemplate::_Foo::getTriggerVolumeParam(const char *name, bool deepCheck, int index) -{ - return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); -} //ServerUberObjectTemplate::_Foo::getTriggerVolumeParam +TriggerVolumeParam *ServerUberObjectTemplate::_Foo::getTriggerVolumeParam(const char *name, bool deepCheck, int index) { + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerUberObjectTemplate::_Foo::getTriggerVolumeParam -void ServerUberObjectTemplate::_Foo::initStructParamOT(StructParamOT ¶m, const char *name) -{ - if (param.isInitialized()) - return; - TpfTemplate::initStructParamOT(param, name); -} // ServerUberObjectTemplate::_Foo::initStructParamOT +void ServerUberObjectTemplate::_Foo::initStructParamOT(StructParamOT ¶m, const char *name) { + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerUberObjectTemplate::_Foo::initStructParamOT -void ServerUberObjectTemplate::_Foo::setAsEmptyList(const char *name) -{ - TpfTemplate::setAsEmptyList(name); -} // ServerUberObjectTemplate::_Foo::setAsEmptyList +void ServerUberObjectTemplate::_Foo::setAsEmptyList(const char *name) { + TpfTemplate::setAsEmptyList(name); +} // ServerUberObjectTemplate::_Foo::setAsEmptyList -void ServerUberObjectTemplate::_Foo::setAppend(const char *name) -{ - TpfTemplate::setAppend(name); -} // ServerUberObjectTemplate::_Foo::setAppend +void ServerUberObjectTemplate::_Foo::setAppend(const char *name) { + TpfTemplate::setAppend(name); +} // ServerUberObjectTemplate::_Foo::setAppend -bool ServerUberObjectTemplate::_Foo::isAppend(const char *name) const -{ - return TpfTemplate::isAppend(name); -} // ServerUberObjectTemplate::_Foo::isAppend +bool ServerUberObjectTemplate::_Foo::isAppend(const char *name) const { + return TpfTemplate::isAppend(name); +} // ServerUberObjectTemplate::_Foo::isAppend -int ServerUberObjectTemplate::_Foo::getListLength(const char *name) const -{ - return TpfTemplate::getListLength(name); -} // ServerUberObjectTemplate::_Foo::getListLength +int ServerUberObjectTemplate::_Foo::getListLength(const char *name) const { + return TpfTemplate::getListLength(name); +} // ServerUberObjectTemplate::_Foo::getListLength /** * Loads the template data from an iff file. We should already be in the form @@ -3605,32 +3511,36 @@ int ServerUberObjectTemplate::_Foo::getListLength(const char *name) const * * @param file file to load from */ -void ServerUberObjectTemplate::_Foo::load(Iff &file) -{ -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; +void ServerUberObjectTemplate::_Foo::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, "item1") == 0) - m_item1.loadFromIff(file); - else if (strcmp(paramName, "item2") == 0) - m_item2.loadFromIff(file); - else if (strcmp(paramName, "item3") == 0) - m_item3.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); -} // ServerUberObjectTemplate::_Foo::load + switch (runtimeCrc(paramName)) { + case constcrc("item1"): + m_item1.loadFromIff(file); + break; + case constcrc("item2"): + m_item2.loadFromIff(file); + break; + case constcrc("item3"): + m_item3.loadFromIff(file); + file.exitChunk(true); + break; + } + } + + file.exitForm(); + UNREF(file); +} // ServerUberObjectTemplate::_Foo::load /** * Saves the template data to an iff file. @@ -3638,41 +3548,40 @@ char paramName[MAX_NAME_SIZE]; * @param file file to save to * @param location file type (client or server) */ -void ServerUberObjectTemplate::_Foo::save(Iff &file) -{ -int count; +void ServerUberObjectTemplate::_Foo::save(Iff &file) { + int count; - file.insertForm(_Foo_tag); + file.insertForm(_Foo_tag); - int paramCount = 0; + int paramCount = 0; - // save item1 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("item1"); - m_item1.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save item2 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("item2"); - m_item2.saveToIff(file); - file.exitChunk(); - ++paramCount; - // save item3 - file.insertChunk(TAG(X, X, X, X)); - file.insertChunkString("item3"); - m_item3.saveToIff(file); - file.exitChunk(); - ++paramCount; + // save item1 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("item1"); + m_item1.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save item2 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("item2"); + m_item2.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save item3 + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("item3"); + m_item3.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); -} // ServerUberObjectTemplate::_Foo::save + file.exitForm(true); + UNREF(count); +} // ServerUberObjectTemplate::_Foo::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..346dca91 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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"); + } + break; + 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..43eb635a 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 constcrc("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 diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp index 23b456d5..c88155a8 100755 --- a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp @@ -1942,8 +1942,10 @@ std::string name; { // we need to read the next line to continue parsing line = goToNextLine(); - if (line == CHAR_ERROR) + if (line == CHAR_ERROR) { + delete newData; return line; + } } line = parseDynamicVariableParameterList(*newData, line); } diff --git a/engine/shared/library/sharedTerrain/src/shared/appearance/ProceduralTerrainAppearance.cpp b/engine/shared/library/sharedTerrain/src/shared/appearance/ProceduralTerrainAppearance.cpp index 3ffa961b..e4044c86 100755 --- a/engine/shared/library/sharedTerrain/src/shared/appearance/ProceduralTerrainAppearance.cpp +++ b/engine/shared/library/sharedTerrain/src/shared/appearance/ProceduralTerrainAppearance.cpp @@ -1202,6 +1202,7 @@ void ProceduralTerrainAppearance::_legacyCreateFlora(const Chunk* const chunk) IGNORE_RETURN (m_floraMap->insert (std::make_pair (key, object))); } else { DEBUG_WARNING(true, ("FIX ME: Appearance template in ProceduralTerrainAppearance::_legacyCreateFlora is not found")); + delete object; } } //lint !e429 //-- collisionProperty has not been freed or returned } @@ -1361,6 +1362,7 @@ void ProceduralTerrainAppearance::createFlora (const Chunk* const chunk) IGNORE_RETURN (m_floraMap->insert (std::make_pair (key, object))); } else { DEBUG_WARNING(true, ("FIX ME: Appearance template in ProceduralTerrainAppearance::createFlora is not found")); + delete object; } } //lint !e429 //-- collisionProperty has not been freed or returned diff --git a/external/3rd/library/platform/projects/MonAPI2/MonitorData.cpp b/external/3rd/library/platform/projects/MonAPI2/MonitorData.cpp index 5740d61e..f0a1e85c 100755 --- a/external/3rd/library/platform/projects/MonAPI2/MonitorData.cpp +++ b/external/3rd/library/platform/projects/MonAPI2/MonitorData.cpp @@ -206,7 +206,6 @@ bool CMonitorData::processHierarchyRequestBlock(UdpConnection *con, short & sequ send(con, sequence, MON_MSG_REPLY_HIERARCHY_BLOCK, m_buffer, size + 1); memset(m_buffer, 0, 16); count++; - size = 0; } memset(m_buffer, 0, 16); send(con, sequence, MON_MSG_REPLY_HIERARCHY_BLOCK_END, m_buffer); diff --git a/external/3rd/library/platform/utils/Base/Config.cpp b/external/3rd/library/platform/utils/Base/Config.cpp index 6351686f..f0ad8ff1 100755 --- a/external/3rd/library/platform/utils/Base/Config.cpp +++ b/external/3rd/library/platform/utils/Base/Config.cpp @@ -21,7 +21,7 @@ namespace Base bool CConfig::LoadFile(char * file) //----------------------------------- { - char ch; + char ch; FILE * fp; UnloadFile(); @@ -31,7 +31,7 @@ bool CConfig::LoadFile(char * file) if (fp == nullptr || fp == (FILE *)-1) { //fprintf(stderr,"Failed to open config file %s!",file); - delete fp; + fclose(fp); return false; } @@ -63,7 +63,7 @@ bool CConfig::LoadFile(char * file) } pConfig[i] = 0; // mark end of file buffer - fclose(fp); + fclose(fp); return true; } diff --git a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp index 06bea775..2ae9716e 100755 --- a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp @@ -3191,11 +3191,12 @@ namespace ChatSystem failoverReloginOneAvatar(avatarIter->second); } } - else - { - // no avatars to relogin, so directly proceed to failover rooms - failoverRecreateRooms(); - } + // @TODO: figure out why m_avatarCoreCache isn't emptying after failover relogging all avatars + // @TODO: implement failoverRecreateRooms in stationchat + failoverRecreateRooms(); + m_inFailoverMode = false; + m_api->OnFailoverComplete(); + resumeProcessing(); } void ChatAPICore::failoverReloginOneAvatar(ChatAvatarCore * avatarCore) diff --git a/external/3rd/library/soePlatform/VChatAPI/utils2.0/utils/Base/types.h b/external/3rd/library/soePlatform/VChatAPI/utils2.0/utils/Base/types.h index 2ebb44de..ba396c51 100755 --- a/external/3rd/library/soePlatform/VChatAPI/utils2.0/utils/Base/types.h +++ b/external/3rd/library/soePlatform/VChatAPI/utils2.0/utils/Base/types.h @@ -49,6 +49,11 @@ namespace soe typedef u_int32_t uint32; typedef int64_t int64; typedef u_int64_t uint64; +//! the previous seem erroneous +// typedef signed int int32; +// typedef unsigned int uint32; +// typedef signed long long int64; +// typedef unsigned long long uint64; #endif } diff --git a/external/3rd/library/webAPI/CMakeLists.txt b/external/3rd/library/webAPI/CMakeLists.txt index 881f54a9..0c2a2f9f 100644 --- a/external/3rd/library/webAPI/CMakeLists.txt +++ b/external/3rd/library/webAPI/CMakeLists.txt @@ -6,8 +6,6 @@ add_library(webAPI webAPI.h webAPI.cpp json.hpp - webAPIHeartbeat.h - webAPIHeartbeat.cpp ) include_directories( diff --git a/external/3rd/library/webAPI/webAPI.cpp b/external/3rd/library/webAPI/webAPI.cpp index faf7d11b..78f64853 100644 --- a/external/3rd/library/webAPI/webAPI.cpp +++ b/external/3rd/library/webAPI/webAPI.cpp @@ -72,26 +72,7 @@ std::unordered_map webAPI::getStringMap(const std::string &slo return ret; } -std::unordered_map webAPI::getStringMap64(const std::string &slot) { - std::unordered_map ret = std::unordered_map(); - - if (!responseData.empty() && !slot.empty() && responseData.count(slot) && !responseData[slot].is_null()) { - - nlohmann::json j = responseData[slot]; - - for (nlohmann::json::iterator it = j.begin(); it != j.end(); ++it) { - std::string tmp(it.key()); - int64_t k = strtoll(tmp.c_str(), nullptr, 10); - std::string val = it.value(); - - ret.insert({k, val}); - } - } - - return ret; -} - -bool webAPI::submit(const int32_t &reqType, const int32_t &getPost, const int32_t &respType) { +bool webAPI::submit(const int &reqType, const int &getPost, const int &respType) { if (reqType == DTYPE::JSON) // json request { if (!requestData.empty()) { @@ -112,7 +93,7 @@ bool webAPI::submit(const int32_t &reqType, const int32_t &getPost, const int32_ return false; } -bool webAPI::fetch(const int32_t &getPost, const int32_t &mimeType) // 0 for json 1 for string +bool webAPI::fetch(const int &getPost, const int &mimeType) // 0 for json 1 for string { bool fetchStatus = false; @@ -134,18 +115,18 @@ bool webAPI::fetch(const int32_t &getPost, const int32_t &mimeType) // 0 for jso slist = curl_slist_append(slist, "charsets: utf-8"); - CURLcode res = curl_easy_setopt(curl, CURLOPT_USERAGENT, userAgent.c_str()); - res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback); // place the data into readBuffer using writeCallback - res = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); // specify readBuffer as the container for data - res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist); + curl_easy_setopt(curl, CURLOPT_USERAGENT, userAgent.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback); // place the data into readBuffer using writeCallback + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); // specify readBuffer as the container for data + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist); switch (getPost) { case HTTP::GET: - res = curl_easy_setopt(curl, CURLOPT_URL, std::string(uri + "?" + sRequest).c_str()); + curl_easy_setopt(curl, CURLOPT_URL, std::string(uri + "?" + sRequest).c_str()); break; case HTTP::POST: - res = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, sRequest.c_str()); - res = curl_easy_setopt(curl, CURLOPT_URL, uri.c_str()); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, sRequest.c_str()); + curl_easy_setopt(curl, CURLOPT_URL, uri.c_str()); break; // want to do a put, or whatever other type? feel free to add here } @@ -154,8 +135,9 @@ bool webAPI::fetch(const int32_t &getPost, const int32_t &mimeType) // 0 for jso // the public one will verify but since this is pinned we don't care about the CA // to grab/generate, see https://curl.haxx.se/libcurl/c/CURLOPT_PINNEDPUBLICKEY.html // under the PUBLIC KEY EXTRACTION heading - res = curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + CURLcode res = CURLE_OK; // if you want to pin to your own cert or cloudflares, learn how and use the below //res = curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "sha256//YOURKEYHERE"); diff --git a/external/3rd/library/webAPI/webAPI.h b/external/3rd/library/webAPI/webAPI.h index 2209b8f5..501c18cb 100644 --- a/external/3rd/library/webAPI/webAPI.h +++ b/external/3rd/library/webAPI/webAPI.h @@ -49,7 +49,7 @@ namespace StellaBellum { // submits the request bool - submit(const int32_t &reqType = DTYPE::JSON, const int32_t &getPost = HTTP::POST, const int32_t &respType = DTYPE::JSON); + submit(const int &reqType = DTYPE::JSON, const int &getPost = HTTP::POST, const int &respType = DTYPE::JSON); // set the endpoint after object creation...or change the target if needed bool setEndpoint(const std::string endpoint); @@ -66,9 +66,6 @@ namespace StellaBellum { // get a vector of strings from a given slot std::unordered_map getStringMap(const std::string &slot); - // get a 64 bit keyed vector of strings from a given slot - std::unordered_map getStringMap64(const std::string &slot); - // set json key and value for request template bool addJsonData(const std::string &key, const T &value) { if (!key.empty() && @@ -107,7 +104,7 @@ namespace StellaBellum { std::string uri; // fetcher - returns raw response direct from remote - bool fetch(const int32_t &getPost = HTTP::POST, const int32_t &mimeType = DTYPE::JSON); + bool fetch(const int &getPost = HTTP::POST, const int &mimeType = DTYPE::JSON); // cURL writeback callback static size_t writeCallback(void *contents, size_t size, size_t nmemb, void *userp); diff --git a/external/3rd/library/webAPI/webAPIHeartbeat.cpp b/external/3rd/library/webAPI/webAPIHeartbeat.cpp deleted file mode 100644 index e5f0cb64..00000000 --- a/external/3rd/library/webAPI/webAPIHeartbeat.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// -// Created by Darth on 10/17/2016. -// - -#include "webAPIHeartbeat.h" - -using namespace StellaBellum; - -webAPIHeartbeat::webAPIHeartbeat() { - webAPI api(std::string("https://login.stellabellum.net/metric/shoulderTap"), std::string("StellaBellum WebAPI Metrics Sender")); - api.addJsonData(std::string("type"), std::string("server")); - - api.submit(); -} diff --git a/external/3rd/library/webAPI/webAPIHeartbeat.h b/external/3rd/library/webAPI/webAPIHeartbeat.h deleted file mode 100644 index 31dcb2aa..00000000 --- a/external/3rd/library/webAPI/webAPIHeartbeat.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Created by Darth on 10/17/2016. -// - -#ifndef webAPIHeartbeat_H -#define webAPIHeartbeat_H - -#include -#include -#include -#include -#include - -#include "webAPI.h" - -namespace StellaBellum { - - class webAPIHeartbeat { - public: - webAPIHeartbeat(); - - private: - const inline std::string get_selfpath() { - char buff[PATH_MAX]; - ssize_t len = ::readlink("/proc/self/exe", buff, sizeof(buff) - 1); - if (len != -1) { - buff[len] = '\0'; - return std::string(buff); - } - return std::string(); - } - }; -} - -#endif //webAPIHeartbeat_H diff --git a/external/ours/library/archive/src/shared/Archive.h b/external/ours/library/archive/src/shared/Archive.h index 20a2ce2e..2921d66f 100755 --- a/external/ours/library/archive/src/shared/Archive.h +++ b/external/ours/library/archive/src/shared/Archive.h @@ -9,28 +9,12 @@ #include #include -// TODO: this is retarded, we have like 30-50 places where we define types... -// we must do something abou tthis -#include -typedef int64_t int64; -typedef u_int64_t uint64; -typedef int64 StationId; - //--------------------------------------------------------------------- namespace Archive { //--------------------------------------------------------------------- - -inline void get(ByteStream::ReadIterator & source, uint64 & target) -{ - source.get(&target, 8); -} - -inline void get(ByteStream::ReadIterator & source, int64 & target) -{ - source.get(&target, 8); -} + inline void get(ReadIterator & source, double & target) { @@ -231,16 +215,6 @@ template inline void get(ReadIterator & source, A * target, int leng //--------------------------------------------------------------------- -inline void put(ByteStream & target, const uint64 & source) -{ - target.put(&source, 8); -} - -inline void put(ByteStream & target, const int64 & source) -{ - target.put(&source, 8); -} - inline void put(ByteStream & target, const double & source) { target.put(&source, 8); diff --git a/game/server/application/SwgDatabaseServer/src/linux/SwgDatabaseServer.profdata b/game/server/application/SwgDatabaseServer/src/linux/SwgDatabaseServer.profdata index 14da98d1..50d54508 100644 Binary files a/game/server/application/SwgDatabaseServer/src/linux/SwgDatabaseServer.profdata and b/game/server/application/SwgDatabaseServer/src/linux/SwgDatabaseServer.profdata differ diff --git a/game/server/application/SwgDatabaseServer/src/linux/main.cpp b/game/server/application/SwgDatabaseServer/src/linux/main.cpp index e006ffb0..9b9682d3 100755 --- a/game/server/application/SwgDatabaseServer/src/linux/main.cpp +++ b/game/server/application/SwgDatabaseServer/src/linux/main.cpp @@ -1,3 +1,5 @@ +#include + #include "FirstSwgDatabaseServer.h" #include "SwgDatabaseServer/SwgDatabaseServer.h" @@ -19,10 +21,20 @@ #include "swgSharedNetworkMessages/SetupSwgSharedNetworkMessages.h" #include "swgServerNetworkMessages/SetupSwgServerNetworkMessages.h" -#ifndef STELLA_INTERNAL -#include "webAPIHeartbeat.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); #endif +inline void signalHandler(int s){ + printf("SwgDatabaseServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== void dumpPid(const char * argv) @@ -36,11 +48,13 @@ void dumpPid(const char * argv) int main(int argc, char ** argv) { -// dumpPid(argv[0]); + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); -#ifndef STELLA_INTERNAL - StellaBellum::webAPIHeartbeat(); -#endif +// dumpPid(argv[0]); SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -81,6 +95,7 @@ int main(int argc, char ** argv) SetupSharedThread::remove(); #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); exit(0); #endif diff --git a/game/server/application/SwgDatabaseServer/src/shared/generated/Schema_h.template b/game/server/application/SwgDatabaseServer/src/shared/generated/Schema_h.template index 1bd7c287..7297cfd7 100644 --- a/game/server/application/SwgDatabaseServer/src/shared/generated/Schema_h.template +++ b/game/server/application/SwgDatabaseServer/src/shared/generated/Schema_h.template @@ -23,7 +23,7 @@ struct PlayerObjectRow : public DB::Row enum {QUEST_DATA_SIZE=4000}; DB::BindableNetworkId object_id; - DB::BindableInt64 station_id; + DB::BindableLong station_id; DB::BindableNetworkId house_id; DB::BindableLong account_num_lots; DB::BindableBool account_is_outcast; @@ -80,7 +80,7 @@ struct PlayerObjectRow : public DB::Row struct PlayerObjectBufferRow : public DB::Row { DB::BindableNetworkId object_id; - DB::BindableInt64 station_id; + DB::BindableLong station_id; DB::BindableNetworkId house_id; DB::BindableLong account_num_lots; DB::BindableBool account_is_outcast; diff --git a/game/server/application/SwgDatabaseServer/src/shared/tasks/TaskRestoreCharacter.h b/game/server/application/SwgDatabaseServer/src/shared/tasks/TaskRestoreCharacter.h index f48e415a..2e043f3d 100755 --- a/game/server/application/SwgDatabaseServer/src/shared/tasks/TaskRestoreCharacter.h +++ b/game/server/application/SwgDatabaseServer/src/shared/tasks/TaskRestoreCharacter.h @@ -45,7 +45,7 @@ class TaskRestoreCharacter:public DB::TaskRequest //output: DB::BindableLong result; DB::BindableString<127> character_name; - DB::BindableInt64 account; + DB::BindableLong account; DB::BindableLong template_id; private: diff --git a/game/server/application/SwgGameServer/src/linux/SwgGameServer.profdata b/game/server/application/SwgGameServer/src/linux/SwgGameServer.profdata index 362d29a9..965bbad9 100644 Binary files a/game/server/application/SwgGameServer/src/linux/SwgGameServer.profdata and b/game/server/application/SwgGameServer/src/linux/SwgGameServer.profdata differ diff --git a/game/server/application/SwgGameServer/src/linux/main.cpp b/game/server/application/SwgGameServer/src/linux/main.cpp index 9fcbfb4a..9fd7df90 100755 --- a/game/server/application/SwgGameServer/src/linux/main.cpp +++ b/game/server/application/SwgGameServer/src/linux/main.cpp @@ -1,3 +1,5 @@ +#include + #include "FirstSwgGameServer.h" #include "serverGame/GameServer.h" @@ -32,16 +34,30 @@ #include "swgSharedNetworkMessages/SetupSwgSharedNetworkMessages.h" #include "swgServerNetworkMessages/SetupSwgServerNetworkMessages.h" -#ifndef STELLA_INTERNAL -#include "webAPIHeartbeat.h" +#ifdef ENABLE_PROFILING +extern "C" int __llvm_profile_write_file(void); #endif + + +inline void signalHandler(int s){ + printf("LoginServer terminating, signal %d\n",s); + +#ifdef ENABLE_PROFILING + __llvm_profile_write_file(); +#endif + + exit(0); +} + // ====================================================================== int main(int argc, char ** argv) { -#ifndef STELLA_INTERNAL - StellaBellum::webAPIHeartbeat(); -#endif + struct sigaction sigIntHandler; + sigIntHandler.sa_handler = signalHandler; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + sigaction(SIGINT, &sigIntHandler, NULL); SetupSharedThread::install(); SetupSharedDebug::install(1024); @@ -143,9 +159,9 @@ int main(int argc, char ** argv) SetupSharedThread::remove (); #ifdef ENABLE_PROFILING + __llvm_profile_write_file(); exit(0); #endif - return 0; }