From 9ecd34c0ab1fb4675a8bafc126161ce6ce1c3706 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Tue, 21 Jan 2014 10:31:25 -0700 Subject: [PATCH] Added TemplateCompiler project and sharedTemplate/sharedTemplateDefinition libraries --- engine/shared/CMakeLists.txt | 1 + engine/shared/application/CMakeLists.txt | 2 + .../TemplateCompiler/CMakeLists.txt | 6 + .../TemplateCompiler/src/CMakeLists.txt | 73 + .../src/linux/FirstTemplateCompiler.cpp | 1 + .../src/linux/FirstTemplateCompiler.h | 9 + .../src/shared/TemplateCompiler.cpp | 634 +++ .../src/win32/FirstTemplateCompiler.cpp | 1 + .../src/win32/FirstTemplateCompiler.h | 8 + engine/shared/library/CMakeLists.txt | 2 + .../sharedFoundation/src/CMakeLists.txt | 4 + .../library/sharedTemplate/CMakeLists.txt | 7 + .../ClientTerrainSurfaceObjectTemplate.h | 2 + .../sharedTemplate/FirstSharedTemplate.h | 2 + .../sharedTemplate/ServerArmorTemplate.h | 1 + .../ServerBattlefieldMarkerObjectTemplate.h | 1 + .../ServerBuildingObjectTemplate.h | 1 + .../sharedTemplate/ServerCellObjectTemplate.h | 1 + .../sharedTemplate/ServerCityObjectTemplate.h | 2 + ...ServerConstructionContractObjectTemplate.h | 1 + .../ServerCreatureObjectTemplate.h | 1 + .../ServerDraftSchematicObjectTemplate.h | 1 + .../ServerFactoryObjectTemplate.h | 1 + .../ServerGroupObjectTemplate.h | 1 + .../ServerGuildObjectTemplate.h | 1 + ...erverHarvesterInstallationObjectTemplate.h | 1 + .../ServerInstallationObjectTemplate.h | 1 + .../ServerIntangibleObjectTemplate.h | 1 + .../ServerJediManagerObjectTemplate.h | 1 + ...verManufactureInstallationObjectTemplate.h | 1 + ...ServerManufactureSchematicObjectTemplate.h | 1 + .../ServerMissionObjectTemplate.h | 1 + .../sharedTemplate/ServerObjectTemplate.h | 1 + .../ServerPlanetObjectTemplate.h | 1 + .../ServerPlayerObjectTemplate.h | 1 + .../ServerPlayerQuestObjectTempate.h | 1 + .../ServerResourceClassObjectTemplate.h | 1 + .../ServerResourceContainerObjectTemplate.h | 1 + .../ServerResourcePoolObjectTemplate.h | 1 + .../ServerResourceTypeObjectTemplate.h | 1 + .../sharedTemplate/ServerShipObjectTemplate.h | 2 + .../ServerStaticObjectTemplate.h | 1 + .../ServerTangibleObjectTemplate.h | 1 + .../ServerTerrainSurfaceObjectTemplate.h | 1 + .../ServerTokenObjectTemplate.h | 1 + .../sharedTemplate/ServerUberObjectTemplate.h | 1 + .../ServerUniverseObjectTemplate.h | 1 + .../ServerVehicleObjectTemplate.h | 1 + .../ServerWaypointObjectTemplate.h | 1 + .../ServerWeaponObjectTemplate.h | 1 + .../ServerXpManagerObjectTemplate.h | 1 + .../sharedTemplate/SetupSharedTemplate.h | 2 + .../SharedBattlefieldMarkerObjectTemplate.h | 1 + .../SharedBuildingObjectTemplate.h | 1 + .../sharedTemplate/SharedCellObjectTemplate.h | 1 + ...SharedConstructionContractObjectTemplate.h | 1 + .../SharedCreatureObjectTemplate.h | 1 + .../SharedDraftSchematicObjectTemplate.h | 1 + .../SharedFactoryObjectTemplate.h | 1 + .../SharedGroupObjectTemplate.h | 1 + .../SharedGuildObjectTemplate.h | 1 + .../SharedInstallationObjectTemplate.h | 1 + .../SharedIntangibleObjectTemplate.h | 1 + .../SharedJediManagerObjectTemplate.h | 1 + ...SharedManufactureSchematicObjectTemplate.h | 1 + .../SharedMissionObjectTemplate.h | 1 + .../sharedTemplate/SharedObjectTemplate.h | 1 + .../SharedPlayerObjectTemplate.h | 1 + .../SharedPlayerQuestObjectTemplate.h | 1 + .../SharedResourceContainerObjectTemplate.h | 1 + .../sharedTemplate/SharedShipObjectTemplate.h | 2 + .../SharedStaticObjectTemplate.h | 1 + .../SharedTangibleObjectTemplate.h | 1 + .../SharedTerrainSurfaceObjectTemplate.h | 1 + .../SharedTokenObjectTemplate.h | 1 + .../SharedUniverseObjectTemplate.h | 1 + .../SharedVehicleObjectTemplate.h | 1 + .../SharedWaypointObjectTemplate.h | 1 + .../SharedWeaponObjectTemplate.h | 1 + .../library/sharedTemplate/src/CMakeLists.txt | 161 + .../src/shared/core/FirstSharedTemplate.h | 10 + .../src/shared/core/SetupSharedTemplate.cpp | 148 + .../src/shared/core/SetupSharedTemplate.h | 19 + .../shared/template/ServerArmorTemplate.cpp | 697 +++ .../src/shared/template/ServerArmorTemplate.h | 182 + .../ServerBattlefieldMarkerObjectTemplate.cpp | 266 + .../ServerBattlefieldMarkerObjectTemplate.h | 88 + .../template/ServerBuildingObjectTemplate.cpp | 318 ++ .../template/ServerBuildingObjectTemplate.h | 90 + .../template/ServerCellObjectTemplate.cpp | 266 + .../template/ServerCellObjectTemplate.h | 88 + .../template/ServerCityObjectTemplate.cpp | 266 + .../template/ServerCityObjectTemplate.h | 88 + ...rverConstructionContractObjectTemplate.cpp | 266 + ...ServerConstructionContractObjectTemplate.h | 88 + .../template/ServerCreatureObjectTemplate.cpp | 759 +++ .../template/ServerCreatureObjectTemplate.h | 122 + .../ServerDraftSchematicObjectTemplate.cpp | 1018 ++++ .../ServerDraftSchematicObjectTemplate.h | 170 + .../template/ServerFactoryObjectTemplate.cpp | 266 + .../template/ServerFactoryObjectTemplate.h | 88 + .../template/ServerGroupObjectTemplate.cpp | 266 + .../template/ServerGroupObjectTemplate.h | 88 + .../template/ServerGuildObjectTemplate.cpp | 266 + .../template/ServerGuildObjectTemplate.h | 88 + ...verHarvesterInstallationObjectTemplate.cpp | 362 ++ ...erverHarvesterInstallationObjectTemplate.h | 92 + .../ServerInstallationObjectTemplate.cpp | 266 + .../ServerInstallationObjectTemplate.h | 88 + .../ServerIntangibleObjectTemplate.cpp | 1080 ++++ .../template/ServerIntangibleObjectTemplate.h | 279 ++ .../ServerJediManagerObjectTemplate.cpp | 266 + .../ServerJediManagerObjectTemplate.h | 88 + ...rManufactureInstallationObjectTemplate.cpp | 266 + ...verManufactureInstallationObjectTemplate.h | 88 + ...rverManufactureSchematicObjectTemplate.cpp | 713 +++ ...ServerManufactureSchematicObjectTemplate.h | 153 + .../template/ServerMissionObjectTemplate.cpp | 266 + .../template/ServerMissionObjectTemplate.h | 88 + .../shared/template/ServerObjectTemplate.cpp | 1981 ++++++++ .../shared/template/ServerObjectTemplate.h | 574 +++ .../template/ServerPlanetObjectTemplate.cpp | 294 ++ .../template/ServerPlanetObjectTemplate.h | 89 + .../template/ServerPlayerObjectTemplate.cpp | 266 + .../template/ServerPlayerObjectTemplate.h | 88 + .../ServerPlayerQuestObjectTemplate.cpp | 266 + .../ServerPlayerQuestObjectTemplate.h | 88 + .../ServerResourceClassObjectTemplate.cpp | 384 ++ .../ServerResourceClassObjectTemplate.h | 93 + .../ServerResourceContainerObjectTemplate.cpp | 294 ++ .../ServerResourceContainerObjectTemplate.h | 89 + .../ServerResourcePoolObjectTemplate.cpp | 316 ++ .../ServerResourcePoolObjectTemplate.h | 90 + .../ServerResourceTypeObjectTemplate.cpp | 294 ++ .../ServerResourceTypeObjectTemplate.h | 89 + .../template/ServerShipObjectTemplate.cpp | 294 ++ .../template/ServerShipObjectTemplate.h | 89 + .../template/ServerStaticObjectTemplate.cpp | 294 ++ .../template/ServerStaticObjectTemplate.h | 89 + .../template/ServerTangibleObjectTemplate.cpp | 505 ++ .../template/ServerTangibleObjectTemplate.h | 139 + .../template/ServerTokenObjectTemplate.cpp | 266 + .../template/ServerTokenObjectTemplate.h | 88 + .../template/ServerUberObjectTemplate.cpp | 3678 ++++++++++++++ .../template/ServerUberObjectTemplate.h | 311 ++ .../template/ServerUniverseObjectTemplate.cpp | 266 + .../template/ServerUniverseObjectTemplate.h | 88 + .../template/ServerVehicleObjectTemplate.cpp | 362 ++ .../template/ServerVehicleObjectTemplate.h | 92 + .../template/ServerWaypointObjectTemplate.cpp | 266 + .../template/ServerWaypointObjectTemplate.h | 88 + .../template/ServerWeaponObjectTemplate.cpp | 604 +++ .../template/ServerWeaponObjectTemplate.h | 137 + .../ServerXpManagerObjectTemplate.cpp | 266 + .../template/ServerXpManagerObjectTemplate.h | 88 + .../SharedBattlefieldMarkerObjectTemplate.cpp | 318 ++ .../SharedBattlefieldMarkerObjectTemplate.h | 90 + .../template/SharedBuildingObjectTemplate.cpp | 316 ++ .../template/SharedBuildingObjectTemplate.h | 90 + .../template/SharedCellObjectTemplate.cpp | 266 + .../template/SharedCellObjectTemplate.h | 88 + ...aredConstructionContractObjectTemplate.cpp | 266 + ...SharedConstructionContractObjectTemplate.h | 88 + .../template/SharedCreatureObjectTemplate.cpp | 838 ++++ .../template/SharedCreatureObjectTemplate.h | 420 ++ .../SharedDraftSchematicObjectTemplate.cpp | 906 ++++ .../SharedDraftSchematicObjectTemplate.h | 238 + .../template/SharedFactoryObjectTemplate.cpp | 266 + .../template/SharedFactoryObjectTemplate.h | 88 + .../template/SharedGroupObjectTemplate.cpp | 266 + .../template/SharedGroupObjectTemplate.h | 88 + .../template/SharedGuildObjectTemplate.cpp | 266 + .../template/SharedGuildObjectTemplate.h | 88 + .../SharedInstallationObjectTemplate.cpp | 266 + .../SharedInstallationObjectTemplate.h | 88 + .../SharedIntangibleObjectTemplate.cpp | 266 + .../template/SharedIntangibleObjectTemplate.h | 88 + .../SharedJediManagerObjectTemplate.cpp | 266 + .../SharedJediManagerObjectTemplate.h | 88 + ...aredManufactureSchematicObjectTemplate.cpp | 266 + ...SharedManufactureSchematicObjectTemplate.h | 88 + .../template/SharedMissionObjectTemplate.cpp | 266 + .../template/SharedMissionObjectTemplate.h | 88 + .../shared/template/SharedObjectTemplate.cpp | 764 +++ .../shared/template/SharedObjectTemplate.h | 397 ++ .../template/SharedPlayerObjectTemplate.cpp | 266 + .../template/SharedPlayerObjectTemplate.h | 88 + .../SharedPlayerQuestObjectTemplate.cpp | 267 + .../SharedPlayerQuestObjectTemplate.h | 88 + .../SharedResourceContainerObjectTemplate.cpp | 266 + .../SharedResourceContainerObjectTemplate.h | 88 + .../template/SharedShipObjectTemplate.cpp | 362 ++ .../template/SharedShipObjectTemplate.h | 92 + .../template/SharedStaticObjectTemplate.cpp | 266 + .../template/SharedStaticObjectTemplate.h | 88 + .../template/SharedTangibleObjectTemplate.cpp | 1740 +++++++ .../template/SharedTangibleObjectTemplate.h | 342 ++ .../SharedTerrainSurfaceObjectTemplate.cpp | 318 ++ .../SharedTerrainSurfaceObjectTemplate.h | 90 + .../template/SharedTokenObjectTemplate.cpp | 266 + .../template/SharedTokenObjectTemplate.h | 88 + .../template/SharedUniverseObjectTemplate.cpp | 266 + .../template/SharedUniverseObjectTemplate.h | 88 + .../template/SharedVehicleObjectTemplate.cpp | 445 ++ .../template/SharedVehicleObjectTemplate.h | 106 + .../template/SharedWaypointObjectTemplate.cpp | 266 + .../template/SharedWaypointObjectTemplate.h | 88 + .../template/SharedWeaponObjectTemplate.cpp | 340 ++ .../template/SharedWeaponObjectTemplate.h | 101 + .../src/win32/FirstSharedTemplate.cpp | 1 + .../sharedTemplateDefinition/CMakeLists.txt | 7 + .../CompilerDynamicVariableParamData.h | 2 + .../CompilerIntegerParam.h | 2 + .../public/sharedTemplateDefinition/File.h | 2 + .../sharedTemplateDefinition/Filename.h | 1 + .../FirstSharedTemplateDefinition.h | 2 + .../sharedTemplateDefinition/ObjectTemplate.h | 2 + .../sharedTemplateDefinition/TemplateData.h | 2 + .../TemplateDataIterator.h | 1 + .../TemplateDefinitionFile.h | 2 + .../TemplateGlobals.h | 2 + .../public/sharedTemplateDefinition/TpfFile.h | 2 + .../sharedTemplateDefinition/TpfTemplate.h | 2 + .../src/CMakeLists.txt | 57 + .../linux/FirstSharedTemplateDefinition.cpp | 1 + .../core/CompilerDynamicVariableParamData.cpp | 38 + .../core/CompilerDynamicVariableParamData.h | 28 + .../src/shared/core/CompilerIntegerParam.cpp | 19 + .../src/shared/core/CompilerIntegerParam.h | 50 + .../src/shared/core/File.cpp | 188 + .../src/shared/core/File.h | 144 + .../src/shared/core/Filename.cpp | 392 ++ .../src/shared/core/Filename.h | 121 + .../core/FirstSharedTemplateDefinition.h | 10 + .../src/shared/core/ObjectTemplate.cpp | 86 + .../src/shared/core/ObjectTemplate.h | 132 + .../src/shared/core/TemplateData.cpp | 4429 +++++++++++++++++ .../src/shared/core/TemplateData.h | 247 + .../src/shared/core/TemplateDataIterator.cpp | 176 + .../src/shared/core/TemplateDataIterator.h | 79 + .../shared/core/TemplateDefinitionFile.cpp | 631 +++ .../src/shared/core/TemplateDefinitionFile.h | 159 + .../src/shared/core/TemplateGlobals.cpp | 312 ++ .../src/shared/core/TemplateGlobals.h | 161 + .../src/shared/core/TpfFile.cpp | 2514 ++++++++++ .../src/shared/core/TpfFile.h | 224 + .../src/shared/core/TpfTemplate.cpp | 442 ++ .../src/shared/core/TpfTemplate.h | 108 + .../win32/FirstSharedTemplateDefinition.cpp | 1 + 249 files changed, 49504 insertions(+) create mode 100644 engine/shared/application/CMakeLists.txt create mode 100644 engine/shared/application/TemplateCompiler/CMakeLists.txt create mode 100644 engine/shared/application/TemplateCompiler/src/CMakeLists.txt create mode 100644 engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.cpp create mode 100644 engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.h create mode 100644 engine/shared/application/TemplateCompiler/src/shared/TemplateCompiler.cpp create mode 100644 engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.cpp create mode 100644 engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.h create mode 100644 engine/shared/library/sharedTemplate/CMakeLists.txt create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ClientTerrainSurfaceObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/FirstSharedTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerArmorTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBattlefieldMarkerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBuildingObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCellObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCityObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerConstructionContractObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCreatureObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerDraftSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerFactoryObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGroupObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGuildObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerHarvesterInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerIntangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerJediManagerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerMissionObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlanetObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerQuestObjectTempate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceClassObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceContainerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourcePoolObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceTypeObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerShipObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerStaticObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTerrainSurfaceObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTokenObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUberObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUniverseObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerVehicleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWaypointObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWeaponObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerXpManagerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SetupSharedTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBattlefieldMarkerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBuildingObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCellObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedConstructionContractObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCreatureObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedDraftSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedFactoryObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGroupObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGuildObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedIntangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedJediManagerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedManufactureSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedMissionObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerQuestObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedResourceContainerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedShipObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedStaticObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTerrainSurfaceObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTokenObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedUniverseObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedVehicleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWaypointObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWeaponObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/CMakeLists.txt create mode 100644 engine/shared/library/sharedTemplate/src/shared/core/FirstSharedTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplate/src/win32/FirstSharedTemplate.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/CMakeLists.txt create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerDynamicVariableParamData.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerIntegerParam.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/File.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/Filename.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/FirstSharedTemplateDefinition.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/ObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateData.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDataIterator.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDefinitionFile.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateGlobals.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfFile.h create mode 100644 engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfTemplate.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/CMakeLists.txt create mode 100644 engine/shared/library/sharedTemplateDefinition/src/linux/FirstSharedTemplateDefinition.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/File.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/File.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/FirstSharedTemplateDefinition.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.cpp create mode 100644 engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.h create mode 100644 engine/shared/library/sharedTemplateDefinition/src/win32/FirstSharedTemplateDefinition.cpp diff --git a/engine/shared/CMakeLists.txt b/engine/shared/CMakeLists.txt index 64660762..5440fbac 100644 --- a/engine/shared/CMakeLists.txt +++ b/engine/shared/CMakeLists.txt @@ -1,2 +1,3 @@ +add_subdirectory(application) add_subdirectory(library) diff --git a/engine/shared/application/CMakeLists.txt b/engine/shared/application/CMakeLists.txt new file mode 100644 index 00000000..f5b325a1 --- /dev/null +++ b/engine/shared/application/CMakeLists.txt @@ -0,0 +1,2 @@ + +add_subdirectory(TemplateCompiler) diff --git a/engine/shared/application/TemplateCompiler/CMakeLists.txt b/engine/shared/application/TemplateCompiler/CMakeLists.txt new file mode 100644 index 00000000..ac003916 --- /dev/null +++ b/engine/shared/application/TemplateCompiler/CMakeLists.txt @@ -0,0 +1,6 @@ + +cmake_minimum_required(VERSION 2.8) + +project(TemplateCompiler) + +add_subdirectory(src) diff --git a/engine/shared/application/TemplateCompiler/src/CMakeLists.txt b/engine/shared/application/TemplateCompiler/src/CMakeLists.txt new file mode 100644 index 00000000..212bd6a3 --- /dev/null +++ b/engine/shared/application/TemplateCompiler/src/CMakeLists.txt @@ -0,0 +1,73 @@ + +set(SHARED_SOURCES + shared/TemplateCompiler.cpp +) + +if(WIN32) + set(PLATFORM_SOURCES + win32/FirstTemplateCompiler.cpp + win32/FirstTemplateCompiler.cpp + ) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/win32) +else() + set(PLATFORM_SOURCES + linux/FirstTemplateCompiler.cpp + linux/FirstTemplateCompiler.cpp + ) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/linux) +endif() + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR}/shared + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedCompression/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedDebug/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFile/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFoundation/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFoundationTypes/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedMemoryManager/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedObject/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedRandom/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedRegex/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedTemplate/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedTemplateDefinition/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedThread/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedUtility/include/public + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/archive/include + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/localization/include + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/unicode/include +) + +add_executable(TemplateCompiler + ${SHARED_SOURCES} + ${PLATFORM_SOURCES} +) + +target_link_libraries(TemplateCompiler + sharedCompression + sharedDebug + sharedFile + sharedFoundation + #sharedLog + #sharedMath + sharedMemoryManager + #sharedMessageDispatch + #sharedNetwork + #sharedNetworkMessages + sharedObject + sharedRandom + sharedRegex + sharedTemplate + sharedTemplateDefinition + sharedThread + sharedUtility + #serverNetworkMessages + #serverUtility + archive + #fileInterface + localization + localizationArchive + unicode + unicodeArchive + ${STLPORT_LIBRARIES} + ${CMAKE_DL_LIBS} +) diff --git a/engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.cpp b/engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.cpp new file mode 100644 index 00000000..ef9c16dc --- /dev/null +++ b/engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.cpp @@ -0,0 +1 @@ +#include "FirstTemplateCompiler.h" diff --git a/engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.h b/engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.h new file mode 100644 index 00000000..d0650105 --- /dev/null +++ b/engine/shared/application/TemplateCompiler/src/linux/FirstTemplateCompiler.h @@ -0,0 +1,9 @@ +#include "sharedFoundationTypes/FoundationTypes.h" +#include "sharedDebug/FirstSharedDebug.h" +#include "sharedFoundation/FirstSharedFoundation.h" +#include +#include +#include +#include +#include + diff --git a/engine/shared/application/TemplateCompiler/src/shared/TemplateCompiler.cpp b/engine/shared/application/TemplateCompiler/src/shared/TemplateCompiler.cpp new file mode 100644 index 00000000..8611bb0b --- /dev/null +++ b/engine/shared/application/TemplateCompiler/src/shared/TemplateCompiler.cpp @@ -0,0 +1,634 @@ +//======================================================================== +// +// TemplateCompiler.cpp - entry point for templateCompiler +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "FirstTemplateCompiler.h" +#include "sharedCompression/SetupSharedCompression.h" +#include "sharedDebug/SetupSharedDebug.h" +#include "sharedFile/SetupSharedFile.h" +#include "sharedFoundation/PerThreadData.h" +#include "sharedFoundation/SetupSharedFoundation.h" +#include "sharedObject/SetupSharedObject.h" +#include "sharedRandom/SetupSharedRandom.h" +#include "sharedRegex/SetupSharedRegex.h" +#include "sharedThread/SetupSharedThread.h" +#include "sharedUtility/TemplateParameter.h" + +#include "sharedTemplateDefinition/File.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include "sharedTemplateDefinition/TemplateDefinitionFile.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "sharedTemplateDefinition/TpfFile.h" + +#include "sharedTemplate/SetupSharedTemplate.h" + +#pragma warning (disable:4100) // unreferenced formal parameters abound in the perforce clientAPI +//#include "clientapi.h" +#pragma warning (default:4100) + +#include + + +//============================================================================== +// subclass Perforce API class ClientUser in order to trap errors + +static const int SUBMIT_NO_FILE_ERR = 17; // need to add file before submitting + +//class MyPerforceUser : public ClientUser +//{ +//public: +// MyPerforceUser(void) : ClientUser(), m_errorOccurred(false) {} +// virtual ~MyPerforceUser() {} +// virtual void HandleError( Error *err ) +// { +// if (err != NULL && err->Test()) +// { +// m_errorOccurred = true; +// m_lastError = err->GetGeneric(); +// // test for filtered errors +// for (size_t i = 0; i < m_filteredErrors.size(); ++i) +// { +// if (m_lastError == m_filteredErrors[i]) +// return; +// } +// } +// ClientUser::HandleError(err); +// } +// +// bool errorOccurred(void) const +// { +// return m_errorOccurred; +// } +// +// int getLastError(void) const +// { +// return m_lastError; +// } +// +// void clearLastError(void) +// { +// m_errorOccurred = false; +// m_lastError = 0; +// } +// +// void addFilteredError(int error) +// { +// m_filteredErrors.push_back(error); +// } +// +// void clearFilteredErrors(void) +// { +// m_filteredErrors.clear(); +// } +// +//private: +// bool m_errorOccurred; +// int m_lastError; +// std::vector m_filteredErrors; +//}; + +//============================================================================== +// subclass of the PerforceAPI StrBuf class, to workaround a bug +// in the destructor. We can't fix the bug because it's an external library +//class StrBufFixed : public StrBuf +//{ +//public: +// ~StrBufFixed() +// { +// delete buffer; +// StringInit(); +// } +//}; + + + +//============================================================================== +// functions + +/** + * Appends an extension to the end of a filename. + * + * @param filename the failename to append to + * @param extension the extension to extend + */ +void appendExtension(std::string & filename, const char *extension) +{ + // see if the filename already has the extension + std::string::size_type matchPos = filename.rfind(extension); + if (matchPos != std::string::npos && filename[matchPos - 1] == '.') + return; + filename.append("."); + filename.append(extension); +} // appendExtension + +/** + * Creates a default template file from a template definition file. + * + * @param definitionFp template definition file to read from + * @param templateFile template file to write to + * + * @return 0 on success, error code on fail + */ +int generateTemplate(File &definitionFp, File &templateFp) +{ + // parse the template definition file + TemplateDefinitionFile TemplateDefinitionFile; + int result = TemplateDefinitionFile.parse(definitionFp); + if (result != 0) + return result; + + // get the latest version + const TemplateData *currentTemplate = TemplateDefinitionFile.getTemplateData( + TemplateDefinitionFile.getHighestVersion()); + NOT_NULL(currentTemplate); + + templateFp.print("@class %s %d\n\n", TemplateDefinitionFile.getTemplateFilename().c_str(), + TemplateDefinitionFile.getHighestVersion()); + + currentTemplate->writeDefaultTemplateFile(templateFp); + + // we now need to move down the template definition heiarchy and write the + // parameters of the base class + Filename basename(NULL, definitionFp.getFilename().getPath().c_str(), + TemplateDefinitionFile.getBaseFilename().c_str(), TEMPLATE_DEFINITION_EXTENSION); + if (basename.getName().size() == 0) + return 0; + +// basename.setExtension(TEMPLATE_DEFINITION_EXTENSION); + File baseFp; + if (!baseFp.open(basename, "rt")) + { + fprintf(stderr, "Cannot open template definition file %s\n", + baseFp.getFilename().getFullFilename().c_str()); + return -1; + } + + templateFp.print("\n\n"); + + result = generateTemplate(baseFp, templateFp); + return result; +} // generateTemplate(File &, File &) + +/** + * Creates a default template file from a template definition file. + * + * @param definitionFile the filename of the definition + * @param templateFile the filename of the template + * + * @return 0 on success, error code on fail + */ +int generateTemplate(const char *definitionFile, const char *templateFile) +{ + // check filename extensions + Filename defFile(NULL, NULL, definitionFile, TEMPLATE_DEFINITION_EXTENSION); + Filename temFile(NULL, NULL, templateFile, TEMPLATE_EXTENSION); + + File definitionFp; + int i = 0; + while (!definitionFp.exists(defFile) && i < MAX_DIRECTORY_DEPTH) + { + defFile.appendPath(NEXT_HIGHER_PATH); + ++i; + } + if (i == MAX_DIRECTORY_DEPTH) + { + fprintf(stderr, "Cannot find template definition file %s\n", + defFile.getName().c_str()); + return -1; + } + if (!definitionFp.open(defFile, "rt")) + { + fprintf(stderr, "Cannot open template definition file %s\n", + defFile.getName().c_str()); + return -1; + } + + File templateFp; + if (!templateFp.open(temFile, "wt")) + { + fprintf(stderr, "Cannot open template file %s\n", + templateFp.getFilename().getFullFilename().c_str()); + return -1; + } + + int result = generateTemplate(definitionFp, templateFp); + return result; +} // generateTemplate(const char *, const char *) + +/** + * Derives a default template file from another template file. + * + * @param baseFile the filename of the source template + * @param templateFile the filename of the destination template + * + * @return 0 on success, error code on fail + */ +int deriveTemplate(const char *baseFile, const char *templateFile) +{ + // check filename extensions + Filename basFile(NULL, NULL, baseFile, TEMPLATE_EXTENSION); + Filename temFile(NULL, NULL, templateFile, TEMPLATE_EXTENSION); + + File basFp; + if (!basFp.open(basFile, "rt")) + { + fprintf(stderr, "Cannot open base template file %s\n", + basFp.getFilename().getFullFilename().c_str()); + return -1; + } + File temFp; + if (!temFp.open(temFile, "wt")) + { + fprintf(stderr, "Cannot open derived template file %s\n", + temFp.getFilename().getFullFilename().c_str()); + return -1; + } + + return 0; +} // deriveTemplate + +/** + * Compiles a template file into an iff file. + * + * @param filename the filename of the template + * + * @return 0 on success, error code on fail + */ +int compileTemplate(const char *filename) +{ +TpfFile templateFile; + + Filename templateFileName(NULL, NULL, filename, TEMPLATE_EXTENSION); + return templateFile.makeIffFiles(templateFileName); +} // compileTemplate + +/** + * Tests to see if a template file is valid. Does not generate an iff file. + * + * @param filename the filename of the template + * + * @return 0 on success, error code on fail + */ +int verifyTemplate(const char *filename) +{ +TpfFile templateFile; + + printf("Verifying %s: ", filename); + Filename templateFileName(NULL, NULL, filename, TEMPLATE_EXTENSION); + int result = templateFile.loadTemplate(templateFileName); + if (result == 0) + printf("file ok"); + printf("\n"); + return result; +} // verifyTemplate + +/** + * Adds or removes parameters from a template based on the current template + * definition. + * + * @param filename the filename of the template + * + * @return 0 on success, error code on fail + * +int updateTemplate(const char *filename) +{ +TpfFile templateFile; + + Filename templateFileName(NULL, NULL, filename, TEMPLATE_EXTENSION); + return templateFile.updateTemplate(templateFileName); +} // updateTemplate +*/ +/** + * Checks out a template file and the iff files associated with it from Perforce. + * + * @param filename the filename of the template + * + * @return 0 on success, error code on fail + */ +//int checkOut(const char *filename) +//{ +//MyPerforceUser ui; +//ClientApi client; +//Error e; +// +// // check filename extensions +// Filename templateFileName(NULL, NULL, filename, TEMPLATE_EXTENSION); +// Filename iffFileName = templateFileName; +// iffFileName.setExtension(IFF_EXTENSION); +// +// // Connect to Perforce server +// client.Init( &e ); +// if (e.Test()) +// { +// StrBufFixed msg; +// e.Fmt(&msg); +// fprintf(stderr, msg.Text()); +// return -1; +// } +// +// // check out the template file +// const char * commands[2]; +// commands[0] = "edit"; +// commands[1] = templateFileName; +// client.SetArgv( 1, const_cast(&commands[1]) ); +// client.Run( commands[0], &ui ); +// if (ui.errorOccurred()) +// return -1; +// +// // find the client and server paths +// TpfFile templateFile; +// IGNORE_RETURN(templateFile.loadTemplate(templateFileName)); +// +// // check out the client template iff file +// Filename iffName(NULL, templateFile.getIffPath().c_str(), iffFileName, IFF_EXTENSION); +// commands[1] = iffName; +// client.SetArgv( 1, const_cast(&commands[1]) ); +// client.Run( commands[0], &ui ); +// if (ui.errorOccurred()) +// return -1; +// +// // Close connection +// return client.Final( &e ); +//} // checkOut + +/** + * Checks in a template file and the iff files associated with it to Perforce. + * + * @param filename the filename of the template + * + * @return 0 on success, error code on fail + */ +//int checkIn(const char *filename) +//{ +//MyPerforceUser ui; +//ClientApi client; +//Error e; +// +// // check filename extensions +// Filename templateFileName(NULL, NULL, filename, TEMPLATE_EXTENSION); +// Filename iffFileName = templateFileName; +// iffFileName.setExtension(IFF_EXTENSION); +// +// // find the client and server paths +// TpfFile templateFile; +// int result = templateFile.loadTemplate(templateFileName); +// if (result != 0) +// { +// // don't allow check-in if there are errors +// return result; +// } +// +// // Connect to Perforce server +// client.Init( &e ); +// if (e.Test()) +// { +// StrBufFixed msg; +// e.Fmt(&msg); +// fprintf(stderr, msg.Text()); +// return -1; +// } +// +// // try to submit the files +// const char * commands[4]; +// char param1[256]; +// for (;;) +// { +// sprintf(param1, "//depot/.../%s.*", templateFileName.getName().c_str()); +// commands[0] = "submit"; +// commands[1] = param1; +// +// // don't report an error if the files need to be added before submitting +// ui.addFilteredError(SUBMIT_NO_FILE_ERR); +// client.SetArgv( 1, const_cast(&commands[1]) ); +// client.Run( commands[0], &ui ); +// if (!ui.errorOccurred()) +// break; +// if (ui.getLastError() != SUBMIT_NO_FILE_ERR) +// return -1; +// ui.clearLastError(); +// ui.clearFilteredErrors(); +// +// // we need to add the files to Perforce before submitting +// commands[0] = "add"; +// +// // add the template file +// commands[1] = templateFileName; +// client.SetArgv( 1, const_cast(&commands[1]) ); +// client.Run( commands[0], &ui ); +// if (ui.errorOccurred()) +// return -1; +// +// // add the client iff file +// Filename iffName(NULL, templateFile.getIffPath().c_str(), iffFileName, NULL); +// commands[1] = iffName; +// client.SetArgv( 1, const_cast(&commands[1]) ); +// client.Run( commands[0], &ui ); +// if (ui.errorOccurred()) +// return -1; +// } +// +// // Close connection +// return client.Final( &e ); +//} // checkIn + +/** + * Prints the command syntax to the console. + */ +void printSyntax(void) +{ + printf("TemplateCompiler " __DATE__ " " __TIME__ "\n\n"); + printf("Compiler commands:\n"); + printf("-generate [.tdf] [.tpf]\n"); +// printf("-update [.tpf] [[.tpf] ...]\n"); +// printf("-derive [.tpf] [.tpf]\n"); + printf("-compile [.tpf] [[.tpf] ...]\n"); + printf("-verify [.tpf] [[.tpf] ...]\n"); +// printf("Perforce commands:\n"); +// printf("-edit [.tpf] [[.tpf] ...]\n"); +// printf("-submit [.tpf] [[.tpf] ...]\n"); +} // printSyntax + +/** + * Processes the args sent to main. + */ +int processArgs(int argc, char *argv[ ]) +{ + if (argc < 3) + { + printSyntax(); + return 0; + } + + if (strcmp(argv[1], "-generate") == 0) + { + if (argc != 4) + { + printSyntax(); + return 0; + } + return generateTemplate(argv[2], argv[3]); + } +// else if (strcmp(argv[1], "-update") == 0) +// { +// if (argc < 3) +// { +// printSyntax(); +// return 0; +// } +// for (int i = 2; i < argc; ++i) +// { +// int result = updateTemplate(argv[i]); +// if (result != 0) +// return result; +// } +// } + else if (strcmp(argv[1], "-derive") == 0) + { + if (argc != 4) + { + printSyntax(); + return 0; + } + return deriveTemplate(argv[2], argv[3]); + } + else if (strcmp(argv[1], "-compile") == 0) + { + if (argc < 3) + { + printSyntax(); + return 0; + } + for (int i = 2; i < argc; ++i) + { + int result = compileTemplate(argv[i]); + if (result != 0) + return result; + } + } + else if (strcmp(argv[1], "-compileeditor") == 0) + { + if (argc < 3) + { + printSyntax(); + return 0; + } + for (int i = 2; i < argc; ++i) + { + int result = compileTemplate(argv[i]); + if (result != 0) + return result; + } + + printf ("%s compiled successfully.\n", argv [2]); + } + else if (strcmp(argv[1], "-verify") == 0) + { + if (argc < 3) + { + printSyntax(); + return 0; + } + int result = 0; + for (int i = 2; i < argc; ++i) + { + int tempResult = verifyTemplate(argv[i]); + if (tempResult != 0) + result = tempResult; + } + return result; + } + //else if (strcmp(argv[1], "-edit") == 0) + //{ + // if (argc < 3) + // { + // printSyntax(); + // return 0; + // } + // for (int i = 2; i < argc; ++i) + // { + // int result = checkOut(argv[i]); + // if (result != 0) + // return result; + // } + //} + //else if (strcmp(argv[1], "-submit") == 0) + //{ + // if (argc < 3) + // { + // printSyntax(); + // return 0; + // } + // for (int i = 2; i < argc; ++i) + // { + // int result = checkIn(argv[i]); + // if (result != 0) + // return result; + // } + //} + else + { + printSyntax(); + return 0; + } + + return 0; +} // processArgs + +/** + * Program entry point. + */ +int main(int argc, char *argv[ ]) +{ + SetupSharedThread::install(); + SetupSharedDebug::install(4096); + + { + SetupSharedFoundation::Data data(SetupSharedFoundation::Data::D_console); +#ifdef WIN32 + char buffer[1024]; + GetModuleFileName(GetModuleHandle(NULL), buffer, 1024); + Filename configName; + configName.setName(buffer); + configName.setName("templateCompiler.cfg"); + data.configFile = configName.getFullFilename().c_str(); +#endif + SetupSharedFoundation::install (data); + } + + SetupSharedRegex::install(); + + SetupSharedCompression::install(); + SetupSharedFile::install(false); + + // setup the random number generator + // @todo need a better seed + SetupSharedRandom::install(static_cast(time(NULL))); + + // install templates + SetupSharedTemplate::install(); + +#ifdef WIN32 + // find out what platform we are running on + DWORD version = GetVersion(); + if (version & 0x80000000) + WindowsUnicode = false; + else + WindowsUnicode = true; +#endif + + int result = processArgs(argc, argv); + + // cleanup + SetupSharedFoundation::remove(); + PerThreadData::threadRemove(); + + return result; +} // main + + +// ====================================================================== diff --git a/engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.cpp b/engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.cpp new file mode 100644 index 00000000..ef9c16dc --- /dev/null +++ b/engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.cpp @@ -0,0 +1 @@ +#include "FirstTemplateCompiler.h" diff --git a/engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.h b/engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.h new file mode 100644 index 00000000..355e5538 --- /dev/null +++ b/engine/shared/application/TemplateCompiler/src/win32/FirstTemplateCompiler.h @@ -0,0 +1,8 @@ +#include "sharedFoundationTypes/FoundationTypes.h" +#include "sharedDebug/FirstSharedDebug.h" +#include "sharedFoundation/FirstSharedFoundation.h" +#include +#include +#include +#include +#include \ No newline at end of file diff --git a/engine/shared/library/CMakeLists.txt b/engine/shared/library/CMakeLists.txt index 2c3d1db0..8681a535 100644 --- a/engine/shared/library/CMakeLists.txt +++ b/engine/shared/library/CMakeLists.txt @@ -25,6 +25,8 @@ add_subdirectory(sharedRegex) add_subdirectory(sharedRemoteDebugServer) add_subdirectory(sharedSkillSystem) add_subdirectory(sharedSynchronization) +add_subdirectory(sharedTemplate) +add_subdirectory(sharedTemplateDefinition) add_subdirectory(sharedTerrain) add_subdirectory(sharedThread) add_subdirectory(sharedUtility) diff --git a/engine/shared/library/sharedFoundation/src/CMakeLists.txt b/engine/shared/library/sharedFoundation/src/CMakeLists.txt index 4b125ec5..244b7ec0 100644 --- a/engine/shared/library/sharedFoundation/src/CMakeLists.txt +++ b/engine/shared/library/sharedFoundation/src/CMakeLists.txt @@ -170,4 +170,8 @@ add_library(sharedFoundation STATIC target_link_libraries(sharedFoundation sharedFile archive + localization + localizationArchive + unicode + unicodeArchive ) diff --git a/engine/shared/library/sharedTemplate/CMakeLists.txt b/engine/shared/library/sharedTemplate/CMakeLists.txt new file mode 100644 index 00000000..8323e204 --- /dev/null +++ b/engine/shared/library/sharedTemplate/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 2.8) + +project(sharedTemplate) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/public) + +add_subdirectory(src) diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ClientTerrainSurfaceObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ClientTerrainSurfaceObjectTemplate.h new file mode 100644 index 00000000..a5790374 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ClientTerrainSurfaceObjectTemplate.h @@ -0,0 +1,2 @@ +#error obsolete + diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/FirstSharedTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/FirstSharedTemplate.h new file mode 100644 index 00000000..9b91b949 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/FirstSharedTemplate.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/FirstSharedTemplate.h" + diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerArmorTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerArmorTemplate.h new file mode 100644 index 00000000..38b4e42c --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerArmorTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerArmorTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBattlefieldMarkerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBattlefieldMarkerObjectTemplate.h new file mode 100644 index 00000000..16c79ba0 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBattlefieldMarkerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerBattlefieldMarkerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBuildingObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBuildingObjectTemplate.h new file mode 100644 index 00000000..ba00f070 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerBuildingObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerBuildingObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCellObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCellObjectTemplate.h new file mode 100644 index 00000000..848d79ac --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCellObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerCellObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCityObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCityObjectTemplate.h new file mode 100644 index 00000000..9160e319 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCityObjectTemplate.h @@ -0,0 +1,2 @@ +#include "../../src/shared/template/ServerCityObjectTemplate.h" + diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerConstructionContractObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerConstructionContractObjectTemplate.h new file mode 100644 index 00000000..855a20f1 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerConstructionContractObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerConstructionContractObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCreatureObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCreatureObjectTemplate.h new file mode 100644 index 00000000..8002f417 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerCreatureObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerCreatureObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerDraftSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerDraftSchematicObjectTemplate.h new file mode 100644 index 00000000..434bb457 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerDraftSchematicObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerDraftSchematicObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerFactoryObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerFactoryObjectTemplate.h new file mode 100644 index 00000000..759a8111 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerFactoryObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerFactoryObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGroupObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGroupObjectTemplate.h new file mode 100644 index 00000000..16862e91 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGroupObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerGroupObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGuildObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGuildObjectTemplate.h new file mode 100644 index 00000000..c1b6c7e6 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerGuildObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerGuildObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerHarvesterInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerHarvesterInstallationObjectTemplate.h new file mode 100644 index 00000000..1710a551 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerHarvesterInstallationObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerHarvesterInstallationObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerInstallationObjectTemplate.h new file mode 100644 index 00000000..8ce8f0fd --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerInstallationObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerInstallationObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerIntangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerIntangibleObjectTemplate.h new file mode 100644 index 00000000..af1503f5 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerIntangibleObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerIntangibleObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerJediManagerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerJediManagerObjectTemplate.h new file mode 100644 index 00000000..a865f85e --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerJediManagerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerJediManagerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureInstallationObjectTemplate.h new file mode 100644 index 00000000..d102c753 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureInstallationObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerManufactureInstallationObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureSchematicObjectTemplate.h new file mode 100644 index 00000000..5a212b73 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerManufactureSchematicObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerManufactureSchematicObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerMissionObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerMissionObjectTemplate.h new file mode 100644 index 00000000..a20668bc --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerMissionObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerMissionObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerObjectTemplate.h new file mode 100644 index 00000000..16fd860f --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlanetObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlanetObjectTemplate.h new file mode 100644 index 00000000..e206b6b4 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlanetObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerPlanetObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerObjectTemplate.h new file mode 100644 index 00000000..96a63426 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerPlayerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerQuestObjectTempate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerQuestObjectTempate.h new file mode 100644 index 00000000..1a9ae5c2 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerPlayerQuestObjectTempate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerPlayerQuestObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceClassObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceClassObjectTemplate.h new file mode 100644 index 00000000..69c54a48 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceClassObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerResourceClassObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceContainerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceContainerObjectTemplate.h new file mode 100644 index 00000000..cb216a1b --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceContainerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerResourceContainerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourcePoolObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourcePoolObjectTemplate.h new file mode 100644 index 00000000..91f06e3a --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourcePoolObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerResourcePoolObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceTypeObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceTypeObjectTemplate.h new file mode 100644 index 00000000..ce9f45c8 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerResourceTypeObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerResourceTypeObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerShipObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerShipObjectTemplate.h new file mode 100644 index 00000000..141ee769 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerShipObjectTemplate.h @@ -0,0 +1,2 @@ +#include "../../src/shared/template/ServerShipObjectTemplate.h" + diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerStaticObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerStaticObjectTemplate.h new file mode 100644 index 00000000..f530a96d --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerStaticObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerStaticObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTangibleObjectTemplate.h new file mode 100644 index 00000000..5ca95c84 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTangibleObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerTangibleObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTerrainSurfaceObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTerrainSurfaceObjectTemplate.h new file mode 100644 index 00000000..841ac4c1 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTerrainSurfaceObjectTemplate.h @@ -0,0 +1 @@ +#error obsolete diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTokenObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTokenObjectTemplate.h new file mode 100644 index 00000000..a8510442 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerTokenObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerTokenObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUberObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUberObjectTemplate.h new file mode 100644 index 00000000..e1ca0b61 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUberObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerUberObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUniverseObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUniverseObjectTemplate.h new file mode 100644 index 00000000..cc6e27b7 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerUniverseObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerUniverseObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerVehicleObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerVehicleObjectTemplate.h new file mode 100644 index 00000000..a1bd53f9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerVehicleObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerVehicleObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWaypointObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWaypointObjectTemplate.h new file mode 100644 index 00000000..7975dcaa --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWaypointObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerWaypointObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWeaponObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWeaponObjectTemplate.h new file mode 100644 index 00000000..429f06c7 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerWeaponObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerWeaponObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerXpManagerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerXpManagerObjectTemplate.h new file mode 100644 index 00000000..535f85bf --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/ServerXpManagerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/ServerXpManagerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SetupSharedTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SetupSharedTemplate.h new file mode 100644 index 00000000..2d66ef04 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SetupSharedTemplate.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/SetupSharedTemplate.h" + diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBattlefieldMarkerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBattlefieldMarkerObjectTemplate.h new file mode 100644 index 00000000..5b900e2f --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBattlefieldMarkerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedBattlefieldMarkerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBuildingObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBuildingObjectTemplate.h new file mode 100644 index 00000000..78d91b72 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedBuildingObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedBuildingObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCellObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCellObjectTemplate.h new file mode 100644 index 00000000..6f479a3d --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCellObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedCellObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedConstructionContractObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedConstructionContractObjectTemplate.h new file mode 100644 index 00000000..d01f264a --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedConstructionContractObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedConstructionContractObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCreatureObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCreatureObjectTemplate.h new file mode 100644 index 00000000..300a4670 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedCreatureObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedCreatureObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedDraftSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedDraftSchematicObjectTemplate.h new file mode 100644 index 00000000..01103a36 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedDraftSchematicObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedDraftSchematicObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedFactoryObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedFactoryObjectTemplate.h new file mode 100644 index 00000000..4a40ff67 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedFactoryObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedFactoryObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGroupObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGroupObjectTemplate.h new file mode 100644 index 00000000..131d4a1a --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGroupObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedGroupObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGuildObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGuildObjectTemplate.h new file mode 100644 index 00000000..674be9c9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedGuildObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedGuildObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedInstallationObjectTemplate.h new file mode 100644 index 00000000..42b61727 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedInstallationObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedInstallationObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedIntangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedIntangibleObjectTemplate.h new file mode 100644 index 00000000..855f741e --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedIntangibleObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedIntangibleObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedJediManagerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedJediManagerObjectTemplate.h new file mode 100644 index 00000000..76e51302 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedJediManagerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedJediManagerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedManufactureSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedManufactureSchematicObjectTemplate.h new file mode 100644 index 00000000..3ec8ddff --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedManufactureSchematicObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedManufactureSchematicObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedMissionObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedMissionObjectTemplate.h new file mode 100644 index 00000000..9a29e750 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedMissionObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedMissionObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedObjectTemplate.h new file mode 100644 index 00000000..6dacdf48 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerObjectTemplate.h new file mode 100644 index 00000000..c89845b4 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedPlayerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerQuestObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerQuestObjectTemplate.h new file mode 100644 index 00000000..fb21f878 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedPlayerQuestObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedPlayerQuestObjectTemplate.h" \ No newline at end of file diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedResourceContainerObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedResourceContainerObjectTemplate.h new file mode 100644 index 00000000..5fdc84b5 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedResourceContainerObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedResourceContainerObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedShipObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedShipObjectTemplate.h new file mode 100644 index 00000000..51e651e8 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedShipObjectTemplate.h @@ -0,0 +1,2 @@ +#include "../../src/shared/template/SharedShipObjectTemplate.h" + diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedStaticObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedStaticObjectTemplate.h new file mode 100644 index 00000000..88348ea2 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedStaticObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedStaticObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTangibleObjectTemplate.h new file mode 100644 index 00000000..14b5b623 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTangibleObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedTangibleObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTerrainSurfaceObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTerrainSurfaceObjectTemplate.h new file mode 100644 index 00000000..bc028d93 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTerrainSurfaceObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedTerrainSurfaceObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTokenObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTokenObjectTemplate.h new file mode 100644 index 00000000..f01d94a2 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedTokenObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedTokenObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedUniverseObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedUniverseObjectTemplate.h new file mode 100644 index 00000000..44bbc86f --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedUniverseObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedUniverseObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedVehicleObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedVehicleObjectTemplate.h new file mode 100644 index 00000000..1af53436 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedVehicleObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedVehicleObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWaypointObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWaypointObjectTemplate.h new file mode 100644 index 00000000..752dd7a0 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWaypointObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedWaypointObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWeaponObjectTemplate.h b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWeaponObjectTemplate.h new file mode 100644 index 00000000..85536bd5 --- /dev/null +++ b/engine/shared/library/sharedTemplate/include/public/sharedTemplate/SharedWeaponObjectTemplate.h @@ -0,0 +1 @@ +#include "../../src/shared/template/SharedWeaponObjectTemplate.h" diff --git a/engine/shared/library/sharedTemplate/src/CMakeLists.txt b/engine/shared/library/sharedTemplate/src/CMakeLists.txt new file mode 100644 index 00000000..1bd3b95f --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/CMakeLists.txt @@ -0,0 +1,161 @@ + +set(SHARED_SOURCES + shared/core/FirstSharedTemplate.h + shared/core/SetupSharedTemplate.cpp + shared/core/SetupSharedTemplate.h + + shared/template/ServerArmorTemplate.cpp + shared/template/ServerArmorTemplate.h + shared/template/ServerBattlefieldMarkerObjectTemplate.cpp + shared/template/ServerBattlefieldMarkerObjectTemplate.h + shared/template/ServerBuildingObjectTemplate.cpp + shared/template/ServerBuildingObjectTemplate.h + shared/template/ServerCellObjectTemplate.cpp + shared/template/ServerCellObjectTemplate.h + shared/template/ServerCityObjectTemplate.cpp + shared/template/ServerCityObjectTemplate.h + shared/template/ServerConstructionContractObjectTemplate.cpp + shared/template/ServerConstructionContractObjectTemplate.h + shared/template/ServerCreatureObjectTemplate.cpp + shared/template/ServerCreatureObjectTemplate.h + shared/template/ServerDraftSchematicObjectTemplate.cpp + shared/template/ServerDraftSchematicObjectTemplate.h + shared/template/ServerFactoryObjectTemplate.cpp + shared/template/ServerFactoryObjectTemplate.h + shared/template/ServerGroupObjectTemplate.cpp + shared/template/ServerGroupObjectTemplate.h + shared/template/ServerGuildObjectTemplate.cpp + shared/template/ServerGuildObjectTemplate.h + shared/template/ServerHarvesterInstallationObjectTemplate.cpp + shared/template/ServerHarvesterInstallationObjectTemplate.h + shared/template/ServerInstallationObjectTemplate.cpp + shared/template/ServerInstallationObjectTemplate.h + shared/template/ServerIntangibleObjectTemplate.cpp + shared/template/ServerIntangibleObjectTemplate.h + shared/template/ServerJediManagerObjectTemplate.cpp + shared/template/ServerJediManagerObjectTemplate.h + shared/template/ServerManufactureInstallationObjectTemplate.cpp + shared/template/ServerManufactureInstallationObjectTemplate.h + shared/template/ServerManufactureSchematicObjectTemplate.cpp + shared/template/ServerManufactureSchematicObjectTemplate.h + shared/template/ServerMissionObjectTemplate.cpp + shared/template/ServerMissionObjectTemplate.h + shared/template/ServerObjectTemplate.cpp + shared/template/ServerObjectTemplate.h + shared/template/ServerPlanetObjectTemplate.cpp + shared/template/ServerPlanetObjectTemplate.h + shared/template/ServerPlayerQuestObjectTemplate.cpp + shared/template/ServerPlayerQuestObjectTemplate.h + shared/template/ServerPlayerObjectTemplate.cpp + shared/template/ServerPlayerObjectTemplate.h + shared/template/ServerResourceClassObjectTemplate.cpp + shared/template/ServerResourceClassObjectTemplate.h + shared/template/ServerResourceContainerObjectTemplate.cpp + shared/template/ServerResourceContainerObjectTemplate.h + shared/template/ServerResourcePoolObjectTemplate.cpp + shared/template/ServerResourcePoolObjectTemplate.h + shared/template/ServerResourceTypeObjectTemplate.cpp + shared/template/ServerResourceTypeObjectTemplate.h + shared/template/ServerShipObjectTemplate.cpp + shared/template/ServerShipObjectTemplate.h + shared/template/ServerStaticObjectTemplate.cpp + shared/template/ServerStaticObjectTemplate.h + shared/template/ServerTangibleObjectTemplate.cpp + shared/template/ServerTangibleObjectTemplate.h + shared/template/ServerTokenObjectTemplate.cpp + shared/template/ServerTokenObjectTemplate.h + shared/template/ServerUberObjectTemplate.cpp + shared/template/ServerUberObjectTemplate.h + shared/template/ServerUniverseObjectTemplate.cpp + shared/template/ServerUniverseObjectTemplate.h + shared/template/ServerVehicleObjectTemplate.cpp + shared/template/ServerVehicleObjectTemplate.h + shared/template/ServerWaypointObjectTemplate.cpp + shared/template/ServerWaypointObjectTemplate.h + shared/template/ServerWeaponObjectTemplate.cpp + shared/template/ServerWeaponObjectTemplate.h + shared/template/ServerXpManagerObjectTemplate.cpp + shared/template/ServerXpManagerObjectTemplate.h + shared/template/SharedBattlefieldMarkerObjectTemplate.cpp + shared/template/SharedBattlefieldMarkerObjectTemplate.h + shared/template/SharedBuildingObjectTemplate.cpp + shared/template/SharedBuildingObjectTemplate.h + shared/template/SharedCellObjectTemplate.cpp + shared/template/SharedCellObjectTemplate.h + shared/template/SharedConstructionContractObjectTemplate.cpp + shared/template/SharedConstructionContractObjectTemplate.h + shared/template/SharedCreatureObjectTemplate.cpp + shared/template/SharedCreatureObjectTemplate.h + shared/template/SharedDraftSchematicObjectTemplate.cpp + shared/template/SharedDraftSchematicObjectTemplate.h + shared/template/SharedFactoryObjectTemplate.cpp + shared/template/SharedFactoryObjectTemplate.h + shared/template/SharedGroupObjectTemplate.cpp + shared/template/SharedGroupObjectTemplate.h + shared/template/SharedGuildObjectTemplate.cpp + shared/template/SharedGuildObjectTemplate.h + shared/template/SharedInstallationObjectTemplate.cpp + shared/template/SharedInstallationObjectTemplate.h + shared/template/SharedIntangibleObjectTemplate.cpp + shared/template/SharedIntangibleObjectTemplate.h + shared/template/SharedJediManagerObjectTemplate.cpp + shared/template/SharedJediManagerObjectTemplate.h + shared/template/SharedManufactureSchematicObjectTemplate.cpp + shared/template/SharedManufactureSchematicObjectTemplate.h + shared/template/SharedMissionObjectTemplate.cpp + shared/template/SharedMissionObjectTemplate.h + shared/template/SharedObjectTemplate.cpp + shared/template/SharedObjectTemplate.h + shared/template/SharedPlayerObjectTemplate.cpp + shared/template/SharedPlayerObjectTemplate.h + shared/template/SharedPlayerQuestObjectTemplate.cpp + shared/template/SharedPlayerQuestObjectTemplate.h + shared/template/SharedResourceContainerObjectTemplate.cpp + shared/template/SharedResourceContainerObjectTemplate.h + shared/template/SharedShipObjectTemplate.cpp + shared/template/SharedShipObjectTemplate.h + shared/template/SharedStaticObjectTemplate.cpp + shared/template/SharedStaticObjectTemplate.h + shared/template/SharedTangibleObjectTemplate.cpp + shared/template/SharedTangibleObjectTemplate.h + shared/template/SharedTerrainSurfaceObjectTemplate.cpp + shared/template/SharedTerrainSurfaceObjectTemplate.h + shared/template/SharedTokenObjectTemplate.cpp + shared/template/SharedTokenObjectTemplate.h + shared/template/SharedUniverseObjectTemplate.cpp + shared/template/SharedUniverseObjectTemplate.h + shared/template/SharedVehicleObjectTemplate.cpp + shared/template/SharedVehicleObjectTemplate.h + shared/template/SharedWaypointObjectTemplate.cpp + shared/template/SharedWaypointObjectTemplate.h + shared/template/SharedWeaponObjectTemplate.cpp + shared/template/SharedWeaponObjectTemplate.h +) + +if(WIN32) + set(PLATFORM_SOURCES + win32/FirstSharedTemplate.cpp + ) +endif() + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR}/shared/core + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedDebug/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFile/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFoundation/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFoundationTypes/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedMemoryManager/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedRandom/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedRegex/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedTemplateDefinition/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedUtility/include/public + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/archive/include + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/localization/include + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/unicode/include + ${PCRE_INCLUDE_DIR} +) + +add_library(sharedTemplate STATIC + ${SHARED_SOURCES} + ${PLATFORM_SOURCES} +) diff --git a/engine/shared/library/sharedTemplate/src/shared/core/FirstSharedTemplate.h b/engine/shared/library/sharedTemplate/src/shared/core/FirstSharedTemplate.h new file mode 100644 index 00000000..18c25883 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/core/FirstSharedTemplate.h @@ -0,0 +1,10 @@ +#include "sharedFoundationTypes/FoundationTypes.h" +#include "sharedDebug/FirstSharedDebug.h" +#include "sharedFoundation/FirstSharedFoundation.h" +#include +#include +#include +#include +#include +#include + diff --git a/engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.cpp new file mode 100644 index 00000000..9c7b5784 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.cpp @@ -0,0 +1,148 @@ +//======================================================================== +// +// SetupSharedTemplate.cpp - installs all the templates for the template +// editor/compiler +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplate/SetupSharedTemplate.h" + +#include "sharedTemplate/ServerArmorTemplate.h" +#include "sharedTemplate/ServerBattlefieldMarkerObjectTemplate.h" +#include "sharedTemplate/ServerBuildingObjectTemplate.h" +#include "sharedTemplate/ServerCellObjectTemplate.h" +#include "sharedTemplate/ServerCityObjectTemplate.h" +#include "sharedTemplate/ServerConstructionContractObjectTemplate.h" +#include "sharedTemplate/ServerCreatureObjectTemplate.h" +#include "sharedTemplate/ServerDraftSchematicObjectTemplate.h" +#include "sharedTemplate/ServerFactoryObjectTemplate.h" +#include "sharedTemplate/ServerGroupObjectTemplate.h" +#include "sharedTemplate/ServerGuildObjectTemplate.h" +#include "sharedTemplate/ServerHarvesterInstallationObjectTemplate.h" +#include "sharedTemplate/ServerInstallationObjectTemplate.h" +#include "sharedTemplate/ServerIntangibleObjectTemplate.h" +#include "sharedTemplate/ServerJediManagerObjectTemplate.h" +#include "sharedTemplate/ServerManufactureInstallationObjectTemplate.h" +#include "sharedTemplate/ServerManufactureSchematicObjectTemplate.h" +#include "sharedTemplate/ServerMissionObjectTemplate.h" +#include "sharedTemplate/ServerTangibleObjectTemplate.h" +#include "sharedTemplate/ServerTokenObjectTemplate.h" +#include "sharedTemplate/ServerVehicleObjectTemplate.h" +#include "sharedTemplate/ServerWaypointObjectTemplate.h" +#include "sharedTemplate/ServerWeaponObjectTemplate.h" +#include "sharedTemplate/ServerPlanetObjectTemplate.h" +#include "sharedTemplate/ServerPlayerQuestObjectTempate.h" +#include "sharedTemplate/ServerPlayerObjectTemplate.h" +#include "sharedTemplate/ServerResourceClassObjectTemplate.h" +#include "sharedTemplate/ServerResourceContainerObjectTemplate.h" +#include "sharedTemplate/ServerResourcePoolObjectTemplate.h" +#include "sharedTemplate/ServerResourceTypeObjectTemplate.h" +#include "sharedTemplate/ServerShipObjectTemplate.h" +#include "sharedTemplate/ServerStaticObjectTemplate.h" +#include "sharedTemplate/ServerUniverseObjectTemplate.h" +#include "sharedTemplate/ServerXpManagerObjectTemplate.h" + +#include "sharedTemplate/SharedBattlefieldMarkerObjectTemplate.h" +#include "sharedTemplate/SharedBuildingObjectTemplate.h" +#include "sharedTemplate/SharedCellObjectTemplate.h" +#include "sharedTemplate/SharedConstructionContractObjectTemplate.h" +#include "sharedTemplate/SharedCreatureObjectTemplate.h" +#include "sharedTemplate/SharedDraftSchematicObjectTemplate.h" +#include "sharedTemplate/SharedFactoryObjectTemplate.h" +#include "sharedTemplate/SharedGroupObjectTemplate.h" +#include "sharedTemplate/SharedGuildObjectTemplate.h" +#include "sharedTemplate/SharedInstallationObjectTemplate.h" +#include "sharedTemplate/SharedIntangibleObjectTemplate.h" +#include "sharedTemplate/SharedJediManagerObjectTemplate.h" +#include "sharedTemplate/SharedManufactureSchematicObjectTemplate.h" +#include "sharedTemplate/SharedMissionObjectTemplate.h" +#include "sharedTemplate/SharedObjectTemplate.h" +#include "sharedTemplate/SharedPlayerQuestObjectTemplate.h" +#include "sharedTemplate/SharedPlayerObjectTemplate.h" +#include "sharedTemplate/SharedShipObjectTemplate.h" +#include "sharedTemplate/SharedStaticObjectTemplate.h" +#include "sharedTemplate/SharedTangibleObjectTemplate.h" +#include "sharedTemplate/SharedTerrainSurfaceObjectTemplate.h" +#include "sharedTemplate/SharedTokenObjectTemplate.h" +#include "sharedTemplate/SharedUniverseObjectTemplate.h" +#include "sharedTemplate/SharedVehicleObjectTemplate.h" +#include "sharedTemplate/SharedWaypointObjectTemplate.h" +#include "sharedTemplate/SharedWeaponObjectTemplate.h" +#include "sharedTemplate/SharedResourceContainerObjectTemplate.h" + +/** + * Installs all the templates. + */ +void SetupSharedTemplate::install(void) +{ + // install templates + ServerArmorTemplate::install(); + ServerBattlefieldMarkerObjectTemplate::install(); + ServerBuildingObjectTemplate::install(); + ServerCellObjectTemplate::install(); + ServerCityObjectTemplate::install(); + ServerConstructionContractObjectTemplate::install(); + ServerCreatureObjectTemplate::install(); + ServerDraftSchematicObjectTemplate::install(); + ServerFactoryObjectTemplate::install(); + ServerGroupObjectTemplate::install(); + ServerGuildObjectTemplate::install(); + ServerHarvesterInstallationObjectTemplate::install(); + ServerInstallationObjectTemplate::install(); + ServerIntangibleObjectTemplate::install(); + ServerJediManagerObjectTemplate::install(); + ServerManufactureInstallationObjectTemplate::install(); + ServerManufactureSchematicObjectTemplate::install(); + ServerMissionObjectTemplate::install(); + ServerObjectTemplate::install(); + ServerTangibleObjectTemplate::install(); + ServerTokenObjectTemplate::install(); + ServerVehicleObjectTemplate::install(); + ServerWeaponObjectTemplate::install(); + ServerPlanetObjectTemplate::install(); + ServerPlayerQuestObjectTemplate::install(); + ServerPlayerObjectTemplate::install(); + ServerResourceClassObjectTemplate::install(); + ServerResourceContainerObjectTemplate::install(); + ServerResourcePoolObjectTemplate::install(); + ServerResourceTypeObjectTemplate::install(); + ServerShipObjectTemplate::install(); + ServerStaticObjectTemplate::install(); + ServerUniverseObjectTemplate::install(); + ServerWaypointObjectTemplate::install(); + ServerXpManagerObjectTemplate::install(); + + SharedBattlefieldMarkerObjectTemplate::install(); + SharedBuildingObjectTemplate::install(); + SharedCellObjectTemplate::install(); + SharedConstructionContractObjectTemplate::install(); + SharedCreatureObjectTemplate::install(); + SharedDraftSchematicObjectTemplate::install(); + SharedFactoryObjectTemplate::install(); + SharedGroupObjectTemplate::install(); + SharedGuildObjectTemplate::install(); + SharedInstallationObjectTemplate::install(); + SharedIntangibleObjectTemplate::install(); + SharedJediManagerObjectTemplate::install(); + SharedManufactureSchematicObjectTemplate::install(); + SharedMissionObjectTemplate::install(); + SharedObjectTemplate::install(); + SharedPlayerQuestObjectTemplate::install(); + SharedPlayerObjectTemplate::install(); + SharedShipObjectTemplate::install(); + SharedStaticObjectTemplate::install(); + SharedTangibleObjectTemplate::install(); + SharedTerrainSurfaceObjectTemplate::install(); + SharedTokenObjectTemplate::install(); + SharedUniverseObjectTemplate::install(); + SharedVehicleObjectTemplate::install(); + SharedWaypointObjectTemplate::install(); + SharedWeaponObjectTemplate::install(); + SharedResourceContainerObjectTemplate::install(); +} // SetupSharedTemplate::install + + +//============================================================================== diff --git a/engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.h b/engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.h new file mode 100644 index 00000000..aafeb380 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/core/SetupSharedTemplate.h @@ -0,0 +1,19 @@ +//======================================================================== +// +// SetupSharedTemplate.h - installs all the templates for the template +// editor/compiler +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + + + +class SetupSharedTemplate +{ +public: + static void install(void); +}; + + +//============================================================================== diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp new file mode 100644 index 00000000..56b7d959 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.cpp @@ -0,0 +1,697 @@ +//======================================================================== +// +// ServerArmorTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerArmorTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerArmorTemplate::ServerArmorTemplate(const std::string & filename) +//@BEGIN TFD INIT + : TpfTemplate(filename) + ,m_specialProtectionLoaded(false) + ,m_specialProtectionAppend(false) +//@END TFD INIT +{ +} // ServerArmorTemplate::ServerArmorTemplate + +/** + * Class destructor. + */ +ServerArmorTemplate::~ServerArmorTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_specialProtection.begin(); iter != m_specialProtection.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_specialProtection.clear(); + } +//@END TFD CLEANUP +} // ServerArmorTemplate::~ServerArmorTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerArmorTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_encumbrance[index]; + } + fprintf(stderr, "index for parameter \"encumbrance\" out of bounds\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerArmorTemplate::getCompilerIntegerParam + +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 + +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 + +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 + +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 NULL; +} //ServerArmorTemplate::getStructParamOT + +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::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 + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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 = NULL; + } + 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.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // ServerArmorTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + + +//============================================================================= +// class ServerArmorTemplate::_SpecialProtection + +/** + * Class constructor. + */ +ServerArmorTemplate::_SpecialProtection::_SpecialProtection(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerArmorTemplate::_SpecialProtection::_SpecialProtection + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_effectiveness; + } + fprintf(stderr, "trying to access single-parameter \"effectiveness\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerArmorTemplate::_SpecialProtection::getCompilerIntegerParam + +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 + +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 + +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 + +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 + +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::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 + + +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 + * for this template. + * + * @param file file to load from + */ +void ServerArmorTemplate::_SpecialProtection::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // ServerArmorTemplate::_SpecialProtection::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerArmorTemplate::_SpecialProtection::save(Iff &file) +{ +int count; + + file.insertForm(_SpecialProtection_tag); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.h new file mode 100644 index 00000000..cbab71e9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerArmorTemplate.h @@ -0,0 +1,182 @@ +//======================================================================== +// +// ServerArmorTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerArmorTemplate_H +#define _INCLUDED_ServerArmorTemplate_H + +#include "sharedTemplateDefinition/TpfTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerArmorTemplate : public TpfTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerArmorTemplate_tag = TAG(A,R,M,O) + }; +//@END TFD ID +public: + ServerArmorTemplate(const std::string & filename); + virtual ~ServerArmorTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum ArmorRating + { + AR_armorRealNone = -1, // needed for internal reasons, do not use in templates! This means you! + AR_armorNone = 0, + AR_armorLight, + AR_armorMedium, + AR_armorHeavy, + ArmorRating_Last = AR_armorHeavy, + }; + + enum DamageType + { + DT_none = 0x00000000, + DT_kinetic = 0x00000001, + DT_energy = 0x00000002, + DT_blast = 0x00000004, + DT_stun = 0x00000008, + DT_restraint = 0x00000010, + DT_elemental_heat = 0x00000020, + DT_elemental_cold = 0x00000040, + DT_elemental_acid = 0x00000080, + DT_elemental_electrical = 0x00000100, + DT_environmental_heat = 0x00000200, + DT_environmental_cold = 0x00000400, + DT_environmental_acid = 0x00000800, + DT_environmental_electrical = 0x00001000, + DamageType_Last = DT_environmental_electrical, + }; + +public: + struct SpecialProtection + { + enum DamageType type; + int effectiveness; + }; + +protected: + class _SpecialProtection : public TpfTemplate + { + friend class ServerArmorTemplate; + public: + enum + { + _SpecialProtection_tag = TAG(A,R,S,P) + }; + + public: + _SpecialProtection(const std::string & filename); + virtual ~_SpecialProtection(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_type; // specific damage being protected from + CompilerIntegerParam m_effectiveness; // armor effectiveness ( <0 = no protection for this damage type, default protection will be ignored) + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _SpecialProtection(const _SpecialProtection &); + _SpecialProtection & operator =(const _SpecialProtection &); + }; + friend class ServerArmorTemplate::_SpecialProtection; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_rating; // armor rating + CompilerIntegerParam m_integrity; // integrity + CompilerIntegerParam m_effectiveness; // default effectiveness (0 = only use special protection) + stdvector::fwd m_specialProtection; // damage-type specific protection + bool m_specialProtectionLoaded; + bool m_specialProtectionAppend; + CompilerIntegerParam m_vulnerability; // damaga types that this armor doesn't protect against + CompilerIntegerParam m_encumbrance[3]; // reduction to attributes from wearing this armor +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerArmorTemplate(const ServerArmorTemplate &); + ServerArmorTemplate & operator =(const ServerArmorTemplate &); +}; + + +inline void ServerArmorTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerArmorTemplate::registerMe(); + ServerArmorTemplate::_SpecialProtection::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerArmorTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.cpp new file mode 100644 index 00000000..835f8ad4 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerBattlefieldMarkerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerBattlefieldMarkerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerBattlefieldMarkerObjectTemplate::ServerBattlefieldMarkerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerBattlefieldMarkerObjectTemplate::ServerBattlefieldMarkerObjectTemplate + +/** + * Class destructor. + */ +ServerBattlefieldMarkerObjectTemplate::~ServerBattlefieldMarkerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerBattlefieldMarkerObjectTemplate::~ServerBattlefieldMarkerObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerBattlefieldMarkerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerBattlefieldMarkerObjectTemplate_tag, create); +} // ServerBattlefieldMarkerObjectTemplate::registerMe + +/** + * Creates a ServerBattlefieldMarkerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerBattlefieldMarkerObjectTemplate::create(const std::string & filename) +{ + return new ServerBattlefieldMarkerObjectTemplate(filename); +} // ServerBattlefieldMarkerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerBattlefieldMarkerObjectTemplate::getId(void) const +{ + return ServerBattlefieldMarkerObjectTemplate_tag; +} // ServerBattlefieldMarkerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerBattlefieldMarkerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerBattlefieldMarkerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerBattlefieldMarkerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerBattlefieldMarkerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerBattlefieldMarkerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerBattlefieldMarkerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerBattlefieldMarkerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getFloatParam + +BoolParam * ServerBattlefieldMarkerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getBoolParam + +StringParam * ServerBattlefieldMarkerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getStringParam + +StringIdParam * ServerBattlefieldMarkerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getStringIdParam + +VectorParam * ServerBattlefieldMarkerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getVectorParam + +DynamicVariableParam * ServerBattlefieldMarkerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerBattlefieldMarkerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerBattlefieldMarkerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerBattlefieldMarkerObjectTemplate::getTriggerVolumeParam + +void ServerBattlefieldMarkerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerBattlefieldMarkerObjectTemplate::initStructParamOT + +void ServerBattlefieldMarkerObjectTemplate::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerBattlefieldMarkerObjectTemplate::setAsEmptyList + +void ServerBattlefieldMarkerObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerBattlefieldMarkerObjectTemplate::setAppend + +bool ServerBattlefieldMarkerObjectTemplate::isAppend(const char *name) const +{ + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerBattlefieldMarkerObjectTemplate::isAppend + + +int ServerBattlefieldMarkerObjectTemplate::getListLength(const char *name) const +{ + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerBattlefieldMarkerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerBattlefieldMarkerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerBattlefieldMarkerObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerBattlefieldMarkerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerBattlefieldMarkerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerBattlefieldMarkerObjectTemplate_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; + + + // 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); +} // ServerBattlefieldMarkerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.h new file mode 100644 index 00000000..acdcf4f0 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerBattlefieldMarkerObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerBattlefieldMarkerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerBattlefieldMarkerObjectTemplate_H +#define _INCLUDED_ServerBattlefieldMarkerObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerBattlefieldMarkerObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerBattlefieldMarkerObjectTemplate_tag = TAG(B,M,R,K) + }; +//@END TFD ID +public: + ServerBattlefieldMarkerObjectTemplate(const std::string & filename); + virtual ~ServerBattlefieldMarkerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerBattlefieldMarkerObjectTemplate(const ServerBattlefieldMarkerObjectTemplate &); + ServerBattlefieldMarkerObjectTemplate & operator =(const ServerBattlefieldMarkerObjectTemplate &); +}; + + +inline void ServerBattlefieldMarkerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerBattlefieldMarkerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerBattlefieldMarkerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp new file mode 100644 index 00000000..0e77b72e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.cpp @@ -0,0 +1,318 @@ +//======================================================================== +// +// ServerBuildingObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerBuildingObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerBuildingObjectTemplate::ServerBuildingObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerBuildingObjectTemplate::ServerBuildingObjectTemplate + +/** + * Class destructor. + */ +ServerBuildingObjectTemplate::~ServerBuildingObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerBuildingObjectTemplate::~ServerBuildingObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerBuildingObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_maintenanceCost; + } + fprintf(stderr, "trying to access single-parameter \"maintenanceCost\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerBuildingObjectTemplate::getCompilerIntegerParam + +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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_isPublic; + } + fprintf(stderr, "trying to access single-parameter \"isPublic\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //ServerBuildingObjectTemplate::getBoolParam + +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 + +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 + +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 + +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::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerBuildingObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerBuildingObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.h new file mode 100644 index 00000000..d98e875b --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerBuildingObjectTemplate.h @@ -0,0 +1,90 @@ +//======================================================================== +// +// ServerBuildingObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerBuildingObjectTemplate_H +#define _INCLUDED_ServerBuildingObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerBuildingObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerBuildingObjectTemplate_tag = TAG(B,U,I,O) + }; +//@END TFD ID +public: + ServerBuildingObjectTemplate(const std::string & filename); + virtual ~ServerBuildingObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_maintenanceCost; // The weekly cost (in credits) of maintaining this Building. + BoolParam m_isPublic; // Whether by default the building is flagged public. +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerBuildingObjectTemplate(const ServerBuildingObjectTemplate &); + ServerBuildingObjectTemplate & operator =(const ServerBuildingObjectTemplate &); +}; + + +inline void ServerBuildingObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerBuildingObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerBuildingObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.cpp new file mode 100644 index 00000000..9d581286 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerCellObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerCellObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerCellObjectTemplate::ServerCellObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerCellObjectTemplate::ServerCellObjectTemplate + +/** + * Class destructor. + */ +ServerCellObjectTemplate::~ServerCellObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerCellObjectTemplate::~ServerCellObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerCellObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerCellObjectTemplate_tag, create); +} // ServerCellObjectTemplate::registerMe + +/** + * Creates a ServerCellObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerCellObjectTemplate::create(const std::string & filename) +{ + return new ServerCellObjectTemplate(filename); +} // ServerCellObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerCellObjectTemplate::getId(void) const +{ + return ServerCellObjectTemplate_tag; +} // ServerCellObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerCellObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerCellObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerCellObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerCellObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerCellObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerCellObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerCellObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getFloatParam + +BoolParam * ServerCellObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getBoolParam + +StringParam * ServerCellObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getStringParam + +StringIdParam * ServerCellObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getStringIdParam + +VectorParam * ServerCellObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getVectorParam + +DynamicVariableParam * ServerCellObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerCellObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerCellObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerCellObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerCellObjectTemplate::getTriggerVolumeParam + +void ServerCellObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerObjectTemplate::initStructParamOT(param, name); +} // ServerCellObjectTemplate::initStructParamOT + +void ServerCellObjectTemplate::setAsEmptyList(const char *name) +{ + ServerObjectTemplate::setAsEmptyList(name); +} // ServerCellObjectTemplate::setAsEmptyList + +void ServerCellObjectTemplate::setAppend(const char *name) +{ + ServerObjectTemplate::setAppend(name); +} // ServerCellObjectTemplate::setAppend + +bool ServerCellObjectTemplate::isAppend(const char *name) const +{ + return ServerObjectTemplate::isAppend(name); +} // ServerCellObjectTemplate::isAppend + + +int ServerCellObjectTemplate::getListLength(const char *name) const +{ + return ServerObjectTemplate::getListLength(name); +} // ServerCellObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerCellObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerCellObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerCellObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerCellObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerCellObjectTemplate_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; + + + // 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(); + UNREF(count); +} // ServerCellObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.h new file mode 100644 index 00000000..5c2e89a2 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerCellObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerCellObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerCellObjectTemplate_H +#define _INCLUDED_ServerCellObjectTemplate_H + +#include "ServerObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerCellObjectTemplate : public ServerObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerCellObjectTemplate_tag = TAG(S,C,L,T) + }; +//@END TFD ID +public: + ServerCellObjectTemplate(const std::string & filename); + virtual ~ServerCellObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerCellObjectTemplate(const ServerCellObjectTemplate &); + ServerCellObjectTemplate & operator =(const ServerCellObjectTemplate &); +}; + + +inline void ServerCellObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerCellObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerCellObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.cpp new file mode 100644 index 00000000..3628bbac --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerCityObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerCityObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerCityObjectTemplate::ServerCityObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerCityObjectTemplate::ServerCityObjectTemplate + +/** + * Class destructor. + */ +ServerCityObjectTemplate::~ServerCityObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerCityObjectTemplate::~ServerCityObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerCityObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerCityObjectTemplate_tag, create); +} // ServerCityObjectTemplate::registerMe + +/** + * Creates a ServerCityObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerCityObjectTemplate::create(const std::string & filename) +{ + return new ServerCityObjectTemplate(filename); +} // ServerCityObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerCityObjectTemplate::getId(void) const +{ + return ServerCityObjectTemplate_tag; +} // ServerCityObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerCityObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerCityObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerCityObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerCityObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerCityObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerCityObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerCityObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getFloatParam + +BoolParam * ServerCityObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getBoolParam + +StringParam * ServerCityObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getStringParam + +StringIdParam * ServerCityObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getStringIdParam + +VectorParam * ServerCityObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getVectorParam + +DynamicVariableParam * ServerCityObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerCityObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerCityObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerCityObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerCityObjectTemplate::getTriggerVolumeParam + +void ServerCityObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerCityObjectTemplate::initStructParamOT + +void ServerCityObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerCityObjectTemplate::setAsEmptyList + +void ServerCityObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerCityObjectTemplate::setAppend + +bool ServerCityObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerCityObjectTemplate::isAppend + + +int ServerCityObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerCityObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerCityObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerCityObjectTemplate_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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerCityObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerCityObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerCityObjectTemplate_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; + + + // 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); +} // ServerCityObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.h new file mode 100644 index 00000000..80431900 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerCityObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerCityObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerCityObjectTemplate_H +#define _INCLUDED_ServerCityObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerCityObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerCityObjectTemplate_tag = TAG(C,I,T,Y) + }; +//@END TFD ID +public: + ServerCityObjectTemplate(const std::string & filename); + virtual ~ServerCityObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerCityObjectTemplate(const ServerCityObjectTemplate &); + ServerCityObjectTemplate & operator =(const ServerCityObjectTemplate &); +}; + + +inline void ServerCityObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerCityObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerCityObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.cpp new file mode 100644 index 00000000..6a0629a8 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerConstructionContractObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerConstructionContractObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerConstructionContractObjectTemplate::ServerConstructionContractObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerConstructionContractObjectTemplate::ServerConstructionContractObjectTemplate + +/** + * Class destructor. + */ +ServerConstructionContractObjectTemplate::~ServerConstructionContractObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerConstructionContractObjectTemplate::~ServerConstructionContractObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerConstructionContractObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerConstructionContractObjectTemplate_tag, create); +} // ServerConstructionContractObjectTemplate::registerMe + +/** + * Creates a ServerConstructionContractObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerConstructionContractObjectTemplate::create(const std::string & filename) +{ + return new ServerConstructionContractObjectTemplate(filename); +} // ServerConstructionContractObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerConstructionContractObjectTemplate::getId(void) const +{ + return ServerConstructionContractObjectTemplate_tag; +} // ServerConstructionContractObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerConstructionContractObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerConstructionContractObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerConstructionContractObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerConstructionContractObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerConstructionContractObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerConstructionContractObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerConstructionContractObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getFloatParam + +BoolParam * ServerConstructionContractObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getBoolParam + +StringParam * ServerConstructionContractObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getStringParam + +StringIdParam * ServerConstructionContractObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getStringIdParam + +VectorParam * ServerConstructionContractObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getVectorParam + +DynamicVariableParam * ServerConstructionContractObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerConstructionContractObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerConstructionContractObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerConstructionContractObjectTemplate::getTriggerVolumeParam + +void ServerConstructionContractObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerIntangibleObjectTemplate::initStructParamOT(param, name); +} // ServerConstructionContractObjectTemplate::initStructParamOT + +void ServerConstructionContractObjectTemplate::setAsEmptyList(const char *name) +{ + ServerIntangibleObjectTemplate::setAsEmptyList(name); +} // ServerConstructionContractObjectTemplate::setAsEmptyList + +void ServerConstructionContractObjectTemplate::setAppend(const char *name) +{ + ServerIntangibleObjectTemplate::setAppend(name); +} // ServerConstructionContractObjectTemplate::setAppend + +bool ServerConstructionContractObjectTemplate::isAppend(const char *name) const +{ + return ServerIntangibleObjectTemplate::isAppend(name); +} // ServerConstructionContractObjectTemplate::isAppend + + +int ServerConstructionContractObjectTemplate::getListLength(const char *name) const +{ + return ServerIntangibleObjectTemplate::getListLength(name); +} // ServerConstructionContractObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerConstructionContractObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerConstructionContractObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerConstructionContractObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerConstructionContractObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerConstructionContractObjectTemplate_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; + + + // 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(); + UNREF(count); +} // ServerConstructionContractObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.h new file mode 100644 index 00000000..6b027a27 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerConstructionContractObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerConstructionContractObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerConstructionContractObjectTemplate_H +#define _INCLUDED_ServerConstructionContractObjectTemplate_H + +#include "ServerIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerConstructionContractObjectTemplate : public ServerIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerConstructionContractObjectTemplate_tag = TAG(C,O,N,C) + }; +//@END TFD ID +public: + ServerConstructionContractObjectTemplate(const std::string & filename); + virtual ~ServerConstructionContractObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerConstructionContractObjectTemplate(const ServerConstructionContractObjectTemplate &); + ServerConstructionContractObjectTemplate & operator =(const ServerConstructionContractObjectTemplate &); +}; + + +inline void ServerConstructionContractObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerConstructionContractObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerConstructionContractObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp new file mode 100644 index 00000000..87814cc0 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.cpp @@ -0,0 +1,759 @@ +//======================================================================== +// +// ServerCreatureObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerCreatureObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerCreatureObjectTemplate::ServerCreatureObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) + ,m_attribModsLoaded(false) + ,m_attribModsAppend(false) +//@END TFD INIT +{ +} // ServerCreatureObjectTemplate::ServerCreatureObjectTemplate + +/** + * Class destructor. + */ +ServerCreatureObjectTemplate::~ServerCreatureObjectTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_attribMods.begin(); iter != m_attribMods.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_attribMods.clear(); + } +//@END TFD CLEANUP +} // ServerCreatureObjectTemplate::~ServerCreatureObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerCreatureObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_shockWounds; + } + fprintf(stderr, "trying to access single-parameter \"shockWounds\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerCreatureObjectTemplate::getCompilerIntegerParam + +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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_mentalStatesDecay[index]; + } + fprintf(stderr, "index for parameter \"mentalStatesDecay\" out of bounds\n"); + } + else + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //ServerCreatureObjectTemplate::getFloatParam + +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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_canCreateAvatar; + } + fprintf(stderr, "trying to access single-parameter \"canCreateAvatar\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //ServerCreatureObjectTemplate::getBoolParam + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_nameGeneratorType; + } + fprintf(stderr, "trying to access single-parameter \"nameGeneratorType\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerCreatureObjectTemplate::getStringParam + +StringIdParam * ServerCreatureObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getStringIdParam + +VectorParam * ServerCreatureObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getVectorParam + +DynamicVariableParam * ServerCreatureObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getDynamicVariableParam + +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 NULL; +} //ServerCreatureObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerCreatureObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerCreatureObjectTemplate::getTriggerVolumeParam + +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::setAsEmptyList(const char *name) +{ + if (strcmp(name, "attribMods") == 0) + { + m_attribMods.clear(); + m_attribModsLoaded = true; + } + else + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerCreatureObjectTemplate::setAsEmptyList + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,5)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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 = NULL; + } + 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.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerCreatureObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.h new file mode 100644 index 00000000..d8801d5d --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerCreatureObjectTemplate.h @@ -0,0 +1,122 @@ +//======================================================================== +// +// ServerCreatureObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerCreatureObjectTemplate_H +#define _INCLUDED_ServerCreatureObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerCreatureObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerCreatureObjectTemplate_tag = TAG(C,R,E,O) + }; +//@END TFD ID +public: + ServerCreatureObjectTemplate(const std::string & filename); + virtual ~ServerCreatureObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum PathNodeType + { + PN_Open, // //grasslands + PN_SparseCover, // //light forests, vaporator farms + PN_DenseCover, // //dense forests etc. + PN_NaturalInterior, // //caves + PN_ArtificialInterior, // //buildings + PN_NaturalPath, // //paths and trails + PN_ArtificialPath, // //roads + PN_PassableWater, // //rivers, ponds, shorelines + PN_ImpassableWater, // //big lakes and oceans + PathNodeType_Last = PN_ImpassableWater, + }; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + //Creature Attributes + StringParam m_defaultWeapon; // //weapon to use if none is equipped + CompilerIntegerParam m_attributes[6]; // //initial value for attributes + CompilerIntegerParam m_minAttributes[6]; // //minimum value for attributes + CompilerIntegerParam m_maxAttributes[6]; // //maximum value for attributes + FloatParam m_minDrainModifier; // //min drain rate in units/sec + FloatParam m_maxDrainModifier; // //max drain rate in units/sec + FloatParam m_minFaucetModifier; // //min regeneration rate in units/sec + FloatParam m_maxFaucetModifier; // //max regeneration rate in units/sec + stdvector::fwd m_attribMods; // //(de)buffs the creature is created with + bool m_attribModsLoaded; + bool m_attribModsAppend; + CompilerIntegerParam m_shockWounds; // //current shock wounds + BoolParam m_canCreateAvatar; // //can a player create an avatar with this template + StringParam m_nameGeneratorType; // //identifies which name generator to use + // AI Behavioral Variables + FloatParam m_approachTriggerRange; + FloatParam m_maxMentalStates[4]; // //maximum value for the mental state + FloatParam m_mentalStatesDecay[4]; // //time for the state to decay from 100 to 0 +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerCreatureObjectTemplate(const ServerCreatureObjectTemplate &); + ServerCreatureObjectTemplate & operator =(const ServerCreatureObjectTemplate &); +}; + + +inline void ServerCreatureObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerCreatureObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerCreatureObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp new file mode 100644 index 00000000..a2e783f7 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.cpp @@ -0,0 +1,1018 @@ +//======================================================================== +// +// ServerDraftSchematicObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerDraftSchematicObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +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) +//@END TFD INIT +{ +} // ServerDraftSchematicObjectTemplate::ServerDraftSchematicObjectTemplate + +/** + * Class destructor. + */ +ServerDraftSchematicObjectTemplate::~ServerDraftSchematicObjectTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_slots.clear(); + } + { + std::vector::iterator iter; + for (iter = m_skillCommands.begin(); iter != m_skillCommands.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_skillCommands.clear(); + } + { + std::vector::iterator iter; + for (iter = m_manufactureScripts.begin(); iter != m_manufactureScripts.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_manufactureScripts.clear(); + } +//@END TFD CLEANUP +} // ServerDraftSchematicObjectTemplate::~ServerDraftSchematicObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerDraftSchematicObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_itemsPerContainer; + } + fprintf(stderr, "trying to access single-parameter \"itemsPerContainer\" as an array\n"); + } + else + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_prototypeTime; + } + fprintf(stderr, "trying to access single-parameter \"prototypeTime\" as an array\n"); + } + else + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_destroyIngredients; + } + fprintf(stderr, "trying to access single-parameter \"destroyIngredients\" as an array\n"); + } + else + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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 NULL; +} //ServerDraftSchematicObjectTemplate::getStringParam + +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 + +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 NULL; +} //ServerDraftSchematicObjectTemplate::getStructParamOT + +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::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::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 + +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 + + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,7)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerDraftSchematicObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + + +//============================================================================= +// class ServerDraftSchematicObjectTemplate::_IngredientSlot + +/** + * Class constructor. + */ +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 = NULL; + } + 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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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 + +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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_complexity; + } + fprintf(stderr, "trying to access single-parameter \"complexity\" as an array\n"); + } + else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_optional; + } + fprintf(stderr, "trying to access single-parameter \"optional\" as an array\n"); + } + else + return TpfTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_appearance; + } + fprintf(stderr, "trying to access single-parameter \"appearance\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } + else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return NULL; +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam + +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 + +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 NULL; +} //ServerDraftSchematicObjectTemplate::_IngredientSlot::getStructParamOT + +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::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 + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerDraftSchematicObjectTemplate::_IngredientSlot::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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 = NULL; + } + 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.exitForm(); + UNREF(file); +} // ServerDraftSchematicObjectTemplate::_IngredientSlot::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerDraftSchematicObjectTemplate::_IngredientSlot::save(Iff &file) +{ +int count; + + file.insertForm(_IngredientSlot_tag); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.h new file mode 100644 index 00000000..fa7b0fef --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerDraftSchematicObjectTemplate.h @@ -0,0 +1,170 @@ +//======================================================================== +// +// ServerDraftSchematicObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerDraftSchematicObjectTemplate_H +#define _INCLUDED_ServerDraftSchematicObjectTemplate_H + +#include "ServerIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerDraftSchematicObjectTemplate : public ServerIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerDraftSchematicObjectTemplate_tag = TAG(D,S,C,O) + }; +//@END TFD ID +public: + ServerDraftSchematicObjectTemplate(const std::string & filename); + virtual ~ServerDraftSchematicObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + struct IngredientSlot + { + bool optional; + StringId name; + stdvector::fwd options; + std::string optionalSkillCommand; + float complexity; + std::string appearance; + }; + +protected: + class _IngredientSlot : public TpfTemplate + { + friend class ServerDraftSchematicObjectTemplate; + public: + enum + { + _IngredientSlot_tag = TAG(D,I,N,S) + }; + + public: + _IngredientSlot(const std::string & filename); + virtual ~_IngredientSlot(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + BoolParam m_optional; // is the slot optional + StringIdParam m_name; // slot name + stdvector::fwd m_options; // possible ingredients that can be used to fill the slot + bool m_optionsLoaded; + bool m_optionsAppend; + StringParam m_optionalSkillCommand; // skill commands needed to access this slot if it is optional (ignored for required slots) + FloatParam m_complexity; // adjustment to complexity by using this slot + StringParam m_appearance; // if the slot is a component, the name of the hardpoint associated with the slot; if the slot is a resource, a string used to build an appearance file name + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _IngredientSlot(const _IngredientSlot &); + _IngredientSlot & operator =(const _IngredientSlot &); + }; + friend class ServerDraftSchematicObjectTemplate::_IngredientSlot; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_category; // schematic category (food, weapon, etc) + StringParam m_craftedObjectTemplate; // what object we create + StringParam m_crateObjectTemplate; // the "crate" to use when manufacturing multiple copies of the object + stdvector::fwd m_slots; // ingredient slots + bool m_slotsLoaded; + bool m_slotsAppend; + stdvector::fwd m_skillCommands; // skill commands needed to access this schematic and required slots + bool m_skillCommandsLoaded; + bool m_skillCommandsAppend; + BoolParam m_destroyIngredients; // flag that the ingredients used in the design stage should be destroyed + stdvector::fwd m_manufactureScripts; // scripts that will be attached to a manufacturing schematic created from this schematic + bool m_manufactureScriptsLoaded; + bool m_manufactureScriptsAppend; + CompilerIntegerParam m_itemsPerContainer; // when manufacturing, how many items will be put in a container (1 = items not in a container) + FloatParam m_manufactureTime; // time to manufacture an item (in secs) per complexity point + FloatParam m_prototypeTime; // time to create a prototype (in secs) per complexity point +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerDraftSchematicObjectTemplate(const ServerDraftSchematicObjectTemplate &); + ServerDraftSchematicObjectTemplate & operator =(const ServerDraftSchematicObjectTemplate &); +}; + + +inline void ServerDraftSchematicObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerDraftSchematicObjectTemplate::registerMe(); + ServerDraftSchematicObjectTemplate::_IngredientSlot::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerDraftSchematicObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.cpp new file mode 100644 index 00000000..da8c9920 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerFactoryObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerFactoryObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerFactoryObjectTemplate::ServerFactoryObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerFactoryObjectTemplate::ServerFactoryObjectTemplate + +/** + * Class destructor. + */ +ServerFactoryObjectTemplate::~ServerFactoryObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerFactoryObjectTemplate::~ServerFactoryObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerFactoryObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerFactoryObjectTemplate_tag, create); +} // ServerFactoryObjectTemplate::registerMe + +/** + * Creates a ServerFactoryObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerFactoryObjectTemplate::create(const std::string & filename) +{ + return new ServerFactoryObjectTemplate(filename); +} // ServerFactoryObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerFactoryObjectTemplate::getId(void) const +{ + return ServerFactoryObjectTemplate_tag; +} // ServerFactoryObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerFactoryObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerFactoryObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerFactoryObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerFactoryObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerFactoryObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerFactoryObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerFactoryObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getFloatParam + +BoolParam * ServerFactoryObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getBoolParam + +StringParam * ServerFactoryObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getStringParam + +StringIdParam * ServerFactoryObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getStringIdParam + +VectorParam * ServerFactoryObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getVectorParam + +DynamicVariableParam * ServerFactoryObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerFactoryObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerFactoryObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerFactoryObjectTemplate::getTriggerVolumeParam + +void ServerFactoryObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerFactoryObjectTemplate::initStructParamOT + +void ServerFactoryObjectTemplate::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerFactoryObjectTemplate::setAsEmptyList + +void ServerFactoryObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerFactoryObjectTemplate::setAppend + +bool ServerFactoryObjectTemplate::isAppend(const char *name) const +{ + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerFactoryObjectTemplate::isAppend + + +int ServerFactoryObjectTemplate::getListLength(const char *name) const +{ + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerFactoryObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerFactoryObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerFactoryObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerFactoryObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerFactoryObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerFactoryObjectTemplate_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; + + + // 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); +} // ServerFactoryObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.h new file mode 100644 index 00000000..1dd852a4 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerFactoryObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerFactoryObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerFactoryObjectTemplate_H +#define _INCLUDED_ServerFactoryObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerFactoryObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerFactoryObjectTemplate_tag = TAG(F,C,Y,T) + }; +//@END TFD ID +public: + ServerFactoryObjectTemplate(const std::string & filename); + virtual ~ServerFactoryObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerFactoryObjectTemplate(const ServerFactoryObjectTemplate &); + ServerFactoryObjectTemplate & operator =(const ServerFactoryObjectTemplate &); +}; + + +inline void ServerFactoryObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerFactoryObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerFactoryObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.cpp new file mode 100644 index 00000000..5c606de3 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerGroupObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerGroupObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerGroupObjectTemplate::ServerGroupObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerGroupObjectTemplate::ServerGroupObjectTemplate + +/** + * Class destructor. + */ +ServerGroupObjectTemplate::~ServerGroupObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerGroupObjectTemplate::~ServerGroupObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerGroupObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerGroupObjectTemplate_tag, create); +} // ServerGroupObjectTemplate::registerMe + +/** + * Creates a ServerGroupObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerGroupObjectTemplate::create(const std::string & filename) +{ + return new ServerGroupObjectTemplate(filename); +} // ServerGroupObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerGroupObjectTemplate::getId(void) const +{ + return ServerGroupObjectTemplate_tag; +} // ServerGroupObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerGroupObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerGroupObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerGroupObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerGroupObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerGroupObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerGroupObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerGroupObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getFloatParam + +BoolParam * ServerGroupObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getBoolParam + +StringParam * ServerGroupObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getStringParam + +StringIdParam * ServerGroupObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getStringIdParam + +VectorParam * ServerGroupObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getVectorParam + +DynamicVariableParam * ServerGroupObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerGroupObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerGroupObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerGroupObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerGroupObjectTemplate::getTriggerVolumeParam + +void ServerGroupObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerGroupObjectTemplate::initStructParamOT + +void ServerGroupObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerGroupObjectTemplate::setAsEmptyList + +void ServerGroupObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerGroupObjectTemplate::setAppend + +bool ServerGroupObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerGroupObjectTemplate::isAppend + + +int ServerGroupObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerGroupObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerGroupObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerGroupObjectTemplate_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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerGroupObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerGroupObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerGroupObjectTemplate_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; + + + // 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); +} // ServerGroupObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.h new file mode 100644 index 00000000..6c30d79e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerGroupObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerGroupObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerGroupObjectTemplate_H +#define _INCLUDED_ServerGroupObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerGroupObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerGroupObjectTemplate_tag = TAG(G,R,U,P) + }; +//@END TFD ID +public: + ServerGroupObjectTemplate(const std::string & filename); + virtual ~ServerGroupObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerGroupObjectTemplate(const ServerGroupObjectTemplate &); + ServerGroupObjectTemplate & operator =(const ServerGroupObjectTemplate &); +}; + + +inline void ServerGroupObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerGroupObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerGroupObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.cpp new file mode 100644 index 00000000..7fff4140 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerGuildObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerGuildObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerGuildObjectTemplate::ServerGuildObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerGuildObjectTemplate::ServerGuildObjectTemplate + +/** + * Class destructor. + */ +ServerGuildObjectTemplate::~ServerGuildObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerGuildObjectTemplate::~ServerGuildObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerGuildObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerGuildObjectTemplate_tag, create); +} // ServerGuildObjectTemplate::registerMe + +/** + * Creates a ServerGuildObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerGuildObjectTemplate::create(const std::string & filename) +{ + return new ServerGuildObjectTemplate(filename); +} // ServerGuildObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerGuildObjectTemplate::getId(void) const +{ + return ServerGuildObjectTemplate_tag; +} // ServerGuildObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerGuildObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerGuildObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerGuildObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerGuildObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerGuildObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerGuildObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerGuildObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getFloatParam + +BoolParam * ServerGuildObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getBoolParam + +StringParam * ServerGuildObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getStringParam + +StringIdParam * ServerGuildObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getStringIdParam + +VectorParam * ServerGuildObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getVectorParam + +DynamicVariableParam * ServerGuildObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerGuildObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerGuildObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerGuildObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerGuildObjectTemplate::getTriggerVolumeParam + +void ServerGuildObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerGuildObjectTemplate::initStructParamOT + +void ServerGuildObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerGuildObjectTemplate::setAsEmptyList + +void ServerGuildObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerGuildObjectTemplate::setAppend + +bool ServerGuildObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerGuildObjectTemplate::isAppend + + +int ServerGuildObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerGuildObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerGuildObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerGuildObjectTemplate_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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerGuildObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerGuildObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerGuildObjectTemplate_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; + + + // 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); +} // ServerGuildObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.h new file mode 100644 index 00000000..a49d7f17 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerGuildObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerGuildObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerGuildObjectTemplate_H +#define _INCLUDED_ServerGuildObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerGuildObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerGuildObjectTemplate_tag = TAG(G,I,L,D) + }; +//@END TFD ID +public: + ServerGuildObjectTemplate(const std::string & filename); + virtual ~ServerGuildObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerGuildObjectTemplate(const ServerGuildObjectTemplate &); + ServerGuildObjectTemplate & operator =(const ServerGuildObjectTemplate &); +}; + + +inline void ServerGuildObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerGuildObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerGuildObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp new file mode 100644 index 00000000..941d6cb8 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.cpp @@ -0,0 +1,362 @@ +//======================================================================== +// +// ServerHarvesterInstallationObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerHarvesterInstallationObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerHarvesterInstallationObjectTemplate::ServerHarvesterInstallationObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerInstallationObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerHarvesterInstallationObjectTemplate::ServerHarvesterInstallationObjectTemplate + +/** + * Class destructor. + */ +ServerHarvesterInstallationObjectTemplate::~ServerHarvesterInstallationObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerHarvesterInstallationObjectTemplate::~ServerHarvesterInstallationObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerHarvesterInstallationObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_maxHopperSize; + } + fprintf(stderr, "trying to access single-parameter \"maxHopperSize\" as an array\n"); + } + else + return ServerInstallationObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerHarvesterInstallationObjectTemplate::getCompilerIntegerParam + +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_masterClassName; + } + fprintf(stderr, "trying to access single-parameter \"masterClassName\" as an array\n"); + } + else + return ServerInstallationObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerHarvesterInstallationObjectTemplate::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + ServerInstallationObjectTemplate::setAsEmptyList(name); +} // ServerHarvesterInstallationObjectTemplate::setAsEmptyList + +void ServerHarvesterInstallationObjectTemplate::setAppend(const char *name) +{ + ServerInstallationObjectTemplate::setAppend(name); +} // ServerHarvesterInstallationObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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.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 + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.h new file mode 100644 index 00000000..d8ce5df6 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerHarvesterInstallationObjectTemplate.h @@ -0,0 +1,92 @@ +//======================================================================== +// +// ServerHarvesterInstallationObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerHarvesterInstallationObjectTemplate_H +#define _INCLUDED_ServerHarvesterInstallationObjectTemplate_H + +#include "ServerInstallationObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerHarvesterInstallationObjectTemplate : public ServerInstallationObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerHarvesterInstallationObjectTemplate_tag = TAG(H,I,N,O) + }; +//@END TFD ID +public: + ServerHarvesterInstallationObjectTemplate(const std::string & filename); + virtual ~ServerHarvesterInstallationObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_maxExtractionRate; // max extraction rate + CompilerIntegerParam m_currentExtractionRate; // rate at which the machine could currently operate + CompilerIntegerParam m_maxHopperSize; // max extracted resource storage capacity of the installation + StringParam m_masterClassName; // highest level resource class that the harverster can extract +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerHarvesterInstallationObjectTemplate(const ServerHarvesterInstallationObjectTemplate &); + ServerHarvesterInstallationObjectTemplate & operator =(const ServerHarvesterInstallationObjectTemplate &); +}; + + +inline void ServerHarvesterInstallationObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerHarvesterInstallationObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerHarvesterInstallationObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.cpp new file mode 100644 index 00000000..41e392a3 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerInstallationObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerInstallationObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerInstallationObjectTemplate::ServerInstallationObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerInstallationObjectTemplate::ServerInstallationObjectTemplate + +/** + * Class destructor. + */ +ServerInstallationObjectTemplate::~ServerInstallationObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerInstallationObjectTemplate::~ServerInstallationObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerInstallationObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerInstallationObjectTemplate_tag, create); +} // ServerInstallationObjectTemplate::registerMe + +/** + * Creates a ServerInstallationObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerInstallationObjectTemplate::create(const std::string & filename) +{ + return new ServerInstallationObjectTemplate(filename); +} // ServerInstallationObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerInstallationObjectTemplate::getId(void) const +{ + return ServerInstallationObjectTemplate_tag; +} // ServerInstallationObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerInstallationObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerInstallationObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerInstallationObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerInstallationObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerInstallationObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerInstallationObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerInstallationObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getFloatParam + +BoolParam * ServerInstallationObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getBoolParam + +StringParam * ServerInstallationObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getStringParam + +StringIdParam * ServerInstallationObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getStringIdParam + +VectorParam * ServerInstallationObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getVectorParam + +DynamicVariableParam * ServerInstallationObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerInstallationObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerInstallationObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerInstallationObjectTemplate::getTriggerVolumeParam + +void ServerInstallationObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerInstallationObjectTemplate::initStructParamOT + +void ServerInstallationObjectTemplate::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerInstallationObjectTemplate::setAsEmptyList + +void ServerInstallationObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerInstallationObjectTemplate::setAppend + +bool ServerInstallationObjectTemplate::isAppend(const char *name) const +{ + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerInstallationObjectTemplate::isAppend + + +int ServerInstallationObjectTemplate::getListLength(const char *name) const +{ + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerInstallationObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerInstallationObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerInstallationObjectTemplate_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 == 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + file.enterForm(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerInstallationObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerInstallationObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerInstallationObjectTemplate_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; + + + // 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); +} // ServerInstallationObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.h new file mode 100644 index 00000000..57986917 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerInstallationObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerInstallationObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerInstallationObjectTemplate_H +#define _INCLUDED_ServerInstallationObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerInstallationObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerInstallationObjectTemplate_tag = TAG(I,N,S,O) + }; +//@END TFD ID +public: + ServerInstallationObjectTemplate(const std::string & filename); + virtual ~ServerInstallationObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerInstallationObjectTemplate(const ServerInstallationObjectTemplate &); + ServerInstallationObjectTemplate & operator =(const ServerInstallationObjectTemplate &); +}; + + +inline void ServerInstallationObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerInstallationObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerInstallationObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.cpp new file mode 100644 index 00000000..1bea711a --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.cpp @@ -0,0 +1,1080 @@ +//======================================================================== +// +// ServerIntangibleObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerIntangibleObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerIntangibleObjectTemplate::ServerIntangibleObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerIntangibleObjectTemplate::ServerIntangibleObjectTemplate + +/** + * Class destructor. + */ +ServerIntangibleObjectTemplate::~ServerIntangibleObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerIntangibleObjectTemplate::~ServerIntangibleObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerIntangibleObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerIntangibleObjectTemplate_tag, create); +} // ServerIntangibleObjectTemplate::registerMe + +/** + * Creates a ServerIntangibleObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerIntangibleObjectTemplate::create(const std::string & filename) +{ + return new ServerIntangibleObjectTemplate(filename); +} // ServerIntangibleObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerIntangibleObjectTemplate::getId(void) const +{ + return ServerIntangibleObjectTemplate_tag; +} // ServerIntangibleObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerIntangibleObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerIntangibleObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerIntangibleObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerIntangibleObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerIntangibleObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerIntangibleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "count") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_count; + } + fprintf(stderr, "trying to access single-parameter \"count\" as an array\n"); + } + else + return ServerObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerIntangibleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getFloatParam + +BoolParam * ServerIntangibleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getBoolParam + +StringParam * ServerIntangibleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getStringParam + +StringIdParam * ServerIntangibleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getStringIdParam + +VectorParam * ServerIntangibleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getVectorParam + +DynamicVariableParam * ServerIntangibleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerIntangibleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerIntangibleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::getTriggerVolumeParam + +void ServerIntangibleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerObjectTemplate::initStructParamOT(param, name); +} // ServerIntangibleObjectTemplate::initStructParamOT + +void ServerIntangibleObjectTemplate::setAsEmptyList(const char *name) +{ + ServerObjectTemplate::setAsEmptyList(name); +} // ServerIntangibleObjectTemplate::setAsEmptyList + +void ServerIntangibleObjectTemplate::setAppend(const char *name) +{ + ServerObjectTemplate::setAppend(name); +} // ServerIntangibleObjectTemplate::setAppend + +bool ServerIntangibleObjectTemplate::isAppend(const char *name) const +{ + return ServerObjectTemplate::isAppend(name); +} // ServerIntangibleObjectTemplate::isAppend + + +int ServerIntangibleObjectTemplate::getListLength(const char *name) const +{ + return ServerObjectTemplate::getListLength(name); +} // ServerIntangibleObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerIntangibleObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerIntangibleObjectTemplate_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 == 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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, "count") == 0) + m_count.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + ServerObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerIntangibleObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerIntangibleObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerIntangibleObjectTemplate_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; + + // save count + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("count"); + m_count.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(); + + file.exitForm(true); + ServerObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerIntangibleObjectTemplate::save + + +//============================================================================= +// class ServerIntangibleObjectTemplate::_Ingredient + +/** + * Class constructor. + */ +ServerIntangibleObjectTemplate::_Ingredient::_Ingredient(const std::string & filename) + : TpfTemplate(filename) + ,m_ingredientsLoaded(false) + ,m_ingredientsAppend(false) +{ +} // ServerIntangibleObjectTemplate::_Ingredient::_Ingredient + +/** + * Class destructor. + */ +ServerIntangibleObjectTemplate::_Ingredient::~_Ingredient() +{ + { + std::vector::iterator iter; + for (iter = m_ingredients.begin(); iter != m_ingredients.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_ingredients.clear(); + } +} // ServerIntangibleObjectTemplate::_Ingredient::~_Ingredient + +/** + * Static function used to register this template. + */ +void ServerIntangibleObjectTemplate::_Ingredient::registerMe(void) +{ + ObjectTemplateList::registerTemplate(_Ingredient_tag, create); +} // ServerIntangibleObjectTemplate::_Ingredient::registerMe + +/** + * Creates a ServerIntangibleObjectTemplate::_Ingredient template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerIntangibleObjectTemplate::_Ingredient::create(const std::string & filename) +{ + return new ServerIntangibleObjectTemplate::_Ingredient(filename); +} // ServerIntangibleObjectTemplate::_Ingredient::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerIntangibleObjectTemplate::_Ingredient::getId(void) const +{ + return _Ingredient_tag; +} // ServerIntangibleObjectTemplate::_Ingredient::getId + +CompilerIntegerParam * ServerIntangibleObjectTemplate::_Ingredient::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "ingredientType") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_ingredientType; + } + fprintf(stderr, "trying to access single-parameter \"ingredientType\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_Ingredient::getCompilerIntegerParam + +FloatParam * ServerIntangibleObjectTemplate::_Ingredient::getFloatParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "complexity") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_complexity; + } + fprintf(stderr, "trying to access single-parameter \"complexity\" as an array\n"); + } + else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_Ingredient::getFloatParam + +BoolParam * ServerIntangibleObjectTemplate::_Ingredient::getBoolParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_Ingredient::getBoolParam + +StringParam * ServerIntangibleObjectTemplate::_Ingredient::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "skillCommand") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_skillCommand; + } + fprintf(stderr, "trying to access single-parameter \"skillCommand\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_Ingredient::getStringParam + +StringIdParam * ServerIntangibleObjectTemplate::_Ingredient::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_Ingredient::getStringIdParam + +VectorParam * ServerIntangibleObjectTemplate::_Ingredient::getVectorParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_Ingredient::getVectorParam + +DynamicVariableParam * ServerIntangibleObjectTemplate::_Ingredient::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_Ingredient::getDynamicVariableParam + +StructParamOT * ServerIntangibleObjectTemplate::_Ingredient::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 + return TpfTemplate::getStructParamOT(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_Ingredient::getStructParamOT + +TriggerVolumeParam * ServerIntangibleObjectTemplate::_Ingredient::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_Ingredient::getTriggerVolumeParam + +void ServerIntangibleObjectTemplate::_Ingredient::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + if (strcmp(name, "ingredients") == 0) + param.setValue(new _SimpleIngredient("")); + else + TpfTemplate::initStructParamOT(param, name); +} // ServerIntangibleObjectTemplate::_Ingredient::initStructParamOT + +void ServerIntangibleObjectTemplate::_Ingredient::setAsEmptyList(const char *name) +{ + if (strcmp(name, "ingredients") == 0) + { + m_ingredients.clear(); + m_ingredientsLoaded = true; + } + else + TpfTemplate::setAsEmptyList(name); +} // ServerIntangibleObjectTemplate::_Ingredient::setAsEmptyList + +void ServerIntangibleObjectTemplate::_Ingredient::setAppend(const char *name) +{ + if (strcmp(name, "ingredients") == 0) + m_ingredientsAppend = true; + else + TpfTemplate::setAppend(name); +} // ServerIntangibleObjectTemplate::_Ingredient::setAppend + +bool ServerIntangibleObjectTemplate::_Ingredient::isAppend(const char *name) const +{ + if (strcmp(name, "ingredients") == 0) + return m_ingredientsAppend; + else + return TpfTemplate::isAppend(name); +} // ServerIntangibleObjectTemplate::_Ingredient::isAppend + + +int ServerIntangibleObjectTemplate::_Ingredient::getListLength(const char *name) const +{ + if (strcmp(name, "ingredients") == 0) + { + return m_ingredients.size(); + } + else + return TpfTemplate::getListLength(name); +} // ServerIntangibleObjectTemplate::_Ingredient::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerIntangibleObjectTemplate::_Ingredient::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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, "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) + { + delete *iter; + *iter = NULL; + } + 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, "complexity") == 0) + m_complexity.loadFromIff(file); + else if (strcmp(paramName, "skillCommand") == 0) + m_skillCommand.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // ServerIntangibleObjectTemplate::_Ingredient::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerIntangibleObjectTemplate::_Ingredient::save(Iff &file) +{ +int count; + + file.insertForm(_Ingredient_tag); + + int paramCount = 0; + + // save ingredientType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("ingredientType"); + m_ingredientType.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 complexity + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("complexity"); + m_complexity.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save skillCommand + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("skillCommand"); + m_skillCommand.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(); + + file.exitForm(true); +} // ServerIntangibleObjectTemplate::_Ingredient::save + + +//============================================================================= +// class ServerIntangibleObjectTemplate::_SchematicAttribute + +/** + * Class constructor. + */ +ServerIntangibleObjectTemplate::_SchematicAttribute::_SchematicAttribute(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerIntangibleObjectTemplate::_SchematicAttribute::_SchematicAttribute + +/** + * Class destructor. + */ +ServerIntangibleObjectTemplate::_SchematicAttribute::~_SchematicAttribute() +{ +} // ServerIntangibleObjectTemplate::_SchematicAttribute::~_SchematicAttribute + +/** + * Static function used to register this template. + */ +void ServerIntangibleObjectTemplate::_SchematicAttribute::registerMe(void) +{ + ObjectTemplateList::registerTemplate(_SchematicAttribute_tag, create); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::registerMe + +/** + * Creates a ServerIntangibleObjectTemplate::_SchematicAttribute template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerIntangibleObjectTemplate::_SchematicAttribute::create(const std::string & filename) +{ + return new ServerIntangibleObjectTemplate::_SchematicAttribute(filename); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerIntangibleObjectTemplate::_SchematicAttribute::getId(void) const +{ + return _SchematicAttribute_tag; +} // ServerIntangibleObjectTemplate::_SchematicAttribute::getId + +CompilerIntegerParam * ServerIntangibleObjectTemplate::_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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getCompilerIntegerParam + +FloatParam * ServerIntangibleObjectTemplate::_SchematicAttribute::getFloatParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getFloatParam + +BoolParam * ServerIntangibleObjectTemplate::_SchematicAttribute::getBoolParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getBoolParam + +StringParam * ServerIntangibleObjectTemplate::_SchematicAttribute::getStringParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getStringParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getStringParam + +StringIdParam * ServerIntangibleObjectTemplate::_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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } + else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getStringIdParam + +VectorParam * ServerIntangibleObjectTemplate::_SchematicAttribute::getVectorParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getVectorParam + +DynamicVariableParam * ServerIntangibleObjectTemplate::_SchematicAttribute::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getDynamicVariableParam + +StructParamOT * ServerIntangibleObjectTemplate::_SchematicAttribute::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getStructParamOT + +TriggerVolumeParam * ServerIntangibleObjectTemplate::_SchematicAttribute::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SchematicAttribute::getTriggerVolumeParam + +void ServerIntangibleObjectTemplate::_SchematicAttribute::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::initStructParamOT + +void ServerIntangibleObjectTemplate::_SchematicAttribute::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::setAsEmptyList + +void ServerIntangibleObjectTemplate::_SchematicAttribute::setAppend(const char *name) +{ + TpfTemplate::setAppend(name); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::setAppend + +bool ServerIntangibleObjectTemplate::_SchematicAttribute::isAppend(const char *name) const +{ + return TpfTemplate::isAppend(name); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::isAppend + + +int ServerIntangibleObjectTemplate::_SchematicAttribute::getListLength(const char *name) const +{ + return TpfTemplate::getListLength(name); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerIntangibleObjectTemplate::_SchematicAttribute::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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, "value") == 0) + m_value.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerIntangibleObjectTemplate::_SchematicAttribute::save(Iff &file) +{ +int count; + + file.insertForm(_SchematicAttribute_tag); + + int paramCount = 0; + + // save name + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("name"); + m_name.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(); + + file.exitForm(true); + UNREF(count); +} // ServerIntangibleObjectTemplate::_SchematicAttribute::save + + +//============================================================================= +// class ServerIntangibleObjectTemplate::_SimpleIngredient + +/** + * Class constructor. + */ +ServerIntangibleObjectTemplate::_SimpleIngredient::_SimpleIngredient(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerIntangibleObjectTemplate::_SimpleIngredient::_SimpleIngredient + +/** + * Class destructor. + */ +ServerIntangibleObjectTemplate::_SimpleIngredient::~_SimpleIngredient() +{ +} // ServerIntangibleObjectTemplate::_SimpleIngredient::~_SimpleIngredient + +/** + * Static function used to register this template. + */ +void ServerIntangibleObjectTemplate::_SimpleIngredient::registerMe(void) +{ + ObjectTemplateList::registerTemplate(_SimpleIngredient_tag, create); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::registerMe + +/** + * Creates a ServerIntangibleObjectTemplate::_SimpleIngredient template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerIntangibleObjectTemplate::_SimpleIngredient::create(const std::string & filename) +{ + return new ServerIntangibleObjectTemplate::_SimpleIngredient(filename); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerIntangibleObjectTemplate::_SimpleIngredient::getId(void) const +{ + return _SimpleIngredient_tag; +} // ServerIntangibleObjectTemplate::_SimpleIngredient::getId + +CompilerIntegerParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "count") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_count; + } + fprintf(stderr, "trying to access single-parameter \"count\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getCompilerIntegerParam + +FloatParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getFloatParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getFloatParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getFloatParam + +BoolParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getBoolParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getBoolParam + +StringParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "ingredient") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_ingredient; + } + fprintf(stderr, "trying to access single-parameter \"ingredient\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getStringParam + +StringIdParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getStringIdParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "name") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } + else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return NULL; +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getStringIdParam + +VectorParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getVectorParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getVectorParam + +DynamicVariableParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getDynamicVariableParam + +StructParamOT * ServerIntangibleObjectTemplate::_SimpleIngredient::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getStructParamOT + +TriggerVolumeParam * ServerIntangibleObjectTemplate::_SimpleIngredient::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerIntangibleObjectTemplate::_SimpleIngredient::getTriggerVolumeParam + +void ServerIntangibleObjectTemplate::_SimpleIngredient::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::initStructParamOT + +void ServerIntangibleObjectTemplate::_SimpleIngredient::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::setAsEmptyList + +void ServerIntangibleObjectTemplate::_SimpleIngredient::setAppend(const char *name) +{ + TpfTemplate::setAppend(name); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::setAppend + +bool ServerIntangibleObjectTemplate::_SimpleIngredient::isAppend(const char *name) const +{ + return TpfTemplate::isAppend(name); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::isAppend + + +int ServerIntangibleObjectTemplate::_SimpleIngredient::getListLength(const char *name) const +{ + return TpfTemplate::getListLength(name); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerIntangibleObjectTemplate::_SimpleIngredient::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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); + else if (strcmp(paramName, "count") == 0) + m_count.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + UNREF(file); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerIntangibleObjectTemplate::_SimpleIngredient::save(Iff &file) +{ +int count; + + file.insertForm(_SimpleIngredient_tag); + + 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 count + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("count"); + m_count.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(); + + file.exitForm(true); + UNREF(count); +} // ServerIntangibleObjectTemplate::_SimpleIngredient::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.h new file mode 100644 index 00000000..2bcddd26 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerIntangibleObjectTemplate.h @@ -0,0 +1,279 @@ +//======================================================================== +// +// ServerIntangibleObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerIntangibleObjectTemplate_H +#define _INCLUDED_ServerIntangibleObjectTemplate_H + +#include "ServerObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerIntangibleObjectTemplate : public ServerObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerIntangibleObjectTemplate_tag = TAG(I,T,N,O) + }; +//@END TFD ID +public: + ServerIntangibleObjectTemplate(const std::string & filename); + virtual ~ServerIntangibleObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum IngredientType + { + IT_none, // no item (for empty/unused slots) + IT_item, // a specific item (Skywalker barrel mark V) + IT_template, // any item created from a template (any small_blaster_barrel) + IT_resourceType, // a specific resource type (iron type 5) + IT_resourceClass, // any resource of a resource class (ferrous metal) + IT_templateGeneric, // same as IT_template, but if multiple components are required, they don't have to be the same exact type as the first component used + IT_schematic, // item crafted from a draft schematic + IT_schematicGeneric, // same as IT_schematic, but if multiple components are required, they don't have to be the same exact type as the first component used + IngredientType_Last = IT_schematicGeneric, + }; + +public: + struct SimpleIngredient + { + StringId name; + std::string ingredient; + int count; + }; + + struct Ingredient + { + enum IngredientType ingredientType; + stdvector::fwd ingredients; + float complexity; + std::string skillCommand; + }; + + struct SchematicAttribute + { + StringId name; + int value; + }; + +protected: + class _SimpleIngredient : public TpfTemplate + { + friend class ServerIntangibleObjectTemplate; + public: + enum + { + _SimpleIngredient_tag = TAG(S,I,N,G) + }; + + public: + _SimpleIngredient(const std::string & filename); + virtual ~_SimpleIngredient(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringIdParam m_name; // name of ingredient that is given to players + StringParam m_ingredient; // name of ingredient used to match the resource/component name + CompilerIntegerParam m_count; // number of ingredients + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _SimpleIngredient(const _SimpleIngredient &); + _SimpleIngredient & operator =(const _SimpleIngredient &); + }; + friend class ServerIntangibleObjectTemplate::_SimpleIngredient; + + class _Ingredient : public TpfTemplate + { + friend class ServerIntangibleObjectTemplate; + public: + enum + { + _Ingredient_tag = TAG(I,N,G,R) + }; + + public: + _Ingredient(const std::string & filename); + virtual ~_Ingredient(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_ingredientType; // type of ingredient required + stdvector::fwd m_ingredients; // ingredients to be used/being used + bool m_ingredientsLoaded; + bool m_ingredientsAppend; + FloatParam m_complexity; // adjustment to complexity by using this ingredient + StringParam m_skillCommand; // skill command needed to use this ingredient + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _Ingredient(const _Ingredient &); + _Ingredient & operator =(const _Ingredient &); + }; + friend class ServerIntangibleObjectTemplate::_Ingredient; + + class _SchematicAttribute : public TpfTemplate + { + friend class ServerIntangibleObjectTemplate; + public: + enum + { + _SchematicAttribute_tag = TAG(I,T,A,T) + }; + + public: + _SchematicAttribute(const std::string & filename); + virtual ~_SchematicAttribute(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringIdParam m_name; // name of the attribute + CompilerIntegerParam m_value; // value of the attribute - a range for draft schematics and a single value for manufacture schematics + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _SchematicAttribute(const _SchematicAttribute &); + _SchematicAttribute & operator =(const _SchematicAttribute &); + }; + friend class ServerIntangibleObjectTemplate::_SchematicAttribute; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + // + // shared info needed by draft and manufacturing schematics + // + // this enum list must be reflected in MessageQueueIngredients.h + CompilerIntegerParam m_count; // generic counter +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerIntangibleObjectTemplate(const ServerIntangibleObjectTemplate &); + ServerIntangibleObjectTemplate & operator =(const ServerIntangibleObjectTemplate &); +}; + + +inline void ServerIntangibleObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerIntangibleObjectTemplate::registerMe(); + ServerIntangibleObjectTemplate::_Ingredient::registerMe(); + ServerIntangibleObjectTemplate::_SchematicAttribute::registerMe(); + ServerIntangibleObjectTemplate::_SimpleIngredient::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerIntangibleObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.cpp new file mode 100644 index 00000000..1ae59020 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerJediManagerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerJediManagerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerJediManagerObjectTemplate::ServerJediManagerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerJediManagerObjectTemplate::ServerJediManagerObjectTemplate + +/** + * Class destructor. + */ +ServerJediManagerObjectTemplate::~ServerJediManagerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerJediManagerObjectTemplate::~ServerJediManagerObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerJediManagerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerJediManagerObjectTemplate_tag, create); +} // ServerJediManagerObjectTemplate::registerMe + +/** + * Creates a ServerJediManagerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerJediManagerObjectTemplate::create(const std::string & filename) +{ + return new ServerJediManagerObjectTemplate(filename); +} // ServerJediManagerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerJediManagerObjectTemplate::getId(void) const +{ + return ServerJediManagerObjectTemplate_tag; +} // ServerJediManagerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerJediManagerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerJediManagerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerJediManagerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerJediManagerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerJediManagerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerJediManagerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerJediManagerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getFloatParam + +BoolParam * ServerJediManagerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getBoolParam + +StringParam * ServerJediManagerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getStringParam + +StringIdParam * ServerJediManagerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getStringIdParam + +VectorParam * ServerJediManagerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getVectorParam + +DynamicVariableParam * ServerJediManagerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerJediManagerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerJediManagerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerJediManagerObjectTemplate::getTriggerVolumeParam + +void ServerJediManagerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerJediManagerObjectTemplate::initStructParamOT + +void ServerJediManagerObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerJediManagerObjectTemplate::setAsEmptyList + +void ServerJediManagerObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerJediManagerObjectTemplate::setAppend + +bool ServerJediManagerObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerJediManagerObjectTemplate::isAppend + + +int ServerJediManagerObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerJediManagerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerJediManagerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerJediManagerObjectTemplate_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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerJediManagerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerJediManagerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerJediManagerObjectTemplate_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; + + + // 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); +} // ServerJediManagerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.h new file mode 100644 index 00000000..cd02d8a1 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerJediManagerObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerJediManagerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerJediManagerObjectTemplate_H +#define _INCLUDED_ServerJediManagerObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerJediManagerObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerJediManagerObjectTemplate_tag = TAG(J,E,D,I) + }; +//@END TFD ID +public: + ServerJediManagerObjectTemplate(const std::string & filename); + virtual ~ServerJediManagerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerJediManagerObjectTemplate(const ServerJediManagerObjectTemplate &); + ServerJediManagerObjectTemplate & operator =(const ServerJediManagerObjectTemplate &); +}; + + +inline void ServerJediManagerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerJediManagerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerJediManagerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.cpp new file mode 100644 index 00000000..37225a34 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerManufactureInstallationObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerManufactureInstallationObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerManufactureInstallationObjectTemplate::ServerManufactureInstallationObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerInstallationObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerManufactureInstallationObjectTemplate::ServerManufactureInstallationObjectTemplate + +/** + * Class destructor. + */ +ServerManufactureInstallationObjectTemplate::~ServerManufactureInstallationObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerManufactureInstallationObjectTemplate::~ServerManufactureInstallationObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerManufactureInstallationObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerManufactureInstallationObjectTemplate_tag, create); +} // ServerManufactureInstallationObjectTemplate::registerMe + +/** + * Creates a ServerManufactureInstallationObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerManufactureInstallationObjectTemplate::create(const std::string & filename) +{ + return new ServerManufactureInstallationObjectTemplate(filename); +} // ServerManufactureInstallationObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerManufactureInstallationObjectTemplate::getId(void) const +{ + return ServerManufactureInstallationObjectTemplate_tag; +} // ServerManufactureInstallationObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerManufactureInstallationObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerManufactureInstallationObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerManufactureInstallationObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerManufactureInstallationObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerManufactureInstallationObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerManufactureInstallationObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerManufactureInstallationObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getFloatParam + +BoolParam * ServerManufactureInstallationObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getBoolParam + +StringParam * ServerManufactureInstallationObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getStringParam + +StringIdParam * ServerManufactureInstallationObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getStringIdParam + +VectorParam * ServerManufactureInstallationObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getVectorParam + +DynamicVariableParam * ServerManufactureInstallationObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerManufactureInstallationObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerManufactureInstallationObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerInstallationObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerManufactureInstallationObjectTemplate::getTriggerVolumeParam + +void ServerManufactureInstallationObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerInstallationObjectTemplate::initStructParamOT(param, name); +} // ServerManufactureInstallationObjectTemplate::initStructParamOT + +void ServerManufactureInstallationObjectTemplate::setAsEmptyList(const char *name) +{ + ServerInstallationObjectTemplate::setAsEmptyList(name); +} // ServerManufactureInstallationObjectTemplate::setAsEmptyList + +void ServerManufactureInstallationObjectTemplate::setAppend(const char *name) +{ + ServerInstallationObjectTemplate::setAppend(name); +} // ServerManufactureInstallationObjectTemplate::setAppend + +bool ServerManufactureInstallationObjectTemplate::isAppend(const char *name) const +{ + return ServerInstallationObjectTemplate::isAppend(name); +} // ServerManufactureInstallationObjectTemplate::isAppend + + +int ServerManufactureInstallationObjectTemplate::getListLength(const char *name) const +{ + return ServerInstallationObjectTemplate::getListLength(name); +} // ServerManufactureInstallationObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerManufactureInstallationObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerManufactureInstallationObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerInstallationObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerManufactureInstallationObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerManufactureInstallationObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerManufactureInstallationObjectTemplate_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; + + + // 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); +} // ServerManufactureInstallationObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.h new file mode 100644 index 00000000..190a65b9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureInstallationObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerManufactureInstallationObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerManufactureInstallationObjectTemplate_H +#define _INCLUDED_ServerManufactureInstallationObjectTemplate_H + +#include "ServerInstallationObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerManufactureInstallationObjectTemplate : public ServerInstallationObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerManufactureInstallationObjectTemplate_tag = TAG(M,I,N,O) + }; +//@END TFD ID +public: + ServerManufactureInstallationObjectTemplate(const std::string & filename); + virtual ~ServerManufactureInstallationObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerManufactureInstallationObjectTemplate(const ServerManufactureInstallationObjectTemplate &); + ServerManufactureInstallationObjectTemplate & operator =(const ServerManufactureInstallationObjectTemplate &); +}; + + +inline void ServerManufactureInstallationObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerManufactureInstallationObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerManufactureInstallationObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp new file mode 100644 index 00000000..2a303fcf --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.cpp @@ -0,0 +1,713 @@ +//======================================================================== +// +// ServerManufactureSchematicObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerManufactureSchematicObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerManufactureSchematicObjectTemplate::ServerManufactureSchematicObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerIntangibleObjectTemplate(filename) + ,m_ingredientsLoaded(false) + ,m_ingredientsAppend(false) + ,m_attributesLoaded(false) + ,m_attributesAppend(false) +//@END TFD INIT +{ +} // ServerManufactureSchematicObjectTemplate::ServerManufactureSchematicObjectTemplate + +/** + * Class destructor. + */ +ServerManufactureSchematicObjectTemplate::~ServerManufactureSchematicObjectTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_ingredients.begin(); iter != m_ingredients.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_ingredients.clear(); + } + { + std::vector::iterator iter; + for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_attributes.clear(); + } +//@END TFD CLEANUP +} // ServerManufactureSchematicObjectTemplate::~ServerManufactureSchematicObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerManufactureSchematicObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_itemCount; + } + fprintf(stderr, "trying to access single-parameter \"itemCount\" as an array\n"); + } + else + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerManufactureSchematicObjectTemplate::getCompilerIntegerParam + +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_creator; + } + fprintf(stderr, "trying to access single-parameter \"creator\" as an array\n"); + } + else + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerManufactureSchematicObjectTemplate::getStringParam + +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 + +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 NULL; +} //ServerManufactureSchematicObjectTemplate::getStructParamOT + +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::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::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 + +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 + + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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.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 = NULL; + } + 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 = NULL; + } + 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.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerManufactureSchematicObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + + +//============================================================================= +// class ServerManufactureSchematicObjectTemplate::_IngredientSlot + +/** + * Class constructor. + */ +ServerManufactureSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::_IngredientSlot + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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 + +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 + +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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } + else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return NULL; +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStringIdParam + +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 + +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() != NULL) + return getBaseTemplate()->getStructParamOT(name, deepCheck, index); + return NULL; + } + return &m_ingredient; + } + fprintf(stderr, "trying to access single-parameter \"ingredient\" as an array\n"); + } + else + return TpfTemplate::getStructParamOT(name, deepCheck, index); + return NULL; +} //ServerManufactureSchematicObjectTemplate::_IngredientSlot::getStructParamOT + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void ServerManufactureSchematicObjectTemplate::_IngredientSlot::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // ServerManufactureSchematicObjectTemplate::_IngredientSlot::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerManufactureSchematicObjectTemplate::_IngredientSlot::save(Iff &file) +{ +int count; + + file.insertForm(_IngredientSlot_tag); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.h new file mode 100644 index 00000000..ea0a7a72 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerManufactureSchematicObjectTemplate.h @@ -0,0 +1,153 @@ +//======================================================================== +// +// ServerManufactureSchematicObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerManufactureSchematicObjectTemplate_H +#define _INCLUDED_ServerManufactureSchematicObjectTemplate_H + +#include "ServerIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerManufactureSchematicObjectTemplate : public ServerIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerManufactureSchematicObjectTemplate_tag = TAG(M,S,C,O) + }; +//@END TFD ID +public: + ServerManufactureSchematicObjectTemplate(const std::string & filename); + virtual ~ServerManufactureSchematicObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + struct IngredientSlot + { + StringId name; + Ingredient ingredient; + }; + +protected: + class _IngredientSlot : public TpfTemplate + { + friend class ServerManufactureSchematicObjectTemplate; + public: + enum + { + _IngredientSlot_tag = TAG(M,I,N,S) + }; + + public: + _IngredientSlot(const std::string & filename); + virtual ~_IngredientSlot(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringIdParam m_name; // slot name + StructParamOT m_ingredient; // ingredient used to fill the slot + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _IngredientSlot(const _IngredientSlot &); + _IngredientSlot & operator =(const _IngredientSlot &); + }; + friend class ServerManufactureSchematicObjectTemplate::_IngredientSlot; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_draftSchematic; // source draft schematic + StringParam m_creator; // who created me + stdvector::fwd m_ingredients; // ingredients needed to create + bool m_ingredientsLoaded; + bool m_ingredientsAppend; + CompilerIntegerParam m_itemCount; // number of items this schematic can make + stdvector::fwd m_attributes; // values for the attributes the schematic affects + bool m_attributesLoaded; + bool m_attributesAppend; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerManufactureSchematicObjectTemplate(const ServerManufactureSchematicObjectTemplate &); + ServerManufactureSchematicObjectTemplate & operator =(const ServerManufactureSchematicObjectTemplate &); +}; + + +inline void ServerManufactureSchematicObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerManufactureSchematicObjectTemplate::registerMe(); + ServerManufactureSchematicObjectTemplate::_IngredientSlot::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerManufactureSchematicObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.cpp new file mode 100644 index 00000000..23b22788 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerMissionObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerMissionObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerMissionObjectTemplate::ServerMissionObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerMissionObjectTemplate::ServerMissionObjectTemplate + +/** + * Class destructor. + */ +ServerMissionObjectTemplate::~ServerMissionObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerMissionObjectTemplate::~ServerMissionObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerMissionObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerMissionObjectTemplate_tag, create); +} // ServerMissionObjectTemplate::registerMe + +/** + * Creates a ServerMissionObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerMissionObjectTemplate::create(const std::string & filename) +{ + return new ServerMissionObjectTemplate(filename); +} // ServerMissionObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerMissionObjectTemplate::getId(void) const +{ + return ServerMissionObjectTemplate_tag; +} // ServerMissionObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerMissionObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerMissionObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerMissionObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerMissionObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerMissionObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerMissionObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerMissionObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getFloatParam + +BoolParam * ServerMissionObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getBoolParam + +StringParam * ServerMissionObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getStringParam + +StringIdParam * ServerMissionObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getStringIdParam + +VectorParam * ServerMissionObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getVectorParam + +DynamicVariableParam * ServerMissionObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerMissionObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerMissionObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerMissionObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerMissionObjectTemplate::getTriggerVolumeParam + +void ServerMissionObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerIntangibleObjectTemplate::initStructParamOT(param, name); +} // ServerMissionObjectTemplate::initStructParamOT + +void ServerMissionObjectTemplate::setAsEmptyList(const char *name) +{ + ServerIntangibleObjectTemplate::setAsEmptyList(name); +} // ServerMissionObjectTemplate::setAsEmptyList + +void ServerMissionObjectTemplate::setAppend(const char *name) +{ + ServerIntangibleObjectTemplate::setAppend(name); +} // ServerMissionObjectTemplate::setAppend + +bool ServerMissionObjectTemplate::isAppend(const char *name) const +{ + return ServerIntangibleObjectTemplate::isAppend(name); +} // ServerMissionObjectTemplate::isAppend + + +int ServerMissionObjectTemplate::getListLength(const char *name) const +{ + return ServerIntangibleObjectTemplate::getListLength(name); +} // ServerMissionObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerMissionObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerMissionObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerMissionObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerMissionObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerMissionObjectTemplate_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; + + + // 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(); + UNREF(count); +} // ServerMissionObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.h new file mode 100644 index 00000000..9668ac1f --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerMissionObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerMissionObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerMissionObjectTemplate_H +#define _INCLUDED_ServerMissionObjectTemplate_H + +#include "ServerIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerMissionObjectTemplate : public ServerIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerMissionObjectTemplate_tag = TAG(M,I,S,O) + }; +//@END TFD ID +public: + ServerMissionObjectTemplate(const std::string & filename); + virtual ~ServerMissionObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerMissionObjectTemplate(const ServerMissionObjectTemplate &); + ServerMissionObjectTemplate & operator =(const ServerMissionObjectTemplate &); +}; + + +inline void ServerMissionObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerMissionObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerMissionObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp new file mode 100644 index 00000000..420ecf95 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.cpp @@ -0,0 +1,1981 @@ +//======================================================================== +// +// ServerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +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) +//@END TFD INIT +{ +} // ServerObjectTemplate::ServerObjectTemplate + +/** + * Class destructor. + */ +ServerObjectTemplate::~ServerObjectTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_scripts.begin(); iter != m_scripts.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_scripts.clear(); + } + { + std::vector::iterator iter; + for (iter = m_visibleFlags.begin(); iter != m_visibleFlags.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_visibleFlags.clear(); + } + { + std::vector::iterator iter; + for (iter = m_deleteFlags.begin(); iter != m_deleteFlags.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_deleteFlags.clear(); + } + { + std::vector::iterator iter; + for (iter = m_moveFlags.begin(); iter != m_moveFlags.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_moveFlags.clear(); + } + { + std::vector::iterator iter; + for (iter = m_contents.begin(); iter != m_contents.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_contents.clear(); + } + { + std::vector::iterator iter; + for (iter = m_xpPoints.begin(); iter != m_xpPoints.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_xpPoints.clear(); + } +//@END TFD CLEANUP +} // ServerObjectTemplate::~ServerObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_tintIndex; + } + fprintf(stderr, "trying to access single-parameter \"tintIndex\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_updateRanges[index]; + } + fprintf(stderr, "index for parameter \"updateRanges\" out of bounds\n"); + } + else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_persistContents; + } + fprintf(stderr, "trying to access single-parameter \"persistContents\" as an array\n"); + } + else + return TpfTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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 NULL; +} //ServerObjectTemplate::getStringParam + +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 + +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() != NULL) + return getBaseTemplate()->getDynamicVariableParam(name, deepCheck, index); + return NULL; + } + return &m_objvars; + } + fprintf(stderr, "trying to access single-parameter \"objvars\" as an array\n"); + } + else + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); + return NULL; +} //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 NULL; +} //ServerObjectTemplate::getStructParamOT + +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::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 + +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 + +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 + + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,1,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // ServerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + + +//============================================================================= +// class ServerObjectTemplate::_AttribMod + +/** + * Class constructor. + */ +ServerObjectTemplate::_AttribMod::_AttribMod(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerObjectTemplate::_AttribMod::_AttribMod + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_decay; + } + fprintf(stderr, "trying to access single-parameter \"decay\" as an array\n"); + } + else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //ServerObjectTemplate::_AttribMod::getFloatParam + +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 + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // ServerObjectTemplate::_AttribMod::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void ServerObjectTemplate::_AttribMod::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_AttribMod::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerObjectTemplate::_AttribMod::save(Iff &file) +{ +int count; + + file.insertForm(_AttribMod_tag); + + 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; + + // 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 + + +//============================================================================= +// class ServerObjectTemplate::_Contents + +/** + * Class constructor. + */ +ServerObjectTemplate::_Contents::_Contents(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerObjectTemplate::_Contents::_Contents + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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 + +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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_equipObject; + } + fprintf(stderr, "trying to access single-parameter \"equipObject\" as an array\n"); + } + else + return TpfTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_content; + } + fprintf(stderr, "trying to access single-parameter \"content\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerObjectTemplate::_Contents::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // ServerObjectTemplate::_Contents::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void ServerObjectTemplate::_Contents::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_Contents::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerObjectTemplate::_Contents::save(Iff &file) +{ +int count; + + file.insertForm(_Contents_tag); + + 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; + + // 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 + + +//============================================================================= +// class ServerObjectTemplate::_MentalStateMod + +/** + * Class constructor. + */ +ServerObjectTemplate::_MentalStateMod::_MentalStateMod(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerObjectTemplate::_MentalStateMod::_MentalStateMod + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_target; + } + fprintf(stderr, "trying to access single-parameter \"target\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_decay; + } + fprintf(stderr, "trying to access single-parameter \"decay\" as an array\n"); + } + else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //ServerObjectTemplate::_MentalStateMod::getFloatParam + +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 + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // ServerObjectTemplate::_MentalStateMod::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void ServerObjectTemplate::_MentalStateMod::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_MentalStateMod::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerObjectTemplate::_MentalStateMod::save(Iff &file) +{ +int count; + + file.insertForm(_MentalStateMod_tag); + + 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; + + // 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 + + +//============================================================================= +// class ServerObjectTemplate::_Xp + +/** + * Class constructor. + */ +ServerObjectTemplate::_Xp::_Xp(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerObjectTemplate::_Xp::_Xp + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerObjectTemplate::_Xp::getCompilerIntegerParam + +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 + +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 + +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 + +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 + +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::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 + + +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 + * for this template. + * + * @param file file to load from + */ +void ServerObjectTemplate::_Xp::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // ServerObjectTemplate::_Xp::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerObjectTemplate::_Xp::save(Iff &file) +{ +int count; + + file.insertForm(_Xp_tag); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.h new file mode 100644 index 00000000..764f78c7 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerObjectTemplate.h @@ -0,0 +1,574 @@ +//======================================================================== +// +// ServerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerObjectTemplate_H +#define _INCLUDED_ServerObjectTemplate_H + +#include "sharedTemplateDefinition/TpfTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerObjectTemplate : public TpfTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerObjectTemplate_tag = TAG(S,W,O,O) + }; +//@END TFD ID +public: + ServerObjectTemplate(const std::string & filename); + virtual ~ServerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum ArmorCategory + { + AC_reconnaissance, + AC_battle, + AC_assault, + AC_psg, // // personal shield generator + ArmorCategory_Last = AC_psg, + }; + + enum ArmorLevel + { + AL_basic, + AL_standard, + AL_advanced, + ArmorLevel_Last = AL_advanced, + }; + + enum ArmorRating + { + AR_armorNone, + AR_armorLight, + AR_armorMedium, + AR_armorHeavy, + ArmorRating_Last = AR_armorHeavy, + }; + + enum Attributes + { + AT_health, + AT_constitution, + AT_action, + AT_stamina, + AT_mind, + AT_willpower, + Attributes_Last = AT_willpower, + }; + + enum CraftingType + { + CT_weapon = 0x00000001, + CT_armor = 0x00000002, + CT_food = 0x00000004, + CT_clothing = 0x00000008, + CT_vehicle = 0x00000010, + CT_droid = 0x00000020, + CT_chemical = 0x00000040, + CT_plantBreeding = 0x00000080, + CT_animalBreeding = 0x00000100, + CT_furniture = 0x00000200, + CT_installation = 0x00000400, + CT_lightsaber = 0x00000800, + CT_genericItem = 0x00001000, + CT_genetics = 0x00002000, + CT_mandalorianTailor = 0x00004000, + CT_mandalorianArmorsmith = 0x00008000, + CT_mandalorianDroidEngineer = 0x00010000, + CT_space = 0x00020000, + CT_reverseEngineering = 0x00040000, + CT_misc = 0x00080000, + CT_spaceComponent = 0x00100000, + CT_mission = 0x80000000, + CT_weaponMission = 0x80000001, + CT_armorMission = 0x80000002, + CT_foodMission = 0x80000004, + CT_clothingMission = 0x80000008, + CT_vehicleMission = 0x80000010, + CT_droidMission = 0x80000020, + CT_chemicalMission = 0x80000040, + CT_plantBreedingMission = 0x80000080, + CT_animalBreedingMission = 0x80000100, + CT_furnitureMission = 0x80000200, + CT_installationMission = 0x80000400, + CT_lightsaberMission = 0x80000800, + CT_genericItemMission = 0x80001000, + CT_geneticsMission = 0x80002000, + CT_mandalorianTailorMission = 0x80004000, + CT_mandalorianArmorsmithMission = 0x80008000, + CT_mandalorianDroidEngineerMission = 0x80010000, + CT_spaceMission = 0x80020000, + CT_reverseEngineeringMission = 0x80040000, + CT_miscMission = 0x80080000, + CT_spaceComponentMission = 0x80100000, + CraftingType_Last = CT_spaceComponentMission, + }; + + enum DamageType + { + DT_none = 0x00000000, + DT_kinetic = 0x00000001, + DT_energy = 0x00000002, + DT_blast = 0x00000004, + DT_stun = 0x00000008, + DT_restraint = 0x00000010, + DT_elemental_heat = 0x00000020, + DT_elemental_cold = 0x00000040, + DT_elemental_acid = 0x00000080, + DT_elemental_electrical = 0x00000100, + DT_environmental_heat = 0x00000200, + DT_environmental_cold = 0x00000400, + DT_environmental_acid = 0x00000800, + DT_environmental_electrical = 0x00001000, + DamageType_Last = DT_environmental_electrical, + }; + + enum DeleteFlags + { + DF_gm, + DF_player, + DeleteFlags_Last = DF_player, + }; + + enum MentalStates + { + MS_fear, + MS_anger, + MS_interest, + MS_distress, + MentalStates_Last = MS_distress, + }; + + enum MoveFlags + { + MF_gm, + MF_player, + MoveFlags_Last = MF_player, + }; + + enum UpdateRanges + { + UR_near, + UR_normal, + UR_far, + UpdateRanges_Last = UR_far, + }; + + enum VisibleFlags + { + VF_gm, + VF_player, + VisibleFlags_Last = VF_player, + }; + + enum XpTypes + { + XP_rangedCombat, + XP_meleeCombat, + XP_tamingNoTime, + XP_tamingShortTime, + XP_tamingMediumTime, + XP_tamingLargeTime, + XP_architect, + XP_botany, + XP_bountyHunter, + XP_chemist, + XP_dancing, + XP_facilityManagementSavings, + XP_facilityManagementWearAndTear, + XP_squadLeaderNoTime, + XP_squadLeaderSmallTime, + XP_squadLeaderMediumTime, + XP_squadLeaderLargeTime, + XP_hairdressing, + XP_holonetSlicingPopularity, + XP_holonetSlicingQuantity, + XP_investigation, + XP_medic, + XP_military, + XP_mining, + XP_miningSavings, + XP_musician, + XP_musicanPopularity, + XP_politics, + XP_slicing, + XP_smuggling, + XP_surveyingNoMinimum, + XP_surveyingLowMinimum, + XP_surveyingMediumMinimum, + XP_surveyingHighMinimum, + XP_survivalHealing, + XP_survivalTracking, + XP_vehicularControl, + XP_vehicularWearAndTear, + XP_resourceHarvestingOrganic, + XP_resourceHarvestingInorganic, + XP_crafting, + XP_craftingClothing, + XP_craftingClothingArmor, + XP_craftingDroid, + XP_craftingFood, + XP_craftingMedicine, + XP_craftingStructure, + XP_craftingWeapons, + XP_craftingWeaponsMelee, + XP_craftingWeaponsRanged, + XP_craftingWeaponsMunition, + XP_industrialist, + XP_craftingScout, + XP_craftingCreature, + XP_craftingTissue, + XP_craftingCamp, + XP_craftingTrapping, + XP_craftingSpice, + XP_jediGeneral, + XP_shipwright, + XP_reverseEngineering, + XpTypes_Last = XP_reverseEngineering, + }; + +public: + struct AttribMod + { + enum Attributes target; + int value; + float time; + float timeAtValue; + float decay; + }; + + struct MentalStateMod + { + enum MentalStates target; + float value; + float time; + float timeAtValue; + float decay; + }; + + struct Contents + { + std::string slotName; + bool equipObject; + const ObjectTemplate * content; + + Contents(void); + Contents(const Contents & source); + ~Contents(); +#ifdef WIN32 + Contents & operator =(const Contents &); +#endif +#ifdef LINUX + + private: + Contents & operator =(const Contents &); +#endif + }; + + struct Xp + { + enum XpTypes type; + int level; + int value; + }; + +protected: + class _AttribMod : public TpfTemplate + { + friend class ServerObjectTemplate; + public: + enum + { + _AttribMod_tag = TAG(A,T,T,S) + }; + + public: + _AttribMod(const std::string & filename); + virtual ~_AttribMod(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_target; // server //which attribute is affected + CompilerIntegerParam m_value; // server //max strength of the modifier + FloatParam m_time; // server //how long it takes for the modifier to reach full strength (in secs) + FloatParam m_timeAtValue; // server //how long the modifier remains at full strength (in secs) + FloatParam m_decay; // server //how long it takes for the modifier to go from full strength to 0 (in secs) + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _AttribMod(const _AttribMod &); + _AttribMod & operator =(const _AttribMod &); + }; + friend class ServerObjectTemplate::_AttribMod; + + class _MentalStateMod : public TpfTemplate + { + friend class ServerObjectTemplate; + public: + enum + { + _MentalStateMod_tag = TAG(M,E,S,M) + }; + + public: + _MentalStateMod(const std::string & filename); + virtual ~_MentalStateMod(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_target; // server //which mental state is affected + FloatParam m_value; // server //max strength of the modifier + FloatParam m_time; // server //how long it takes for the modifier to reach full strength (in secs) + FloatParam m_timeAtValue; // server //how long the modifier remains at full strength (in secs) + FloatParam m_decay; // server //how long it takes for the modifier to go from full strength to 0 (in secs) + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _MentalStateMod(const _MentalStateMod &); + _MentalStateMod & operator =(const _MentalStateMod &); + }; + friend class ServerObjectTemplate::_MentalStateMod; + + class _Contents : public TpfTemplate + { + friend class ServerObjectTemplate; + public: + enum + { + _Contents_tag = TAG(C,O,N,T) + }; + + public: + _Contents(const std::string & filename); + virtual ~_Contents(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_slotName; // //slot name, as defined in the object's slotDescriptorFilename + BoolParam m_equipObject; // //flag to put the contents in the slot, as opposed to adding it to the container in the slot + StringParam m_content; // //the object to add + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _Contents(const _Contents &); + _Contents & operator =(const _Contents &); + }; + friend class ServerObjectTemplate::_Contents; + + class _Xp : public TpfTemplate + { + friend class ServerObjectTemplate; + public: + enum + { + _Xp_tag = TAG(E,X,P,S) + }; + + public: + _Xp(const std::string & filename); + virtual ~_Xp(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_type; // //type of experience earned + CompilerIntegerParam m_level; // //difficulty level, 0 for leveless xp types + CompilerIntegerParam m_value; // //amount of experience earned + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _Xp(const _Xp &); + _Xp & operator =(const _Xp &); + }; + friend class ServerObjectTemplate::_Xp; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + // crafting types also defined in base_class.java + // NOTE: when you update this list, make sure to update the registerMe() function in ServerObjectTemplate.cpp + // this enum is also defined in the shared draft_schematic_object_template.tdf file + // this enum is also defined in the shared draft_schematic_object_template.tdf file + StringParam m_sharedTemplate; // //template the client should associate with this template + stdvector::fwd m_scripts; // //scripts attached to the object + bool m_scriptsLoaded; + bool m_scriptsAppend; + DynamicVariableParam m_objvars; // //default objvars added to the object + CompilerIntegerParam m_volume; // //how much room does the object take up + stdvector::fwd m_visibleFlags; // //who can see this object + bool m_visibleFlagsLoaded; + bool m_visibleFlagsAppend; + stdvector::fwd m_deleteFlags; // //who can delete this object + bool m_deleteFlagsLoaded; + bool m_deleteFlagsAppend; + stdvector::fwd m_moveFlags; // //who can move this object + bool m_moveFlagsLoaded; + bool m_moveFlagsAppend; + BoolParam m_invulnerable; // //can this object not be destroyed/killed + FloatParam m_complexity; // //how hard this item is to craft (?) + CompilerIntegerParam m_tintIndex; // //index into client tint palette + FloatParam m_updateRanges[3]; // //distances for network updates + stdvector::fwd m_contents; // //what's in this object + bool m_contentsLoaded; + bool m_contentsAppend; + stdvector::fwd m_xpPoints; // //experience points for interacting with this object + bool m_xpPointsLoaded; + bool m_xpPointsAppend; + BoolParam m_persistByDefault; // //flag to automatically persist this object on creation + BoolParam m_persistContents; // //flag that this container persists its contents +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerObjectTemplate(const ServerObjectTemplate &); + ServerObjectTemplate & operator =(const ServerObjectTemplate &); +}; + + +inline void ServerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerObjectTemplate::registerMe(); + ServerObjectTemplate::_AttribMod::registerMe(); + ServerObjectTemplate::_Contents::registerMe(); + ServerObjectTemplate::_MentalStateMod::registerMe(); + ServerObjectTemplate::_Xp::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.cpp new file mode 100644 index 00000000..ed647704 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.cpp @@ -0,0 +1,294 @@ +//======================================================================== +// +// ServerPlanetObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerPlanetObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerPlanetObjectTemplate::ServerPlanetObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerPlanetObjectTemplate::ServerPlanetObjectTemplate + +/** + * Class destructor. + */ +ServerPlanetObjectTemplate::~ServerPlanetObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerPlanetObjectTemplate::~ServerPlanetObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerPlanetObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerPlanetObjectTemplate_tag, create); +} // ServerPlanetObjectTemplate::registerMe + +/** + * Creates a ServerPlanetObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerPlanetObjectTemplate::create(const std::string & filename) +{ + return new ServerPlanetObjectTemplate(filename); +} // ServerPlanetObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerPlanetObjectTemplate::getId(void) const +{ + return ServerPlanetObjectTemplate_tag; +} // ServerPlanetObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerPlanetObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerPlanetObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerPlanetObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerPlanetObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerPlanetObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerPlanetObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerPlanetObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getFloatParam + +BoolParam * ServerPlanetObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getBoolParam + +StringParam * ServerPlanetObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "planetName") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_planetName; + } + fprintf(stderr, "trying to access single-parameter \"planetName\" as an array\n"); + } + else + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerPlanetObjectTemplate::getStringParam + +StringIdParam * ServerPlanetObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getStringIdParam + +VectorParam * ServerPlanetObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getVectorParam + +DynamicVariableParam * ServerPlanetObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerPlanetObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerPlanetObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerPlanetObjectTemplate::getTriggerVolumeParam + +void ServerPlanetObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerPlanetObjectTemplate::initStructParamOT + +void ServerPlanetObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerPlanetObjectTemplate::setAsEmptyList + +void ServerPlanetObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerPlanetObjectTemplate::setAppend + +bool ServerPlanetObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerPlanetObjectTemplate::isAppend + + +int ServerPlanetObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerPlanetObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerPlanetObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerPlanetObjectTemplate_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(); + + 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, "planetName") == 0) + m_planetName.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerPlanetObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerPlanetObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerPlanetObjectTemplate_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; + + // save planetName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("planetName"); + m_planetName.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(); + + file.exitForm(true); + ServerUniverseObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerPlanetObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.h new file mode 100644 index 00000000..76e98a09 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlanetObjectTemplate.h @@ -0,0 +1,89 @@ +//======================================================================== +// +// ServerPlanetObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerPlanetObjectTemplate_H +#define _INCLUDED_ServerPlanetObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerPlanetObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerPlanetObjectTemplate_tag = TAG(P,L,A,N) + }; +//@END TFD ID +public: + ServerPlanetObjectTemplate(const std::string & filename); + virtual ~ServerPlanetObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_planetName; // name of the planet +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerPlanetObjectTemplate(const ServerPlanetObjectTemplate &); + ServerPlanetObjectTemplate & operator =(const ServerPlanetObjectTemplate &); +}; + + +inline void ServerPlanetObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerPlanetObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerPlanetObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.cpp new file mode 100644 index 00000000..68ca27f9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerPlayerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerPlayerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerPlayerObjectTemplate::ServerPlayerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerPlayerObjectTemplate::ServerPlayerObjectTemplate + +/** + * Class destructor. + */ +ServerPlayerObjectTemplate::~ServerPlayerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerPlayerObjectTemplate::~ServerPlayerObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerPlayerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerPlayerObjectTemplate_tag, create); +} // ServerPlayerObjectTemplate::registerMe + +/** + * Creates a ServerPlayerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerPlayerObjectTemplate::create(const std::string & filename) +{ + return new ServerPlayerObjectTemplate(filename); +} // ServerPlayerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerPlayerObjectTemplate::getId(void) const +{ + return ServerPlayerObjectTemplate_tag; +} // ServerPlayerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerPlayerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerPlayerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerPlayerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerPlayerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerPlayerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerPlayerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerPlayerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getFloatParam + +BoolParam * ServerPlayerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getBoolParam + +StringParam * ServerPlayerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getStringParam + +StringIdParam * ServerPlayerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getStringIdParam + +VectorParam * ServerPlayerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getVectorParam + +DynamicVariableParam * ServerPlayerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerPlayerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerPlayerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerPlayerObjectTemplate::getTriggerVolumeParam + +void ServerPlayerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerIntangibleObjectTemplate::initStructParamOT(param, name); +} // ServerPlayerObjectTemplate::initStructParamOT + +void ServerPlayerObjectTemplate::setAsEmptyList(const char *name) +{ + ServerIntangibleObjectTemplate::setAsEmptyList(name); +} // ServerPlayerObjectTemplate::setAsEmptyList + +void ServerPlayerObjectTemplate::setAppend(const char *name) +{ + ServerIntangibleObjectTemplate::setAppend(name); +} // ServerPlayerObjectTemplate::setAppend + +bool ServerPlayerObjectTemplate::isAppend(const char *name) const +{ + return ServerIntangibleObjectTemplate::isAppend(name); +} // ServerPlayerObjectTemplate::isAppend + + +int ServerPlayerObjectTemplate::getListLength(const char *name) const +{ + return ServerIntangibleObjectTemplate::getListLength(name); +} // ServerPlayerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerPlayerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerPlayerObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerPlayerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerPlayerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerPlayerObjectTemplate_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; + + + // 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(); + UNREF(count); +} // ServerPlayerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.h new file mode 100644 index 00000000..eb1e54f0 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerPlayerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerPlayerObjectTemplate_H +#define _INCLUDED_ServerPlayerObjectTemplate_H + +#include "ServerIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerPlayerObjectTemplate : public ServerIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerPlayerObjectTemplate_tag = TAG(P,L,A,Y) + }; +//@END TFD ID +public: + ServerPlayerObjectTemplate(const std::string & filename); + virtual ~ServerPlayerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerPlayerObjectTemplate(const ServerPlayerObjectTemplate &); + ServerPlayerObjectTemplate & operator =(const ServerPlayerObjectTemplate &); +}; + + +inline void ServerPlayerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerPlayerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerPlayerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.cpp new file mode 100644 index 00000000..4946db21 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerPlayerQuestObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerPlayerQuestObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerPlayerQuestObjectTemplate::ServerPlayerQuestObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerPlayerQuestObjectTemplate::ServerPlayerQuestObjectTemplate + +/** + * Class destructor. + */ +ServerPlayerQuestObjectTemplate::~ServerPlayerQuestObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerPlayerQuestObjectTemplate::~ServerPlayerQuestObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerPlayerQuestObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerPlayerQuestObjectTemplate_tag, create); +} // ServerPlayerQuestObjectTemplate::registerMe + +/** + * Creates a ServerPlayerQuestObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerPlayerQuestObjectTemplate::create(const std::string & filename) +{ + return new ServerPlayerQuestObjectTemplate(filename); +} // ServerPlayerQuestObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerPlayerQuestObjectTemplate::getId(void) const +{ + return ServerPlayerQuestObjectTemplate_tag; +} // ServerPlayerQuestObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerPlayerQuestObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerPlayerQuestObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerPlayerQuestObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerPlayerQuestObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerPlayerQuestObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerPlayerQuestObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerPlayerQuestObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getFloatParam + +BoolParam * ServerPlayerQuestObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getBoolParam + +StringParam * ServerPlayerQuestObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getStringParam + +StringIdParam * ServerPlayerQuestObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getStringIdParam + +VectorParam * ServerPlayerQuestObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getVectorParam + +DynamicVariableParam * ServerPlayerQuestObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerPlayerQuestObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerPlayerQuestObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerPlayerQuestObjectTemplate::getTriggerVolumeParam + +void ServerPlayerQuestObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerPlayerQuestObjectTemplate::initStructParamOT + +void ServerPlayerQuestObjectTemplate::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerPlayerQuestObjectTemplate::setAsEmptyList + +void ServerPlayerQuestObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerPlayerQuestObjectTemplate::setAppend + +bool ServerPlayerQuestObjectTemplate::isAppend(const char *name) const +{ + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerPlayerQuestObjectTemplate::isAppend + + +int ServerPlayerQuestObjectTemplate::getListLength(const char *name) const +{ + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerPlayerQuestObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerPlayerQuestObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerPlayerQuestObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerPlayerQuestObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerPlayerQuestObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerPlayerQuestObjectTemplate_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; + + + // 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); +} // ServerPlayerQuestObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.h new file mode 100644 index 00000000..4429e77e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerPlayerQuestObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerPlayerQuestObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerPlayerQuestObjectTemplate_H +#define _INCLUDED_ServerPlayerQuestObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerPlayerQuestObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerPlayerQuestObjectTemplate_tag = TAG(P,Q,O,S) + }; +//@END TFD ID +public: + ServerPlayerQuestObjectTemplate(const std::string & filename); + virtual ~ServerPlayerQuestObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerPlayerQuestObjectTemplate(const ServerPlayerQuestObjectTemplate &); + ServerPlayerQuestObjectTemplate & operator =(const ServerPlayerQuestObjectTemplate &); +}; + + +inline void ServerPlayerQuestObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerPlayerQuestObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerPlayerQuestObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp new file mode 100644 index 00000000..dfa0c7fd --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.cpp @@ -0,0 +1,384 @@ +//======================================================================== +// +// ServerResourceClassObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerResourceClassObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerResourceClassObjectTemplate::ServerResourceClassObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerResourceClassObjectTemplate::ServerResourceClassObjectTemplate + +/** + * Class destructor. + */ +ServerResourceClassObjectTemplate::~ServerResourceClassObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerResourceClassObjectTemplate::~ServerResourceClassObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerResourceClassObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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 + +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 + +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 + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerResourceClassObjectTemplate::setAsEmptyList + +void ServerResourceClassObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerResourceClassObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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.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.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerResourceClassObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.h new file mode 100644 index 00000000..07dd972b --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceClassObjectTemplate.h @@ -0,0 +1,93 @@ +//======================================================================== +// +// ServerResourceClassObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerResourceClassObjectTemplate_H +#define _INCLUDED_ServerResourceClassObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerResourceClassObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerResourceClassObjectTemplate_tag = TAG(R,E,C,O) + }; +//@END TFD ID +public: + ServerResourceClassObjectTemplate(const std::string & filename); + virtual ~ServerResourceClassObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_resourceClassName; + CompilerIntegerParam m_numTypes; + CompilerIntegerParam m_minTypes; + CompilerIntegerParam m_maxTypes; + StringParam m_parentClass; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerResourceClassObjectTemplate(const ServerResourceClassObjectTemplate &); + ServerResourceClassObjectTemplate & operator =(const ServerResourceClassObjectTemplate &); +}; + + +inline void ServerResourceClassObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerResourceClassObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerResourceClassObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.cpp new file mode 100644 index 00000000..72c08faf --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.cpp @@ -0,0 +1,294 @@ +//======================================================================== +// +// ServerResourceContainerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerResourceContainerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerResourceContainerObjectTemplate::ServerResourceContainerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerResourceContainerObjectTemplate::ServerResourceContainerObjectTemplate + +/** + * Class destructor. + */ +ServerResourceContainerObjectTemplate::~ServerResourceContainerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerResourceContainerObjectTemplate::~ServerResourceContainerObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerResourceContainerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerResourceContainerObjectTemplate_tag, create); +} // ServerResourceContainerObjectTemplate::registerMe + +/** + * Creates a ServerResourceContainerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerResourceContainerObjectTemplate::create(const std::string & filename) +{ + return new ServerResourceContainerObjectTemplate(filename); +} // ServerResourceContainerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerResourceContainerObjectTemplate::getId(void) const +{ + return ServerResourceContainerObjectTemplate_tag; +} // ServerResourceContainerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerResourceContainerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerResourceContainerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerResourceContainerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerResourceContainerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerResourceContainerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerResourceContainerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "maxResources") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_maxResources; + } + fprintf(stderr, "trying to access single-parameter \"maxResources\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerResourceContainerObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerResourceContainerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getFloatParam + +BoolParam * ServerResourceContainerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getBoolParam + +StringParam * ServerResourceContainerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getStringParam + +StringIdParam * ServerResourceContainerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getStringIdParam + +VectorParam * ServerResourceContainerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getVectorParam + +DynamicVariableParam * ServerResourceContainerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerResourceContainerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerResourceContainerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerResourceContainerObjectTemplate::getTriggerVolumeParam + +void ServerResourceContainerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerResourceContainerObjectTemplate::initStructParamOT + +void ServerResourceContainerObjectTemplate::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerResourceContainerObjectTemplate::setAsEmptyList + +void ServerResourceContainerObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerResourceContainerObjectTemplate::setAppend + +bool ServerResourceContainerObjectTemplate::isAppend(const char *name) const +{ + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerResourceContainerObjectTemplate::isAppend + + +int ServerResourceContainerObjectTemplate::getListLength(const char *name) const +{ + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerResourceContainerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerResourceContainerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerResourceContainerObjectTemplate_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 == 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.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, "maxResources") == 0) + m_maxResources.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerResourceContainerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerResourceContainerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerResourceContainerObjectTemplate_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; + + // save maxResources + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("maxResources"); + m_maxResources.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(); + + file.exitForm(true); + ServerTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerResourceContainerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.h new file mode 100644 index 00000000..473d8e0b --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceContainerObjectTemplate.h @@ -0,0 +1,89 @@ +//======================================================================== +// +// ServerResourceContainerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerResourceContainerObjectTemplate_H +#define _INCLUDED_ServerResourceContainerObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerResourceContainerObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerResourceContainerObjectTemplate_tag = TAG(R,C,N,O) + }; +//@END TFD ID +public: + ServerResourceContainerObjectTemplate(const std::string & filename); + virtual ~ServerResourceContainerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_maxResources; // Maximum number of units of resource the container can hold. +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerResourceContainerObjectTemplate(const ServerResourceContainerObjectTemplate &); + ServerResourceContainerObjectTemplate & operator =(const ServerResourceContainerObjectTemplate &); +}; + + +inline void ServerResourceContainerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerResourceContainerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerResourceContainerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.cpp new file mode 100644 index 00000000..87e8bab4 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.cpp @@ -0,0 +1,316 @@ +//======================================================================== +// +// ServerResourcePoolObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerResourcePoolObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerResourcePoolObjectTemplate::ServerResourcePoolObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerResourcePoolObjectTemplate::ServerResourcePoolObjectTemplate + +/** + * Class destructor. + */ +ServerResourcePoolObjectTemplate::~ServerResourcePoolObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerResourcePoolObjectTemplate::~ServerResourcePoolObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerResourcePoolObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerResourcePoolObjectTemplate_tag, create); +} // ServerResourcePoolObjectTemplate::registerMe + +/** + * Creates a ServerResourcePoolObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerResourcePoolObjectTemplate::create(const std::string & filename) +{ + return new ServerResourcePoolObjectTemplate(filename); +} // ServerResourcePoolObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerResourcePoolObjectTemplate::getId(void) const +{ + return ServerResourcePoolObjectTemplate_tag; +} // ServerResourcePoolObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerResourcePoolObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerResourcePoolObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerResourcePoolObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerResourcePoolObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerResourcePoolObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerResourcePoolObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "mapSeed") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_mapSeed; + } + fprintf(stderr, "trying to access single-parameter \"mapSeed\" as an array\n"); + } + else if (strcmp(name, "amountRemaining") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_amountRemaining; + } + fprintf(stderr, "trying to access single-parameter \"amountRemaining\" as an array\n"); + } + else + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerResourcePoolObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerResourcePoolObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getFloatParam + +BoolParam * ServerResourcePoolObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getBoolParam + +StringParam * ServerResourcePoolObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getStringParam + +StringIdParam * ServerResourcePoolObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getStringIdParam + +VectorParam * ServerResourcePoolObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getVectorParam + +DynamicVariableParam * ServerResourcePoolObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerResourcePoolObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerResourcePoolObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerResourcePoolObjectTemplate::getTriggerVolumeParam + +void ServerResourcePoolObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerResourcePoolObjectTemplate::initStructParamOT + +void ServerResourcePoolObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerResourcePoolObjectTemplate::setAsEmptyList + +void ServerResourcePoolObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerResourcePoolObjectTemplate::setAppend + +bool ServerResourcePoolObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerResourcePoolObjectTemplate::isAppend + + +int ServerResourcePoolObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerResourcePoolObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerResourcePoolObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerResourcePoolObjectTemplate_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(); + + 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, "mapSeed") == 0) + m_mapSeed.loadFromIff(file); + else if (strcmp(paramName, "amountRemaining") == 0) + m_amountRemaining.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerResourcePoolObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerResourcePoolObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerResourcePoolObjectTemplate_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; + + // save mapSeed + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("mapSeed"); + m_mapSeed.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save amountRemaining + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("amountRemaining"); + m_amountRemaining.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(); + + file.exitForm(true); + ServerUniverseObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerResourcePoolObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.h new file mode 100644 index 00000000..dcf02b4b --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourcePoolObjectTemplate.h @@ -0,0 +1,90 @@ +//======================================================================== +// +// ServerResourcePoolObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerResourcePoolObjectTemplate_H +#define _INCLUDED_ServerResourcePoolObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerResourcePoolObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerResourcePoolObjectTemplate_tag = TAG(R,E,P,O) + }; +//@END TFD ID +public: + ServerResourcePoolObjectTemplate(const std::string & filename); + virtual ~ServerResourcePoolObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_mapSeed; + CompilerIntegerParam m_amountRemaining; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerResourcePoolObjectTemplate(const ServerResourcePoolObjectTemplate &); + ServerResourcePoolObjectTemplate & operator =(const ServerResourcePoolObjectTemplate &); +}; + + +inline void ServerResourcePoolObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerResourcePoolObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerResourcePoolObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.cpp new file mode 100644 index 00000000..eb9604fd --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.cpp @@ -0,0 +1,294 @@ +//======================================================================== +// +// ServerResourceTypeObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerResourceTypeObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerResourceTypeObjectTemplate::ServerResourceTypeObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerResourceTypeObjectTemplate::ServerResourceTypeObjectTemplate + +/** + * Class destructor. + */ +ServerResourceTypeObjectTemplate::~ServerResourceTypeObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerResourceTypeObjectTemplate::~ServerResourceTypeObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerResourceTypeObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerResourceTypeObjectTemplate_tag, create); +} // ServerResourceTypeObjectTemplate::registerMe + +/** + * Creates a ServerResourceTypeObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerResourceTypeObjectTemplate::create(const std::string & filename) +{ + return new ServerResourceTypeObjectTemplate(filename); +} // ServerResourceTypeObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerResourceTypeObjectTemplate::getId(void) const +{ + return ServerResourceTypeObjectTemplate_tag; +} // ServerResourceTypeObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerResourceTypeObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerResourceTypeObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerResourceTypeObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerResourceTypeObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerResourceTypeObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerResourceTypeObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerResourceTypeObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getFloatParam + +BoolParam * ServerResourceTypeObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getBoolParam + +StringParam * ServerResourceTypeObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "resourceName") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_resourceName; + } + fprintf(stderr, "trying to access single-parameter \"resourceName\" as an array\n"); + } + else + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerResourceTypeObjectTemplate::getStringParam + +StringIdParam * ServerResourceTypeObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getStringIdParam + +VectorParam * ServerResourceTypeObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getVectorParam + +DynamicVariableParam * ServerResourceTypeObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerResourceTypeObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerResourceTypeObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerResourceTypeObjectTemplate::getTriggerVolumeParam + +void ServerResourceTypeObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerResourceTypeObjectTemplate::initStructParamOT + +void ServerResourceTypeObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerResourceTypeObjectTemplate::setAsEmptyList + +void ServerResourceTypeObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerResourceTypeObjectTemplate::setAppend + +bool ServerResourceTypeObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerResourceTypeObjectTemplate::isAppend + + +int ServerResourceTypeObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerResourceTypeObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerResourceTypeObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerResourceTypeObjectTemplate_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(); + + 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, "resourceName") == 0) + m_resourceName.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerResourceTypeObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerResourceTypeObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerResourceTypeObjectTemplate_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; + + // save resourceName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("resourceName"); + m_resourceName.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(); + + file.exitForm(true); + ServerUniverseObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerResourceTypeObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.h new file mode 100644 index 00000000..2f353d95 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerResourceTypeObjectTemplate.h @@ -0,0 +1,89 @@ +//======================================================================== +// +// ServerResourceTypeObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerResourceTypeObjectTemplate_H +#define _INCLUDED_ServerResourceTypeObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerResourceTypeObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerResourceTypeObjectTemplate_tag = TAG(R,E,T,O) + }; +//@END TFD ID +public: + ServerResourceTypeObjectTemplate(const std::string & filename); + virtual ~ServerResourceTypeObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_resourceName; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerResourceTypeObjectTemplate(const ServerResourceTypeObjectTemplate &); + ServerResourceTypeObjectTemplate & operator =(const ServerResourceTypeObjectTemplate &); +}; + + +inline void ServerResourceTypeObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerResourceTypeObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerResourceTypeObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.cpp new file mode 100644 index 00000000..fb50e332 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.cpp @@ -0,0 +1,294 @@ +//======================================================================== +// +// ServerShipObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerShipObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerShipObjectTemplate::ServerShipObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerShipObjectTemplate::ServerShipObjectTemplate + +/** + * Class destructor. + */ +ServerShipObjectTemplate::~ServerShipObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerShipObjectTemplate::~ServerShipObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerShipObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerShipObjectTemplate_tag, create); +} // ServerShipObjectTemplate::registerMe + +/** + * Creates a ServerShipObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerShipObjectTemplate::create(const std::string & filename) +{ + return new ServerShipObjectTemplate(filename); +} // ServerShipObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerShipObjectTemplate::getId(void) const +{ + return ServerShipObjectTemplate_tag; +} // ServerShipObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerShipObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerShipObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerShipObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerShipObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerShipObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerShipObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerShipObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerShipObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerShipObjectTemplate::getFloatParam + +BoolParam * ServerShipObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerShipObjectTemplate::getBoolParam + +StringParam * ServerShipObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "shipType") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_shipType; + } + fprintf(stderr, "trying to access single-parameter \"shipType\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerShipObjectTemplate::getStringParam + +StringIdParam * ServerShipObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerShipObjectTemplate::getStringIdParam + +VectorParam * ServerShipObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerShipObjectTemplate::getVectorParam + +DynamicVariableParam * ServerShipObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerShipObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerShipObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerShipObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerShipObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerShipObjectTemplate::getTriggerVolumeParam + +void ServerShipObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerTangibleObjectTemplate::initStructParamOT(param, name); +} // ServerShipObjectTemplate::initStructParamOT + +void ServerShipObjectTemplate::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerShipObjectTemplate::setAsEmptyList + +void ServerShipObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerShipObjectTemplate::setAppend + +bool ServerShipObjectTemplate::isAppend(const char *name) const +{ + return ServerTangibleObjectTemplate::isAppend(name); +} // ServerShipObjectTemplate::isAppend + + +int ServerShipObjectTemplate::getListLength(const char *name) const +{ + return ServerTangibleObjectTemplate::getListLength(name); +} // ServerShipObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerShipObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerShipObjectTemplate_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 == 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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, "shipType") == 0) + m_shipType.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerShipObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerShipObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerShipObjectTemplate_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; + + // save shipType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("shipType"); + m_shipType.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(); + + file.exitForm(true); + ServerTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerShipObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.h new file mode 100644 index 00000000..66d0a46f --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerShipObjectTemplate.h @@ -0,0 +1,89 @@ +//======================================================================== +// +// ServerShipObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerShipObjectTemplate_H +#define _INCLUDED_ServerShipObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerShipObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerShipObjectTemplate_tag = TAG(S,H,I,P) + }; +//@END TFD ID +public: + ServerShipObjectTemplate(const std::string & filename); + virtual ~ServerShipObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_shipType; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerShipObjectTemplate(const ServerShipObjectTemplate &); + ServerShipObjectTemplate & operator =(const ServerShipObjectTemplate &); +}; + + +inline void ServerShipObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerShipObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerShipObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.cpp new file mode 100644 index 00000000..220a3dd7 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.cpp @@ -0,0 +1,294 @@ +//======================================================================== +// +// ServerStaticObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerStaticObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerStaticObjectTemplate::ServerStaticObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerStaticObjectTemplate::ServerStaticObjectTemplate + +/** + * Class destructor. + */ +ServerStaticObjectTemplate::~ServerStaticObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerStaticObjectTemplate::~ServerStaticObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerStaticObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerStaticObjectTemplate_tag, create); +} // ServerStaticObjectTemplate::registerMe + +/** + * Creates a ServerStaticObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerStaticObjectTemplate::create(const std::string & filename) +{ + return new ServerStaticObjectTemplate(filename); +} // ServerStaticObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerStaticObjectTemplate::getId(void) const +{ + return ServerStaticObjectTemplate_tag; +} // ServerStaticObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerStaticObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerStaticObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerStaticObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerStaticObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerStaticObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerStaticObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerStaticObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerStaticObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerStaticObjectTemplate::getFloatParam + +BoolParam * ServerStaticObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "clientOnlyBuildout") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_clientOnlyBuildout; + } + fprintf(stderr, "trying to access single-parameter \"clientOnlyBuildout\" as an array\n"); + } + else + return ServerObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //ServerStaticObjectTemplate::getBoolParam + +StringParam * ServerStaticObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerStaticObjectTemplate::getStringParam + +StringIdParam * ServerStaticObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerStaticObjectTemplate::getStringIdParam + +VectorParam * ServerStaticObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerStaticObjectTemplate::getVectorParam + +DynamicVariableParam * ServerStaticObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerStaticObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerStaticObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerStaticObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerStaticObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerStaticObjectTemplate::getTriggerVolumeParam + +void ServerStaticObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerObjectTemplate::initStructParamOT(param, name); +} // ServerStaticObjectTemplate::initStructParamOT + +void ServerStaticObjectTemplate::setAsEmptyList(const char *name) +{ + ServerObjectTemplate::setAsEmptyList(name); +} // ServerStaticObjectTemplate::setAsEmptyList + +void ServerStaticObjectTemplate::setAppend(const char *name) +{ + ServerObjectTemplate::setAppend(name); +} // ServerStaticObjectTemplate::setAppend + +bool ServerStaticObjectTemplate::isAppend(const char *name) const +{ + return ServerObjectTemplate::isAppend(name); +} // ServerStaticObjectTemplate::isAppend + + +int ServerStaticObjectTemplate::getListLength(const char *name) const +{ + return ServerObjectTemplate::getListLength(name); +} // ServerStaticObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerStaticObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerStaticObjectTemplate_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 == 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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, "clientOnlyBuildout") == 0) + m_clientOnlyBuildout.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + ServerObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerStaticObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerStaticObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerStaticObjectTemplate_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; + + // save clientOnlyBuildout + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("clientOnlyBuildout"); + m_clientOnlyBuildout.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(); + + file.exitForm(true); + ServerObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // ServerStaticObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.h new file mode 100644 index 00000000..24ead518 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerStaticObjectTemplate.h @@ -0,0 +1,89 @@ +//======================================================================== +// +// ServerStaticObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerStaticObjectTemplate_H +#define _INCLUDED_ServerStaticObjectTemplate_H + +#include "ServerObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerStaticObjectTemplate : public ServerObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerStaticObjectTemplate_tag = TAG(S,T,A,O) + }; +//@END TFD ID +public: + ServerStaticObjectTemplate(const std::string & filename); + virtual ~ServerStaticObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + BoolParam m_clientOnlyBuildout; // Whether we should be instantiated from buildout files on the server +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerStaticObjectTemplate(const ServerStaticObjectTemplate &); + ServerStaticObjectTemplate & operator =(const ServerStaticObjectTemplate &); +}; + + +inline void ServerStaticObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerStaticObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerStaticObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp new file mode 100644 index 00000000..1e57fea7 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.cpp @@ -0,0 +1,505 @@ +//======================================================================== +// +// ServerTangibleObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerTangibleObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerTangibleObjectTemplate::ServerTangibleObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerObjectTemplate(filename) + ,m_triggerVolumesLoaded(false) + ,m_triggerVolumesAppend(false) +//@END TFD INIT +{ +} // ServerTangibleObjectTemplate::ServerTangibleObjectTemplate + +/** + * Class destructor. + */ +ServerTangibleObjectTemplate::~ServerTangibleObjectTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_triggerVolumes.begin(); iter != m_triggerVolumes.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_triggerVolumes.clear(); + } +//@END TFD CLEANUP +} // ServerTangibleObjectTemplate::~ServerTangibleObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerTangibleObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_condition; + } + fprintf(stderr, "trying to access single-parameter \"condition\" as an array\n"); + } + else + return ServerObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //ServerTangibleObjectTemplate::getCompilerIntegerParam + +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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_wantSawAttackTriggers; + } + fprintf(stderr, "trying to access single-parameter \"wantSawAttackTriggers\" as an array\n"); + } + else + return ServerObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_armor; + } + fprintf(stderr, "trying to access single-parameter \"armor\" as an array\n"); + } + else + return ServerObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerTangibleObjectTemplate::getStringParam + +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 + +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 + +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 NULL; +} //ServerTangibleObjectTemplate::getTriggerVolumeParam + +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::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 + + +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 + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,4)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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 = NULL; + } + 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.exitForm(); + ServerObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerTangibleObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.h new file mode 100644 index 00000000..04aeb3c0 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerTangibleObjectTemplate.h @@ -0,0 +1,139 @@ +//======================================================================== +// +// ServerTangibleObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerTangibleObjectTemplate_H +#define _INCLUDED_ServerTangibleObjectTemplate_H + +#include "ServerObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerTangibleObjectTemplate : public ServerObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerTangibleObjectTemplate_tag = TAG(T,A,N,O) + }; +//@END TFD ID +public: + ServerTangibleObjectTemplate(const std::string & filename); + virtual ~ServerTangibleObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum CombatSkeleton + { + CS_none, // // all "body" or not attackable + CS_humanoid, // // head, body, 2 arms, 2 legs, standard human proportions/layout + CombatSkeleton_Last = CS_humanoid, + }; + + enum Conditions + { + C_onOff = 0x00000001, + C_vendor = 0x00000002, + C_insured = 0x00000004, + C_conversable = 0x00000008, + C_hibernating = 0x00000010, + C_magicItem = 0x00000020, + C_aggressive = 0x00000040, + C_wantSawAttackTrigger = 0x00000080, + C_invulnerable = 0x00000100, + C_disabled = 0x00000200, + C_uninsurable = 0x00000400, + C_interesting = 0x00000800, + C_mount = 0x00001000, // Set programmatically by mount system. Do not set this in the template. + C_crafted = 0x00002000, // Set programmatically by crafting system. Do not set this in the template. + C_wingsOpened = 0x00004000, // Set programmatically by wing system. Do not set this in the template. + C_spaceInteresting = 0x00008000, + C_docking = 0x00010000, // Set programmatically by docking system. Do not set this in the template. + C_destroying = 0x00020000, // Set programmatically by destruction system. Do not set this in the template. + C_commable = 0x00040000, + C_dockable = 0x00080000, + C_eject = 0x00100000, + C_inspectable = 0x00200000, + C_transferable = 0x00400000, + C_inflightTutorial = 0x00800000, + C_spaceCombatMusic = 0x01000000, // Set programmatically by the AI system. Do not set this in the template. + C_encounterLocked = 0x02000000, + Conditions_Last = C_encounterLocked, + }; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + // these MUST be reflected in clientGame/TangibleObject.h + // these MUST be reflected in base_class.java + stdvector::fwd m_triggerVolumes; // trigger volume(s) attached to the object + bool m_triggerVolumesLoaded; + bool m_triggerVolumesAppend; + CompilerIntegerParam m_combatSkeleton; // this should be fixed (not random) for any template type + CompilerIntegerParam m_maxHitPoints; // hp for non-creature objects + StringParam m_armor; // what kind of armor this object has (if any) + CompilerIntegerParam m_interestRadius; // area of interest of the object + CompilerIntegerParam m_count; // generic counter + CompilerIntegerParam m_condition; // object condition + BoolParam m_wantSawAttackTriggers; // whether we're interested in OnSawAttack triggers +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerTangibleObjectTemplate(const ServerTangibleObjectTemplate &); + ServerTangibleObjectTemplate & operator =(const ServerTangibleObjectTemplate &); +}; + + +inline void ServerTangibleObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerTangibleObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerTangibleObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.cpp new file mode 100644 index 00000000..5335abd9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerTokenObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerTokenObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerTokenObjectTemplate::ServerTokenObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerTokenObjectTemplate::ServerTokenObjectTemplate + +/** + * Class destructor. + */ +ServerTokenObjectTemplate::~ServerTokenObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerTokenObjectTemplate::~ServerTokenObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerTokenObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerTokenObjectTemplate_tag, create); +} // ServerTokenObjectTemplate::registerMe + +/** + * Creates a ServerTokenObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerTokenObjectTemplate::create(const std::string & filename) +{ + return new ServerTokenObjectTemplate(filename); +} // ServerTokenObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerTokenObjectTemplate::getId(void) const +{ + return ServerTokenObjectTemplate_tag; +} // ServerTokenObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerTokenObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerTokenObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerTokenObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerTokenObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerTokenObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerTokenObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerTokenObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getFloatParam + +BoolParam * ServerTokenObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getBoolParam + +StringParam * ServerTokenObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getStringParam + +StringIdParam * ServerTokenObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getStringIdParam + +VectorParam * ServerTokenObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getVectorParam + +DynamicVariableParam * ServerTokenObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerTokenObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerTokenObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerTokenObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerTokenObjectTemplate::getTriggerVolumeParam + +void ServerTokenObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerIntangibleObjectTemplate::initStructParamOT(param, name); +} // ServerTokenObjectTemplate::initStructParamOT + +void ServerTokenObjectTemplate::setAsEmptyList(const char *name) +{ + ServerIntangibleObjectTemplate::setAsEmptyList(name); +} // ServerTokenObjectTemplate::setAsEmptyList + +void ServerTokenObjectTemplate::setAppend(const char *name) +{ + ServerIntangibleObjectTemplate::setAppend(name); +} // ServerTokenObjectTemplate::setAppend + +bool ServerTokenObjectTemplate::isAppend(const char *name) const +{ + return ServerIntangibleObjectTemplate::isAppend(name); +} // ServerTokenObjectTemplate::isAppend + + +int ServerTokenObjectTemplate::getListLength(const char *name) const +{ + return ServerIntangibleObjectTemplate::getListLength(name); +} // ServerTokenObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerTokenObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerTokenObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerTokenObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerTokenObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerTokenObjectTemplate_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; + + + // 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(); + UNREF(count); +} // ServerTokenObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.h new file mode 100644 index 00000000..bb44afdf --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerTokenObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerTokenObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerTokenObjectTemplate_H +#define _INCLUDED_ServerTokenObjectTemplate_H + +#include "ServerIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerTokenObjectTemplate : public ServerIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerTokenObjectTemplate_tag = TAG(T,O,K,N) + }; +//@END TFD ID +public: + ServerTokenObjectTemplate(const std::string & filename); + virtual ~ServerTokenObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerTokenObjectTemplate(const ServerTokenObjectTemplate &); + ServerTokenObjectTemplate & operator =(const ServerTokenObjectTemplate &); +}; + + +inline void ServerTokenObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerTokenObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerTokenObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.cpp new file mode 100644 index 00000000..12a2714a --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.cpp @@ -0,0 +1,3678 @@ +//======================================================================== +// +// ServerUberObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerUberObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +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) +//@END TFD INIT +{ +} // ServerUberObjectTemplate::ServerUberObjectTemplate + +/** + * Class destructor. + */ +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; + } + } +//@END TFD CLEANUP +} // ServerUberObjectTemplate::~ServerUberObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerUberObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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 + +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 + +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 + +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 + +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 + +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 + +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 + +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 + +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 + +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::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::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 + +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 + + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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.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.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // ServerUberObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + + +//============================================================================= +// class ServerUberObjectTemplate::_Foo + +/** + * Class constructor. + */ +ServerUberObjectTemplate::_Foo::_Foo(const std::string & filename) + : TpfTemplate(filename) +{ +} // ServerUberObjectTemplate::_Foo::_Foo + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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 + +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 + +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 + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // ServerUberObjectTemplate::_Foo::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void ServerUberObjectTemplate::_Foo::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // ServerUberObjectTemplate::_Foo::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerUberObjectTemplate::_Foo::save(Iff &file) +{ +int count; + + file.insertForm(_Foo_tag); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.h new file mode 100644 index 00000000..cf60bb99 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerUberObjectTemplate.h @@ -0,0 +1,311 @@ +//======================================================================== +// +// ServerUberObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerUberObjectTemplate_H +#define _INCLUDED_ServerUberObjectTemplate_H + +#include "sharedTemplateDefinition/TpfTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerUberObjectTemplate : public TpfTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerUberObjectTemplate_tag = TAG(S,W,U,T) + }; +//@END TFD ID +public: + ServerUberObjectTemplate(const std::string & filename); + virtual ~ServerUberObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum UpdateRanges + { + UR_near, + UR_normal, + UR_far, + UpdateRanges_Last = UR_far, + }; + +public: + struct Foo + { + int item1; + float item2; + std::string item3; + }; + +protected: + class _Foo : public TpfTemplate + { + friend class ServerUberObjectTemplate; + public: + enum + { + _Foo_tag = TAG(W,O,N,F) + }; + + public: + _Foo(const std::string & filename); + virtual ~_Foo(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_item1; + FloatParam m_item2; + StringParam m_item3; + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _Foo(const _Foo &); + _Foo & operator =(const _Foo &); + }; + friend class ServerUberObjectTemplate::_Foo; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + // Integer + CompilerIntegerParam m_intAtDerived; + CompilerIntegerParam m_intSimple; + CompilerIntegerParam m_intSimpleDeltaPositive; + CompilerIntegerParam m_intSimpleDeltaNegative; + CompilerIntegerParam m_intSimpleDeltaPositivePercent; + CompilerIntegerParam m_intSimpleDeltaNegativePercent; + CompilerIntegerParam m_intWeightedList; + CompilerIntegerParam m_intWeightedListDeltaPositive; + CompilerIntegerParam m_intWeightedListDeltaNegative; + CompilerIntegerParam m_intWeightedListDeltaPositivePercent; + CompilerIntegerParam m_intWeightedListDeltaNegativePercent; + CompilerIntegerParam m_intRandomRange1; + CompilerIntegerParam m_intRandomRange2; + CompilerIntegerParam m_intRandomRange3; + CompilerIntegerParam m_intRandomRange4; + CompilerIntegerParam m_intDiceRoll1; + CompilerIntegerParam m_intDiceRoll2; + stdvector::fwd m_intListSimple; + bool m_intListSimpleLoaded; + bool m_intListSimpleAppend; + stdvector::fwd m_intListWeightedList; + bool m_intListWeightedListLoaded; + bool m_intListWeightedListAppend; + stdvector::fwd m_intListRandomRange; + bool m_intListRandomRangeLoaded; + bool m_intListRandomRangeAppend; + stdvector::fwd m_intListDiceRoll; + bool m_intListDiceRollLoaded; + bool m_intListDiceRollAppend; + // Float + FloatParam m_floatAtDerived; + FloatParam m_floatSimple; + FloatParam m_floatSimpleDeltaPositive; + FloatParam m_floatSimpleDeltaNegative; + FloatParam m_floatSimpleDeltaPositivePercent; + FloatParam m_floatSimpleDeltaNegativePercent; + FloatParam m_floatWeightedList; + FloatParam m_floatRandomRange1; + FloatParam m_floatRandomRange2; + FloatParam m_floatRandomRange3; + FloatParam m_floatRandomRange4; + stdvector::fwd m_floatListSimple; + bool m_floatListSimpleLoaded; + bool m_floatListSimpleAppend; + stdvector::fwd m_floatListWeightedList; + bool m_floatListWeightedListLoaded; + bool m_floatListWeightedListAppend; + stdvector::fwd m_floatListRandomRange; + bool m_floatListRandomRangeLoaded; + bool m_floatListRandomRangeAppend; + // Enum + CompilerIntegerParam m_enumIndexedByEnumSingle[3]; + CompilerIntegerParam m_enumIndexedByEnumWeightedList[3]; + stdvector::fwd m_enumListIndexed; + bool m_enumListIndexedLoaded; + bool m_enumListIndexedAppend; + stdvector::fwd m_enumListWeightedList; + bool m_enumListWeightedListLoaded; + bool m_enumListWeightedListAppend; + // StringId + StringIdParam m_stringIdDerived; + StringIdParam m_stringIdSimple; + StringIdParam m_stringIdWeightedList; + stdvector::fwd m_stringIdListSimple; + bool m_stringIdListSimpleLoaded; + bool m_stringIdListSimpleAppend; + stdvector::fwd m_stringIdListWeightedList; + bool m_stringIdListWeightedListLoaded; + bool m_stringIdListWeightedListAppend; + // String + StringParam m_stringDerived; + StringParam m_stringSimple; + StringParam m_stringWeightedList; + stdvector::fwd m_stringListSimple; + bool m_stringListSimpleLoaded; + bool m_stringListSimpleAppend; + stdvector::fwd m_stringListWeightedList; + bool m_stringListWeightedListLoaded; + bool m_stringListWeightedListAppend; + // TRIGGER VOLUME + TriggerVolumeParam m_triggerVolumeDerived; + TriggerVolumeParam m_triggerVolumeSimple; + TriggerVolumeParam m_triggerVolumeWeightedList; + stdvector::fwd m_triggerVolumeList; + bool m_triggerVolumeListLoaded; + bool m_triggerVolumeListAppend; + stdvector::fwd m_triggerVolumesListWeightedList; + bool m_triggerVolumesListWeightedListLoaded; + bool m_triggerVolumesListWeightedListAppend; + // BOOL + BoolParam m_boolDerived; + BoolParam m_boolSimple; + BoolParam m_boolWeightedList; + stdvector::fwd m_boolListDerived; + bool m_boolListDerivedLoaded; + bool m_boolListDerivedAppend; + stdvector::fwd m_boolListSimple; + bool m_boolListSimpleLoaded; + bool m_boolListSimpleAppend; + stdvector::fwd m_boolListWeightedList; + bool m_boolListWeightedListLoaded; + bool m_boolListWeightedListAppend; + ///****** + //SAJ - I would suggest dumping the vector type, since no code uses it. It was created + //to be used with spawning, but that's being done entirely in script. + // + //-Dan Ignoring this, if they break, whack em + //******/ + // Vector + VectorParam m_vectorAtDerived; + VectorParam m_vectorSimple; + // vector vectorSimpleDeltaPositive + // vector vectorSimpleDeltaNegative + // vector vectorSimpleDeltaPositivePercent + // vector vectorSimpleDeltaNegativePercent + // vector vectorWeightedList + // vector vectorRandomRange + stdvector::fwd m_vectorListSimple; + bool m_vectorListSimpleLoaded; + bool m_vectorListSimpleAppend; + // Filename + StringParam m_filenameAtDerived; + StringParam m_filenameSimple; + StringParam m_filenameWeightedList; + stdvector::fwd m_filenameListSimple; + bool m_filenameListSimpleLoaded; + bool m_filenameListSimpleAppend; + // Objvar + DynamicVariableParam m_objvarDerived; + DynamicVariableParam m_objvarSimple; + // objvar objvarsListAppend + // Template + StringParam m_templateDerived; + StringParam m_templateSimple; + StringParam m_templateWeightedList; + stdvector::fwd m_templateListSimple; + bool m_templateListSimpleLoaded; + bool m_templateListSimpleAppend; + // Structs + StructParamOT m_structAtDerived; + StructParamOT m_structSimple; + stdvector::fwd m_structListSimple; + bool m_structListSimpleLoaded; + bool m_structListSimpleAppend; + StructParamOT m_structArrayEnum[3]; + StructParamOT m_structArrayInteger[2]; + // Arrays + CompilerIntegerParam m_integerArray[2]; + FloatParam m_floatArray[2]; + StringParam m_stringArray[2]; + BoolParam m_boolArray[2]; + StringIdParam m_stringIdArray[2]; + TriggerVolumeParam m_triggerArray[2]; + VectorParam m_vectorArray[2]; + StringParam m_fileNameArray[2]; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerUberObjectTemplate(const ServerUberObjectTemplate &); + ServerUberObjectTemplate & operator =(const ServerUberObjectTemplate &); +}; + + +inline void ServerUberObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerUberObjectTemplate::registerMe(); + ServerUberObjectTemplate::_Foo::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerUberObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.cpp new file mode 100644 index 00000000..09486294 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerUniverseObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerUniverseObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerUniverseObjectTemplate::ServerUniverseObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerUniverseObjectTemplate::ServerUniverseObjectTemplate + +/** + * Class destructor. + */ +ServerUniverseObjectTemplate::~ServerUniverseObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerUniverseObjectTemplate::~ServerUniverseObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerUniverseObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerUniverseObjectTemplate_tag, create); +} // ServerUniverseObjectTemplate::registerMe + +/** + * Creates a ServerUniverseObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerUniverseObjectTemplate::create(const std::string & filename) +{ + return new ServerUniverseObjectTemplate(filename); +} // ServerUniverseObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerUniverseObjectTemplate::getId(void) const +{ + return ServerUniverseObjectTemplate_tag; +} // ServerUniverseObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerUniverseObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerUniverseObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerUniverseObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerUniverseObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerUniverseObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerUniverseObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerUniverseObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getFloatParam + +BoolParam * ServerUniverseObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getBoolParam + +StringParam * ServerUniverseObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getStringParam + +StringIdParam * ServerUniverseObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getStringIdParam + +VectorParam * ServerUniverseObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getVectorParam + +DynamicVariableParam * ServerUniverseObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerUniverseObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerUniverseObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerUniverseObjectTemplate::getTriggerVolumeParam + +void ServerUniverseObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerObjectTemplate::initStructParamOT(param, name); +} // ServerUniverseObjectTemplate::initStructParamOT + +void ServerUniverseObjectTemplate::setAsEmptyList(const char *name) +{ + ServerObjectTemplate::setAsEmptyList(name); +} // ServerUniverseObjectTemplate::setAsEmptyList + +void ServerUniverseObjectTemplate::setAppend(const char *name) +{ + ServerObjectTemplate::setAppend(name); +} // ServerUniverseObjectTemplate::setAppend + +bool ServerUniverseObjectTemplate::isAppend(const char *name) const +{ + return ServerObjectTemplate::isAppend(name); +} // ServerUniverseObjectTemplate::isAppend + + +int ServerUniverseObjectTemplate::getListLength(const char *name) const +{ + return ServerObjectTemplate::getListLength(name); +} // ServerUniverseObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerUniverseObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerUniverseObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerUniverseObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerUniverseObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerUniverseObjectTemplate_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; + + + // 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(); + UNREF(count); +} // ServerUniverseObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.h new file mode 100644 index 00000000..829a1be9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerUniverseObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerUniverseObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerUniverseObjectTemplate_H +#define _INCLUDED_ServerUniverseObjectTemplate_H + +#include "ServerObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerUniverseObjectTemplate : public ServerObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerUniverseObjectTemplate_tag = TAG(U,N,I,O) + }; +//@END TFD ID +public: + ServerUniverseObjectTemplate(const std::string & filename); + virtual ~ServerUniverseObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerUniverseObjectTemplate(const ServerUniverseObjectTemplate &); + ServerUniverseObjectTemplate & operator =(const ServerUniverseObjectTemplate &); +}; + + +inline void ServerUniverseObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerUniverseObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerUniverseObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp new file mode 100644 index 00000000..2ebceacd --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.cpp @@ -0,0 +1,362 @@ +//======================================================================== +// +// ServerVehicleObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerVehicleObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerVehicleObjectTemplate::ServerVehicleObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerVehicleObjectTemplate::ServerVehicleObjectTemplate + +/** + * Class destructor. + */ +ServerVehicleObjectTemplate::~ServerVehicleObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerVehicleObjectTemplate::~ServerVehicleObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerVehicleObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // ServerVehicleObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_consumpsion; + } + fprintf(stderr, "trying to access single-parameter \"consumpsion\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //ServerVehicleObjectTemplate::getFloatParam + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_fuelType; + } + fprintf(stderr, "trying to access single-parameter \"fuelType\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //ServerVehicleObjectTemplate::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerVehicleObjectTemplate::setAsEmptyList + +void ServerVehicleObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerVehicleObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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.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.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerVehicleObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.h new file mode 100644 index 00000000..1c2b1f44 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerVehicleObjectTemplate.h @@ -0,0 +1,92 @@ +//======================================================================== +// +// ServerVehicleObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerVehicleObjectTemplate_H +#define _INCLUDED_ServerVehicleObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerVehicleObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerVehicleObjectTemplate_tag = TAG(V,E,H,O) + }; +//@END TFD ID +public: + ServerVehicleObjectTemplate(const std::string & filename); + virtual ~ServerVehicleObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_fuelType; // type of fuel used + FloatParam m_currentFuel; // current amount of fuel the vehicle has + FloatParam m_maxFuel; // max amount of fuel the vehicle can hold + FloatParam m_consumpsion; // units/sec/speed(?) fuel used +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerVehicleObjectTemplate(const ServerVehicleObjectTemplate &); + ServerVehicleObjectTemplate & operator =(const ServerVehicleObjectTemplate &); +}; + + +inline void ServerVehicleObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerVehicleObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerVehicleObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.cpp new file mode 100644 index 00000000..27bb6577 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerWaypointObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerWaypointObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerWaypointObjectTemplate::ServerWaypointObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerWaypointObjectTemplate::ServerWaypointObjectTemplate + +/** + * Class destructor. + */ +ServerWaypointObjectTemplate::~ServerWaypointObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerWaypointObjectTemplate::~ServerWaypointObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerWaypointObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerWaypointObjectTemplate_tag, create); +} // ServerWaypointObjectTemplate::registerMe + +/** + * Creates a ServerWaypointObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerWaypointObjectTemplate::create(const std::string & filename) +{ + return new ServerWaypointObjectTemplate(filename); +} // ServerWaypointObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerWaypointObjectTemplate::getId(void) const +{ + return ServerWaypointObjectTemplate_tag; +} // ServerWaypointObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerWaypointObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerWaypointObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerWaypointObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerWaypointObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerWaypointObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerWaypointObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerWaypointObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getFloatParam + +BoolParam * ServerWaypointObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getBoolParam + +StringParam * ServerWaypointObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getStringParam + +StringIdParam * ServerWaypointObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getStringIdParam + +VectorParam * ServerWaypointObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getVectorParam + +DynamicVariableParam * ServerWaypointObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerWaypointObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerWaypointObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerWaypointObjectTemplate::getTriggerVolumeParam + +void ServerWaypointObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerIntangibleObjectTemplate::initStructParamOT(param, name); +} // ServerWaypointObjectTemplate::initStructParamOT + +void ServerWaypointObjectTemplate::setAsEmptyList(const char *name) +{ + ServerIntangibleObjectTemplate::setAsEmptyList(name); +} // ServerWaypointObjectTemplate::setAsEmptyList + +void ServerWaypointObjectTemplate::setAppend(const char *name) +{ + ServerIntangibleObjectTemplate::setAppend(name); +} // ServerWaypointObjectTemplate::setAppend + +bool ServerWaypointObjectTemplate::isAppend(const char *name) const +{ + return ServerIntangibleObjectTemplate::isAppend(name); +} // ServerWaypointObjectTemplate::isAppend + + +int ServerWaypointObjectTemplate::getListLength(const char *name) const +{ + return ServerIntangibleObjectTemplate::getListLength(name); +} // ServerWaypointObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerWaypointObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerWaypointObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerWaypointObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerWaypointObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerWaypointObjectTemplate_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; + + + // 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(); + UNREF(count); +} // ServerWaypointObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.h new file mode 100644 index 00000000..3a600dfd --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerWaypointObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerWaypointObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerWaypointObjectTemplate_H +#define _INCLUDED_ServerWaypointObjectTemplate_H + +#include "ServerIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerWaypointObjectTemplate : public ServerIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerWaypointObjectTemplate_tag = TAG(W,A,Y,P) + }; +//@END TFD ID +public: + ServerWaypointObjectTemplate(const std::string & filename); + virtual ~ServerWaypointObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerWaypointObjectTemplate(const ServerWaypointObjectTemplate &); + ServerWaypointObjectTemplate & operator =(const ServerWaypointObjectTemplate &); +}; + + +inline void ServerWaypointObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerWaypointObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerWaypointObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp new file mode 100644 index 00000000..2294bb1c --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.cpp @@ -0,0 +1,604 @@ +//======================================================================== +// +// ServerWeaponObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerWeaponObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerWeaponObjectTemplate::ServerWeaponObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerWeaponObjectTemplate::ServerWeaponObjectTemplate + +/** + * Class destructor. + */ +ServerWeaponObjectTemplate::~ServerWeaponObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerWeaponObjectTemplate::~ServerWeaponObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // ServerWeaponObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_accuracy; + } + fprintf(stderr, "trying to access single-parameter \"accuracy\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_woundChance; + } + fprintf(stderr, "trying to access single-parameter \"woundChance\" as an array\n"); + } + else + return ServerTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //ServerWeaponObjectTemplate::getFloatParam + +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 + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + ServerTangibleObjectTemplate::setAsEmptyList(name); +} // ServerWeaponObjectTemplate::setAsEmptyList + +void ServerWeaponObjectTemplate::setAppend(const char *name) +{ + ServerTangibleObjectTemplate::setAppend(name); +} // ServerWeaponObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,1,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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.exitForm(); + ServerTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerWeaponObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.h new file mode 100644 index 00000000..d8d05d37 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerWeaponObjectTemplate.h @@ -0,0 +1,137 @@ +//======================================================================== +// +// ServerWeaponObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerWeaponObjectTemplate_H +#define _INCLUDED_ServerWeaponObjectTemplate_H + +#include "ServerTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerWeaponObjectTemplate : public ServerTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerWeaponObjectTemplate_tag = TAG(W,E,A,O) + }; +//@END TFD ID +public: + ServerWeaponObjectTemplate(const std::string & filename); + virtual ~ServerWeaponObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum AttackType + { + AT_melee, + AT_ranged, + AT_thrown, + AttackType_Last = AT_thrown, + }; + + enum AttribModDecaySpecial + { + AMDS_pool = -1, // use the attribute pool recovery rate (normal recovery) + AMDS_wound = -2, // can only be healed by skill/item use, heal difficulty adjusted by shock wound value + AMDS_antidote = -3, // used to clear all attrib mods for a given attribute + AttribModDecaySpecial_Last = AMDS_antidote, + }; + + enum WeaponType + { + WT_rifle, + WT_lightRifle, + WT_pistol, + WT_heavyWeapon, + WT_1handMelee, + WT_2handMelee, + WT_unarmed, + WT_polearm, + WT_thrown, + WT_1handLightsaber, + WT_2handLightsaber, + WT_polearmLightsaber, + WeaponType_Last = WT_polearmLightsaber, + }; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_weaponType; // General type of weapon + CompilerIntegerParam m_attackType; // Type of attack this weapon is used with. + CompilerIntegerParam m_damageType; // The kind of damage this weapon deals. + CompilerIntegerParam m_elementalType; // The kind of special elemental damage this weapon deals. + CompilerIntegerParam m_elementalValue; // The amount of special elemental damage this weapon deals. + CompilerIntegerParam m_minDamageAmount; // The amount of damage done by a weapon is between min-max evenly, randomly, distributed. + CompilerIntegerParam m_maxDamageAmount; // The amount of damage done by a weapon is between min-max evenly, randomly, distributed. + FloatParam m_attackSpeed; // The weapon's intrisic firing rate. + FloatParam m_audibleRange; // Distance message gets sent to NPCs when fired. + FloatParam m_minRange; // range where the min range mod is set + FloatParam m_maxRange; // range where the max range mod is set + FloatParam m_damageRadius; // Blast radius for area effect weapons + FloatParam m_woundChance; // Base % chance for a wound to occur on a successful attack + CompilerIntegerParam m_attackCost; // Amount of H/A/M drained by using the weapon + CompilerIntegerParam m_accuracy; // Accuracy bonus/penalty for this weapon +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerWeaponObjectTemplate(const ServerWeaponObjectTemplate &); + ServerWeaponObjectTemplate & operator =(const ServerWeaponObjectTemplate &); +}; + + +inline void ServerWeaponObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerWeaponObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerWeaponObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.cpp new file mode 100644 index 00000000..9600ecab --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// ServerXpManagerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "ServerXpManagerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +ServerXpManagerObjectTemplate::ServerXpManagerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : ServerUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // ServerXpManagerObjectTemplate::ServerXpManagerObjectTemplate + +/** + * Class destructor. + */ +ServerXpManagerObjectTemplate::~ServerXpManagerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // ServerXpManagerObjectTemplate::~ServerXpManagerObjectTemplate + +/** + * Static function used to register this template. + */ +void ServerXpManagerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(ServerXpManagerObjectTemplate_tag, create); +} // ServerXpManagerObjectTemplate::registerMe + +/** + * Creates a ServerXpManagerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * ServerXpManagerObjectTemplate::create(const std::string & filename) +{ + return new ServerXpManagerObjectTemplate(filename); +} // ServerXpManagerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag ServerXpManagerObjectTemplate::getId(void) const +{ + return ServerXpManagerObjectTemplate_tag; +} // ServerXpManagerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag ServerXpManagerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // ServerXpManagerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag ServerXpManagerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const ServerXpManagerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // ServerXpManagerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * ServerXpManagerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getCompilerIntegerParam + +FloatParam * ServerXpManagerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getFloatParam + +BoolParam * ServerXpManagerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getBoolParam + +StringParam * ServerXpManagerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getStringParam + +StringIdParam * ServerXpManagerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getStringIdParam + +VectorParam * ServerXpManagerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getVectorParam + +DynamicVariableParam * ServerXpManagerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getDynamicVariableParam + +StructParamOT * ServerXpManagerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getStructParamOT + +TriggerVolumeParam * ServerXpManagerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return ServerUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //ServerXpManagerObjectTemplate::getTriggerVolumeParam + +void ServerXpManagerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + ServerUniverseObjectTemplate::initStructParamOT(param, name); +} // ServerXpManagerObjectTemplate::initStructParamOT + +void ServerXpManagerObjectTemplate::setAsEmptyList(const char *name) +{ + ServerUniverseObjectTemplate::setAsEmptyList(name); +} // ServerXpManagerObjectTemplate::setAsEmptyList + +void ServerXpManagerObjectTemplate::setAppend(const char *name) +{ + ServerUniverseObjectTemplate::setAppend(name); +} // ServerXpManagerObjectTemplate::setAppend + +bool ServerXpManagerObjectTemplate::isAppend(const char *name) const +{ + return ServerUniverseObjectTemplate::isAppend(name); +} // ServerXpManagerObjectTemplate::isAppend + + +int ServerXpManagerObjectTemplate::getListLength(const char *name) const +{ + return ServerUniverseObjectTemplate::getListLength(name); +} // ServerXpManagerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void ServerXpManagerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != ServerXpManagerObjectTemplate_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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + ServerUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // ServerXpManagerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void ServerXpManagerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(ServerXpManagerObjectTemplate_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; + + + // 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); +} // ServerXpManagerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.h new file mode 100644 index 00000000..7096bbc6 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/ServerXpManagerObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// ServerXpManagerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_ServerXpManagerObjectTemplate_H +#define _INCLUDED_ServerXpManagerObjectTemplate_H + +#include "ServerUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class ServerXpManagerObjectTemplate : public ServerUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + ServerXpManagerObjectTemplate_tag = TAG(X,P,M,G) + }; +//@END TFD ID +public: + ServerXpManagerObjectTemplate(const std::string & filename); + virtual ~ServerXpManagerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + ServerXpManagerObjectTemplate(const ServerXpManagerObjectTemplate &); + ServerXpManagerObjectTemplate & operator =(const ServerXpManagerObjectTemplate &); +}; + + +inline void ServerXpManagerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + ServerXpManagerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_ServerXpManagerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.cpp new file mode 100644 index 00000000..b1a5b978 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.cpp @@ -0,0 +1,318 @@ +//======================================================================== +// +// SharedBattlefieldMarkerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedBattlefieldMarkerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedBattlefieldMarkerObjectTemplate::SharedBattlefieldMarkerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedBattlefieldMarkerObjectTemplate::SharedBattlefieldMarkerObjectTemplate + +/** + * Class destructor. + */ +SharedBattlefieldMarkerObjectTemplate::~SharedBattlefieldMarkerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedBattlefieldMarkerObjectTemplate::~SharedBattlefieldMarkerObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedBattlefieldMarkerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedBattlefieldMarkerObjectTemplate_tag, create); +} // SharedBattlefieldMarkerObjectTemplate::registerMe + +/** + * Creates a SharedBattlefieldMarkerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedBattlefieldMarkerObjectTemplate::create(const std::string & filename) +{ + return new SharedBattlefieldMarkerObjectTemplate(filename); +} // SharedBattlefieldMarkerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedBattlefieldMarkerObjectTemplate::getId(void) const +{ + return SharedBattlefieldMarkerObjectTemplate_tag; +} // SharedBattlefieldMarkerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedBattlefieldMarkerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedBattlefieldMarkerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedBattlefieldMarkerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedBattlefieldMarkerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedBattlefieldMarkerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedBattlefieldMarkerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "numberOfPoles") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_numberOfPoles; + } + fprintf(stderr, "trying to access single-parameter \"numberOfPoles\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //SharedBattlefieldMarkerObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedBattlefieldMarkerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "radius") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_radius; + } + fprintf(stderr, "trying to access single-parameter \"radius\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //SharedBattlefieldMarkerObjectTemplate::getFloatParam + +BoolParam * SharedBattlefieldMarkerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedBattlefieldMarkerObjectTemplate::getBoolParam + +StringParam * SharedBattlefieldMarkerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedBattlefieldMarkerObjectTemplate::getStringParam + +StringIdParam * SharedBattlefieldMarkerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedBattlefieldMarkerObjectTemplate::getStringIdParam + +VectorParam * SharedBattlefieldMarkerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedBattlefieldMarkerObjectTemplate::getVectorParam + +DynamicVariableParam * SharedBattlefieldMarkerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedBattlefieldMarkerObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedBattlefieldMarkerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedBattlefieldMarkerObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedBattlefieldMarkerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedBattlefieldMarkerObjectTemplate::getTriggerVolumeParam + +void SharedBattlefieldMarkerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedBattlefieldMarkerObjectTemplate::initStructParamOT + +void SharedBattlefieldMarkerObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedBattlefieldMarkerObjectTemplate::setAsEmptyList + +void SharedBattlefieldMarkerObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedBattlefieldMarkerObjectTemplate::setAppend + +bool SharedBattlefieldMarkerObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedBattlefieldMarkerObjectTemplate::isAppend + + +int SharedBattlefieldMarkerObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedBattlefieldMarkerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedBattlefieldMarkerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedBattlefieldMarkerObjectTemplate_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 == 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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, "numberOfPoles") == 0) + m_numberOfPoles.loadFromIff(file); + else if (strcmp(paramName, "radius") == 0) + m_radius.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedBattlefieldMarkerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedBattlefieldMarkerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedBattlefieldMarkerObjectTemplate_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; + + // save numberOfPoles + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("numberOfPoles"); + m_numberOfPoles.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save radius + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("radius"); + m_radius.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(); + + file.exitForm(true); + SharedTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedBattlefieldMarkerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.h new file mode 100644 index 00000000..4c44f952 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedBattlefieldMarkerObjectTemplate.h @@ -0,0 +1,90 @@ +//======================================================================== +// +// SharedBattlefieldMarkerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedBattlefieldMarkerObjectTemplate_H +#define _INCLUDED_SharedBattlefieldMarkerObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedBattlefieldMarkerObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedBattlefieldMarkerObjectTemplate_tag = TAG(S,B,M,K) + }; +//@END TFD ID +public: + SharedBattlefieldMarkerObjectTemplate(const std::string & filename); + virtual ~SharedBattlefieldMarkerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_numberOfPoles; // // number of child object poles + FloatParam m_radius; // // radius in meters +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedBattlefieldMarkerObjectTemplate(const SharedBattlefieldMarkerObjectTemplate &); + SharedBattlefieldMarkerObjectTemplate & operator =(const SharedBattlefieldMarkerObjectTemplate &); +}; + + +inline void SharedBattlefieldMarkerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedBattlefieldMarkerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedBattlefieldMarkerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.cpp new file mode 100644 index 00000000..fa249b26 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.cpp @@ -0,0 +1,316 @@ +//======================================================================== +// +// SharedBuildingObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedBuildingObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedBuildingObjectTemplate::SharedBuildingObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedBuildingObjectTemplate::SharedBuildingObjectTemplate + +/** + * Class destructor. + */ +SharedBuildingObjectTemplate::~SharedBuildingObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedBuildingObjectTemplate::~SharedBuildingObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedBuildingObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedBuildingObjectTemplate_tag, create); +} // SharedBuildingObjectTemplate::registerMe + +/** + * Creates a SharedBuildingObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedBuildingObjectTemplate::create(const std::string & filename) +{ + return new SharedBuildingObjectTemplate(filename); +} // SharedBuildingObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedBuildingObjectTemplate::getId(void) const +{ + return SharedBuildingObjectTemplate_tag; +} // SharedBuildingObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedBuildingObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedBuildingObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedBuildingObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedBuildingObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedBuildingObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedBuildingObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedBuildingObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getFloatParam + +BoolParam * SharedBuildingObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getBoolParam + +StringParam * SharedBuildingObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "terrainModificationFileName") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_terrainModificationFileName; + } + fprintf(stderr, "trying to access single-parameter \"terrainModificationFileName\" as an array\n"); + } + else if (strcmp(name, "interiorLayoutFileName") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_interiorLayoutFileName; + } + fprintf(stderr, "trying to access single-parameter \"interiorLayoutFileName\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedBuildingObjectTemplate::getStringParam + +StringIdParam * SharedBuildingObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getStringIdParam + +VectorParam * SharedBuildingObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getVectorParam + +DynamicVariableParam * SharedBuildingObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedBuildingObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedBuildingObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedBuildingObjectTemplate::getTriggerVolumeParam + +void SharedBuildingObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedBuildingObjectTemplate::initStructParamOT + +void SharedBuildingObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedBuildingObjectTemplate::setAsEmptyList + +void SharedBuildingObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedBuildingObjectTemplate::setAppend + +bool SharedBuildingObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedBuildingObjectTemplate::isAppend + + +int SharedBuildingObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedBuildingObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedBuildingObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedBuildingObjectTemplate_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 == 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,1)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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, "terrainModificationFileName") == 0) + m_terrainModificationFileName.loadFromIff(file); + else if (strcmp(paramName, "interiorLayoutFileName") == 0) + m_interiorLayoutFileName.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedBuildingObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedBuildingObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedBuildingObjectTemplate_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; + + // save terrainModificationFileName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("terrainModificationFileName"); + m_terrainModificationFileName.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save interiorLayoutFileName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("interiorLayoutFileName"); + m_interiorLayoutFileName.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(); + + file.exitForm(true); + SharedTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedBuildingObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.h new file mode 100644 index 00000000..e7e7ff4f --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedBuildingObjectTemplate.h @@ -0,0 +1,90 @@ +//======================================================================== +// +// SharedBuildingObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedBuildingObjectTemplate_H +#define _INCLUDED_SharedBuildingObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedBuildingObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedBuildingObjectTemplate_tag = TAG(S,B,O,T) + }; +//@END TFD ID +public: + SharedBuildingObjectTemplate(const std::string & filename); + virtual ~SharedBuildingObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_terrainModificationFileName; + StringParam m_interiorLayoutFileName; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedBuildingObjectTemplate(const SharedBuildingObjectTemplate &); + SharedBuildingObjectTemplate & operator =(const SharedBuildingObjectTemplate &); +}; + + +inline void SharedBuildingObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedBuildingObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedBuildingObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.cpp new file mode 100644 index 00000000..8e8ce0ab --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedCellObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedCellObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedCellObjectTemplate::SharedCellObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedCellObjectTemplate::SharedCellObjectTemplate + +/** + * Class destructor. + */ +SharedCellObjectTemplate::~SharedCellObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedCellObjectTemplate::~SharedCellObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedCellObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedCellObjectTemplate_tag, create); +} // SharedCellObjectTemplate::registerMe + +/** + * Creates a SharedCellObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedCellObjectTemplate::create(const std::string & filename) +{ + return new SharedCellObjectTemplate(filename); +} // SharedCellObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedCellObjectTemplate::getId(void) const +{ + return SharedCellObjectTemplate_tag; +} // SharedCellObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedCellObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedCellObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedCellObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedCellObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedCellObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedCellObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedCellObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getFloatParam + +BoolParam * SharedCellObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getBoolParam + +StringParam * SharedCellObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getStringParam + +StringIdParam * SharedCellObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getStringIdParam + +VectorParam * SharedCellObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getVectorParam + +DynamicVariableParam * SharedCellObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedCellObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedCellObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedCellObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedCellObjectTemplate::getTriggerVolumeParam + +void SharedCellObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedObjectTemplate::initStructParamOT(param, name); +} // SharedCellObjectTemplate::initStructParamOT + +void SharedCellObjectTemplate::setAsEmptyList(const char *name) +{ + SharedObjectTemplate::setAsEmptyList(name); +} // SharedCellObjectTemplate::setAsEmptyList + +void SharedCellObjectTemplate::setAppend(const char *name) +{ + SharedObjectTemplate::setAppend(name); +} // SharedCellObjectTemplate::setAppend + +bool SharedCellObjectTemplate::isAppend(const char *name) const +{ + return SharedObjectTemplate::isAppend(name); +} // SharedCellObjectTemplate::isAppend + + +int SharedCellObjectTemplate::getListLength(const char *name) const +{ + return SharedObjectTemplate::getListLength(name); +} // SharedCellObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedCellObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedCellObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedCellObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedCellObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedCellObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedCellObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.h new file mode 100644 index 00000000..eed44fb4 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedCellObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedCellObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedCellObjectTemplate_H +#define _INCLUDED_SharedCellObjectTemplate_H + +#include "SharedObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedCellObjectTemplate : public SharedObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedCellObjectTemplate_tag = TAG(C,C,L,T) + }; +//@END TFD ID +public: + SharedCellObjectTemplate(const std::string & filename); + virtual ~SharedCellObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedCellObjectTemplate(const SharedCellObjectTemplate &); + SharedCellObjectTemplate & operator =(const SharedCellObjectTemplate &); +}; + + +inline void SharedCellObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedCellObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedCellObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.cpp new file mode 100644 index 00000000..96fd66fd --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedConstructionContractObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedConstructionContractObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedConstructionContractObjectTemplate::SharedConstructionContractObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedConstructionContractObjectTemplate::SharedConstructionContractObjectTemplate + +/** + * Class destructor. + */ +SharedConstructionContractObjectTemplate::~SharedConstructionContractObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedConstructionContractObjectTemplate::~SharedConstructionContractObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedConstructionContractObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedConstructionContractObjectTemplate_tag, create); +} // SharedConstructionContractObjectTemplate::registerMe + +/** + * Creates a SharedConstructionContractObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedConstructionContractObjectTemplate::create(const std::string & filename) +{ + return new SharedConstructionContractObjectTemplate(filename); +} // SharedConstructionContractObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedConstructionContractObjectTemplate::getId(void) const +{ + return SharedConstructionContractObjectTemplate_tag; +} // SharedConstructionContractObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedConstructionContractObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedConstructionContractObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedConstructionContractObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedConstructionContractObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedConstructionContractObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedConstructionContractObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedConstructionContractObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getFloatParam + +BoolParam * SharedConstructionContractObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getBoolParam + +StringParam * SharedConstructionContractObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getStringParam + +StringIdParam * SharedConstructionContractObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getStringIdParam + +VectorParam * SharedConstructionContractObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getVectorParam + +DynamicVariableParam * SharedConstructionContractObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedConstructionContractObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedConstructionContractObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedConstructionContractObjectTemplate::getTriggerVolumeParam + +void SharedConstructionContractObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedIntangibleObjectTemplate::initStructParamOT(param, name); +} // SharedConstructionContractObjectTemplate::initStructParamOT + +void SharedConstructionContractObjectTemplate::setAsEmptyList(const char *name) +{ + SharedIntangibleObjectTemplate::setAsEmptyList(name); +} // SharedConstructionContractObjectTemplate::setAsEmptyList + +void SharedConstructionContractObjectTemplate::setAppend(const char *name) +{ + SharedIntangibleObjectTemplate::setAppend(name); +} // SharedConstructionContractObjectTemplate::setAppend + +bool SharedConstructionContractObjectTemplate::isAppend(const char *name) const +{ + return SharedIntangibleObjectTemplate::isAppend(name); +} // SharedConstructionContractObjectTemplate::isAppend + + +int SharedConstructionContractObjectTemplate::getListLength(const char *name) const +{ + return SharedIntangibleObjectTemplate::getListLength(name); +} // SharedConstructionContractObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedConstructionContractObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedConstructionContractObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedConstructionContractObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedConstructionContractObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedConstructionContractObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedConstructionContractObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.h new file mode 100644 index 00000000..911ac1e9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedConstructionContractObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedConstructionContractObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedConstructionContractObjectTemplate_H +#define _INCLUDED_SharedConstructionContractObjectTemplate_H + +#include "SharedIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedConstructionContractObjectTemplate : public SharedIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedConstructionContractObjectTemplate_tag = TAG(S,C,N,C) + }; +//@END TFD ID +public: + SharedConstructionContractObjectTemplate(const std::string & filename); + virtual ~SharedConstructionContractObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedConstructionContractObjectTemplate(const SharedConstructionContractObjectTemplate &); + SharedConstructionContractObjectTemplate & operator =(const SharedConstructionContractObjectTemplate &); +}; + + +inline void SharedConstructionContractObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedConstructionContractObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedConstructionContractObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp new file mode 100644 index 00000000..8287999e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.cpp @@ -0,0 +1,838 @@ +//======================================================================== +// +// SharedCreatureObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedCreatureObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedCreatureObjectTemplate::SharedCreatureObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedCreatureObjectTemplate::SharedCreatureObjectTemplate + +/** + * Class destructor. + */ +SharedCreatureObjectTemplate::~SharedCreatureObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedCreatureObjectTemplate::~SharedCreatureObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // SharedCreatureObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_race; + } + fprintf(stderr, "trying to access single-parameter \"race\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_cameraHeight; + } + fprintf(stderr, "trying to access single-parameter \"cameraHeight\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_postureAlignToTerrain[index]; + } + fprintf(stderr, "index for parameter \"postureAlignToTerrain\" out of bounds\n"); + } + else + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_movementDatatable; + } + fprintf(stderr, "trying to access single-parameter \"movementDatatable\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedCreatureObjectTemplate::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedCreatureObjectTemplate::setAsEmptyList + +void SharedCreatureObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedCreatureObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,1,3)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedCreatureObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.h new file mode 100644 index 00000000..21d3cbfc --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedCreatureObjectTemplate.h @@ -0,0 +1,420 @@ +//======================================================================== +// +// SharedCreatureObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedCreatureObjectTemplate_H +#define _INCLUDED_SharedCreatureObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedCreatureObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedCreatureObjectTemplate_tag = TAG(S,C,O,T) + }; +//@END TFD ID +public: + SharedCreatureObjectTemplate(const std::string & filename); + virtual ~SharedCreatureObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum Gender + { + GE_male, + GE_female, + GE_other, + Gender_Last = GE_other, + }; + + enum MovementTypes + { + MT_run, + MT_walk, + MovementTypes_Last = MT_walk, + }; + + enum Niche + { + NI_none = 0, + NI_pc = 1, + NI_ai = 2, + NI_droid = 3, + NI_vehicle = 4, + NI_npc = 5, + NI_monster = 6, + NI_herbivore = 7, + NI_carnivore = 8, + NI_predator = 9, + NI_android = 10, + Niche_Last = NI_android, + }; + + enum Postures + { + Upright = 0, + Crouched = 1, + Prone = 2, + Sneaking = 3, + Blocking = 4, + Climbing = 5, + Flying = 6, + LyingDown = 7, + Sitting = 8, + SkillAnimating = 9, + DrivingVehicle = 10, + RidingCreature = 11, + KnockedDown = 12, + Incapacitated = 13, + Dead = 14, + Postures_Last = Dead, + }; + + enum Race + { + RA_none, + RA_aqualish_quara = 1, + RA_aqualish_aquala = 2, + RA_ewok_ewok = 1, // // plae, green, black, white (subject to change, pending information request to LucasArts) + RA_ewok_dulok = 2, // // blue skin; "Orn Free Taa", "Ann Gella" & "Tann", Sebulba's personal entourage. + RA_ewok_jinda = 3, // // red skin; "Pampy" & "Supi", consorts of Orn Free Taa. + RA_gungan_ankura = 1, // // Boss Nass + RA_gungan_otolla = 2, // // Jar Jar + RA_nikto_red = 1, // // Kajain'sa'Nikto + RA_nikto_green = 2, // // Kadas'sa'Nikto + RA_nikto_mountain = 3, // // Esral'sa'Nikto + RA_nikto_pale = 4, // // Gluss'sa'Nikto + RA_nikto_southern = 5, // // M'shento'su'Nikto + RA_krayt_canyon = 1, + RA_krayt_greater = 2, + RA_R2 = 0, + RA_R3 = 1, + RA_R4 = 2, + RA_R5 = 3, + Race_Last = RA_R5, + }; + + enum Species + { + SP_human = 0, + SP_rodian = 1, + SP_trandoshan = 2, + SP_monCalamari = 3, + SP_wookiee = 4, + SP_bothan = 5, + SP_twilek = 6, + SP_zabrak = 7, + SP_abyssin = 8, + SP_aqualish = 9, + SP_arcona = 10, + SP_askajian = 11, + SP_bith = 12, + SP_bomarrMonk = 13, + SP_chadraFan = 14, + SP_chevin = 15, + SP_dantari = 16, + SP_devaronian = 17, + SP_drall = 18, + SP_dug = 19, + SP_duros = 20, + SP_elomin = 21, + SP_ewok = 22, + SP_feeorin = 23, + SP_frogDog = 24, + SP_gamorrean = 25, + SP_gorax = 26, + SP_gotal = 27, + SP_gran = 28, + SP_gungan = 29, + SP_gupin = 30, + SP_hutt = 31, + SP_ishiTib = 32, + SP_ithorian = 33, + SP_jawa = 34, + SP_kiffu = 35, + SP_kitonak = 36, + SP_klatooinian = 37, + SP_kowakianMonkeyLizard = 38, + SP_kubaz = 39, + SP_marauder = 40, + SP_massassiWarrior = 41, + SP_nikto = 42, + SP_ortolan = 43, + SP_palowick = 44, + SP_phlog = 45, + SP_quarren = 46, + SP_selonian = 47, + SP_shistavanen = 48, + SP_sullustan = 49, + SP_talz = 50, + SP_teek = 51, + SP_tulgah = 52, + SP_toydarian = 53, + SP_tuskenRaider = 54, + SP_weequay = 55, + SP_whiffid = 56, + SP_wistie = 57, + SP_yuzzum = 58, + SP_angler = 60, + SP_bageraset = 61, + SP_bantha = 62, + SP_barkMite = 63, + SP_bazNitch = 64, + SP_beardedJax = 65, + SP_blackfish = 66, + SP_blistmok = 67, + SP_bluefish = 68, + SP_blurrg = 69, + SP_boarWolf = 70, + SP_bocatt = 71, + SP_bol = 72, + SP_bolleBol = 73, + SP_bolma = 74, + SP_bordok = 75, + SP_borgle = 76, + SP_brackaset = 77, + SP_capperSpineflap = 78, + SP_carrionSpat = 79, + SP_choku = 80, + SP_chuba = 81, + SP_coloClawFish = 82, + SP_condorDragon = 83, + SP_corellianSandPanther = 84, + SP_corellianSliceHound = 85, + SP_crownedRasp = 86, + SP_crystalSnake = 87, + SP_cuPa = 88, + SP_dalyrake = 89, + SP_dewback = 90, + SP_duneLizard = 91, + SP_durni = 92, + SP_dwarfNuna = 93, + SP_eopie = 94, + SP_faa = 95, + SP_falumpaset = 96, + SP_fambaa = 97, + SP_fannedRawl = 98, + SP_flewt = 99, + SP_flit = 100, + SP_fliteRasp = 101, + SP_fynock = 102, + SP_gackleBat = 103, + SP_gapingSpider = 104, + SP_gekk = 105, + SP_gnort = 106, + SP_graul = 107, + SP_greatGrassPlainsTuskCat = 108, + SP_gronda = 109, + SP_gualama = 110, + SP_gubbur = 111, + SP_gufDrolg = 112, + SP_gulginaw = 113, + SP_gurk = 114, + SP_gurnaset = 115, + SP_gurrek = 116, + SP_hanadak = 117, + SP_hermitSpider = 118, + SP_hornedKrevol = 119, + SP_hornedRasp = 120, + SP_hufDun = 121, + SP_huurton = 122, + SP_ikopi = 123, + SP_jellyfish = 124, + SP_kaadu = 125, + SP_kaitok = 126, + SP_kima = 127, + SP_kimogila = 128, + SP_kittle = 129, + SP_kliknik = 130, + SP_krahbu = 131, + SP_kraytDragon = 132, + SP_kupernug = 133, + SP_kusak = 134, + SP_kwi = 135, + SP_laa = 136, + SP_langlatch = 137, + SP_lanternBird = 138, + SP_malkloc = 139, + SP_mamien = 140, + SP_mawgax = 141, + SP_merek = 142, + SP_mott = 143, + SP_murra = 144, + SP_mynock = 145, + SP_narglatch = 146, + SP_nerf = 147, + SP_nuna = 148, + SP_opeeSeaKiller = 149, + SP_predatorialButterfly = 150, + SP_pekoPeko = 151, + SP_perlek = 152, + SP_pharple = 153, + SP_piket = 154, + SP_plumedRasp = 155, + SP_pufferfish = 156, + SP_pugoriss = 157, + SP_purbole = 158, + SP_quenker = 159, + SP_qurvel = 160, + SP_rancor = 161, + SP_ray = 162, + SP_remmer = 163, + SP_reptilianFlyer = 164, + SP_roba = 165, + SP_rockMite = 166, + SP_ronto = 167, + SP_saltMynock = 168, + SP_sarlacc = 169, + SP_scurrier = 170, + SP_sharnaff = 171, + SP_shaupaut = 172, + SP_shearMite = 173, + SP_skreeg = 174, + SP_snorbal = 175, + SP_spinedPuc = 176, + SP_spinedSnake = 177, + SP_squall = 178, + SP_squill = 179, + SP_stintaril = 180, + SP_stripedFish = 181, + SP_swirlProng = 182, + SP_tancMite = 183, + SP_taunTaun = 184, + SP_tesselatedArborealBinjinphant = 185, + SP_thune = 186, + SP_torton = 187, + SP_tybis = 188, + SP_veermok = 189, + SP_verne = 190, + SP_vesp = 191, + SP_virVur = 192, + SP_vlutore = 193, + SP_vogEel = 194, + SP_voritorLizard = 195, + SP_vynock = 196, + SP_whisperBird = 197, + SP_wingedOrnith = 198, + SP_wompRat = 199, + SP_woolamander = 200, + SP_worrt = 201, + SP_zuccaBoar = 202, + SP_assassinDroid = 203, + SP_astromech = 204, + SP_bartenderDroid = 205, + SP_bugDroid = 206, + SP_darktrooper = 207, + SP_demolitionmech = 208, + SP_doorDroid = 209, + SP_droideka = 210, + SP_interrogator = 211, + SP_jediTrainer = 212, + SP_loadLifter = 213, + SP_mouseDroid = 214, + SP_powerDroid = 215, + SP_probot = 216, + SP_protocolDroid = 217, + SP_repairDroid = 218, + SP_spiderDroid = 219, + SP_surgicalDroid = 220, + SP_tattletaleDroid = 221, + SP_trackerDroid = 222, + SP_treadwell = 223, + SP_ev9d9 = 224, + SP_maulProbeDroid = 225, + SP_atst = 226, + SP_atat = 227, + SP_geonosian = 228, + SP_veractyle = 229, + Species_Last = SP_veractyle, + }; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + CompilerIntegerParam m_gender; // //creature gender + CompilerIntegerParam m_niche; // //creature niche + CompilerIntegerParam m_species; // //creature species + CompilerIntegerParam m_race; // //creature subspecies + FloatParam m_acceleration[2]; // //how fast the creature accelerates in m/s/s + FloatParam m_speed[2]; // //how fast the creature moves in m/s + FloatParam m_turnRate[2]; // //how fast the creature turns in deg/s + StringParam m_animationMapFilename; // //info on how to animate the creature + FloatParam m_slopeModAngle; // //the maximum slope (in degrees) the creature will scale + FloatParam m_slopeModPercent; // //the relative speed the creature travels up a vertical slope + FloatParam m_waterModPercent; // //the relative speed the creature travels in water + FloatParam m_stepHeight; // //The maximum vertical step distance for the creature + FloatParam m_collisionHeight; // //The height of the creature's collision cylinder + FloatParam m_collisionRadius; // //The radius of the creature's collision cylinder + StringParam m_movementDatatable; // //The datatable to use for creature movement + BoolParam m_postureAlignToTerrain[15]; // //align to terrain flags per posture + FloatParam m_swimHeight; // //Height below the water where the creature decides to swim + FloatParam m_warpTolerance; + FloatParam m_collisionOffsetX; // // X offset of the collision sphere + FloatParam m_collisionOffsetZ; // // Z offset of the collision sphere + FloatParam m_collisionLength; // // Length of the creature, in meters + FloatParam m_cameraHeight; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedCreatureObjectTemplate(const SharedCreatureObjectTemplate &); + SharedCreatureObjectTemplate & operator =(const SharedCreatureObjectTemplate &); +}; + + +inline void SharedCreatureObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedCreatureObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedCreatureObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp new file mode 100644 index 00000000..49c95adb --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.cpp @@ -0,0 +1,906 @@ +//======================================================================== +// +// SharedDraftSchematicObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedDraftSchematicObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedDraftSchematicObjectTemplate::SharedDraftSchematicObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedIntangibleObjectTemplate(filename) + ,m_slotsLoaded(false) + ,m_slotsAppend(false) + ,m_attributesLoaded(false) + ,m_attributesAppend(false) +//@END TFD INIT +{ +} // SharedDraftSchematicObjectTemplate::SharedDraftSchematicObjectTemplate + +/** + * Class destructor. + */ +SharedDraftSchematicObjectTemplate::~SharedDraftSchematicObjectTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_slots.begin(); iter != m_slots.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_slots.clear(); + } + { + std::vector::iterator iter; + for (iter = m_attributes.begin(); iter != m_attributes.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_attributes.clear(); + } +//@END TFD CLEANUP +} // SharedDraftSchematicObjectTemplate::~SharedDraftSchematicObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // SharedDraftSchematicObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // SharedDraftSchematicObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_craftedSharedTemplate; + } + fprintf(stderr, "trying to access single-parameter \"craftedSharedTemplate\" as an array\n"); + } + else + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedDraftSchematicObjectTemplate::getStringParam + +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 + +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 NULL; +} //SharedDraftSchematicObjectTemplate::getStructParamOT + +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::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::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 + +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 + + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,3)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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 = NULL; + } + 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 = NULL; + } + 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.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedDraftSchematicObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + + +//============================================================================= +// class SharedDraftSchematicObjectTemplate::_IngredientSlot + +/** + * Class constructor. + */ +SharedDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot(const std::string & filename) + : TpfTemplate(filename) +{ +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::_IngredientSlot + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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 + +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_hardpoint; + } + fprintf(stderr, "trying to access single-parameter \"hardpoint\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_name; + } + fprintf(stderr, "trying to access single-parameter \"name\" as an array\n"); + } + else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return NULL; +} //SharedDraftSchematicObjectTemplate::_IngredientSlot::getStringIdParam + +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 + +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 + +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::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 + + +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 + * for this template. + * + * @param file file to load from + */ +void SharedDraftSchematicObjectTemplate::_IngredientSlot::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // SharedDraftSchematicObjectTemplate::_IngredientSlot::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedDraftSchematicObjectTemplate::_IngredientSlot::save(Iff &file) +{ +int count; + + file.insertForm(_IngredientSlot_tag); + + 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; + + // 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 + + +//============================================================================= +// class SharedDraftSchematicObjectTemplate::_SchematicAttribute + +/** + * Class constructor. + */ +SharedDraftSchematicObjectTemplate::_SchematicAttribute::_SchematicAttribute(const std::string & filename) + : TpfTemplate(filename) +{ +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::_SchematicAttribute + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_value; + } + fprintf(stderr, "trying to access single-parameter \"value\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getCompilerIntegerParam + +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 + +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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_experiment; + } + fprintf(stderr, "trying to access single-parameter \"experiment\" as an array\n"); + } + else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return NULL; +} //SharedDraftSchematicObjectTemplate::_SchematicAttribute::getStringIdParam + +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 + +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 + +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::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 + + +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 + * for this template. + * + * @param file file to load from + */ +void SharedDraftSchematicObjectTemplate::_SchematicAttribute::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // SharedDraftSchematicObjectTemplate::_SchematicAttribute::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedDraftSchematicObjectTemplate::_SchematicAttribute::save(Iff &file) +{ +int count; + + file.insertForm(_SchematicAttribute_tag); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.h new file mode 100644 index 00000000..ecf99a85 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedDraftSchematicObjectTemplate.h @@ -0,0 +1,238 @@ +//======================================================================== +// +// SharedDraftSchematicObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedDraftSchematicObjectTemplate_H +#define _INCLUDED_SharedDraftSchematicObjectTemplate_H + +#include "SharedIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedDraftSchematicObjectTemplate : public SharedIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedDraftSchematicObjectTemplate_tag = TAG(S,D,S,C) + }; +//@END TFD ID +public: + SharedDraftSchematicObjectTemplate(const std::string & filename); + virtual ~SharedDraftSchematicObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum ArmorRating + { + AR_armorNone, + AR_armorLight, + AR_armorMedium, + AR_armorHeavy, + ArmorRating_Last = AR_armorHeavy, + }; + + enum DamageType + { + DT_none = 0x000000, + DT_kinetic = 0x00000001, + DT_energy = 0x00000002, + DT_blast = 0x00000004, + DT_stun = 0x00000008, + DT_restraint = 0x00000010, + DT_elemental_heat = 0x00000020, + DT_elemental_cold = 0x00000040, + DT_elemental_acid = 0x00000080, + DT_elemental_electrical = 0x00000100, + DT_environmental_heat = 0x00000200, + DT_environmental_cold = 0x00000400, + DT_environmental_acid = 0x00000800, + DT_environmental_electrical = 0x00001000, + DamageType_Last = DT_environmental_electrical, + }; + +public: + struct IngredientSlot + { + StringId name; + std::string hardpoint; + }; + + struct SchematicAttribute + { + StringId name; + StringId experiment; + int value; + }; + +protected: + class _IngredientSlot : public TpfTemplate + { + friend class SharedDraftSchematicObjectTemplate; + public: + enum + { + _IngredientSlot_tag = TAG(S,I,S,S) + }; + + public: + _IngredientSlot(const std::string & filename); + virtual ~_IngredientSlot(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringIdParam m_name; // slot name + StringParam m_hardpoint; // UI hardpoint for this slot + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _IngredientSlot(const _IngredientSlot &); + _IngredientSlot & operator =(const _IngredientSlot &); + }; + friend class SharedDraftSchematicObjectTemplate::_IngredientSlot; + + class _SchematicAttribute : public TpfTemplate + { + friend class SharedDraftSchematicObjectTemplate; + public: + enum + { + _SchematicAttribute_tag = TAG(D,S,S,A) + }; + + public: + _SchematicAttribute(const std::string & filename); + virtual ~_SchematicAttribute(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringIdParam m_name; // name of the attribute + StringIdParam m_experiment; // name of the experimental attribute associated with the attribute + CompilerIntegerParam m_value; // value of the attribute - a range for draft schematics and a single value for manufacture schematics + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _SchematicAttribute(const _SchematicAttribute &); + _SchematicAttribute & operator =(const _SchematicAttribute &); + }; + friend class SharedDraftSchematicObjectTemplate::_SchematicAttribute; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + // this enum is also defined in the server object_template.tdf file + // this enum is also defined in the server object_template.tdf file + stdvector::fwd m_slots; // ingredient slots + bool m_slotsLoaded; + bool m_slotsAppend; + stdvector::fwd m_attributes; // what attributes the schematic can affect + bool m_attributesLoaded; + bool m_attributesAppend; + StringParam m_craftedSharedTemplate; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedDraftSchematicObjectTemplate(const SharedDraftSchematicObjectTemplate &); + SharedDraftSchematicObjectTemplate & operator =(const SharedDraftSchematicObjectTemplate &); +}; + + +inline void SharedDraftSchematicObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedDraftSchematicObjectTemplate::registerMe(); + SharedDraftSchematicObjectTemplate::_IngredientSlot::registerMe(); + SharedDraftSchematicObjectTemplate::_SchematicAttribute::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedDraftSchematicObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.cpp new file mode 100644 index 00000000..42f71a69 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedFactoryObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedFactoryObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedFactoryObjectTemplate::SharedFactoryObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedFactoryObjectTemplate::SharedFactoryObjectTemplate + +/** + * Class destructor. + */ +SharedFactoryObjectTemplate::~SharedFactoryObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedFactoryObjectTemplate::~SharedFactoryObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedFactoryObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedFactoryObjectTemplate_tag, create); +} // SharedFactoryObjectTemplate::registerMe + +/** + * Creates a SharedFactoryObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedFactoryObjectTemplate::create(const std::string & filename) +{ + return new SharedFactoryObjectTemplate(filename); +} // SharedFactoryObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedFactoryObjectTemplate::getId(void) const +{ + return SharedFactoryObjectTemplate_tag; +} // SharedFactoryObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedFactoryObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedFactoryObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedFactoryObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedFactoryObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedFactoryObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedFactoryObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedFactoryObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getFloatParam + +BoolParam * SharedFactoryObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getBoolParam + +StringParam * SharedFactoryObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getStringParam + +StringIdParam * SharedFactoryObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getStringIdParam + +VectorParam * SharedFactoryObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getVectorParam + +DynamicVariableParam * SharedFactoryObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedFactoryObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedFactoryObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedFactoryObjectTemplate::getTriggerVolumeParam + +void SharedFactoryObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedFactoryObjectTemplate::initStructParamOT + +void SharedFactoryObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedFactoryObjectTemplate::setAsEmptyList + +void SharedFactoryObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedFactoryObjectTemplate::setAppend + +bool SharedFactoryObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedFactoryObjectTemplate::isAppend + + +int SharedFactoryObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedFactoryObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedFactoryObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedFactoryObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedFactoryObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedFactoryObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedFactoryObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedFactoryObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.h new file mode 100644 index 00000000..7c561f91 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedFactoryObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedFactoryObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedFactoryObjectTemplate_H +#define _INCLUDED_SharedFactoryObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedFactoryObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedFactoryObjectTemplate_tag = TAG(S,F,O,T) + }; +//@END TFD ID +public: + SharedFactoryObjectTemplate(const std::string & filename); + virtual ~SharedFactoryObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedFactoryObjectTemplate(const SharedFactoryObjectTemplate &); + SharedFactoryObjectTemplate & operator =(const SharedFactoryObjectTemplate &); +}; + + +inline void SharedFactoryObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedFactoryObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedFactoryObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.cpp new file mode 100644 index 00000000..5ae90617 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedGroupObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedGroupObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedGroupObjectTemplate::SharedGroupObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedGroupObjectTemplate::SharedGroupObjectTemplate + +/** + * Class destructor. + */ +SharedGroupObjectTemplate::~SharedGroupObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedGroupObjectTemplate::~SharedGroupObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedGroupObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedGroupObjectTemplate_tag, create); +} // SharedGroupObjectTemplate::registerMe + +/** + * Creates a SharedGroupObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedGroupObjectTemplate::create(const std::string & filename) +{ + return new SharedGroupObjectTemplate(filename); +} // SharedGroupObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedGroupObjectTemplate::getId(void) const +{ + return SharedGroupObjectTemplate_tag; +} // SharedGroupObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedGroupObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedGroupObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedGroupObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedGroupObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedGroupObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedGroupObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedGroupObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getFloatParam + +BoolParam * SharedGroupObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getBoolParam + +StringParam * SharedGroupObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getStringParam + +StringIdParam * SharedGroupObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getStringIdParam + +VectorParam * SharedGroupObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getVectorParam + +DynamicVariableParam * SharedGroupObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedGroupObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedGroupObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedGroupObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedGroupObjectTemplate::getTriggerVolumeParam + +void SharedGroupObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedUniverseObjectTemplate::initStructParamOT(param, name); +} // SharedGroupObjectTemplate::initStructParamOT + +void SharedGroupObjectTemplate::setAsEmptyList(const char *name) +{ + SharedUniverseObjectTemplate::setAsEmptyList(name); +} // SharedGroupObjectTemplate::setAsEmptyList + +void SharedGroupObjectTemplate::setAppend(const char *name) +{ + SharedUniverseObjectTemplate::setAppend(name); +} // SharedGroupObjectTemplate::setAppend + +bool SharedGroupObjectTemplate::isAppend(const char *name) const +{ + return SharedUniverseObjectTemplate::isAppend(name); +} // SharedGroupObjectTemplate::isAppend + + +int SharedGroupObjectTemplate::getListLength(const char *name) const +{ + return SharedUniverseObjectTemplate::getListLength(name); +} // SharedGroupObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedGroupObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedGroupObjectTemplate_tag) + { + SharedUniverseObjectTemplate::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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedGroupObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedGroupObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedGroupObjectTemplate_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; + + + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); + + file.exitForm(true); + SharedUniverseObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedGroupObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.h new file mode 100644 index 00000000..8e3549d9 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedGroupObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedGroupObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedGroupObjectTemplate_H +#define _INCLUDED_SharedGroupObjectTemplate_H + +#include "SharedUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedGroupObjectTemplate : public SharedUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedGroupObjectTemplate_tag = TAG(S,G,R,P) + }; +//@END TFD ID +public: + SharedGroupObjectTemplate(const std::string & filename); + virtual ~SharedGroupObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedGroupObjectTemplate(const SharedGroupObjectTemplate &); + SharedGroupObjectTemplate & operator =(const SharedGroupObjectTemplate &); +}; + + +inline void SharedGroupObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedGroupObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedGroupObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.cpp new file mode 100644 index 00000000..3c0f2ecb --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedGuildObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedGuildObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedGuildObjectTemplate::SharedGuildObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedGuildObjectTemplate::SharedGuildObjectTemplate + +/** + * Class destructor. + */ +SharedGuildObjectTemplate::~SharedGuildObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedGuildObjectTemplate::~SharedGuildObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedGuildObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedGuildObjectTemplate_tag, create); +} // SharedGuildObjectTemplate::registerMe + +/** + * Creates a SharedGuildObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedGuildObjectTemplate::create(const std::string & filename) +{ + return new SharedGuildObjectTemplate(filename); +} // SharedGuildObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedGuildObjectTemplate::getId(void) const +{ + return SharedGuildObjectTemplate_tag; +} // SharedGuildObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedGuildObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedGuildObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedGuildObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedGuildObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedGuildObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedGuildObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedGuildObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getFloatParam + +BoolParam * SharedGuildObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getBoolParam + +StringParam * SharedGuildObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getStringParam + +StringIdParam * SharedGuildObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getStringIdParam + +VectorParam * SharedGuildObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getVectorParam + +DynamicVariableParam * SharedGuildObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedGuildObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedGuildObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedGuildObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedGuildObjectTemplate::getTriggerVolumeParam + +void SharedGuildObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedUniverseObjectTemplate::initStructParamOT(param, name); +} // SharedGuildObjectTemplate::initStructParamOT + +void SharedGuildObjectTemplate::setAsEmptyList(const char *name) +{ + SharedUniverseObjectTemplate::setAsEmptyList(name); +} // SharedGuildObjectTemplate::setAsEmptyList + +void SharedGuildObjectTemplate::setAppend(const char *name) +{ + SharedUniverseObjectTemplate::setAppend(name); +} // SharedGuildObjectTemplate::setAppend + +bool SharedGuildObjectTemplate::isAppend(const char *name) const +{ + return SharedUniverseObjectTemplate::isAppend(name); +} // SharedGuildObjectTemplate::isAppend + + +int SharedGuildObjectTemplate::getListLength(const char *name) const +{ + return SharedUniverseObjectTemplate::getListLength(name); +} // SharedGuildObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedGuildObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedGuildObjectTemplate_tag) + { + SharedUniverseObjectTemplate::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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedGuildObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedGuildObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedGuildObjectTemplate_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; + + + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); + + file.exitForm(true); + SharedUniverseObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedGuildObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.h new file mode 100644 index 00000000..668ba3c0 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedGuildObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedGuildObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedGuildObjectTemplate_H +#define _INCLUDED_SharedGuildObjectTemplate_H + +#include "SharedUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedGuildObjectTemplate : public SharedUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedGuildObjectTemplate_tag = TAG(S,G,L,D) + }; +//@END TFD ID +public: + SharedGuildObjectTemplate(const std::string & filename); + virtual ~SharedGuildObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedGuildObjectTemplate(const SharedGuildObjectTemplate &); + SharedGuildObjectTemplate & operator =(const SharedGuildObjectTemplate &); +}; + + +inline void SharedGuildObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedGuildObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedGuildObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.cpp new file mode 100644 index 00000000..ac5af8bb --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedInstallationObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedInstallationObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedInstallationObjectTemplate::SharedInstallationObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedInstallationObjectTemplate::SharedInstallationObjectTemplate + +/** + * Class destructor. + */ +SharedInstallationObjectTemplate::~SharedInstallationObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedInstallationObjectTemplate::~SharedInstallationObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedInstallationObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedInstallationObjectTemplate_tag, create); +} // SharedInstallationObjectTemplate::registerMe + +/** + * Creates a SharedInstallationObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedInstallationObjectTemplate::create(const std::string & filename) +{ + return new SharedInstallationObjectTemplate(filename); +} // SharedInstallationObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedInstallationObjectTemplate::getId(void) const +{ + return SharedInstallationObjectTemplate_tag; +} // SharedInstallationObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedInstallationObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedInstallationObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedInstallationObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedInstallationObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedInstallationObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedInstallationObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedInstallationObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getFloatParam + +BoolParam * SharedInstallationObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getBoolParam + +StringParam * SharedInstallationObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getStringParam + +StringIdParam * SharedInstallationObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getStringIdParam + +VectorParam * SharedInstallationObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getVectorParam + +DynamicVariableParam * SharedInstallationObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedInstallationObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedInstallationObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedInstallationObjectTemplate::getTriggerVolumeParam + +void SharedInstallationObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedInstallationObjectTemplate::initStructParamOT + +void SharedInstallationObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedInstallationObjectTemplate::setAsEmptyList + +void SharedInstallationObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedInstallationObjectTemplate::setAppend + +bool SharedInstallationObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedInstallationObjectTemplate::isAppend + + +int SharedInstallationObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedInstallationObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedInstallationObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedInstallationObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedInstallationObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedInstallationObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedInstallationObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedInstallationObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.h new file mode 100644 index 00000000..be3c1b5e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedInstallationObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedInstallationObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedInstallationObjectTemplate_H +#define _INCLUDED_SharedInstallationObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedInstallationObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedInstallationObjectTemplate_tag = TAG(S,I,O,T) + }; +//@END TFD ID +public: + SharedInstallationObjectTemplate(const std::string & filename); + virtual ~SharedInstallationObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedInstallationObjectTemplate(const SharedInstallationObjectTemplate &); + SharedInstallationObjectTemplate & operator =(const SharedInstallationObjectTemplate &); +}; + + +inline void SharedInstallationObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedInstallationObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedInstallationObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.cpp new file mode 100644 index 00000000..3be2ef52 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedIntangibleObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedIntangibleObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedIntangibleObjectTemplate::SharedIntangibleObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedIntangibleObjectTemplate::SharedIntangibleObjectTemplate + +/** + * Class destructor. + */ +SharedIntangibleObjectTemplate::~SharedIntangibleObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedIntangibleObjectTemplate::~SharedIntangibleObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedIntangibleObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedIntangibleObjectTemplate_tag, create); +} // SharedIntangibleObjectTemplate::registerMe + +/** + * Creates a SharedIntangibleObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedIntangibleObjectTemplate::create(const std::string & filename) +{ + return new SharedIntangibleObjectTemplate(filename); +} // SharedIntangibleObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedIntangibleObjectTemplate::getId(void) const +{ + return SharedIntangibleObjectTemplate_tag; +} // SharedIntangibleObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedIntangibleObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedIntangibleObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedIntangibleObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedIntangibleObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedIntangibleObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedIntangibleObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedIntangibleObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getFloatParam + +BoolParam * SharedIntangibleObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getBoolParam + +StringParam * SharedIntangibleObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getStringParam + +StringIdParam * SharedIntangibleObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getStringIdParam + +VectorParam * SharedIntangibleObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getVectorParam + +DynamicVariableParam * SharedIntangibleObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedIntangibleObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedIntangibleObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedIntangibleObjectTemplate::getTriggerVolumeParam + +void SharedIntangibleObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedObjectTemplate::initStructParamOT(param, name); +} // SharedIntangibleObjectTemplate::initStructParamOT + +void SharedIntangibleObjectTemplate::setAsEmptyList(const char *name) +{ + SharedObjectTemplate::setAsEmptyList(name); +} // SharedIntangibleObjectTemplate::setAsEmptyList + +void SharedIntangibleObjectTemplate::setAppend(const char *name) +{ + SharedObjectTemplate::setAppend(name); +} // SharedIntangibleObjectTemplate::setAppend + +bool SharedIntangibleObjectTemplate::isAppend(const char *name) const +{ + return SharedObjectTemplate::isAppend(name); +} // SharedIntangibleObjectTemplate::isAppend + + +int SharedIntangibleObjectTemplate::getListLength(const char *name) const +{ + return SharedObjectTemplate::getListLength(name); +} // SharedIntangibleObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedIntangibleObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedIntangibleObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedIntangibleObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedIntangibleObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedIntangibleObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedIntangibleObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.h new file mode 100644 index 00000000..86542ae2 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedIntangibleObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedIntangibleObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedIntangibleObjectTemplate_H +#define _INCLUDED_SharedIntangibleObjectTemplate_H + +#include "SharedObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedIntangibleObjectTemplate : public SharedObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedIntangibleObjectTemplate_tag = TAG(S,I,T,N) + }; +//@END TFD ID +public: + SharedIntangibleObjectTemplate(const std::string & filename); + virtual ~SharedIntangibleObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedIntangibleObjectTemplate(const SharedIntangibleObjectTemplate &); + SharedIntangibleObjectTemplate & operator =(const SharedIntangibleObjectTemplate &); +}; + + +inline void SharedIntangibleObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedIntangibleObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedIntangibleObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.cpp new file mode 100644 index 00000000..0b8eb548 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedJediManagerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedJediManagerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedJediManagerObjectTemplate::SharedJediManagerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedUniverseObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedJediManagerObjectTemplate::SharedJediManagerObjectTemplate + +/** + * Class destructor. + */ +SharedJediManagerObjectTemplate::~SharedJediManagerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedJediManagerObjectTemplate::~SharedJediManagerObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedJediManagerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedJediManagerObjectTemplate_tag, create); +} // SharedJediManagerObjectTemplate::registerMe + +/** + * Creates a SharedJediManagerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedJediManagerObjectTemplate::create(const std::string & filename) +{ + return new SharedJediManagerObjectTemplate(filename); +} // SharedJediManagerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedJediManagerObjectTemplate::getId(void) const +{ + return SharedJediManagerObjectTemplate_tag; +} // SharedJediManagerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedJediManagerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedJediManagerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedJediManagerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedJediManagerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedJediManagerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedJediManagerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedJediManagerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getFloatParam + +BoolParam * SharedJediManagerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getBoolParam + +StringParam * SharedJediManagerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getStringParam + +StringIdParam * SharedJediManagerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getStringIdParam + +VectorParam * SharedJediManagerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getVectorParam + +DynamicVariableParam * SharedJediManagerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedJediManagerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedJediManagerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedUniverseObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedJediManagerObjectTemplate::getTriggerVolumeParam + +void SharedJediManagerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedUniverseObjectTemplate::initStructParamOT(param, name); +} // SharedJediManagerObjectTemplate::initStructParamOT + +void SharedJediManagerObjectTemplate::setAsEmptyList(const char *name) +{ + SharedUniverseObjectTemplate::setAsEmptyList(name); +} // SharedJediManagerObjectTemplate::setAsEmptyList + +void SharedJediManagerObjectTemplate::setAppend(const char *name) +{ + SharedUniverseObjectTemplate::setAppend(name); +} // SharedJediManagerObjectTemplate::setAppend + +bool SharedJediManagerObjectTemplate::isAppend(const char *name) const +{ + return SharedUniverseObjectTemplate::isAppend(name); +} // SharedJediManagerObjectTemplate::isAppend + + +int SharedJediManagerObjectTemplate::getListLength(const char *name) const +{ + return SharedUniverseObjectTemplate::getListLength(name); +} // SharedJediManagerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedJediManagerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedJediManagerObjectTemplate_tag) + { + SharedUniverseObjectTemplate::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(); + + file.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedUniverseObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedJediManagerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedJediManagerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedJediManagerObjectTemplate_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; + + + // write number of parameters + file.goToTopOfForm(); + file.insertChunk(TAG(P, C, N, T)); + file.insertChunkData(¶mCount, sizeof(paramCount)); + file.exitChunk(); + + file.exitForm(true); + SharedUniverseObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedJediManagerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.h new file mode 100644 index 00000000..97ef82da --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedJediManagerObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedJediManagerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedJediManagerObjectTemplate_H +#define _INCLUDED_SharedJediManagerObjectTemplate_H + +#include "SharedUniverseObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedJediManagerObjectTemplate : public SharedUniverseObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedJediManagerObjectTemplate_tag = TAG(S,J,E,D) + }; +//@END TFD ID +public: + SharedJediManagerObjectTemplate(const std::string & filename); + virtual ~SharedJediManagerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedJediManagerObjectTemplate(const SharedJediManagerObjectTemplate &); + SharedJediManagerObjectTemplate & operator =(const SharedJediManagerObjectTemplate &); +}; + + +inline void SharedJediManagerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedJediManagerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedJediManagerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.cpp new file mode 100644 index 00000000..ca6c3133 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedManufactureSchematicObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedManufactureSchematicObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedManufactureSchematicObjectTemplate::SharedManufactureSchematicObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedManufactureSchematicObjectTemplate::SharedManufactureSchematicObjectTemplate + +/** + * Class destructor. + */ +SharedManufactureSchematicObjectTemplate::~SharedManufactureSchematicObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedManufactureSchematicObjectTemplate::~SharedManufactureSchematicObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedManufactureSchematicObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedManufactureSchematicObjectTemplate_tag, create); +} // SharedManufactureSchematicObjectTemplate::registerMe + +/** + * Creates a SharedManufactureSchematicObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedManufactureSchematicObjectTemplate::create(const std::string & filename) +{ + return new SharedManufactureSchematicObjectTemplate(filename); +} // SharedManufactureSchematicObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedManufactureSchematicObjectTemplate::getId(void) const +{ + return SharedManufactureSchematicObjectTemplate_tag; +} // SharedManufactureSchematicObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedManufactureSchematicObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedManufactureSchematicObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedManufactureSchematicObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedManufactureSchematicObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedManufactureSchematicObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedManufactureSchematicObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedManufactureSchematicObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getFloatParam + +BoolParam * SharedManufactureSchematicObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getBoolParam + +StringParam * SharedManufactureSchematicObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getStringParam + +StringIdParam * SharedManufactureSchematicObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getStringIdParam + +VectorParam * SharedManufactureSchematicObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getVectorParam + +DynamicVariableParam * SharedManufactureSchematicObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedManufactureSchematicObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedManufactureSchematicObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedManufactureSchematicObjectTemplate::getTriggerVolumeParam + +void SharedManufactureSchematicObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedIntangibleObjectTemplate::initStructParamOT(param, name); +} // SharedManufactureSchematicObjectTemplate::initStructParamOT + +void SharedManufactureSchematicObjectTemplate::setAsEmptyList(const char *name) +{ + SharedIntangibleObjectTemplate::setAsEmptyList(name); +} // SharedManufactureSchematicObjectTemplate::setAsEmptyList + +void SharedManufactureSchematicObjectTemplate::setAppend(const char *name) +{ + SharedIntangibleObjectTemplate::setAppend(name); +} // SharedManufactureSchematicObjectTemplate::setAppend + +bool SharedManufactureSchematicObjectTemplate::isAppend(const char *name) const +{ + return SharedIntangibleObjectTemplate::isAppend(name); +} // SharedManufactureSchematicObjectTemplate::isAppend + + +int SharedManufactureSchematicObjectTemplate::getListLength(const char *name) const +{ + return SharedIntangibleObjectTemplate::getListLength(name); +} // SharedManufactureSchematicObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedManufactureSchematicObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedManufactureSchematicObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedManufactureSchematicObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedManufactureSchematicObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedManufactureSchematicObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedManufactureSchematicObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.h new file mode 100644 index 00000000..02881875 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedManufactureSchematicObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedManufactureSchematicObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedManufactureSchematicObjectTemplate_H +#define _INCLUDED_SharedManufactureSchematicObjectTemplate_H + +#include "SharedIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedManufactureSchematicObjectTemplate : public SharedIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedManufactureSchematicObjectTemplate_tag = TAG(S,M,S,C) + }; +//@END TFD ID +public: + SharedManufactureSchematicObjectTemplate(const std::string & filename); + virtual ~SharedManufactureSchematicObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedManufactureSchematicObjectTemplate(const SharedManufactureSchematicObjectTemplate &); + SharedManufactureSchematicObjectTemplate & operator =(const SharedManufactureSchematicObjectTemplate &); +}; + + +inline void SharedManufactureSchematicObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedManufactureSchematicObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedManufactureSchematicObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.cpp new file mode 100644 index 00000000..dc0dcae6 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedMissionObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedMissionObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedMissionObjectTemplate::SharedMissionObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedMissionObjectTemplate::SharedMissionObjectTemplate + +/** + * Class destructor. + */ +SharedMissionObjectTemplate::~SharedMissionObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedMissionObjectTemplate::~SharedMissionObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedMissionObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedMissionObjectTemplate_tag, create); +} // SharedMissionObjectTemplate::registerMe + +/** + * Creates a SharedMissionObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedMissionObjectTemplate::create(const std::string & filename) +{ + return new SharedMissionObjectTemplate(filename); +} // SharedMissionObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedMissionObjectTemplate::getId(void) const +{ + return SharedMissionObjectTemplate_tag; +} // SharedMissionObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedMissionObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedMissionObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedMissionObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedMissionObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedMissionObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedMissionObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedMissionObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getFloatParam + +BoolParam * SharedMissionObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getBoolParam + +StringParam * SharedMissionObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getStringParam + +StringIdParam * SharedMissionObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getStringIdParam + +VectorParam * SharedMissionObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getVectorParam + +DynamicVariableParam * SharedMissionObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedMissionObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedMissionObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedMissionObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedMissionObjectTemplate::getTriggerVolumeParam + +void SharedMissionObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedIntangibleObjectTemplate::initStructParamOT(param, name); +} // SharedMissionObjectTemplate::initStructParamOT + +void SharedMissionObjectTemplate::setAsEmptyList(const char *name) +{ + SharedIntangibleObjectTemplate::setAsEmptyList(name); +} // SharedMissionObjectTemplate::setAsEmptyList + +void SharedMissionObjectTemplate::setAppend(const char *name) +{ + SharedIntangibleObjectTemplate::setAppend(name); +} // SharedMissionObjectTemplate::setAppend + +bool SharedMissionObjectTemplate::isAppend(const char *name) const +{ + return SharedIntangibleObjectTemplate::isAppend(name); +} // SharedMissionObjectTemplate::isAppend + + +int SharedMissionObjectTemplate::getListLength(const char *name) const +{ + return SharedIntangibleObjectTemplate::getListLength(name); +} // SharedMissionObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedMissionObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedMissionObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedMissionObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedMissionObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedMissionObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedMissionObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.h new file mode 100644 index 00000000..41cb1fdb --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedMissionObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedMissionObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedMissionObjectTemplate_H +#define _INCLUDED_SharedMissionObjectTemplate_H + +#include "SharedIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedMissionObjectTemplate : public SharedIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedMissionObjectTemplate_tag = TAG(S,M,S,O) + }; +//@END TFD ID +public: + SharedMissionObjectTemplate(const std::string & filename); + virtual ~SharedMissionObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedMissionObjectTemplate(const SharedMissionObjectTemplate &); + SharedMissionObjectTemplate & operator =(const SharedMissionObjectTemplate &); +}; + + +inline void SharedMissionObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedMissionObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedMissionObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp new file mode 100644 index 00000000..c21c34a5 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.cpp @@ -0,0 +1,764 @@ +//======================================================================== +// +// SharedObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedObjectTemplate::SharedObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : TpfTemplate(filename) +//@END TFD INIT +{ +} // SharedObjectTemplate::SharedObjectTemplate + +/** + * Class destructor. + */ +SharedObjectTemplate::~SharedObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedObjectTemplate::~SharedObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // SharedObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_surfaceType; + } + fprintf(stderr, "trying to access single-parameter \"surfaceType\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_locationReservationRadius; + } + fprintf(stderr, "trying to access single-parameter \"locationReservationRadius\" as an array\n"); + } + else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_forceNoCollision; + } + fprintf(stderr, "trying to access single-parameter \"forceNoCollision\" as an array\n"); + } + else + return TpfTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_clientDataFile; + } + fprintf(stderr, "trying to access single-parameter \"clientDataFile\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringIdParam(name, deepCheck, index); + return NULL; + } + return &m_lookAtText; + } + fprintf(stderr, "trying to access single-parameter \"lookAtText\" as an array\n"); + } + else + return TpfTemplate::getStringIdParam(name, deepCheck, index); + return NULL; +} //SharedObjectTemplate::getStringIdParam + +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 + +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 + +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::setAppend(const char *name) +{ + TpfTemplate::setAppend(name); +} // SharedObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,1,0)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // SharedObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.h new file mode 100644 index 00000000..752dfa7f --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedObjectTemplate.h @@ -0,0 +1,397 @@ +//======================================================================== +// +// SharedObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedObjectTemplate_H +#define _INCLUDED_SharedObjectTemplate_H + +#include "sharedTemplateDefinition/TpfTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedObjectTemplate : public TpfTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedObjectTemplate_tag = TAG(S,H,O,T) + }; +//@END TFD ID +public: + SharedObjectTemplate(const std::string & filename); + virtual ~SharedObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum ContainerType + { + CT_none, + CT_slotted, + CT_volume, // //This kind of container can hold tangible objects + CT_volumeIntangible, // //This kind of container can hold intangible objects + CT_volumeGeneric, // //This kind of container can hold any object tangible or not. + CT_ridable, // //This should be used for vehicles and mounts only: provides a slotted container with contents visible to the world + ContainerType_Last = CT_ridable, + }; + + enum GameObjectType + { + GOT_none = 0x00000000, + GOT_corpse, + GOT_group, + GOT_guild, + GOT_lair, + GOT_static, + GOT_camp, + GOT_vendor, + GOT_loadbeacon, + GOT_armor = 0x00000100, // //if you add armor types, please add them to the GOT_powerups as well + GOT_armor_body, + GOT_armor_head, + GOT_armor_misc, + GOT_armor_leg, + GOT_armor_arm, + GOT_armor_hand, + GOT_armor_foot, + GOT_armor_shield, + GOT_armor_layer, + GOT_armor_segment, + GOT_armor_core, + GOT_armor_psg, + GOT_building = 0x00000200, + GOT_building_municipal, + GOT_building_player, + GOT_building_factional, + GOT_creature = 0x00000400, + GOT_creature_character, + GOT_creature_droid, + GOT_creature_droid_probe, + GOT_creature_monster, + GOT_data = 0x00000800, + GOT_data_draft_schematic, + GOT_data_manufacturing_schematic, + GOT_data_mission_object, + GOT_data_token, + GOT_data_waypoint, + GOT_data_fictional, + GOT_data_pet_control_device, + GOT_data_vehicle_control_device, + GOT_data_draft_schematic_read_only, + GOT_data_ship_control_device, + GOT_data_droid_control_device, + GOT_data_house_control_device, + GOT_data_vendor_control_device, + GOT_data_player_quest_object, + GOT_installation = 0x00001000, + GOT_installation_factory, + GOT_installation_generator, + GOT_installation_harvester, + GOT_installation_turret, + GOT_installation_minefield, + GOT_misc = 0x00002000, + GOT_misc_ammunition, + GOT_misc_chemical, + GOT_misc_clothing_DUMMY, // // when you remove this, please recompile all the shared object templates + GOT_misc_component_DUMMY, // // when you remove this, please recompile all the shared object templates + GOT_misc_container, + GOT_misc_crafting_station, + GOT_misc_deed_DUMMY, + GOT_misc_electronics, + GOT_misc_flora, + GOT_misc_food, + GOT_misc_furniture, + GOT_misc_instrument, + GOT_misc_pharmaceutical, + GOT_misc_resource_container_DUMMY, // // when you remove this, please recompile all the shared object templates + GOT_misc_sign, + GOT_misc_counter, + GOT_misc_factory_crate, + GOT_misc_ticket_travel, + GOT_misc_item, // // generic 'usable' item + GOT_misc_trap, + GOT_misc_container_wearable, + GOT_misc_fishing_pole, + GOT_misc_fishing_bait, + GOT_misc_drink, + GOT_misc_firework, + GOT_misc_item_usable, + GOT_misc_petmed, + GOT_misc_firework_show, + GOT_misc_clothing_attachment, + GOT_misc_live_sample, + GOT_misc_armor_attachment, + GOT_misc_community_crafting_project, + GOT_misc_force_crystal, + GOT_misc_droid_programming_chip, + GOT_misc_asteroid, + GOT_misc_pob_ship_pilot_chair, + GOT_misc_operations_chair, + GOT_misc_turret_access_ladder, + GOT_misc_container_ship_loot, + GOT_misc_armor_noequip, + GOT_misc_enzyme, + GOT_misc_food_pet, + GOT_misc_collection, + GOT_misc_container_public, + GOT_misc_ground_target, + GOT_misc_blueprint, + GOT_misc_enzyme_isomerase, + GOT_misc_enzyme_lyase, + GOT_misc_enzyme_hydrolase, + GOT_misc_tcg_card, + GOT_misc_appearance_only, + GOT_misc_appearance_only_invisible, + GOT_terminal = 0x00004000, + GOT_terminal_bank, + GOT_terminal_bazaar, + GOT_terminal_cloning, + GOT_terminal_insurance, + GOT_terminal_manage, + GOT_terminal_mission, + GOT_terminal_permissions, + GOT_terminal_player_structure, + GOT_terminal_shipping, + GOT_terminal_travel, + GOT_terminal_space, + GOT_terminal_misc, + GOT_terminal_space_npe, + GOT_tool = 0x00008000, + GOT_tool_crafting, + GOT_tool_survey, + GOT_tool_repair, + GOT_tool_camp_kit, + GOT_tool_ship_component_repair, + GOT_vehicle = 0x00010000, + GOT_vehicle_hover, + GOT_vehicle_hover_ai, + GOT_weapon = 0x00020000, // //if you add weapon types, please add them to the GOT_powerups as well + GOT_weapon_melee_misc, + GOT_weapon_ranged_misc, + GOT_weapon_ranged_thrown, + GOT_weapon_heavy_misc, + GOT_weapon_heavy_mine, + GOT_weapon_heavy_special, + GOT_weapon_melee_1h, + GOT_weapon_melee_2h, + GOT_weapon_melee_polearm, + GOT_weapon_ranged_pistol, + GOT_weapon_ranged_carbine, + GOT_weapon_ranged_rifle, + GOT_component = 0x00040000, + GOT_component_armor, + GOT_component_chemistry, + GOT_component_clothing, + GOT_component_droid, + GOT_component_electronics, + GOT_component_munition, + GOT_component_structure, + GOT_component_weapon_melee, + GOT_component_weapon_ranged, + GOT_component_tissue, + GOT_component_genetic, + GOT_component_saber_crystal, + GOT_component_community_crafting, + GOT_component_new_armor, + GOT_powerup_weapon = 0x00080000, + GOT_powerup_weapon_melee, + GOT_powerup_weapon_ranged, + GOT_powerup_weapon_thrown, + GOT_powerup_weapon_heavy, + GOT_powerup_weapon_mine, + GOT_powerup_weapon_heavy_special, + GOT_powerup_armor = 0x00100000, + GOT_powerup_armor_body, + GOT_powerup_armor_head, + GOT_powerup_armor_misc, + GOT_powerup_armor_leg, + GOT_powerup_armor_arm, + GOT_powerup_armor_hand, + GOT_powerup_armor_foot, + GOT_powerup_armor_layer, + GOT_powerup_armor_segment, + GOT_powerup_armor_core, + GOT_jewelry = 0x00200000, + GOT_jewelry_ring, + GOT_jewelry_bracelet, + GOT_jewelry_necklace, + GOT_jewelry_earring, + GOT_resource_container = 0x00400000, + GOT_resource_container_energy_gas, + GOT_resource_container_energy_liquid, + GOT_resource_container_energy_radioactive, + GOT_resource_container_energy_solid, + GOT_resource_container_inorganic_chemicals, + GOT_resource_container_inorganic_gas, + GOT_resource_container_inorganic_minerals, + GOT_resource_container_inorganic_water, + GOT_resource_container_organic_food, + GOT_resource_container_organic_hide, + GOT_resource_container_organic_structure, + GOT_resource_container_pseudo, + GOT_resource_container_space, + GOT_deed = 0x00800000, + GOT_deed_building, + GOT_deed_installation, + GOT_deed_pet, + GOT_deed_droid, + GOT_deed_vehicle, + GOT_clothing = 0x01000000, + GOT_clothing_bandolier, + GOT_clothing_belt, + GOT_clothing_bodysuit, + GOT_clothing_cape, + GOT_clothing_cloak, + GOT_clothing_foot, + GOT_clothing_dress, + GOT_clothing_hand, + GOT_clothing_eye, + GOT_clothing_head, + GOT_clothing_jacket, + GOT_clothing_pants, + GOT_clothing_robe, + GOT_clothing_shirt, + GOT_clothing_vest, + GOT_clothing_wookiee, + GOT_clothing_misc, + GOT_clothing_skirt, + GOT_ship_component = 0x40000000, // //add space-specific GOTS at the "end" to make merging easier + GOT_ship_component_reactor, + GOT_ship_component_engine, + GOT_ship_component_shield, + GOT_ship_component_armor, + GOT_ship_component_weapon, + GOT_ship_component_capacitor, + GOT_ship_component_booster, + GOT_ship_component_droid_interface, + GOT_ship_component_hangar, + GOT_ship_component_targeting_station, + GOT_ship_component_bridge, + GOT_ship_component_chassis, + GOT_ship_component_missilepack, + GOT_ship_component_countermeasurepack, + GOT_ship_component_missilelauncher, + GOT_ship_component_countermeasurelauncher, + GOT_ship_component_cargo_hold, + GOT_ship_component_modification, + GOT_ship = 0x20000000, + GOT_ship_fighter, + GOT_ship_capital, + GOT_ship_station, + GOT_ship_transport, + GOT_ship_mining_asteroid_static, + GOT_ship_mining_asteroid_dynamic, + GOT_cybernetic = 0x20000100, + GOT_cybernetic_arm, + GOT_cybernetic_legs, + GOT_cybernetic_torso, + GOT_cybernetic_forearm, + GOT_cybernetic_hand, + GOT_cybernetic_component, + GOT_chronicles = 0x00001100, + GOT_chronicles_relic, + GOT_chronicles_chronicle, + GOT_chronicles_quest_holocron, + GOT_chronicles_quest_holocron_recipe, + GOT_chronicles_relic_fragment, + GameObjectType_Last = GOT_chronicles_relic_fragment, + }; + + enum SurfaceType + { + ST_other, + ST_metal, + ST_stone, + ST_wood, + ST_acid, + ST_ice, + ST_molten, + ST_obsidian, + SurfaceType_Last = ST_obsidian, + }; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringIdParam m_objectName; // //the default name of this object + StringIdParam m_detailedDescription; // //long description of the object + StringIdParam m_lookAtText; // //? does this differ from detailedDescription ? + BoolParam m_snapToTerrain; // //flag that the object is snapped to terrain on addition to the world + CompilerIntegerParam m_containerType; // //if this is a container, what kind + CompilerIntegerParam m_containerVolumeLimit; // //if this object has a volume container, this say how much it can hold. + StringParam m_tintPalette; // //what tints are available to the object + StringParam m_slotDescriptorFilename; // //what slots are available for this object + StringParam m_arrangementDescriptorFilename; // //what slots this object can be put into + StringParam m_appearanceFilename; // //? + StringParam m_portalLayoutFilename; // //? + StringParam m_clientDataFile; // //client-specific data + FloatParam m_scale; // //modification to object's size + CompilerIntegerParam m_gameObjectType; // // game object type + BoolParam m_sendToClient; // //specifies whether or not the object using this template should is sent to the client + FloatParam m_scaleThresholdBeforeExtentTest; // //specifies the scale at which the object will use box extents for collision + FloatParam m_clearFloraRadius; // // distance to clear collidable flora around this object + CompilerIntegerParam m_surfaceType; + FloatParam m_noBuildRadius; // // distance to not allow structure placement around this object + BoolParam m_onlyVisibleInTools; + FloatParam m_locationReservationRadius; + BoolParam m_forceNoCollision; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedObjectTemplate(const SharedObjectTemplate &); + SharedObjectTemplate & operator =(const SharedObjectTemplate &); +}; + + +inline void SharedObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.cpp new file mode 100644 index 00000000..d5dd759d --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedPlayerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedPlayerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedPlayerObjectTemplate::SharedPlayerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedPlayerObjectTemplate::SharedPlayerObjectTemplate + +/** + * Class destructor. + */ +SharedPlayerObjectTemplate::~SharedPlayerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedPlayerObjectTemplate::~SharedPlayerObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedPlayerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedPlayerObjectTemplate_tag, create); +} // SharedPlayerObjectTemplate::registerMe + +/** + * Creates a SharedPlayerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedPlayerObjectTemplate::create(const std::string & filename) +{ + return new SharedPlayerObjectTemplate(filename); +} // SharedPlayerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedPlayerObjectTemplate::getId(void) const +{ + return SharedPlayerObjectTemplate_tag; +} // SharedPlayerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedPlayerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedPlayerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedPlayerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedPlayerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedPlayerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedPlayerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedPlayerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getFloatParam + +BoolParam * SharedPlayerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getBoolParam + +StringParam * SharedPlayerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getStringParam + +StringIdParam * SharedPlayerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getStringIdParam + +VectorParam * SharedPlayerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getVectorParam + +DynamicVariableParam * SharedPlayerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedPlayerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedPlayerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedPlayerObjectTemplate::getTriggerVolumeParam + +void SharedPlayerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedIntangibleObjectTemplate::initStructParamOT(param, name); +} // SharedPlayerObjectTemplate::initStructParamOT + +void SharedPlayerObjectTemplate::setAsEmptyList(const char *name) +{ + SharedIntangibleObjectTemplate::setAsEmptyList(name); +} // SharedPlayerObjectTemplate::setAsEmptyList + +void SharedPlayerObjectTemplate::setAppend(const char *name) +{ + SharedIntangibleObjectTemplate::setAppend(name); +} // SharedPlayerObjectTemplate::setAppend + +bool SharedPlayerObjectTemplate::isAppend(const char *name) const +{ + return SharedIntangibleObjectTemplate::isAppend(name); +} // SharedPlayerObjectTemplate::isAppend + + +int SharedPlayerObjectTemplate::getListLength(const char *name) const +{ + return SharedIntangibleObjectTemplate::getListLength(name); +} // SharedPlayerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedPlayerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedPlayerObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedPlayerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedPlayerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedPlayerObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedPlayerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.h new file mode 100644 index 00000000..7be8313b --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedPlayerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedPlayerObjectTemplate_H +#define _INCLUDED_SharedPlayerObjectTemplate_H + +#include "SharedIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedPlayerObjectTemplate : public SharedIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedPlayerObjectTemplate_tag = TAG(S,P,L,Y) + }; +//@END TFD ID +public: + SharedPlayerObjectTemplate(const std::string & filename); + virtual ~SharedPlayerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedPlayerObjectTemplate(const SharedPlayerObjectTemplate &); + SharedPlayerObjectTemplate & operator =(const SharedPlayerObjectTemplate &); +}; + + +inline void SharedPlayerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedPlayerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedPlayerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.cpp new file mode 100644 index 00000000..22cd668a --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.cpp @@ -0,0 +1,267 @@ +//======================================================================== +// +// SharedPlayerQuestObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedPlayerQuestObjectTemplate.h" +#include "SharedTangibleObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedPlayerQuestObjectTemplate::SharedPlayerQuestObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedPlayerQuestObjectTemplate::SharedPlayerQuestObjectTemplate + +/** + * Class destructor. + */ +SharedPlayerQuestObjectTemplate::~SharedPlayerQuestObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedPlayerQuestObjectTemplate::~SharedPlayerQuestObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedPlayerQuestObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedPlayerQuestObjectTemplate_tag, create); +} // SharedPlayerQuestObjectTemplate::registerMe + +/** + * Creates a SharedPlayerQuestObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedPlayerQuestObjectTemplate::create(const std::string & filename) +{ + return new SharedPlayerQuestObjectTemplate(filename); +} // SharedPlayerQuestObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedPlayerQuestObjectTemplate::getId(void) const +{ + return SharedPlayerQuestObjectTemplate_tag; +} // SharedPlayerQuestObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedPlayerQuestObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedPlayerQuestObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedPlayerQuestObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedPlayerQuestObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedPlayerQuestObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedPlayerQuestObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedPlayerQuestObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getFloatParam + +BoolParam * SharedPlayerQuestObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getBoolParam + +StringParam * SharedPlayerQuestObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getStringParam + +StringIdParam * SharedPlayerQuestObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getStringIdParam + +VectorParam * SharedPlayerQuestObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getVectorParam + +DynamicVariableParam * SharedPlayerQuestObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedPlayerQuestObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedPlayerQuestObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedPlayerQuestObjectTemplate::getTriggerVolumeParam + +void SharedPlayerQuestObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedPlayerQuestObjectTemplate::initStructParamOT + +void SharedPlayerQuestObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedPlayerQuestObjectTemplate::setAsEmptyList + +void SharedPlayerQuestObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedPlayerQuestObjectTemplate::setAppend + +bool SharedPlayerQuestObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedPlayerQuestObjectTemplate::isAppend + + +int SharedPlayerQuestObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedPlayerQuestObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedPlayerQuestObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedPlayerQuestObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedPlayerQuestObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedPlayerQuestObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedPlayerQuestObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedPlayerQuestObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.h new file mode 100644 index 00000000..aeebfd33 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedPlayerQuestObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedPlayerQuestObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedPlayerQuestObjectTemplate_H +#define _INCLUDED_SharedPlayerQuestObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedPlayerQuestObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedPlayerQuestObjectTemplate_tag = TAG(S,P,Q,O) + }; +//@END TFD ID +public: + SharedPlayerQuestObjectTemplate(const std::string & filename); + virtual ~SharedPlayerQuestObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedPlayerQuestObjectTemplate(const SharedPlayerQuestObjectTemplate &); + SharedPlayerQuestObjectTemplate & operator =(const SharedPlayerQuestObjectTemplate &); +}; + + +inline void SharedPlayerQuestObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedPlayerQuestObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedPlayerQuestObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.cpp new file mode 100644 index 00000000..2e992371 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedResourceContainerObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedResourceContainerObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedResourceContainerObjectTemplate::SharedResourceContainerObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedResourceContainerObjectTemplate::SharedResourceContainerObjectTemplate + +/** + * Class destructor. + */ +SharedResourceContainerObjectTemplate::~SharedResourceContainerObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedResourceContainerObjectTemplate::~SharedResourceContainerObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedResourceContainerObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedResourceContainerObjectTemplate_tag, create); +} // SharedResourceContainerObjectTemplate::registerMe + +/** + * Creates a SharedResourceContainerObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedResourceContainerObjectTemplate::create(const std::string & filename) +{ + return new SharedResourceContainerObjectTemplate(filename); +} // SharedResourceContainerObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedResourceContainerObjectTemplate::getId(void) const +{ + return SharedResourceContainerObjectTemplate_tag; +} // SharedResourceContainerObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedResourceContainerObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedResourceContainerObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedResourceContainerObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedResourceContainerObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedResourceContainerObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedResourceContainerObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedResourceContainerObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getFloatParam + +BoolParam * SharedResourceContainerObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getBoolParam + +StringParam * SharedResourceContainerObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getStringParam + +StringIdParam * SharedResourceContainerObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getStringIdParam + +VectorParam * SharedResourceContainerObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getVectorParam + +DynamicVariableParam * SharedResourceContainerObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedResourceContainerObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedResourceContainerObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedResourceContainerObjectTemplate::getTriggerVolumeParam + +void SharedResourceContainerObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedResourceContainerObjectTemplate::initStructParamOT + +void SharedResourceContainerObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedResourceContainerObjectTemplate::setAsEmptyList + +void SharedResourceContainerObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedResourceContainerObjectTemplate::setAppend + +bool SharedResourceContainerObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedResourceContainerObjectTemplate::isAppend + + +int SharedResourceContainerObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedResourceContainerObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedResourceContainerObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedResourceContainerObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedResourceContainerObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedResourceContainerObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedResourceContainerObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedResourceContainerObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.h new file mode 100644 index 00000000..5bc20b09 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedResourceContainerObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedResourceContainerObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedResourceContainerObjectTemplate_H +#define _INCLUDED_SharedResourceContainerObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedResourceContainerObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedResourceContainerObjectTemplate_tag = TAG(R,C,C,T) + }; +//@END TFD ID +public: + SharedResourceContainerObjectTemplate(const std::string & filename); + virtual ~SharedResourceContainerObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedResourceContainerObjectTemplate(const SharedResourceContainerObjectTemplate &); + SharedResourceContainerObjectTemplate & operator =(const SharedResourceContainerObjectTemplate &); +}; + + +inline void SharedResourceContainerObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedResourceContainerObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedResourceContainerObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp new file mode 100644 index 00000000..cfdc0394 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.cpp @@ -0,0 +1,362 @@ +//======================================================================== +// +// SharedShipObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedShipObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedShipObjectTemplate::SharedShipObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedShipObjectTemplate::SharedShipObjectTemplate + +/** + * Class destructor. + */ +SharedShipObjectTemplate::~SharedShipObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedShipObjectTemplate::~SharedShipObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedShipObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedShipObjectTemplate_tag, create); +} // SharedShipObjectTemplate::registerMe + +/** + * Creates a SharedShipObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedShipObjectTemplate::create(const std::string & filename) +{ + return new SharedShipObjectTemplate(filename); +} // SharedShipObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedShipObjectTemplate::getId(void) const +{ + return SharedShipObjectTemplate_tag; +} // SharedShipObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedShipObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedShipObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedShipObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedShipObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedShipObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedShipObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedShipObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedShipObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedShipObjectTemplate::getFloatParam + +BoolParam * SharedShipObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "hasWings") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_hasWings; + } + fprintf(stderr, "trying to access single-parameter \"hasWings\" as an array\n"); + } + else if (strcmp(name, "playerControlled") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_playerControlled; + } + fprintf(stderr, "trying to access single-parameter \"playerControlled\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //SharedShipObjectTemplate::getBoolParam + +StringParam * SharedShipObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "cockpitFilename") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_cockpitFilename; + } + fprintf(stderr, "trying to access single-parameter \"cockpitFilename\" as an array\n"); + } + else if (strcmp(name, "interiorLayoutFileName") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_interiorLayoutFileName; + } + fprintf(stderr, "trying to access single-parameter \"interiorLayoutFileName\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedShipObjectTemplate::getStringParam + +StringIdParam * SharedShipObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedShipObjectTemplate::getStringIdParam + +VectorParam * SharedShipObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedShipObjectTemplate::getVectorParam + +DynamicVariableParam * SharedShipObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedShipObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedShipObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedShipObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedShipObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedShipObjectTemplate::getTriggerVolumeParam + +void SharedShipObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedShipObjectTemplate::initStructParamOT + +void SharedShipObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedShipObjectTemplate::setAsEmptyList + +void SharedShipObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedShipObjectTemplate::setAppend + +bool SharedShipObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedShipObjectTemplate::isAppend + + +int SharedShipObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedShipObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedShipObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedShipObjectTemplate_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 == 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,4)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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, "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); + file.exitChunk(true); + } + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedShipObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedShipObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedShipObjectTemplate_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; + + // save cockpitFilename + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("cockpitFilename"); + m_cockpitFilename.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save hasWings + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("hasWings"); + m_hasWings.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save playerControlled + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("playerControlled"); + m_playerControlled.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save interiorLayoutFileName + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("interiorLayoutFileName"); + m_interiorLayoutFileName.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(); + + file.exitForm(true); + SharedTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedShipObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.h new file mode 100644 index 00000000..11f8fdb4 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedShipObjectTemplate.h @@ -0,0 +1,92 @@ +//======================================================================== +// +// SharedShipObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedShipObjectTemplate_H +#define _INCLUDED_SharedShipObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedShipObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedShipObjectTemplate_tag = TAG(S,S,H,P) + }; +//@END TFD ID +public: + SharedShipObjectTemplate(const std::string & filename); + virtual ~SharedShipObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_cockpitFilename; + BoolParam m_hasWings; + BoolParam m_playerControlled; + StringParam m_interiorLayoutFileName; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedShipObjectTemplate(const SharedShipObjectTemplate &); + SharedShipObjectTemplate & operator =(const SharedShipObjectTemplate &); +}; + + +inline void SharedShipObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedShipObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedShipObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.cpp new file mode 100644 index 00000000..72c0404e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedStaticObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedStaticObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedStaticObjectTemplate::SharedStaticObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedStaticObjectTemplate::SharedStaticObjectTemplate + +/** + * Class destructor. + */ +SharedStaticObjectTemplate::~SharedStaticObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedStaticObjectTemplate::~SharedStaticObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedStaticObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedStaticObjectTemplate_tag, create); +} // SharedStaticObjectTemplate::registerMe + +/** + * Creates a SharedStaticObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedStaticObjectTemplate::create(const std::string & filename) +{ + return new SharedStaticObjectTemplate(filename); +} // SharedStaticObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedStaticObjectTemplate::getId(void) const +{ + return SharedStaticObjectTemplate_tag; +} // SharedStaticObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedStaticObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedStaticObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedStaticObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedStaticObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedStaticObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedStaticObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedStaticObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getFloatParam + +BoolParam * SharedStaticObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getBoolParam + +StringParam * SharedStaticObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getStringParam + +StringIdParam * SharedStaticObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getStringIdParam + +VectorParam * SharedStaticObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getVectorParam + +DynamicVariableParam * SharedStaticObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedStaticObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedStaticObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedStaticObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedStaticObjectTemplate::getTriggerVolumeParam + +void SharedStaticObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedObjectTemplate::initStructParamOT(param, name); +} // SharedStaticObjectTemplate::initStructParamOT + +void SharedStaticObjectTemplate::setAsEmptyList(const char *name) +{ + SharedObjectTemplate::setAsEmptyList(name); +} // SharedStaticObjectTemplate::setAsEmptyList + +void SharedStaticObjectTemplate::setAppend(const char *name) +{ + SharedObjectTemplate::setAppend(name); +} // SharedStaticObjectTemplate::setAppend + +bool SharedStaticObjectTemplate::isAppend(const char *name) const +{ + return SharedObjectTemplate::isAppend(name); +} // SharedStaticObjectTemplate::isAppend + + +int SharedStaticObjectTemplate::getListLength(const char *name) const +{ + return SharedObjectTemplate::getListLength(name); +} // SharedStaticObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedStaticObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedStaticObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedStaticObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedStaticObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedStaticObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedStaticObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.h new file mode 100644 index 00000000..4b2f0b39 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedStaticObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedStaticObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedStaticObjectTemplate_H +#define _INCLUDED_SharedStaticObjectTemplate_H + +#include "SharedObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedStaticObjectTemplate : public SharedObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedStaticObjectTemplate_tag = TAG(S,T,A,T) + }; +//@END TFD ID +public: + SharedStaticObjectTemplate(const std::string & filename); + virtual ~SharedStaticObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedStaticObjectTemplate(const SharedStaticObjectTemplate &); + SharedStaticObjectTemplate & operator =(const SharedStaticObjectTemplate &); +}; + + +inline void SharedStaticObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedStaticObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedStaticObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp new file mode 100644 index 00000000..c4355c5e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.cpp @@ -0,0 +1,1740 @@ +//======================================================================== +// +// SharedTangibleObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedTangibleObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +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) +//@END TFD INIT +{ +} // SharedTangibleObjectTemplate::SharedTangibleObjectTemplate + +/** + * Class destructor. + */ +SharedTangibleObjectTemplate::~SharedTangibleObjectTemplate() +{ +//@BEGIN TFD CLEANUP + { + std::vector::iterator iter; + for (iter = m_paletteColorCustomizationVariables.begin(); iter != m_paletteColorCustomizationVariables.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_paletteColorCustomizationVariables.clear(); + } + { + std::vector::iterator iter; + for (iter = m_rangedIntCustomizationVariables.begin(); iter != m_rangedIntCustomizationVariables.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_rangedIntCustomizationVariables.clear(); + } + { + std::vector::iterator iter; + for (iter = m_constStringCustomizationVariables.begin(); iter != m_constStringCustomizationVariables.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_constStringCustomizationVariables.clear(); + } + { + std::vector::iterator iter; + for (iter = m_socketDestinations.begin(); iter != m_socketDestinations.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_socketDestinations.clear(); + } + { + std::vector::iterator iter; + for (iter = m_certificationsRequired.begin(); iter != m_certificationsRequired.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_certificationsRequired.clear(); + } + { + std::vector::iterator iter; + for (iter = m_customizationVariableMapping.begin(); iter != m_customizationVariableMapping.end(); ++iter) + { + delete *iter; + *iter = NULL; + } + m_customizationVariableMapping.clear(); + } +//@END TFD CLEANUP +} // SharedTangibleObjectTemplate::~SharedTangibleObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // SharedTangibleObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_clientVisabilityFlag; + } + fprintf(stderr, "trying to access single-parameter \"clientVisabilityFlag\" as an array\n"); + } + else + return SharedObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //SharedTangibleObjectTemplate::getCompilerIntegerParam + +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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getBoolParam(name, deepCheck, index); + return NULL; + } + return &m_targetable; + } + fprintf(stderr, "trying to access single-parameter \"targetable\" as an array\n"); + } + else + return SharedObjectTemplate::getBoolParam(name, deepCheck, index); + return NULL; +} //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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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 NULL; +} //SharedTangibleObjectTemplate::getStringParam + +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 + +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 NULL; +} //SharedTangibleObjectTemplate::getStructParamOT + +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::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 + +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 + +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 + + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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,1,0)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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 = NULL; + } + 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.exitForm(); + SharedObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedTangibleObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + + +//============================================================================= +// class SharedTangibleObjectTemplate::_ConstStringCustomizationVariable + +/** + * Class constructor. + */ +SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::_ConstStringCustomizationVariable(const std::string & filename) + : TpfTemplate(filename) +{ +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::_ConstStringCustomizationVariable + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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 + +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_constValue; + } + fprintf(stderr, "trying to access single-parameter \"constValue\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::save(Iff &file) +{ +int count; + + file.insertForm(_ConstStringCustomizationVariable_tag); + + 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; + + // 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 + + +//============================================================================= +// class SharedTangibleObjectTemplate::_CustomizationVariableMapping + +/** + * Class constructor. + */ +SharedTangibleObjectTemplate::_CustomizationVariableMapping::_CustomizationVariableMapping(const std::string & filename) + : TpfTemplate(filename) +{ +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::_CustomizationVariableMapping + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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 + +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_dependentVariable; + } + fprintf(stderr, "trying to access single-parameter \"dependentVariable\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedTangibleObjectTemplate::_CustomizationVariableMapping::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void SharedTangibleObjectTemplate::_CustomizationVariableMapping::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_CustomizationVariableMapping::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedTangibleObjectTemplate::_CustomizationVariableMapping::save(Iff &file) +{ +int count; + + file.insertForm(_CustomizationVariableMapping_tag); + + 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; + + // 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 + + +//============================================================================= +// class SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable + +/** + * Class constructor. + */ +SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::_PaletteColorCustomizationVariable(const std::string & filename) + : TpfTemplate(filename) +{ +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::_PaletteColorCustomizationVariable + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_defaultPaletteIndex; + } + fprintf(stderr, "trying to access single-parameter \"defaultPaletteIndex\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getCompilerIntegerParam + +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_palettePathName; + } + fprintf(stderr, "trying to access single-parameter \"palettePathName\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::save(Iff &file) +{ +int count; + + file.insertForm(_PaletteColorCustomizationVariable_tag); + + 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; + + // 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 + + +//============================================================================= +// class SharedTangibleObjectTemplate::_RangedIntCustomizationVariable + +/** + * Class constructor. + */ +SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::_RangedIntCustomizationVariable(const std::string & filename) + : TpfTemplate(filename) +{ +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::_RangedIntCustomizationVariable + +/** + * Class destructor. + */ +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 + +/** + * 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 + +/** + * Returns the template id. + * + * @return the template id + */ +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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_maxValueExclusive; + } + fprintf(stderr, "trying to access single-parameter \"maxValueExclusive\" as an array\n"); + } + else + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getCompilerIntegerParam + +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 + +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() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_variableName; + } + fprintf(stderr, "trying to access single-parameter \"variableName\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::getStringParam + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::setAsEmptyList + +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 + + +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 + * for this template. + * + * @param file file to load from + */ +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + 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.exitForm(); + UNREF(file); +} // SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::save(Iff &file) +{ +int count; + + file.insertForm(_RangedIntCustomizationVariable_tag); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.h new file mode 100644 index 00000000..0155701e --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedTangibleObjectTemplate.h @@ -0,0 +1,342 @@ +//======================================================================== +// +// SharedTangibleObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedTangibleObjectTemplate_H +#define _INCLUDED_SharedTangibleObjectTemplate_H + +#include "SharedObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedTangibleObjectTemplate : public SharedObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedTangibleObjectTemplate_tag = TAG(S,T,O,T) + }; +//@END TFD ID +public: + SharedTangibleObjectTemplate(const std::string & filename); + virtual ~SharedTangibleObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum ClientVisabilityFlags + { + CVF_always, + CVF_gm_only, + ClientVisabilityFlags_Last = CVF_gm_only, + }; + +public: + struct RangedIntCustomizationVariable + { + std::string variableName; + int minValueInclusive; + int defaultValue; + int maxValueExclusive; + }; + + struct PaletteColorCustomizationVariable + { + std::string variableName; + std::string palettePathName; + int defaultPaletteIndex; + }; + + struct ConstStringCustomizationVariable + { + std::string variableName; + std::string constValue; + }; + + struct CustomizationVariableMapping + { + std::string sourceVariable; + std::string dependentVariable; + }; + +protected: + class _RangedIntCustomizationVariable : public TpfTemplate + { + friend class SharedTangibleObjectTemplate; + public: + enum + { + _RangedIntCustomizationVariable_tag = TAG(R,I,C,V) + }; + + public: + _RangedIntCustomizationVariable(const std::string & filename); + virtual ~_RangedIntCustomizationVariable(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_variableName; + CompilerIntegerParam m_minValueInclusive; + CompilerIntegerParam m_defaultValue; + CompilerIntegerParam m_maxValueExclusive; + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _RangedIntCustomizationVariable(const _RangedIntCustomizationVariable &); + _RangedIntCustomizationVariable & operator =(const _RangedIntCustomizationVariable &); + }; + friend class SharedTangibleObjectTemplate::_RangedIntCustomizationVariable; + + class _PaletteColorCustomizationVariable : public TpfTemplate + { + friend class SharedTangibleObjectTemplate; + public: + enum + { + _PaletteColorCustomizationVariable_tag = TAG(P,C,C,V) + }; + + public: + _PaletteColorCustomizationVariable(const std::string & filename); + virtual ~_PaletteColorCustomizationVariable(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_variableName; + StringParam m_palettePathName; + CompilerIntegerParam m_defaultPaletteIndex; + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _PaletteColorCustomizationVariable(const _PaletteColorCustomizationVariable &); + _PaletteColorCustomizationVariable & operator =(const _PaletteColorCustomizationVariable &); + }; + friend class SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable; + + class _ConstStringCustomizationVariable : public TpfTemplate + { + friend class SharedTangibleObjectTemplate; + public: + enum + { + _ConstStringCustomizationVariable_tag = TAG(C,S,C,V) + }; + + public: + _ConstStringCustomizationVariable(const std::string & filename); + virtual ~_ConstStringCustomizationVariable(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_variableName; + StringParam m_constValue; + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _ConstStringCustomizationVariable(const _ConstStringCustomizationVariable &); + _ConstStringCustomizationVariable & operator =(const _ConstStringCustomizationVariable &); + }; + friend class SharedTangibleObjectTemplate::_ConstStringCustomizationVariable; + + class _CustomizationVariableMapping : public TpfTemplate + { + friend class SharedTangibleObjectTemplate; + public: + enum + { + _CustomizationVariableMapping_tag = TAG(C,V,M,M) + }; + + public: + _CustomizationVariableMapping(const std::string & filename); + virtual ~_CustomizationVariableMapping(); + + virtual Tag getId(void) const; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_sourceVariable; + StringParam m_dependentVariable; + private: + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + private: + _CustomizationVariableMapping(const _CustomizationVariableMapping &); + _CustomizationVariableMapping & operator =(const _CustomizationVariableMapping &); + }; + friend class SharedTangibleObjectTemplate::_CustomizationVariableMapping; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + stdvector::fwd m_paletteColorCustomizationVariables; // // all palette color customization variables exposed by an Object created with this template + bool m_paletteColorCustomizationVariablesLoaded; + bool m_paletteColorCustomizationVariablesAppend; + stdvector::fwd m_rangedIntCustomizationVariables; // // all ranged-int style customization variables exposed by an Object created with this template + bool m_rangedIntCustomizationVariablesLoaded; + bool m_rangedIntCustomizationVariablesAppend; + stdvector::fwd m_constStringCustomizationVariables; // // constant string values added to the Object's customization data, not persisted in the DB + bool m_constStringCustomizationVariablesLoaded; + bool m_constStringCustomizationVariablesAppend; + stdvector::fwd m_socketDestinations; // // GOTs that this object can be socketed into + bool m_socketDestinationsLoaded; + bool m_socketDestinationsAppend; + StringParam m_structureFootprintFileName; + BoolParam m_useStructureFootprintOutline; + BoolParam m_targetable; // // can the object be targetted by the client + stdvector::fwd m_certificationsRequired; // // List of the certifications required to use this item (used in x1 only) + bool m_certificationsRequiredLoaded; + bool m_certificationsRequiredAppend; + stdvector::fwd m_customizationVariableMapping; // // Allows remapping of variables when needed + bool m_customizationVariableMappingLoaded; + bool m_customizationVariableMappingAppend; + CompilerIntegerParam m_clientVisabilityFlag; // // can the object be viewed on the client +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedTangibleObjectTemplate(const SharedTangibleObjectTemplate &); + SharedTangibleObjectTemplate & operator =(const SharedTangibleObjectTemplate &); +}; + + +inline void SharedTangibleObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedTangibleObjectTemplate::registerMe(); + SharedTangibleObjectTemplate::_ConstStringCustomizationVariable::registerMe(); + SharedTangibleObjectTemplate::_CustomizationVariableMapping::registerMe(); + SharedTangibleObjectTemplate::_PaletteColorCustomizationVariable::registerMe(); + SharedTangibleObjectTemplate::_RangedIntCustomizationVariable::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedTangibleObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.cpp new file mode 100644 index 00000000..ecc1d96a --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.cpp @@ -0,0 +1,318 @@ +//======================================================================== +// +// SharedTerrainSurfaceObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedTerrainSurfaceObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedTerrainSurfaceObjectTemplate::SharedTerrainSurfaceObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : TpfTemplate(filename) +//@END TFD INIT +{ +} // SharedTerrainSurfaceObjectTemplate::SharedTerrainSurfaceObjectTemplate + +/** + * Class destructor. + */ +SharedTerrainSurfaceObjectTemplate::~SharedTerrainSurfaceObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedTerrainSurfaceObjectTemplate::~SharedTerrainSurfaceObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedTerrainSurfaceObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedTerrainSurfaceObjectTemplate_tag, create); +} // SharedTerrainSurfaceObjectTemplate::registerMe + +/** + * Creates a SharedTerrainSurfaceObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedTerrainSurfaceObjectTemplate::create(const std::string & filename) +{ + return new SharedTerrainSurfaceObjectTemplate(filename); +} // SharedTerrainSurfaceObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedTerrainSurfaceObjectTemplate::getId(void) const +{ + return SharedTerrainSurfaceObjectTemplate_tag; +} // SharedTerrainSurfaceObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedTerrainSurfaceObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedTerrainSurfaceObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedTerrainSurfaceObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedTerrainSurfaceObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedTerrainSurfaceObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedTerrainSurfaceObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedTerrainSurfaceObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedTerrainSurfaceObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "cover") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_cover; + } + fprintf(stderr, "trying to access single-parameter \"cover\" as an array\n"); + } + else + return TpfTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //SharedTerrainSurfaceObjectTemplate::getFloatParam + +BoolParam * SharedTerrainSurfaceObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getBoolParam(name, deepCheck, index); +} //SharedTerrainSurfaceObjectTemplate::getBoolParam + +StringParam * SharedTerrainSurfaceObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "surfaceType") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_surfaceType; + } + fprintf(stderr, "trying to access single-parameter \"surfaceType\" as an array\n"); + } + else + return TpfTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedTerrainSurfaceObjectTemplate::getStringParam + +StringIdParam * SharedTerrainSurfaceObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getStringIdParam(name, deepCheck, index); +} //SharedTerrainSurfaceObjectTemplate::getStringIdParam + +VectorParam * SharedTerrainSurfaceObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getVectorParam(name, deepCheck, index); +} //SharedTerrainSurfaceObjectTemplate::getVectorParam + +DynamicVariableParam * SharedTerrainSurfaceObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedTerrainSurfaceObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedTerrainSurfaceObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getStructParamOT(name, deepCheck, index); +} //SharedTerrainSurfaceObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedTerrainSurfaceObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return TpfTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedTerrainSurfaceObjectTemplate::getTriggerVolumeParam + +void SharedTerrainSurfaceObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + TpfTemplate::initStructParamOT(param, name); +} // SharedTerrainSurfaceObjectTemplate::initStructParamOT + +void SharedTerrainSurfaceObjectTemplate::setAsEmptyList(const char *name) +{ + TpfTemplate::setAsEmptyList(name); +} // SharedTerrainSurfaceObjectTemplate::setAsEmptyList + +void SharedTerrainSurfaceObjectTemplate::setAppend(const char *name) +{ + TpfTemplate::setAppend(name); +} // SharedTerrainSurfaceObjectTemplate::setAppend + +bool SharedTerrainSurfaceObjectTemplate::isAppend(const char *name) const +{ + return TpfTemplate::isAppend(name); +} // SharedTerrainSurfaceObjectTemplate::isAppend + + +int SharedTerrainSurfaceObjectTemplate::getListLength(const char *name) const +{ + return TpfTemplate::getListLength(name); +} // SharedTerrainSurfaceObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedTerrainSurfaceObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedTerrainSurfaceObjectTemplate_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(); + + 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, "cover") == 0) + m_cover.loadFromIff(file); + else if (strcmp(paramName, "surfaceType") == 0) + m_surfaceType.loadFromIff(file); + file.exitChunk(true); + } + + file.exitForm(); + TpfTemplate::load(file); + file.exitForm(); + return; +} // SharedTerrainSurfaceObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedTerrainSurfaceObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedTerrainSurfaceObjectTemplate_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; + + // save cover + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("cover"); + m_cover.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save surfaceType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("surfaceType"); + m_surfaceType.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(); + + file.exitForm(true); + TpfTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedTerrainSurfaceObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.h new file mode 100644 index 00000000..85ba6537 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedTerrainSurfaceObjectTemplate.h @@ -0,0 +1,90 @@ +//======================================================================== +// +// SharedTerrainSurfaceObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedTerrainSurfaceObjectTemplate_H +#define _INCLUDED_SharedTerrainSurfaceObjectTemplate_H + +#include "sharedTemplateDefinition/TpfTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedTerrainSurfaceObjectTemplate : public TpfTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedTerrainSurfaceObjectTemplate_tag = TAG(S,T,E,R) + }; +//@END TFD ID +public: + SharedTerrainSurfaceObjectTemplate(const std::string & filename); + virtual ~SharedTerrainSurfaceObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + FloatParam m_cover; + StringParam m_surfaceType; +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedTerrainSurfaceObjectTemplate(const SharedTerrainSurfaceObjectTemplate &); + SharedTerrainSurfaceObjectTemplate & operator =(const SharedTerrainSurfaceObjectTemplate &); +}; + + +inline void SharedTerrainSurfaceObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedTerrainSurfaceObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedTerrainSurfaceObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.cpp new file mode 100644 index 00000000..71a2784f --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedTokenObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedTokenObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedTokenObjectTemplate::SharedTokenObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedTokenObjectTemplate::SharedTokenObjectTemplate + +/** + * Class destructor. + */ +SharedTokenObjectTemplate::~SharedTokenObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedTokenObjectTemplate::~SharedTokenObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedTokenObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedTokenObjectTemplate_tag, create); +} // SharedTokenObjectTemplate::registerMe + +/** + * Creates a SharedTokenObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedTokenObjectTemplate::create(const std::string & filename) +{ + return new SharedTokenObjectTemplate(filename); +} // SharedTokenObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedTokenObjectTemplate::getId(void) const +{ + return SharedTokenObjectTemplate_tag; +} // SharedTokenObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedTokenObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedTokenObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedTokenObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedTokenObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedTokenObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedTokenObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedTokenObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getFloatParam + +BoolParam * SharedTokenObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getBoolParam + +StringParam * SharedTokenObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getStringParam + +StringIdParam * SharedTokenObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getStringIdParam + +VectorParam * SharedTokenObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getVectorParam + +DynamicVariableParam * SharedTokenObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedTokenObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedTokenObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedTokenObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedTokenObjectTemplate::getTriggerVolumeParam + +void SharedTokenObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedIntangibleObjectTemplate::initStructParamOT(param, name); +} // SharedTokenObjectTemplate::initStructParamOT + +void SharedTokenObjectTemplate::setAsEmptyList(const char *name) +{ + SharedIntangibleObjectTemplate::setAsEmptyList(name); +} // SharedTokenObjectTemplate::setAsEmptyList + +void SharedTokenObjectTemplate::setAppend(const char *name) +{ + SharedIntangibleObjectTemplate::setAppend(name); +} // SharedTokenObjectTemplate::setAppend + +bool SharedTokenObjectTemplate::isAppend(const char *name) const +{ + return SharedIntangibleObjectTemplate::isAppend(name); +} // SharedTokenObjectTemplate::isAppend + + +int SharedTokenObjectTemplate::getListLength(const char *name) const +{ + return SharedIntangibleObjectTemplate::getListLength(name); +} // SharedTokenObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedTokenObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedTokenObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedTokenObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedTokenObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedTokenObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedTokenObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.h new file mode 100644 index 00000000..c13a3737 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedTokenObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedTokenObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedTokenObjectTemplate_H +#define _INCLUDED_SharedTokenObjectTemplate_H + +#include "SharedIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedTokenObjectTemplate : public SharedIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedTokenObjectTemplate_tag = TAG(S,T,O,K) + }; +//@END TFD ID +public: + SharedTokenObjectTemplate(const std::string & filename); + virtual ~SharedTokenObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedTokenObjectTemplate(const SharedTokenObjectTemplate &); + SharedTokenObjectTemplate & operator =(const SharedTokenObjectTemplate &); +}; + + +inline void SharedTokenObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedTokenObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedTokenObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.cpp new file mode 100644 index 00000000..253ba130 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedUniverseObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedUniverseObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedUniverseObjectTemplate::SharedUniverseObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedUniverseObjectTemplate::SharedUniverseObjectTemplate + +/** + * Class destructor. + */ +SharedUniverseObjectTemplate::~SharedUniverseObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedUniverseObjectTemplate::~SharedUniverseObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedUniverseObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedUniverseObjectTemplate_tag, create); +} // SharedUniverseObjectTemplate::registerMe + +/** + * Creates a SharedUniverseObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedUniverseObjectTemplate::create(const std::string & filename) +{ + return new SharedUniverseObjectTemplate(filename); +} // SharedUniverseObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedUniverseObjectTemplate::getId(void) const +{ + return SharedUniverseObjectTemplate_tag; +} // SharedUniverseObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedUniverseObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedUniverseObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedUniverseObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedUniverseObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedUniverseObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedUniverseObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedUniverseObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getFloatParam + +BoolParam * SharedUniverseObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getBoolParam + +StringParam * SharedUniverseObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getStringParam + +StringIdParam * SharedUniverseObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getStringIdParam + +VectorParam * SharedUniverseObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getVectorParam + +DynamicVariableParam * SharedUniverseObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedUniverseObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedUniverseObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedUniverseObjectTemplate::getTriggerVolumeParam + +void SharedUniverseObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedObjectTemplate::initStructParamOT(param, name); +} // SharedUniverseObjectTemplate::initStructParamOT + +void SharedUniverseObjectTemplate::setAsEmptyList(const char *name) +{ + SharedObjectTemplate::setAsEmptyList(name); +} // SharedUniverseObjectTemplate::setAsEmptyList + +void SharedUniverseObjectTemplate::setAppend(const char *name) +{ + SharedObjectTemplate::setAppend(name); +} // SharedUniverseObjectTemplate::setAppend + +bool SharedUniverseObjectTemplate::isAppend(const char *name) const +{ + return SharedObjectTemplate::isAppend(name); +} // SharedUniverseObjectTemplate::isAppend + + +int SharedUniverseObjectTemplate::getListLength(const char *name) const +{ + return SharedObjectTemplate::getListLength(name); +} // SharedUniverseObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedUniverseObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedUniverseObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedUniverseObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedUniverseObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedUniverseObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedUniverseObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.h new file mode 100644 index 00000000..75796f94 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedUniverseObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedUniverseObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedUniverseObjectTemplate_H +#define _INCLUDED_SharedUniverseObjectTemplate_H + +#include "SharedObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedUniverseObjectTemplate : public SharedObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedUniverseObjectTemplate_tag = TAG(S,U,N,I) + }; +//@END TFD ID +public: + SharedUniverseObjectTemplate(const std::string & filename); + virtual ~SharedUniverseObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedUniverseObjectTemplate(const SharedUniverseObjectTemplate &); + SharedUniverseObjectTemplate & operator =(const SharedUniverseObjectTemplate &); +}; + + +inline void SharedUniverseObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedUniverseObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedUniverseObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp new file mode 100644 index 00000000..da3d6726 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.cpp @@ -0,0 +1,445 @@ +//======================================================================== +// +// SharedVehicleObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedVehicleObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedVehicleObjectTemplate::SharedVehicleObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedVehicleObjectTemplate::SharedVehicleObjectTemplate + +/** + * Class destructor. + */ +SharedVehicleObjectTemplate::~SharedVehicleObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedVehicleObjectTemplate::~SharedVehicleObjectTemplate + +/** + * Static function used to register this template. + */ +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 + +/** + * Returns the template id. + * + * @return the template id + */ +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; +} // SharedVehicleObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @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()); +} // SharedVehicleObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + 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() != NULL) + return getBaseTemplate()->getFloatParam(name, deepCheck, index); + return NULL; + } + return &m_braking; + } + fprintf(stderr, "trying to access single-parameter \"braking\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); + return NULL; +} //SharedVehicleObjectTemplate::getFloatParam + +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 + +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 + +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 + +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::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedVehicleObjectTemplate::setAsEmptyList + +void SharedVehicleObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedVehicleObjectTemplate::setAppend + +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 + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +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; + } + + 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.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.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedVehicleObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +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(); + + 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; + + // 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 + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.h new file mode 100644 index 00000000..e5d23208 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedVehicleObjectTemplate.h @@ -0,0 +1,106 @@ +//======================================================================== +// +// SharedVehicleObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedVehicleObjectTemplate_H +#define _INCLUDED_SharedVehicleObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedVehicleObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedVehicleObjectTemplate_tag = TAG(S,V,O,T) + }; +//@END TFD ID +public: + SharedVehicleObjectTemplate(const std::string & filename); + virtual ~SharedVehicleObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum MovementTypes + { + MT_hover, + MT_underwater, + MT_ground, + MT_swim, + MT_walker, + MovementTypes_Last = MT_walker, + }; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + FloatParam m_speed[5]; // how fast the vehicle moves + FloatParam m_slopeAversion; // ? + FloatParam m_hoverValue; // height vehicle hovers at + FloatParam m_turnRate; // how tight the vehicle turns (?) + FloatParam m_maxVelocity; // max speed the vehicle can move + FloatParam m_acceleration; // vehicle acceleration + FloatParam m_braking; // vehicle braking +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedVehicleObjectTemplate(const SharedVehicleObjectTemplate &); + SharedVehicleObjectTemplate & operator =(const SharedVehicleObjectTemplate &); +}; + + +inline void SharedVehicleObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedVehicleObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedVehicleObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.cpp new file mode 100644 index 00000000..f29102f7 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.cpp @@ -0,0 +1,266 @@ +//======================================================================== +// +// SharedWaypointObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedWaypointObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedWaypointObjectTemplate::SharedWaypointObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedIntangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedWaypointObjectTemplate::SharedWaypointObjectTemplate + +/** + * Class destructor. + */ +SharedWaypointObjectTemplate::~SharedWaypointObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedWaypointObjectTemplate::~SharedWaypointObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedWaypointObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedWaypointObjectTemplate_tag, create); +} // SharedWaypointObjectTemplate::registerMe + +/** + * Creates a SharedWaypointObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedWaypointObjectTemplate::create(const std::string & filename) +{ + return new SharedWaypointObjectTemplate(filename); +} // SharedWaypointObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedWaypointObjectTemplate::getId(void) const +{ + return SharedWaypointObjectTemplate_tag; +} // SharedWaypointObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedWaypointObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedWaypointObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedWaypointObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedWaypointObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedWaypointObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedWaypointObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedWaypointObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getFloatParam + +BoolParam * SharedWaypointObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getBoolParam + +StringParam * SharedWaypointObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getStringParam + +StringIdParam * SharedWaypointObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getStringIdParam + +VectorParam * SharedWaypointObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getVectorParam + +DynamicVariableParam * SharedWaypointObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedWaypointObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedWaypointObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedIntangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedWaypointObjectTemplate::getTriggerVolumeParam + +void SharedWaypointObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedIntangibleObjectTemplate::initStructParamOT(param, name); +} // SharedWaypointObjectTemplate::initStructParamOT + +void SharedWaypointObjectTemplate::setAsEmptyList(const char *name) +{ + SharedIntangibleObjectTemplate::setAsEmptyList(name); +} // SharedWaypointObjectTemplate::setAsEmptyList + +void SharedWaypointObjectTemplate::setAppend(const char *name) +{ + SharedIntangibleObjectTemplate::setAppend(name); +} // SharedWaypointObjectTemplate::setAppend + +bool SharedWaypointObjectTemplate::isAppend(const char *name) const +{ + return SharedIntangibleObjectTemplate::isAppend(name); +} // SharedWaypointObjectTemplate::isAppend + + +int SharedWaypointObjectTemplate::getListLength(const char *name) const +{ + return SharedIntangibleObjectTemplate::getListLength(name); +} // SharedWaypointObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedWaypointObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedWaypointObjectTemplate_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 == 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.enterChunk(); + int paramCount = file.read_int32(); + file.exitChunk(); + UNREF(paramName); + UNREF(paramCount); + + file.exitForm(); + SharedIntangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedWaypointObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedWaypointObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedWaypointObjectTemplate_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; + + + // 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(); + UNREF(count); +} // SharedWaypointObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.h new file mode 100644 index 00000000..6e019055 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedWaypointObjectTemplate.h @@ -0,0 +1,88 @@ +//======================================================================== +// +// SharedWaypointObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedWaypointObjectTemplate_H +#define _INCLUDED_SharedWaypointObjectTemplate_H + +#include "SharedIntangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedWaypointObjectTemplate : public SharedIntangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedWaypointObjectTemplate_tag = TAG(S,W,A,Y) + }; +//@END TFD ID +public: + SharedWaypointObjectTemplate(const std::string & filename); + virtual ~SharedWaypointObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedWaypointObjectTemplate(const SharedWaypointObjectTemplate &); + SharedWaypointObjectTemplate & operator =(const SharedWaypointObjectTemplate &); +}; + + +inline void SharedWaypointObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedWaypointObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedWaypointObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.cpp b/engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.cpp new file mode 100644 index 00000000..0c436eae --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.cpp @@ -0,0 +1,340 @@ +//======================================================================== +// +// SharedWeaponObjectTemplate.cpp +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplate/FirstSharedTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "SharedWeaponObjectTemplate.h" +#include "sharedDebug/DataLint.h" +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include + + + +/** + * Class constructor. + */ +SharedWeaponObjectTemplate::SharedWeaponObjectTemplate(const std::string & filename) +//@BEGIN TFD INIT + : SharedTangibleObjectTemplate(filename) +//@END TFD INIT +{ +} // SharedWeaponObjectTemplate::SharedWeaponObjectTemplate + +/** + * Class destructor. + */ +SharedWeaponObjectTemplate::~SharedWeaponObjectTemplate() +{ +//@BEGIN TFD CLEANUP +//@END TFD CLEANUP +} // SharedWeaponObjectTemplate::~SharedWeaponObjectTemplate + +/** + * Static function used to register this template. + */ +void SharedWeaponObjectTemplate::registerMe(void) +{ + ObjectTemplateList::registerTemplate(SharedWeaponObjectTemplate_tag, create); +} // SharedWeaponObjectTemplate::registerMe + +/** + * Creates a SharedWeaponObjectTemplate template. + * + * @return a new instance of the template + */ +ObjectTemplate * SharedWeaponObjectTemplate::create(const std::string & filename) +{ + return new SharedWeaponObjectTemplate(filename); +} // SharedWeaponObjectTemplate::create + +/** + * Returns the template id. + * + * @return the template id + */ +Tag SharedWeaponObjectTemplate::getId(void) const +{ + return SharedWeaponObjectTemplate_tag; +} // SharedWeaponObjectTemplate::getId + +/** + * Returns this template's version. + * + * @return the version + */ +Tag SharedWeaponObjectTemplate::getTemplateVersion(void) const +{ + return m_templateVersion; +} // SharedWeaponObjectTemplate::getTemplateVersion + +/** + * Returns the highest version of this template or it's base templates. + * + * @return the highest version + */ +Tag SharedWeaponObjectTemplate::getHighestTemplateVersion(void) const +{ + if (m_baseData == NULL) + return m_templateVersion; + const SharedWeaponObjectTemplate * base = dynamic_cast(m_baseData); + if (base == NULL) + return m_templateVersion; + return std::max(m_templateVersion, base->getHighestTemplateVersion()); +} // SharedWeaponObjectTemplate::getHighestTemplateVersion + +//@BEGIN TFD +CompilerIntegerParam * SharedWeaponObjectTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "weaponEffectIndex") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_weaponEffectIndex; + } + fprintf(stderr, "trying to access single-parameter \"weaponEffectIndex\" as an array\n"); + } + else if (strcmp(name, "attackType") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getCompilerIntegerParam(name, deepCheck, index); + return NULL; + } + return &m_attackType; + } + fprintf(stderr, "trying to access single-parameter \"attackType\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getCompilerIntegerParam(name, deepCheck, index); + return NULL; +} //SharedWeaponObjectTemplate::getCompilerIntegerParam + +FloatParam * SharedWeaponObjectTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getFloatParam(name, deepCheck, index); +} //SharedWeaponObjectTemplate::getFloatParam + +BoolParam * SharedWeaponObjectTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getBoolParam(name, deepCheck, index); +} //SharedWeaponObjectTemplate::getBoolParam + +StringParam * SharedWeaponObjectTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + if (strcmp(name, "weaponEffect") == 0) + { + if (index == 0) + { + if (deepCheck && !isParamLoaded(name, false, 0)) + { + if (getBaseTemplate() != NULL) + return getBaseTemplate()->getStringParam(name, deepCheck, index); + return NULL; + } + return &m_weaponEffect; + } + fprintf(stderr, "trying to access single-parameter \"weaponEffect\" as an array\n"); + } + else + return SharedTangibleObjectTemplate::getStringParam(name, deepCheck, index); + return NULL; +} //SharedWeaponObjectTemplate::getStringParam + +StringIdParam * SharedWeaponObjectTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStringIdParam(name, deepCheck, index); +} //SharedWeaponObjectTemplate::getStringIdParam + +VectorParam * SharedWeaponObjectTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getVectorParam(name, deepCheck, index); +} //SharedWeaponObjectTemplate::getVectorParam + +DynamicVariableParam * SharedWeaponObjectTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getDynamicVariableParam(name, deepCheck, index); +} //SharedWeaponObjectTemplate::getDynamicVariableParam + +StructParamOT * SharedWeaponObjectTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getStructParamOT(name, deepCheck, index); +} //SharedWeaponObjectTemplate::getStructParamOT + +TriggerVolumeParam * SharedWeaponObjectTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + return SharedTangibleObjectTemplate::getTriggerVolumeParam(name, deepCheck, index); +} //SharedWeaponObjectTemplate::getTriggerVolumeParam + +void SharedWeaponObjectTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + if (param.isInitialized()) + return; + SharedTangibleObjectTemplate::initStructParamOT(param, name); +} // SharedWeaponObjectTemplate::initStructParamOT + +void SharedWeaponObjectTemplate::setAsEmptyList(const char *name) +{ + SharedTangibleObjectTemplate::setAsEmptyList(name); +} // SharedWeaponObjectTemplate::setAsEmptyList + +void SharedWeaponObjectTemplate::setAppend(const char *name) +{ + SharedTangibleObjectTemplate::setAppend(name); +} // SharedWeaponObjectTemplate::setAppend + +bool SharedWeaponObjectTemplate::isAppend(const char *name) const +{ + return SharedTangibleObjectTemplate::isAppend(name); +} // SharedWeaponObjectTemplate::isAppend + + +int SharedWeaponObjectTemplate::getListLength(const char *name) const +{ + return SharedTangibleObjectTemplate::getListLength(name); +} // SharedWeaponObjectTemplate::getListLength + +/** + * Loads the template data from an iff file. We should already be in the form + * for this template. + * + * @param file file to load from + */ +void SharedWeaponObjectTemplate::load(Iff &file) +{ +static const int MAX_NAME_SIZE = 256; +char paramName[MAX_NAME_SIZE]; + + if (file.getCurrentName() != SharedWeaponObjectTemplate_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 == 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,4)) + { + if (DataLint::isEnabled()) + DEBUG_WARNING(true, ("template %s version out of date", file.getFileName())); + } + + 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, "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); + file.exitChunk(true); + } + + file.exitForm(); + SharedTangibleObjectTemplate::load(file); + file.exitForm(); + return; +} // SharedWeaponObjectTemplate::load + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + * @param location file type (client or server) + */ +void SharedWeaponObjectTemplate::save(Iff &file) +{ +int count; + + file.insertForm(SharedWeaponObjectTemplate_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; + + // save weaponEffect + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("weaponEffect"); + m_weaponEffect.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save weaponEffectIndex + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("weaponEffectIndex"); + m_weaponEffectIndex.saveToIff(file); + file.exitChunk(); + ++paramCount; + // save attackType + file.insertChunk(TAG(X, X, X, X)); + file.insertChunkString("attackType"); + m_attackType.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(); + + file.exitForm(true); + SharedTangibleObjectTemplate::save(file); + file.exitForm(); + UNREF(count); +} // SharedWeaponObjectTemplate::save + +//@END TFD diff --git a/engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.h b/engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.h new file mode 100644 index 00000000..ff7cf817 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/shared/template/SharedWeaponObjectTemplate.h @@ -0,0 +1,101 @@ +//======================================================================== +// +// SharedWeaponObjectTemplate.h +// +//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be +//overwritten the next time the template definition is compiled. Do not +//make changes to code inside these blocks. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_SharedWeaponObjectTemplate_H +#define _INCLUDED_SharedWeaponObjectTemplate_H + +#include "SharedTangibleObjectTemplate.h" +#include "sharedFoundation/DynamicVariable.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + + +class Vector; +typedef StructParam StructParamOT; + + +class SharedWeaponObjectTemplate : public SharedTangibleObjectTemplate +{ +public: +//@BEGIN TFD ID + enum + { + SharedWeaponObjectTemplate_tag = TAG(S,W,O,T) + }; +//@END TFD ID +public: + SharedWeaponObjectTemplate(const std::string & filename); + virtual ~SharedWeaponObjectTemplate(); + + virtual Tag getId(void) const; + virtual Tag getTemplateVersion(void) const; + virtual Tag getHighestTemplateVersion(void) const; + static void install(void); + +//@BEGIN TFD +public: + enum AttackType + { + AT_melee, + AT_ranged, + AT_thrown, + AT_ammo, + AttackType_Last = AT_ammo, + }; + +public: + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + +protected: + virtual void load(Iff &file); + virtual void save(Iff &file); + +private: + StringParam m_weaponEffect; // The id lookup into the weapon data table for the bolt and combat effects. + CompilerIntegerParam m_weaponEffectIndex; // The index 0-4 for a specific weaponEffect in the weapon data table. + CompilerIntegerParam m_attackType; // Type of attack this weapon is used with. +//@END TFD + +private: + Tag m_templateVersion; // the template version + bool m_versionOk; // flag that the template version loaded is the one we expect + + static void registerMe(void); + static ObjectTemplate * create(const std::string & filename); + + // no copying + SharedWeaponObjectTemplate(const SharedWeaponObjectTemplate &); + SharedWeaponObjectTemplate & operator =(const SharedWeaponObjectTemplate &); +}; + + +inline void SharedWeaponObjectTemplate::install(void) +{ +//@BEGIN TFD INSTALL + SharedWeaponObjectTemplate::registerMe(); +//@END TFD INSTALL +} + + +#endif // _INCLUDED_SharedWeaponObjectTemplate_H diff --git a/engine/shared/library/sharedTemplate/src/win32/FirstSharedTemplate.cpp b/engine/shared/library/sharedTemplate/src/win32/FirstSharedTemplate.cpp new file mode 100644 index 00000000..527ba602 --- /dev/null +++ b/engine/shared/library/sharedTemplate/src/win32/FirstSharedTemplate.cpp @@ -0,0 +1 @@ +#include "sharedTemplate/FirstSharedTemplate.h" diff --git a/engine/shared/library/sharedTemplateDefinition/CMakeLists.txt b/engine/shared/library/sharedTemplateDefinition/CMakeLists.txt new file mode 100644 index 00000000..88d1de21 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 2.8) + +project(sharedTemplateDefinition) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/public) + +add_subdirectory(src) diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerDynamicVariableParamData.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerDynamicVariableParamData.h new file mode 100644 index 00000000..36eaa762 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerDynamicVariableParamData.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/CompilerDynamicVariableParamData.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerIntegerParam.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerIntegerParam.h new file mode 100644 index 00000000..d4f632be --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/CompilerIntegerParam.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/CompilerIntegerParam.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/File.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/File.h new file mode 100644 index 00000000..75492f2a --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/File.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/File.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/Filename.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/Filename.h new file mode 100644 index 00000000..9710512a --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/Filename.h @@ -0,0 +1 @@ +#include "../../src/shared/core/Filename.h" \ No newline at end of file diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/FirstSharedTemplateDefinition.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/FirstSharedTemplateDefinition.h new file mode 100644 index 00000000..08cf17b2 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/FirstSharedTemplateDefinition.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/FirstSharedTemplateDefinition.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/ObjectTemplate.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/ObjectTemplate.h new file mode 100644 index 00000000..19c4bfb0 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/ObjectTemplate.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/ObjectTemplate.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateData.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateData.h new file mode 100644 index 00000000..60e7122e --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateData.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/TemplateData.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDataIterator.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDataIterator.h new file mode 100644 index 00000000..832fc708 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDataIterator.h @@ -0,0 +1 @@ +#include "../../src/shared/core/TemplateDataIterator.h" \ No newline at end of file diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDefinitionFile.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDefinitionFile.h new file mode 100644 index 00000000..5d038f1b --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateDefinitionFile.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/TemplateDefinitionFile.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateGlobals.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateGlobals.h new file mode 100644 index 00000000..400e3c15 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TemplateGlobals.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/TemplateGlobals.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfFile.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfFile.h new file mode 100644 index 00000000..c9b5964c --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfFile.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/TpfFile.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfTemplate.h b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfTemplate.h new file mode 100644 index 00000000..ac762129 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/include/public/sharedTemplateDefinition/TpfTemplate.h @@ -0,0 +1,2 @@ +#include "../../src/shared/core/TpfTemplate.h" + diff --git a/engine/shared/library/sharedTemplateDefinition/src/CMakeLists.txt b/engine/shared/library/sharedTemplateDefinition/src/CMakeLists.txt new file mode 100644 index 00000000..a25ca0e5 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/CMakeLists.txt @@ -0,0 +1,57 @@ + +set(SHARED_SOURCES + shared/core/CompilerDynamicVariableParamData.cpp + shared/core/CompilerDynamicVariableParamData.h + shared/core/CompilerIntegerParam.cpp + shared/core/CompilerIntegerParam.h + shared/core/File.cpp + shared/core/File.h + shared/core/Filename.cpp + shared/core/Filename.h + shared/core/FirstSharedTemplateDefinition.h + shared/core/ObjectTemplate.cpp + shared/core/ObjectTemplate.h + shared/core/TemplateData.cpp + shared/core/TemplateData.h + shared/core/TemplateDataIterator.cpp + shared/core/TemplateDataIterator.h + shared/core/TemplateDefinitionFile.cpp + shared/core/TemplateDefinitionFile.h + shared/core/TemplateGlobals.cpp + shared/core/TemplateGlobals.h + shared/core/TpfFile.cpp + shared/core/TpfFile.h + shared/core/TpfTemplate.cpp + shared/core/TpfTemplate.h +) + +if(WIN32) + set(PLATFORM_SOURCES + win32/FirstSharedTemplateDefinition.cpp + ) +else() + set(PLATFORM_SOURCES + linux/FirstSharedTemplateDefinition.cpp + ) +endif() + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR}/shared/core + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedDebug/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFile/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFoundation/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedFoundationTypes/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedMemoryManager/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedRandom/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedRegex/include/public + ${SWG_ENGINE_SOURCE_DIR}/shared/library/sharedUtility/include/public + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/archive/include + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/localization/include + ${SWG_EXTERNALS_SOURCE_DIR}/ours/library/unicode/include + ${PCRE_INCLUDE_DIR} +) + +add_library(sharedTemplateDefinition STATIC + ${SHARED_SOURCES} + ${PLATFORM_SOURCES} +) diff --git a/engine/shared/library/sharedTemplateDefinition/src/linux/FirstSharedTemplateDefinition.cpp b/engine/shared/library/sharedTemplateDefinition/src/linux/FirstSharedTemplateDefinition.cpp new file mode 100644 index 00000000..b156d0fd --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/linux/FirstSharedTemplateDefinition.cpp @@ -0,0 +1 @@ +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.cpp new file mode 100644 index 00000000..360f6784 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.cpp @@ -0,0 +1,38 @@ +//======================================================================== +// +// CompilerDynamicVariableParamData.cpp - +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "sharedTemplateDefinition/CompilerDynamicVariableParamData.h" + +#include "sharedTemplateDefinition/CompilerIntegerParam.h" + + +/** + * Class constructor. + * + * @param name variable name + * @param type variable type + */ +CompilerDynamicVariableParamData::CompilerDynamicVariableParamData( + const std::string &name, DynamicVariableParamData::DataType type) : + DynamicVariableParamData(name, type) +{ + if (type == DynamicVariableParamData::INTEGER) + { + delete m_data.iparam; + m_data.iparam = new CompilerIntegerParam(); + } +} // CompilerDynamicVariableParamData::CompilerDynamicVariableParamData + +/** + * Class destructor. + */ +CompilerDynamicVariableParamData::~CompilerDynamicVariableParamData() +{ +} // CompilerDynamicVariableParamData::~CompilerDynamicVariableParamData + diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.h new file mode 100644 index 00000000..ffbfdca2 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerDynamicVariableParamData.h @@ -0,0 +1,28 @@ +//======================================================================== +// +// CompilerDynamicVariableParamData.h - Adds additional functionality to the IntegerParam +// class for the template compiler/editor. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_CompilerDynamicVariableParamData_H +#define _INCLUDED_CompilerDynamicVariableParamData_H + +#include "sharedUtility/TemplateParameter.h" + + +class CompilerDynamicVariableParamData : public DynamicVariableParamData +{ +public: + CompilerDynamicVariableParamData(const std::string &name, DynamicVariableParamData::DataType type); + virtual ~CompilerDynamicVariableParamData(); + +private: + CompilerDynamicVariableParamData(const CompilerDynamicVariableParamData &); + CompilerDynamicVariableParamData & operator =(const CompilerDynamicVariableParamData &); +}; + + +#endif // _INCLUDED_CompilerDynamicVariableParamData_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.cpp new file mode 100644 index 00000000..21d50bd8 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.cpp @@ -0,0 +1,19 @@ +//======================================================================== +// +// CompilerIntegerParam.cpp - Adds additional functionality to the IntegerParam +// class for the template compiler/editor. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "sharedTemplateDefinition/CompilerIntegerParam.h" + + +/** + * Class destructor. + */ +CompilerIntegerParam::~CompilerIntegerParam() +{ +} // CompilerIntegerParam::~CompilerIntegerParam diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.h new file mode 100644 index 00000000..3548f17d --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/CompilerIntegerParam.h @@ -0,0 +1,50 @@ +//======================================================================== +// +// CompilerIntegerParam.h - Adds additional functionality to the IntegerParam +// class for the template compiler/editor. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_CompilerIntegerParam_H +#define _INCLUDED_CompilerIntegerParam_H + +#include "sharedUtility/TemplateParameter.h" + +#include +#include + + +class CompilerIntegerParam : public IntegerParam +{ +public: + CompilerIntegerParam(void); + virtual ~CompilerIntegerParam(); + + void addSourceEnumList(std::vector & enumList); + const std::vector & getSourceEnumList(void); + +private: + std::vector m_enumList; // list of enum names used to + // create this param +}; + + +inline CompilerIntegerParam::CompilerIntegerParam(void) : IntegerParam() +{ +} + +inline void CompilerIntegerParam::addSourceEnumList(std::vector & enumList) +{ + std::swap(m_enumList, enumList); +} + +inline const std::vector & CompilerIntegerParam::getSourceEnumList(void) +{ + return m_enumList; +} + + + +#endif // _INCLUDED_CompilerIntegerParam_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/File.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/File.cpp new file mode 100644 index 00000000..a74f665b --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/File.cpp @@ -0,0 +1,188 @@ +//======================================================================== +// +// File.cpp - file reader/writer +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "File.h" +#include "TemplateGlobals.h" + +#ifdef WIN32 +#include +#endif + + +//======================================================================== +// File static variables + +Filename File::m_basePath; +File::FunctionPtr File::m_callBack = NULL; + +//======================================================================== +// File functions + +/** + * Opens a file for reading or writing. + * + * @param filename name of file to open (relative to base path) + * @param mode read/write mode, see fopen() + * + * @return true if the file was opened, false if not + */ +bool File::open(const char *filename, const char *mode) +{ + NOT_NULL(filename); + NOT_NULL(mode); + + close(); + + m_filename.clear(); + m_filename.setName(filename); + m_filename.prependPath(m_basePath); + +#ifdef WIN32 + m_fp = _fsopen(m_filename, mode, _SH_DENYRW); +#else + // @todo: find an equivalent function for Linux + m_fp = fopen(m_filename, mode); +#endif + if (m_fp != NULL) + { + m_currentLine = 0; + return true; + } + else + { + const char * errstr = strerror(errno); + if (errstr != NULL) + { + m_filename.clear(); + printError(errstr); + } + } + return false; +} // File::open + +/** + * Tests if a file exists. + * + * @param filename the file to test + * + * @return true if the file exists, false if not + */ +bool File::exists(const char *filename) +{ + if (filename == NULL) + return false; + +#if defined(WIN32) + + DWORD attributes = GetFileAttributes(filename); + #if _MSC_VER < 1300 + const DWORD INVALID_FILE_ATTRIBUTES = 0xffffffff; + #endif + return (attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY) == 0); + +#elif defined(linux) + + return FileExists(filename); + +#else + return false; +#endif +} // File::exists + +/** + * Reads the next line of a file. + * + * @param fp file to read from + * @param buffer buffer to read the line in to + * @param bufferSize size of buffer + * + * @return the size of the string, or -1 on eof or -2 on error + */ +int File::readRawLine(char *buffer, int bufferSize) +{ + NOT_NULL(m_fp); + NOT_NULL(buffer); + + ++m_currentLine; + if (fgets(buffer, bufferSize, m_fp) == NULL) + { + if (feof(m_fp)) + return -1; + else + { + printError("error reading file."); + return -2; + } + } + + // if buffer doen't end in '\n', the line is too long + if (static_cast(strlen(buffer)) == bufferSize - 1 && + buffer[bufferSize - 2] != '\n') + { + printError("line too long"); + return -2; + } + + return strlen(buffer); +} // File::readRawLine + +/** + * Reads the next line of a file, strips leading and trailing whitespace. + * + * @param fp file to read from + * @param buffer buffer to read the line in to + * @param bufferSize size of buffer + * + * @return the size of the string, or -1 on eof or -2 on error + */ +int File::readLine(char *buffer, int bufferSize) +{ + NOT_NULL(m_fp); + NOT_NULL(buffer); + + for (;;) + { + ++m_currentLine; + if (fgets(buffer, bufferSize, m_fp) == NULL) + { + if (feof(m_fp)) + return -1; + else + { + printError("error reading file."); + return -2; + } + } + + // if buffer doen't end in '\n', the line is too long + if (static_cast(strlen(buffer)) == bufferSize - 1 && + buffer[bufferSize - 2] != '\n') + { + printError("line too long"); + return -2; + } + + int length = strip(buffer); + if (length != 0) + return length; + } +} // File::readLine + +/** + * fprintf functionality. + */ +int File::print(const char *format, ...) +{ + NOT_NULL(m_fp); + + va_list argptr; + va_start(argptr, format); + + return vfprintf(m_fp, format, argptr); +} // File::print diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/File.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/File.h new file mode 100644 index 00000000..b8f655e6 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/File.h @@ -0,0 +1,144 @@ +//======================================================================== +// +// File.h - file reader/writer +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_File_H +#define _INCLUDED_File_H + +#include "Filename.h" + +#include + +class File +{ +public: + explicit File(void); + explicit File(const char *filename, const char *mode); + ~File(); + + static void setBasePath(const char *path); + + const Filename & getFilename(void) const; + bool isOpened(void) const; + + bool open(const char *filename, const char *mode); + void close(void); + bool exists(const char *filename); + + int readRawLine(char *buffer, int bufferSize); + int readLine(char *buffer, int bufferSize); + + int puts(const char *string); + int print(const char *format, ...); + + void printWarning(const char *buffer) const; + void printError(const char *buffer) const; + void printEolError(void) const; + + typedef void (* FunctionPtr)(const char *error); + + static void setErrorCallBack(FunctionPtr callBack); + +private: + FILE *m_fp; // file being read from + Filename m_filename; // name of file being read + int m_currentLine; // current line being read + + static FunctionPtr m_callBack; + static Filename m_basePath; // path all files will be opened relative to +}; + + +inline File::File(void) : + m_fp(NULL), + m_currentLine(0) +{ +} // File::File(void) + +inline File::File(const char *filename, const char *mode) : + m_fp(NULL), + m_currentLine(0) +{ + open(filename, mode); +} // File::File(const char *) + +inline File::~File() +{ + close(); +} // File::~File + +inline void File::setBasePath(const char *path) +{ + m_basePath.setPath(path); +} // File::setBasePath + +inline const Filename & File::getFilename(void) const +{ + return m_filename; +} // File::getFilename + +inline bool File::isOpened(void) const +{ + return (m_fp != NULL); +} // File::isOpened + +inline void File::close(void) +{ + if (m_fp != NULL) + { + fclose(m_fp); + m_fp = NULL; + } +} // File::close + +inline int File::puts(const char *string) +{ + NOT_NULL(m_fp); + return fputs(string, m_fp); +} // File::puts + +inline void File::printWarning(const char *buffer) const +{ + NOT_NULL(buffer); + + char error[4096]; + sprintf(error, "WARNING file <%s> line %d: %s\n", m_filename.getName().c_str(), m_currentLine, buffer); + + fprintf(stderr, "%s", error); + + if (m_callBack != NULL) + { + m_callBack(error); + } +} // File::printWarning + +inline void File::printError(const char *buffer) const +{ + NOT_NULL(buffer); + + char error[4096]; + sprintf(error, "ERROR file <%s> line %d: %s\n", m_filename.getName().c_str(), m_currentLine, buffer); + + fprintf(stderr, "%s", error); + + if (m_callBack != NULL) + { + m_callBack(error); + } +} // File::printError + +inline void File::printEolError(void) const +{ + printError("unexpected end of line"); +} // File::printEolError + +inline void File::setErrorCallBack(FunctionPtr callBack) +{ + m_callBack = callBack; +} // File::setErrorCallBack + +#endif // _INCLUDED_File_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.cpp new file mode 100644 index 00000000..bd83f489 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.cpp @@ -0,0 +1,392 @@ +//======================================================================== +// +// Filename.cpp - a fully qualified file name +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "Filename.h" + +#include "TemplateGlobals.h" +#include "UnicodeUtils.h" + +#if defined(PLATFORM_LINUX) +#include +#endif + +const char WIN32_PATH_SEPARATOR = '\\'; +const char LINUX_PATH_SEPARATOR = '/'; + +//#if defined(WIN32) +//const char PATH_SEPARATOR = WIN32_PATH_SEPARATOR; +//#elif defined(linux) +const char PATH_SEPARATOR = LINUX_PATH_SEPARATOR; +//#else +//#error unknown OS +//#endif + + +/** + * Sets the path of the file name. + * If the path has a drive letter, the drive will be set (Winodws only) + * + * @param path the path + */ +void Filename::setPath(const char *path) +{ + if (path == NULL || *path == '\0') + m_path = ""; + else + { +#ifdef WIN32 + if (isalpha(*path) && *(path + 1) == ':') + { + setDrive(path); + path += 2; + } +#endif + m_path = path; + convertToSystemPath(m_path); + if (m_path[strlen(path) - 1] != PATH_SEPARATOR) + m_path += PATH_SEPARATOR; + } + + makeFullPath(); +} // Filename::setPath + +/** + * Sets the name of the file name. + * If the name has an extension, the extension will be set + * If the name has a full path (starts with drive or separator), the path will be set + * If the name has a relative path, the path will be appended to the current path + * + * @param name the name + */ +void Filename::setName(const char *name) +{ + if (name == NULL || *name == '\0') + m_name = ""; + else + { +#ifdef WIN32 + if (isalpha(*name) && *(name + 1) == ':') + { + setDrive(name); + name += 2; + } +#endif + std::string localname = name; + convertToSystemPath(localname); + const char *dot = strrchr(localname.c_str(), '.'); + const char *firstSeparator = strchr(localname.c_str(), PATH_SEPARATOR); + const char *lastSeparator = strrchr(localname.c_str(), PATH_SEPARATOR); + if (firstSeparator != NULL) + { + // name has a path + if (firstSeparator == localname) + { + // set path + m_path = std::string(firstSeparator, lastSeparator - firstSeparator + 1); + } + else + { + // append path + m_path += std::string(localname.c_str(), lastSeparator - + localname.c_str() + 1); + } + } + if (dot != NULL && (lastSeparator == NULL || dot > lastSeparator)) + { + // name has an extension + setExtension(dot); + if (lastSeparator == NULL) + m_name = std::string(localname.c_str(), dot - localname.c_str()); + else + m_name = std::string(lastSeparator + 1, dot - (lastSeparator + 1)); + } + else + { + // name doesn't have an extension + if (lastSeparator == NULL) + m_name = localname; + else + m_name = std::string(lastSeparator + 1); + } + } + + makeFullPath(); +} // Filename::setName + +/** + * Sets the extension of the file name. + * + * @param path the path + */ +void Filename::setExtension(const char *extension) +{ + if (extension == NULL || *extension == '\0') + m_extension = ""; + else + { + if (*extension == '.') + m_extension = extension; + else + { + m_extension = "."; + m_extension += extension; + } + } + + makeFullPath(); +} // Filename::setExtension + +/** + * Converts a path name to use the system path seperator. + * + * @param path the path to convert + */ +void Filename::convertToSystemPath(std::string & path) +{ + size_t i; + std::string newpath; + size_t count = path.size(); + + for (i = 0; i < count; ++i) + { + if (path[i] == '/' || path[i] == '\\') + { + if (newpath.empty() || newpath[newpath.size() - 1] != PATH_SEPARATOR) + newpath += PATH_SEPARATOR; + } + else + newpath += path[i]; + } + path = newpath; +} // Filename::convertToSystemPath + +/** + * Prepends a path to our path, unless our path is an an absolute path. + * + * @param path the path to prepend + */ +void Filename::prependPath(const Filename &path) +{ + if (m_path.size() != 0 && m_path[0] != PATH_SEPARATOR) + { + m_path = path.getPath() + m_path; + convertToSystemPath(m_path); + makeFullPath(); + } +} // Filename::prependPath + +/** + * Appends a path to our path. If the path is an absolute path, replaces our path. + * + * @param path the path to append + */ +void Filename::appendPath(const Filename &path) +{ + std::string localpath = path.getPath(); + convertToSystemPath(localpath); + if (localpath.size() != 0 && localpath[0] == PATH_SEPARATOR) + m_path = localpath; + else + m_path += localpath; + makeFullPath(); +} // Filename::appendPath + +/** + * Converts paths like A/./B to A/B and A/B/../C to A/C. + */ +void Filename::normalizePath(void) +{ +static const char PATH_SEPARATOR_BUFF[] = {PATH_SEPARATOR, '\0'}; +static const std::string PATH_SEPARATOR_STRING(PATH_SEPARATOR_BUFF); + + // get rid of "/./" + std::string mask(PATH_SEPARATOR_STRING + "." + PATH_SEPARATOR_STRING); + std::string::size_type pos; + for (pos = m_path.find(mask); pos != std::string::npos; pos = m_path.find(mask)) + { + m_path.erase(pos, mask.size() - 1); + } + + // get rid of "/../" + mask = PATH_SEPARATOR_STRING + ".." + PATH_SEPARATOR_STRING; + std::string::size_type startPos = 0; + for (pos = m_path.find(mask, startPos); pos != std::string::npos; + pos = m_path.find(mask, startPos)) + { + if (pos != 0) + { + std::string::size_type prevPathPos = m_path.rfind(PATH_SEPARATOR, pos - 1); + if (prevPathPos == 0) + { + m_path.erase(0, pos + mask.size() - 1); + } + else if (prevPathPos == std::string::npos || m_path.substr(prevPathPos, + pos - prevPathPos + 1) == mask) + { + startPos = pos + 1; + } + else + { + m_path.erase(prevPathPos + 1, (pos + mask.size() - 1) - prevPathPos); + } + } + else + { + m_path.erase(pos, mask.size() - 1); + } + } +} // Filename::normalizePath + +/** + * Sets the drive letter of the file name. + * + * @param drive the drive + */ +void Filename::setDrive(const char *drive) +{ + if (drive != NULL && isalpha(*drive)) + m_drive = std::string(drive, 1) + ":"; + else + m_drive = ""; + + makeFullPath(); +} // Filename::setDrive + +/** + * Determines the absolute path (including drive letter for Windows) for the + * current path. + * + * @return the absolute path + */ +const std::string Filename::getAbsolutePath(void) const +{ +std::string path; + +#if defined(WIN32) + char *pathBuf; + DWORD bufsize = GetFullPathName(getFullFilename().c_str(), 0, NULL, NULL); + if (bufsize != 0) + { + pathBuf = new char[bufsize + 1]; + char * filenamePart; + GetFullPathName(getFullFilename().c_str(), bufsize + 1, pathBuf, &filenamePart); + *filenamePart = '\0'; + path = pathBuf; + delete[] pathBuf; + } +#elif defined(linux) + char pathBuf[PATH_MAX]; + if (getcwd(pathBuf, PATH_MAX) != NULL) + { + strcat(pathBuf, "/"); + strcat(pathBuf, getFullFilename().c_str()); + dirname(pathBuf); + strcat(pathBuf, "/"); + path = pathBuf; + } +#endif + + return path; +} // Filename::getAbsolutePath + +/** + * Makes sure the path of the filename exists. If it doesn't, create the path. + */ +void Filename::verifyAndCreatePath(void) const +{ +#if defined(WIN32) + if (WindowsUnicode) + { + char *buffer = NULL; + DWORD buflen; + // get our current path + buflen = GetFullPathName(".", 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(".", buflen + 1, buffer, NULL); + Unicode::String srcPath = Unicode::narrowToWide(buffer); + delete[] buffer; + // get the destination path + std::string correctPath(getDrive() + getPath()); + buflen = GetFullPathName(correctPath.c_str(), 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(correctPath.c_str(), buflen + 1, buffer, NULL); + Unicode::String destPath = Unicode::narrowToWide(buffer); + delete[] buffer; + + std::vector splitDestPath; + splitPath(destPath, splitDestPath, + static_cast(WIN32_PATH_SEPARATOR)); + + Unicode::String prefix = L"\\\\?\\"; + destPath = prefix + splitDestPath[0]; + + for (size_t i = 1; i < splitDestPath.size(); ++i) + { + destPath += WIN32_PATH_SEPARATOR; + destPath += splitDestPath[i]; + if (SetCurrentDirectoryW(destPath.c_str()) == 0) + { + if (CreateDirectoryW(destPath.c_str(), NULL) == 0) + return; + if (SetCurrentDirectoryW(destPath.c_str()) == 0) + return; + } + } + + // set the directory back to the working directory + SetCurrentDirectoryW(srcPath.c_str()); + } + else + { + char *buffer = NULL; + DWORD buflen; + // get our current path + buflen = GetFullPathName(".", 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(".", buflen + 1, buffer, NULL); + std::string srcPath = buffer; + delete[] buffer; + // get the destination path + std::string correctPath(getDrive() + getPath()); + buflen = GetFullPathName(correctPath.c_str(), 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(correctPath.c_str(), buflen + 1, buffer, NULL); + std::string destPath = buffer; + delete[] buffer; + + // change to the destination path + if (destPath.size() >= MAX_PATH) + return; + + std::vector splitDestPath; + splitPath(destPath, splitDestPath, WIN32_PATH_SEPARATOR); + + destPath = splitDestPath[0]; + + for (size_t i = 1; i < splitDestPath.size(); ++i) + { + destPath += WIN32_PATH_SEPARATOR; + destPath += splitDestPath[i]; + if (SetCurrentDirectory(destPath.c_str()) == 0) + { + if (CreateDirectory(destPath.c_str(), NULL) == 0) + return; + if (SetCurrentDirectory(destPath.c_str()) == 0) + return; + } + } + + // set the directory back to the working directory + SetCurrentDirectory(srcPath.c_str()); + } +#elif defined(linux) + // @todo: implement for linux +#endif +} // Filename::verifyAndCreatePath diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.h new file mode 100644 index 00000000..e3585e30 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/Filename.h @@ -0,0 +1,121 @@ +//======================================================================== +// +// Filename.h - a fully qualified file name +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_Filename_H +#define _INCLUDED_Filename_H + +class Filename +{ +public: + Filename(void); + Filename(const char *drive, const char *path, const char *name, const char *extension); + + operator const char *(void) const; + + void clear(void); + + const std::string & getPath(void) const; + const std::string & getName(void) const; + const std::string & getExtension(void) const; + const std::string & getFullFilename(void) const; + const std::string getAbsolutePath(void) const; + + void setPath(const char *path); + void setName(const char *name); + void setExtension(const char *extension); + + void prependPath(const Filename &path); + void appendPath(const Filename &path); + void normalizePath(void); + + void verifyAndCreatePath(void) const; + + const std::string & getDrive(void) const; + void setDrive(const char *drive); + +private: + + void convertToSystemPath(std::string & path); + void makeFullPath(void); + + std::string m_path; // path (not including drive in windows) + std::string m_name; // file name sans path & extension + std::string m_extension; // file extension (plus '.') + std::string m_fullFilename; // fully qualified filename + std::string m_drive; // drive letter (plus ':') +}; + + +inline Filename::Filename(void) +{ +} // Filename::Filename + +inline Filename::Filename(const char *drive, const char *path, const char *name, const char *extension) +{ + if (drive != NULL) + setDrive(drive); + if (path != NULL) + setPath(path); + if (name != NULL) + setName(name); + if (extension != NULL) + setExtension(extension); +} // Filename::Filename + +inline Filename::operator const char *(void) const +{ + return m_fullFilename.c_str(); +} // Filename::operator const char * + +inline void Filename::clear(void) +{ + m_path = ""; + m_name = ""; + m_extension = ""; + m_fullFilename = ""; + m_drive = ""; +} // Filename::clear + +inline const std::string & Filename::getPath(void) const +{ + return m_path; +} // Filename::getPath + +inline const std::string & Filename::getName(void) const +{ + return m_name; +} // Filename::getName + +inline const std::string & Filename::getExtension(void) const +{ + return m_extension; +} // Filename::getExtension + +inline const std::string & Filename::getFullFilename(void) const +{ + return m_fullFilename; +} // Filename::getFullFilename + +inline const std::string & Filename::getDrive(void) const +{ + return m_drive; +} // Filename::getDrive + +inline void Filename::makeFullPath(void) +{ + normalizePath(); + m_fullFilename = m_drive + m_path + m_name + m_extension; +} // Filename::makeFullPath + + +//======================================================================== + +const Filename NEXT_HIGHER_PATH(NULL, "..", NULL, NULL); + + +#endif // _INCLUDED_Filename_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/FirstSharedTemplateDefinition.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/FirstSharedTemplateDefinition.h new file mode 100644 index 00000000..18c25883 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/FirstSharedTemplateDefinition.h @@ -0,0 +1,10 @@ +#include "sharedFoundationTypes/FoundationTypes.h" +#include "sharedDebug/FirstSharedDebug.h" +#include "sharedFoundation/FirstSharedFoundation.h" +#include +#include +#include +#include +#include +#include + diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.cpp new file mode 100644 index 00000000..42def7d2 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.cpp @@ -0,0 +1,86 @@ +// ====================================================================== +// +// ObjectTemplate.cpp - This is a scaled-down version of ObjectTemplate from +// sharedObject library in order to avoid nasty dependencies. +// +// jeff grills +// +// copyright 1999 Bootprint Entertainment +// +// ====================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "ObjectTemplate.h" +#include "sharedFile/Iff.h" + + +//----------------------------------------------------------------- + +template <> ObjectTemplateList::CreateDataResourceMap *ObjectTemplateList::ms_bindings = NULL; +template <> ObjectTemplateList::LoadedDataResourceMap *ObjectTemplateList::ms_loaded = NULL; + +// ====================================================================== + +/** + * Construct an ObjectTemplate. + * + * @param newName name of the ObjectTemplate + * + */ +ObjectTemplate::ObjectTemplate(const std::string & filename) : + DataResource(filename.c_str()), + m_baseData(0) +{ +} // ObjectTemplate::ObjectTemplate + +// ---------------------------------------------------------------------- +/** + * Destroy an ObjectTemplate. + */ + +ObjectTemplate::~ObjectTemplate(void) +{ + if (m_baseData != NULL) + { + m_baseData->releaseReference(); + m_baseData = NULL; + } +} + +// ---------------------------------------------------------------------- + +void ObjectTemplate::load(Iff &iff) +{ + UNREF (iff); + DEBUG_FATAL (true, ("this function should not be called")); +} + +// ---------------------------------------------------------------------- + +/** + * Adds a reference on this template and also adds a reference on the + * template's base. + */ +void ObjectTemplate::addReference(void) const +{ + if (m_baseData != NULL) + m_baseData->addReference(); + + DataResource::addReference(); +} // ObjectTemplate::addReference + +// ---------------------------------------------------------------------- +/** + * Releases a reference on this template and also releases a reference on the + * template's base. + */ +void ObjectTemplate::releaseReference(void) const +{ + if (m_baseData != NULL) + m_baseData->releaseReference(); + + DataResource::releaseReference(); +} // ObjectTemplate::releaseReference + + +// ====================================================================== diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.h new file mode 100644 index 00000000..a03cf94f --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/ObjectTemplate.h @@ -0,0 +1,132 @@ +// ====================================================================== +// +// ObjectTemplate.h - This is a scaled-down version of ObjectTemplate from +// sharedObject library in order to avoid nasty dependencies. +// +// jeff grills +// +// copyright 1999 Bootprint Entertainment +// +// ====================================================================== + +#ifndef _INCLUDED_ObjectTemplate_H +#define _INCLUDED_ObjectTemplate_H + +// ====================================================================== + +class ObjectTemplate; + +#include "sharedFile/Iff.h" +#include "sharedFoundation/CrcLowerString.h" +#include "sharedFoundation/DataResource.h" +#include "sharedFoundation/DataResourceList.h" + + + +typedef DataResourceList ObjectTemplateList; + + +// ====================================================================== + +// Base class for ObjectTemplates + +class ObjectTemplate : public DataResource +{ +public: + + explicit ObjectTemplate(const std::string & filename); + virtual ~ObjectTemplate(void) = 0; + + void loadFromIff(Iff &file); + void saveToIff(Iff &file); + + virtual Tag getId(void) const = 0; + virtual void addReference(void) const; + virtual void releaseReference(void) const; + +protected: + + virtual void release(void) const; + + virtual void preLoad(void); + virtual void load(Iff &file) = 0; + virtual void postLoad(void); + + virtual void preSave(void); + virtual void save(Iff &file) = 0; + virtual void postSave(void); + +// static void registerTemplate(Tag id, +// ObjectTemplateList::CreateDataResourceFunc createFunc); + +protected: + + const ObjectTemplate *m_baseData; // template to use as a base for this template + +private: + + ObjectTemplate(const ObjectTemplate &); + ObjectTemplate &operator =(const ObjectTemplate &); +}; + +// ====================================================================== + +inline void ObjectTemplate::release(void) const +{ + ObjectTemplateList::release(*this); +} // ObjectTemplate::release + +inline void ObjectTemplate::loadFromIff(Iff &file) +{ + preLoad(); + load(file); + postLoad(); +} // ObjectTemplate::loadFromIff + +/** + * Function called before the template is loaded. + */ +inline void ObjectTemplate::preLoad(void) +{ +} // ObjectTemplate::preLoad + +/** + * Function called after the template is loaded. + */ +inline void ObjectTemplate::postLoad(void) +{ +} // ObjectTemplate::postLoad + +inline void ObjectTemplate::saveToIff(Iff &file) +{ + preSave(); + save(file); + postSave(); +} // ObjectTemplate::saveToIff + +/** + * Function called before the template is saved. + */ +inline void ObjectTemplate::preSave(void) +{ +} // ObjectTemplate::preSave + +/** + * Saves the template data to an iff file. + * + * @param file file to save to + */ +inline void ObjectTemplate::save(Iff &file) +{ + UNREF(file); +} // ObjectTemplate::save + +/** + * Function called after the template is saved. + */ +inline void ObjectTemplate::postSave(void) +{ +} // ObjectTemplate::postSave + + +#endif // _INCLUDED_ObjectTemplate_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.cpp new file mode 100644 index 00000000..fe33dbb5 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.cpp @@ -0,0 +1,4429 @@ +//======================================================================== +// +// TemplateData.cpp - data for a given version of a template +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "TemplateGlobals.h" +#include "File.h" +#include "TemplateDefinitionFile.h" +#include "TemplateData.h" +#include "TpfTemplate.h" + +#include + +//============================================================================== +// constants + +// states when parsing a parameter +enum ParamState +{ + STATE_LIST, + STATE_TYPE, + STATE_NAME, + STATE_LIMITS, + STATE_DESCRIPTION +}; + +// tags for min/max getters +static const char * const MinMaxNames[] = {"", "Min", "Max"}; + +static const bool HasMinMax[] = +{ + false, + false, + true, + true, + false, + false, + false, + false, + false, + false, + false, + true, + false, + false +}; + +// map enum ParamType to access function return value +static const char * const PaddedDataMethodNames[] = +{ + NULL, + NULL, + "int ", + "float ", + "bool ", + "const std::string & ", + "const StringId ", + "const Vector & ", + "void ", + "const ObjectTemplate *", + NULL, + NULL, + "const TriggerVolumeData &", + "const std::string & " +}; +static const char * const UnpaddedDataMethodNames[] = +{ + NULL, + NULL, + "int", + "float", + "bool", + "const std::string &", + "const StringId", + "const Vector &", + NULL, + "const ObjectTemplate *", + NULL, + NULL, + "const TriggerVolumeData &", + "const std::string &" +}; + +// map enum ParamType to struct storage type +static const char * const PaddedDataStructNames[] = +{ + NULL, + NULL, + "int ", + "float ", + "bool ", + "std::string ", + "StringId ", + "Vector ", + "DynamicVariableList ", + "const ObjectTemplate *", + NULL, + NULL, + "TriggerVolumeData ", + "std::string " +}; +static const char * const UnpaddedDataStructNames[] = +{ + NULL, + NULL, + "int", + "float", + "bool", + "std::string", + "StringId", + "Vector", + "DynamicVariableList", + "const ObjectTemplate *", + NULL, + NULL, + "TriggerVolumeData", + "std::string" +}; + +// map enum ParamType to TemplateParam type +static const char * const DataVariableNames[] = +{ + "", + "", + "IntegerParam", + "FloatParam", + "BoolParam", + "StringParam", + "StringIdParam", + "VectorParam", + "DynamicVariableParam", + "StringParam", + "IntegerParam", + "StructParamOT", + "TriggerVolumeParam", + "StringParam" +}; + +static const char * const CompilerDataVariableNames[] = +{ + "", + "", + "CompilerIntegerParam", + "FloatParam", + "BoolParam", + "StringParam", + "StringIdParam", + "VectorParam", + "DynamicVariableParam", + "StringParam", + "CompilerIntegerParam", + "StructParamOT", + "TriggerVolumeParam", + "StringParam" +}; + +static const char * const DefaultDataReturnValue[] = +{ + NULL, + NULL, + "0", + "0.0f", + "false", + "DefaultString", + "DefaultStringId", + "DefaultVector", + "", + "NULL", + "(0)", + "", + "DefaultTriggerVolumeData", + "DefaultString" +}; + +// map enum ParamType to string equivalent +static const char * const EnumTypeNames[] = +{ + "TYPE_NONE", + "TYPE_COMMENT", + "TYPE_INTEGER", + "TYPE_FLOAT", + "TYPE_BOOL", + "TYPE_STRING", + "TYPE_STRINGID", + "TYPE_VECTOR", + "TYPE_DYNAMIC_VAR", + "TYPE_TEMPLATE", + "TYPE_ENUM", + "TYPE_STRUCT", + "TYPE_TRIGGER_VOLUME", + "TYPE_FILENAME", + "NUM_PARAM_TYPES" +}; + +// map enum TemplateLocation to string equivalent +static const char * const EnumLocationNames[] = +{ + "LOC_NONE", + "LOC_CLIENT", + "LOC_SERVER", + "LOC_SHARED" +}; + + +//============================================================================== +// class methods + +/** + * Class constructor. + * + * @param version version number of this template data + * @param parent the tdf file this data was taken from + */ +TemplateData::TemplateData(int version, const TemplateDefinitionFile &parent) : + m_fileParent(&parent), + m_templateParent(NULL), + m_hasTemplateParam(false), + m_hasDynamicVarParam(false), + m_hasList(false), +// m_name(parent.getTemplateName()), + m_baseName(parent.getBaseName()), + m_writeForCompilerFlag(false), + m_bracketCount(0), + m_parseState(STATE_PARAM), + m_parameters(), + m_parameterMap(), + m_currentEnumList(NULL), + m_enumMap(), + m_currentStruct(NULL), + m_structMap(), + m_structList() +{ + m_structId.tag = NO_TAG; + m_structId.tagString = NO_TAG_STRING; + m_version.tag = version; + char versionbuf[5]; + char buffer[16]; + sprintf(versionbuf, "%04d", version); + sprintf(buffer, "TAG(%c,%c,%c,%c)", versionbuf[0], versionbuf[1], + versionbuf[2], versionbuf[3]); + m_version.tagString = buffer; +} // TemplateData::TemplateData(int, const TemplateDefinitionFile &) + +/** + * Class constructor (for a structure in a template). + * + * @param parent the template data this structure belongs to + * @param name the structure's name + */ +TemplateData::TemplateData(const TemplateData *parent, const std::string name) : + m_fileParent(NULL), + m_templateParent(parent), + m_hasTemplateParam(false), + m_hasDynamicVarParam(false), + m_hasList(false), + m_name(name), + m_baseName(""), + m_writeForCompilerFlag(false), + m_version(parent->m_version), + m_bracketCount(0), + m_parseState(STATE_PARAM), + m_parameters(), + m_parameterMap(), + m_currentEnumList(NULL), + m_enumMap(), + m_currentStruct(NULL), + m_structMap(), + m_structList() +{ + m_structId.tag = NO_TAG; + m_structId.tagString = NO_TAG_STRING; +} // TemplateData::TemplateData(const TemplateData &) + +/** + * Class destructor. + */ +TemplateData::~TemplateData() +{ + StructMap::iterator iter; + for (iter = m_structMap.begin(); iter != m_structMap.end(); ++iter) + { + delete (*iter).second; + (*iter).second = NULL; + } + + m_parameterMap.clear(); + m_parameters.clear(); + m_structMap.clear(); + m_structList.clear(); + m_currentEnumList = NULL; + m_currentStruct = NULL; +} // TemplateData::~TemplateData + + +//======================================================================== +// access functions + +/** + * Returns the template name for this data. + * + * @return the template name + */ +const std::string TemplateData::getName(void) const +{ + if (m_fileParent != NULL) + return m_fileParent->getTemplateName(); + if (m_templateParent != NULL) + return m_templateParent->getName() + "::_" + m_name; + return ""; +} + +/** + * Returns the template's base template name. + * + * @return the base template name + */ +const std::string TemplateData::getBaseName(void) const +{ + if (m_fileParent != NULL && !m_fileParent->getBaseName().empty()) + return m_fileParent->getBaseName(); +// if (m_templateParent != NULL) + return m_baseName; +// return ""; +} + +/** + * Returns the template's location (client, server, shared) + * + * @return the location + */ +TemplateLocation TemplateData::getTemplateLocation(void) const +{ + if (m_fileParent != NULL) + return m_fileParent->getTemplateLocation(); + if (m_templateParent != NULL) + return m_templateParent->getTemplateLocation(); + return LOC_NONE; +} // TemplateData::getTemplateLocation + + +//======================================================================== +// parsing functions + +/** + * Parses a line of a template definition. + * + * @param fp file line was read from + * @param buffer the line to parse + * @param tokenbuf a buffer to store tokens in + * + * @return point in buffer where parsing stopped, or -1 on error + */ +const char * TemplateData::parseLine(const File &fp, const char *buffer, + char *tokenbuf) +{ +ParamState paramState = STATE_LIST; + + if (buffer == NULL || *buffer == '\0') + return NULL; + + const char *line = buffer; + + if (m_parseState == STATE_ENUM) + return parseEnum(fp, line, tokenbuf); + else if (m_parseState == STATE_STRUCT) + return parseStruct(fp, line, tokenbuf); + + Parameter parameter; + parameter.type = TYPE_NONE; + parameter.list_type = LIST_NONE; + parameter.list_size = 1; + parameter.min_int_limit = INT_MIN; + parameter.min_float_limit = -FLT_MAX; + parameter.max_int_limit = INT_MAX; + parameter.max_float_limit = FLT_MAX; + + if (*buffer == '/' && *(buffer + 1) == '/') + { + parameter.type = TYPE_COMMENT; + paramState = STATE_DESCRIPTION; + } + + while (paramState != STATE_DESCRIPTION) + { + line = getNextWhitespaceToken(line, tokenbuf); + if (*tokenbuf == '\0') + { + fp.printEolError(); + return CHAR_ERROR; + } + + if (paramState == STATE_LIST) + { + // check for alternative options to defining a parameter + if (strcmp(tokenbuf, "enum") == 0) + { + if (m_parseState == STATE_PARAM) + { + // get the enum name + line = getNextWhitespaceToken(line, tokenbuf); + if (*tokenbuf == '\0') + { + fp.printError("no enum name"); + return CHAR_ERROR; + } + if (!isalpha(*tokenbuf)) + { + fp.printError("bad enum name"); + return CHAR_ERROR; + } + const EnumList * enumList = getEnumList(tokenbuf, true); + if (enumList != NULL) + { + fp.printError("enum already defined"); + return CHAR_ERROR; + } + m_currentEnumList = &(*m_enumMap.insert(std::make_pair( + std::string(tokenbuf), EnumList())).first).second; + m_parseState = STATE_ENUM; + if (line != NULL && *line != '\0') + return parseEnum(fp, line, tokenbuf); + return line; + } + fp.printError("unexpected keyword \"enum\""); + return CHAR_ERROR; + } + else if (strcmp(tokenbuf, "struct") == 0) + { + if (m_parseState == STATE_PARAM) + { + // get the struct name + line = getNextWhitespaceToken(line, tokenbuf); + if (*tokenbuf == '\0') + { + fp.printError("no struct name"); + return CHAR_ERROR; + } + if (!isalpha(*tokenbuf)) + { + fp.printError("bad struct name"); + return CHAR_ERROR; + } + StructMap::const_iterator structIter = m_structMap.find(tokenbuf); + if (structIter != m_structMap.end()) + { + fp.printError("struct already defined"); + return CHAR_ERROR; + } + m_currentStruct = new TemplateData(this, tokenbuf); + m_currentStruct->m_name = tokenbuf; + m_structMap.insert(std::make_pair(tokenbuf, m_currentStruct)); + m_structList.push_back(m_currentStruct); + m_parseState = STATE_STRUCT; + if (line != NULL && *line != '\0') + return parseStruct(fp, line, tokenbuf); + return line; + } + fp.printError("unexpected keyword \"struct\""); + return CHAR_ERROR; + } + // if we are a structure, the 1st item should be the structure id + else if (strcmp(tokenbuf, "id") == 0 && m_templateParent != NULL && + m_structId.tag == NO_TAG) + { + line = getNextToken(line, tokenbuf); + if (strlen(tokenbuf) != 4) + { + fp.printError("struct id not 4 characters"); + return CHAR_ERROR; + } + m_structId.tag = ConvertStringToTag(tokenbuf); + m_structId.tagString = ConvertStringToTagString(tokenbuf); + return line; + } + } + + // if we are a structure, the 1st item should be the structure id + if (m_templateParent != NULL && m_structId.tag == NO_TAG) + { + fp.printError("struct id not defined"); + return CHAR_ERROR; + } + + switch (paramState) + { + case STATE_LIST: + if (strcmp(tokenbuf, "list") == 0) + { + // see what kind of list it is + const char *tempLine = getNextWhitespaceToken(line, tokenbuf); + if (*tokenbuf == '\0') + { + fp.printEolError(); + return CHAR_ERROR; + } + if (isdigit(*tokenbuf)) + { + parameter.list_type = LIST_INT_ARRAY; + parameter.list_size = atoi(tokenbuf); + line = tempLine; + } + else if (strncmp(tokenbuf, "enumList", 8) == 0) + { + parameter.list_type = LIST_ENUM_ARRAY; + parameter.enum_list_name = &tokenbuf[8]; + const EnumList * list = getEnumList(parameter.enum_list_name.c_str(), false); + if (list == NULL) + { + fp.printError("enum name not defined!"); + return CHAR_ERROR; + } + parameter.list_size = static_cast(list->size()); + line = tempLine; + } + else + { + parameter.list_type = LIST_LIST; + m_hasList = true; + } + paramState = STATE_TYPE; + break; + } + // fall through to STATE_TYPE + case STATE_TYPE: + if (strcmp(tokenbuf, "int") == 0) + { + parameter.type = TYPE_INTEGER; + parameter.min_int_limit = INT_MIN; + parameter.max_int_limit = INT_MAX; + paramState = STATE_LIMITS; + } + else if (strcmp(tokenbuf, "float") == 0) + { + parameter.type = TYPE_FLOAT; + parameter.min_float_limit = -FLT_MAX; + parameter.max_float_limit = FLT_MAX; + paramState = STATE_LIMITS; + } + else if (strcmp(tokenbuf, "bool") == 0) + { + parameter.type = TYPE_BOOL; + paramState = STATE_LIMITS; + } + else if (strcmp(tokenbuf, "string") == 0) + { + parameter.type = TYPE_STRING; + paramState = STATE_NAME; + } + else if (strcmp(tokenbuf, "filename") == 0) + { + parameter.type = TYPE_FILENAME; + paramState = STATE_NAME; + } + else if (strcmp(tokenbuf, "stringId") == 0) + { + parameter.type = TYPE_STRINGID; + paramState = STATE_NAME; + } + else if (strcmp(tokenbuf, "vector") == 0) + { + parameter.type = TYPE_VECTOR; + paramState = STATE_NAME; + } + else if (strcmp(tokenbuf, "objvar") == 0) + { + if (parameter.list_type == LIST_LIST) + { + fp.printError("objvar may not be part of a list"); + return CHAR_ERROR; + } + if (parameter.type == TYPE_DYNAMIC_VAR) + { + fp.printError("server-only data type"); + return CHAR_ERROR; + } + parameter.type = TYPE_DYNAMIC_VAR; + m_hasDynamicVarParam = true; + paramState = STATE_NAME; + } + else if (strncmp(tokenbuf, "template", 8) == 0) + { + parameter.type = TYPE_TEMPLATE; + parameter.extendedName = &tokenbuf[8]; + m_hasTemplateParam = true; + paramState = STATE_NAME; + } + else if (strncmp(tokenbuf, "enum", 4) == 0) + { + parameter.type = TYPE_ENUM; + parameter.extendedName = &tokenbuf[4]; + if (getEnumList(&tokenbuf[4], false) == NULL) + { + std::string errbuf = "enum type " + parameter.extendedName + + " not defined"; + fp.printError(errbuf.c_str()); + return CHAR_ERROR; + } + paramState = STATE_NAME; + } + else if (strncmp(tokenbuf, "struct", 6) == 0) + { + parameter.type = TYPE_STRUCT; + parameter.extendedName = &tokenbuf[6]; + if (getStruct(&tokenbuf[6]) == NULL) + { + std::string errbuf = "struct " + parameter.extendedName + + " not defined"; + fp.printError(errbuf.c_str()); + return CHAR_ERROR; + } + paramState = STATE_NAME; + } + else if (strcmp(tokenbuf, "triggerVolume") == 0) + { + parameter.type = TYPE_TRIGGER_VOLUME; + parameter.min_float_limit = 0.0f; + paramState = STATE_NAME; + } + else + { + if (paramState == STATE_LIST) + fp.printError("Expected \"list\" or parameter type"); + else + fp.printError("Expected parameter type"); + return CHAR_ERROR; + } + break; + case STATE_LIMITS: + if (isdigit(*tokenbuf) || *tokenbuf == '-' || (*tokenbuf == '.' && *(tokenbuf + 1) == '.')) + { + char tempBuf[64]; + const char *tempToken = tokenbuf; + + if (isdigit(*tempToken) || *tempToken == '-') + { + tempToken = getNextToken(tempToken, tempBuf); + if (parameter.type == TYPE_INTEGER) + { + parameter.min_int_limit = strtol(tempBuf, NULL, 10); + } + else + { + parameter.min_float_limit = static_cast( + strtod(tempBuf, NULL)); + } + } + if (*tempToken == '.' && *(tempToken + 1) == '.') + { + tempToken = getNextToken(tempToken + 2, tempBuf); + if (isdigit(*tempBuf) || *tempBuf == '-') + { + if (parameter.type == TYPE_INTEGER) + parameter.max_int_limit = atoi(tempBuf); + else + { + parameter.max_float_limit = static_cast( + atof(tempBuf)); + } + } + } + paramState = STATE_NAME; + break; + } + // fall through to STATE_NAME + case STATE_NAME: + if (*tokenbuf == '_') + { + fp.printError("parameter names may not begin with '_'"); + return CHAR_ERROR; + } + parameter.name = tokenbuf; + paramState = STATE_DESCRIPTION; + break; + case STATE_DESCRIPTION: + default: + break; + } + } + + // anything left over in the line is the parameter description + if (line != NULL) + parameter.description = line; + + m_parameters.push_back(parameter); + m_parameterMap.insert(std::make_pair(parameter.name, parameter)); + + return line; +} // TemplateData::parseLine + +/** + * Finds the integral value associated with an enum value. + * + * @param enumValue the enumeration value + * + * @return the value, or INVALID_ENUM_RESULT if not found + */ +int TemplateData::getEnumValue(const char * enumValue) const +{ + NOT_NULL(enumValue); + + EnumMap::const_iterator mapIter; + for (mapIter = m_enumMap.begin(); mapIter != m_enumMap.end(); ++mapIter) + { + const EnumList &elist = (*mapIter).second; + EnumList::const_iterator listIter; + for (listIter = elist.begin(); listIter != elist.end(); ++listIter) + { + if ((*listIter).name == enumValue) + return (*listIter).value; + } + } + + if (m_templateParent != NULL) + return m_templateParent->getEnumValue(enumValue); + if (m_fileParent != NULL) + { + const TemplateDefinitionFile * baseFile = m_fileParent->getBaseDefinitionFile(); + if (baseFile != NULL) + { + return baseFile->getTemplateData(baseFile->getHighestVersion())-> + getEnumValue(enumValue); + } + } + return INVALID_ENUM_RESULT; +} // TemplateData::getEnumValue(const char *) + +/** + * Finds the integral value associated with an enum value. + * + * @param enumType the enumeration type + * @param enumValue the enumeration value + * + * @return the value, or INVALID_ENUM_RESULT if not found + */ +int TemplateData::getEnumValue(const std::string & enumType, + const char * enumValue) const +{ + NOT_NULL(enumValue); + + const EnumList *elist = getEnumList(enumType.c_str(), false); + if (elist == NULL) + return INVALID_ENUM_RESULT; + EnumList::const_iterator listIter; + for (listIter = elist->begin(); listIter != elist->end(); ++listIter) + { + if ((*listIter).name == enumValue) + return (*listIter).value; + } + return INVALID_ENUM_RESULT; +} // TemplateData::getEnumValue(const std::string &, const char *) + +/** + * Tries to find an enum list definition for this template. If it can't find + * one it will try to look for the definition in the template's base definition. + * + * @param name the enum list name + * @param define flag that we are defining templates and should not look in base templates + * + * @return the enum list definition, or NULL if not found + */ +const TemplateData::EnumList * TemplateData::getEnumList(const std::string & name, + bool define) const +{ + EnumMap::const_iterator iter = m_enumMap.find(name); + if (iter != m_enumMap.end()) + return &(*iter).second; + if (m_templateParent != NULL) + return m_templateParent->getEnumList(name, define); + if (!define && m_fileParent != NULL && m_fileParent->getBaseDefinitionFile() != NULL) + { + const TemplateData * baseData = m_fileParent->getBaseDefinitionFile()-> + getTemplateData(m_fileParent->getBaseDefinitionFile()-> + getHighestVersion()); + if (baseData != NULL) + return baseData->getEnumList(name, define); + } + return NULL; +} // TemplateData::getEnumList + +/** + * Tries to find a struct definition for this template. If it can't find one + * it will try to look for the definition in the template's base definition. + * + * @param name the enum list name + * + * @return the struct definition, or NULL if not found + */ +const TemplateData * TemplateData::getStruct(const char *name) const +{ + NOT_NULL(name); + + StructMap::const_iterator iter = m_structMap.find(name); + if (iter != m_structMap.end()) + return (*iter).second; + if (m_templateParent != NULL) + return m_templateParent->getStruct(name); + if (m_fileParent != NULL && m_fileParent->getBaseDefinitionFile() != NULL) + { + const TemplateData * baseData = m_fileParent->getBaseDefinitionFile()-> + getTemplateData(m_fileParent->getBaseDefinitionFile()-> + getHighestVersion()); + if (baseData != NULL) + return baseData->getStruct(name); + } + return NULL; +} // TemplateData::getStruct + +/** + * Returns the tdf file for this TemplateData + * + * @return the TemplateDefinitionFile, or NULL if not there + */ + +const TemplateDefinitionFile * TemplateData::getTdf() const +{ + return m_fileParent; +} + +/** + * Returns the tdf file for this TemplateData's first ancestor + * + * @return the TemplateDefinitionFile, or NULL if not there + */ + +const TemplateDefinitionFile * TemplateData::getTdfParent() const +{ + if(m_fileParent) + { + return m_fileParent->getBaseDefinitionFile(); + } + else + { + return NULL; + } +} + +/** + * Returns the tdf file that contains the parameter + * + * @return the TemplateDefinitionFile, or NULL if not found + */ + +const TemplateDefinitionFile * TemplateData::getTdfForParameter(const char *parameterName) const +{ + if(m_fileParent != NULL) + { + if(getParameter(parameterName)) + { + return m_fileParent; + } + + const TemplateDefinitionFile* ancestorTemplateDefinitionFile = m_fileParent->getBaseDefinitionFile(); + + if(ancestorTemplateDefinitionFile != NULL) + { + const TemplateData *ancestorTemplateData = ancestorTemplateDefinitionFile->getTemplateData(ancestorTemplateDefinitionFile->getHighestVersion()); + + if(ancestorTemplateData != NULL) + { + return ancestorTemplateData->getTdfForParameter(parameterName); + } + } + } + + return NULL; +} + +/** + * Parses a string and tries to convert it to an integer value. + * + * @patam fp file to print errors out to + * @param line string to parse + * @param endLine pointer that will be set to where parsing stopped, or CHAR_ERROR on error + * @param intbuf buffer to be filled in with the string that represents the integer + * + * @return the integer that the string was parsed to + */ +int TemplateData::parseIntValue(const File &fp, const char * line, const char ** endLine, + char * intbuf) const +{ + NOT_NULL(endLine); + if (line == NULL || *line == '\0' || intbuf == NULL) + { + fp.printError("bad value passed to TemplateData::parseIntValue"); + *endLine = CHAR_ERROR; + return 0; + } + + int value = 0; + const char * startLine = line; + + // check for negative number + bool negative = false; + if (*line == '-') + { + ++line; + negative = true; + if (*line == '\0') + { + fp.printError("TemplateData::parseIntValue: expected value after '-'"); + *endLine = CHAR_ERROR; + return 0; + } + } + + // an integer can be a normal value, a hex value starting with 0x, or an enum value + // we can also have int value or'ed together with | + if (isalpha(*line)) + { + // see if it is an enum + const char * tempLine = getNextToken(line, intbuf); + value = getEnumValue(intbuf); + if (value == INVALID_ENUM_RESULT) + { + fp.printError("TemplateData::parseIntValue: bad enum name"); + *endLine = CHAR_ERROR; + return 0; + } + if (tempLine != NULL) + line = tempLine; + else + line += strlen(line); + } + else if (*line == '0' && *(line + 1) == 'x') + { + // a hex vale + line += 2; + char * tempLine; + value = static_cast(strtoul(line, &tempLine, 16)); + line = tempLine; + } + else if (isdigit(*line)) + { + // a regular integer + char * tempLine; + value = static_cast(strtol(line, &tempLine, 10)); + line = tempLine; + } + else + { + fp.printError("TemplateData::parseIntValue: data not an integer"); + *endLine = CHAR_ERROR; + return 0; + } + + if (negative) + value = -value; + + // copy the int string to intbuf + strncpy(intbuf, startLine, line - startLine); + intbuf[line - startLine] = '\0'; + intbuf += strlen(intbuf); + if (line != NULL && *line == '\0') + *endLine = NULL; + else + *endLine = line; + + // check if we want to or another int + const char * tempLine = getNextToken(line, intbuf); + if (*intbuf == '|') + { + strcpy(intbuf, " | "); + intbuf += strlen(intbuf); + value |= parseIntValue(fp, tempLine, endLine, intbuf); + } + else + *intbuf = '\0'; + + return value; +} // TemplateData::parseIntValue + +/** + * Parses a enumeration definition. + * + * @param fp file line was read from + * @param buffer the line to parse + * @param tokenbuf a buffer to store tokens in + * + * @return point in buffer where parsing stopped, or -1 on error + */ +const char * TemplateData::parseEnum(const File &fp, const char *buffer, + char *tokenbuf) +{ + NOT_NULL(buffer); + NOT_NULL(tokenbuf); + NOT_NULL(m_currentEnumList); + + const char *line = buffer; + + line = getNextToken(line, tokenbuf); + if (*tokenbuf == '\0') + return line; + + if (strcmp(tokenbuf, "{") == 0) + { + if (m_bracketCount == 0) + { + m_bracketCount = 1; + return line; + } + fp.printError("unexpected {"); + return CHAR_ERROR; + } + else if (strcmp(tokenbuf, "}") == 0) + { + if (m_bracketCount == 1) + { + m_bracketCount = 0; + m_currentEnumList = NULL; + m_parseState = STATE_PARAM; + return line; + } + } + else if (m_bracketCount == 0) + { + fp.printError("open bracket for enumeration not found"); + return CHAR_ERROR; + } + + EnumData enumData; + enumData.name = tokenbuf; + if (line != NULL && *line == '=') + { + + line = getNextToken(line, tokenbuf); + if (*tokenbuf == '\0') + { + fp.printError("expected value for enumeration after ="); + return CHAR_ERROR; + } + + int value = parseIntValue(fp, line, &line, tokenbuf); + if (line == CHAR_ERROR) + return CHAR_ERROR; + +// if (!isinteger(tokenbuf)) +// { +// fp.printError("expected integer value for enumeration"); +// return CHAR_ERROR; +// } + enumData.valueName = tokenbuf; + enumData.value = value; + } + else if (m_currentEnumList->size() == 0) + { + enumData.value = 0; + } + else + { + enumData.value = m_currentEnumList->back().value + 1; + } + + if (line != NULL && *line == ',') + line = getNextToken(line, tokenbuf); + if (line != NULL) + { + enumData.comment = line; + line = NULL; + } + + m_currentEnumList->push_back(enumData); + return line; +} // TemplateData::parseEnum + +/** + * Parses a structure definition. + * + * @param fp file line was read from + * @param buffer the line to parse + * @param tokenbuf a buffer to store tokens in + * + * @return point in buffer where parsing stopped, or -1 on error + */ +const char * TemplateData::parseStruct(const File &fp, const char *buffer, + char *tokenbuf) +{ + NOT_NULL(buffer); + NOT_NULL(tokenbuf); + NOT_NULL(m_currentStruct); + + const char *line = buffer; + + line = getNextWhitespaceToken(line, tokenbuf); + if (*tokenbuf == '\0') + return line; + + if (strcmp(tokenbuf, "{") == 0) + { + if (m_bracketCount == 0) + m_bracketCount = 1; + else + { + fp.printError("unexpected {"); + return CHAR_ERROR; + } + } + else if (strcmp(tokenbuf, "}") == 0) + { + if (m_bracketCount == 1) + { + m_bracketCount = 0; + m_currentStruct = NULL; + m_parseState = STATE_PARAM; + return line; + } + else + { + fp.printError("unexpected }"); + return CHAR_ERROR; + } + } + else if (m_bracketCount == 0) + { + fp.printError("open bracket for struct not found"); + return CHAR_ERROR; + } + else + line = buffer; + + return m_currentStruct->parseLine(fp, line, tokenbuf); +} // TemplateData::parseStruct + + +//======================================================================== +// template verification functions + +/** + * Verifies that a template has every necesssary member defined. + * + * @param tpfTemplate the template to verify + * @param file the file the template is being read from + * + * @return true if the template has all it's members, false if some are missing + */ +bool TemplateData::verifyTemplate(const TpfTemplate *tpfTemplate, const File &file) const +{ +bool result = true; +char buffer[256]; + + NOT_NULL(tpfTemplate); + + const char * templateName = getFileParent()->getTemplateName().c_str(); + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = *iter; + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + if (param.list_type == LIST_NONE) + { + if (tpfTemplate->isParamPureVirtual(param.name)) + continue; + if (!tpfTemplate->isParamLoaded(param.name)) + { + result = false; + sprintf(buffer, "missing parameter %s from section @class " + "%s", param.name.c_str(), templateName); + file.printError(buffer); + } + } + else if (param.list_type == LIST_LIST) + { + if (tpfTemplate->isParamPureVirtual(param.name)) + continue; + if (!tpfTemplate->isParamLoaded(param.name)) + { + result = false; + sprintf(buffer, "missing parameter %s from section @class %s", + param.name.c_str(), templateName); + file.printError(buffer); + } + } + else + { + for (int i = 0; i < param.list_size; ++i) + { + if (tpfTemplate->isParamPureVirtual(param.name, true, i)) + continue; + + if (!tpfTemplate->isParamLoaded(param.name, true, i)) + { + result = false; + if (param.list_type == LIST_INT_ARRAY) + { + sprintf(buffer, "missing parameter %s[%d] from section " + "@class %s", param.name.c_str(), i, templateName); + } + else if (param.list_type == LIST_ENUM_ARRAY) + { + const EnumList * enumList = getEnumList(param.enum_list_name, false); + FATAL(enumList == NULL, ("Enum list %s missing", + param.enum_list_name.c_str())); + sprintf(buffer, "missing parameter %s[%s] from section " + "@class %s", param.name.c_str(), enumList->at(i).name.c_str(), + templateName); + } + file.printError(buffer); + } + } + } + } + return result; +} // TemplateData::verifyTemplate + +/** + * Verifies that a template has every necesssary member defined. If a parameter + * is missing, writes out a default parameter to a file. + * + * @param tpfTemplate the template to verify + * @param file the template file to write missing parameters to + */ +void TemplateData::updateTemplate(const TpfTemplate *tpfTemplate, File & file) const +{ + NOT_NULL(tpfTemplate); + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = *iter; + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + if (param.list_type == LIST_LIST || param.list_size <= 1) + { + if (!tpfTemplate->isParamLoaded(param.name)) + { + writeParamTypeToDefaultTemplate(file, param); + writeParameterDefault(file, param); + } + } + else + { + for (int i = 0; i < param.list_size; ++i) + { + if (!tpfTemplate->isParamLoaded(param.name, true, i)) + { + writeParamTypeToDefaultTemplate(file, param); + writeParameterDefault(file, param, i); + } + } + } + } +} // TemplateData::updateTemplate + + +//======================================================================== +// template C++ writing functions + +/** + * Sets a flag saying whether we are writing C++ code for the template compiler + * or the game. + * + * @param flag if true, we are writing for the compiler + */ +void TemplateData::setWriteForCompiler(bool flag) +{ + m_writeForCompilerFlag = flag; + if (flag && (m_baseName.empty() || getBaseName() == ROOT_TEMPLATE_NAME)) + m_baseName = COMPILER_ROOT_TEMPLATE_NAME; + else if (!flag && (m_baseName.empty() || getBaseName() == COMPILER_ROOT_TEMPLATE_NAME)) + m_baseName = ROOT_TEMPLATE_NAME; + for (StructMap::iterator iter = m_structMap.begin(); iter != m_structMap.end(); + ++iter) + { + NOT_NULL((*iter).second); + (*iter).second->setWriteForCompiler(flag); + } +} // TemplateData::setWriteForCompiler + +/** + * Writes code to register all the structures defined by this template. + * + * @param fp the file to write to + * @param leadInChars text to write before the register line + */ +void TemplateData::writeRegisterTemplate(File &fp, const char * leadInChars) const +{ + if (m_fileParent != NULL) + fp.print("%s\n", TDF_INSTALL_BEGIN); + + if (leadInChars != NULL) + fp.print("%s", leadInChars); + fp.print("%s::registerMe();\n", getName().c_str()); + + // register any structures + StructMap::const_iterator iter; + for (iter = m_structMap.begin(); iter != m_structMap.end(); ++iter) + { + TemplateData *subStruct = (*iter).second; + NOT_NULL(subStruct); + subStruct->writeRegisterTemplate(fp, leadInChars); + } + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_INSTALL_END); +} // TemplateData::writeRegisterTemplate + +/** + * Writes the parameters for a template param access method. + * + * @param fp the file to write to + * @param param the parameter being accessed + * @param headerParams flag that we are writing params for a header file + */ +void TemplateData::writeMethodParams(File &fp, const Parameter ¶m, + bool headerParams) const +{ +std::vector paramStrings; + + switch (param.type) + { + case TYPE_VECTOR: + paramStrings.push_back("Vector &pos"); + break; + case TYPE_DYNAMIC_VAR: + paramStrings.push_back("DynamicVariableList &list"); + break; + case TYPE_STRUCT: + paramStrings.push_back(param.extendedName + " &data"); + break; + default: + break; + } + switch (param.list_type) + { + case LIST_NONE: + break; + case LIST_LIST: + case LIST_INT_ARRAY: + paramStrings.push_back("int index"); + break; + case LIST_ENUM_ARRAY: + paramStrings.push_back(param.enum_list_name + " index"); + break; + } + if (m_templateParent != NULL) + paramStrings.push_back("bool versionOk"); + if (param.list_type == LIST_NONE) + { + switch (param.type) + { + case TYPE_INTEGER: + case TYPE_FLOAT: + case TYPE_BOOL: + case TYPE_STRING: + case TYPE_STRINGID: + case TYPE_FILENAME: + case TYPE_TRIGGER_VOLUME: + case TYPE_ENUM: + if (headerParams) + paramStrings.push_back("bool testData = false"); + else + paramStrings.push_back("bool testData"); + break; + default: + break; + } + } + + // write the parameters passed to the method + std::vector::const_iterator iter; + for (iter = paramStrings.begin(); iter != paramStrings.end(); ++iter) + { + if (iter != paramStrings.begin()) + fp.print(", "); + fp.print("%s", (*iter).c_str()); + } +} // TemplateData::writeMethodParams + +/** + * Writes class forward declarations if we have a parameter that returns a + * template. + * + * @param fp the file to write to + */ +void TemplateData::writeHeaderFwdDecls(File &fp) const +{ +std::set names; + + fp.print("%s\n", TDF_TEMPLATE_REFS_BEGIN); + + getTemplateNames(names); + + if (names.size() != 0) + { + std::set::const_iterator iter; + for (iter = names.begin(); iter != names.end(); ++iter) + { + fp.print("class %s%s;\n", EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(*iter).c_str()); + } + } + + fp.print("%s\n", TDF_TEMPLATE_REFS_END); +} // TemplateData::writeHeaderFwdDecls + +/** + * Gets the names of any templates referenced by this template. + * + * @param names set to be filled with template names used by this template + */ +void TemplateData::getTemplateNames(std::set &names) const +{ + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + // if the paramter is not the type we want to write, go to the next + // parameter + if (param.type == TYPE_TEMPLATE) + names.insert(param.extendedName); + else if (param.type == TYPE_STRUCT) + { + const TemplateData * structData = getStruct(param.extendedName.c_str()); + if (structData != NULL) + structData->getTemplateNames(names); + } + } +} // TemplateData::getHeaderFwdDecls + +/** + * Writes out the template's parameters for a header. + * + * @param fp the file to write to + */ +void TemplateData::writeHeaderParams(File &fp) const +{ + if (m_writeForCompilerFlag) + { + writeCompilerHeaderParams(fp); + return; + } + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_BEGIN); + + writeHeaderEnums(fp); + writeHeaderStructs(fp); + writeHeaderMethods(fp); + writeHeaderVariables(fp); + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_END); +} // TemplateData::writeHeaderParams + +/** + * Writes out the template's parameters for a header for use in the template + * compiler. + * + * @param fp the file to write to + */ +void TemplateData::writeCompilerHeaderParams(File &fp) const +{ + DEBUG_FATAL(!m_writeForCompilerFlag, ("write for compiler not enabled")); + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_BEGIN); + + writeHeaderEnums(fp); + writeHeaderStructs(fp); + writeCompilerHeaderMethods(fp); + writeHeaderVariables(fp); + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_END); +} // TemplateData::writeCompilerHeaderParams + +/** + * Writes out the template's enumeration definitions. + * + * @param fp the file to write to + */ +void TemplateData::writeHeaderEnums(File &fp) const +{ + if (m_enumMap.size() == 0) + return; + + fp.print("public:\n"); + + EnumMap::const_iterator mapIter; + EnumList::const_iterator listIter; + + for (mapIter = m_enumMap.begin(); mapIter != m_enumMap.end(); ++mapIter) + { + fp.print("\tenum %s\n", (*mapIter).first.c_str()); + fp.print("\t{\n"); + const EnumList &enumList = (*mapIter).second; + std::string last_name; + for (listIter = enumList.begin(); listIter != enumList.end(); ++listIter) + { + const EnumData &data = *listIter; + last_name = data.name.c_str(); + fp.print("\t\t%s", data.name.c_str()); + if (data.valueName.size() != 0) + fp.print(" = %s", data.valueName.c_str()); + fp.print(","); + if (data.comment.size() != 0) + fp.print("\t\t// %s", data.comment.c_str()); + fp.print("\n"); + } + fp.print("\t\t%s = %s,\n", ((*mapIter).first + std::string("_Last")).c_str(), last_name.c_str()); + fp.print("\t};\n\n"); + } +} // TemplateData::writeHeaderEnums + +/** + * Writes out the template's structure definitions. + * + * @param fp the file to write to + */ +void TemplateData::writeHeaderStructs(File &fp) const +{ +StructList::const_iterator iter; + + if (m_structList.size() == 0) + return; + + // write public interface + fp.print("public:\n"); + for (iter = m_structList.begin(); iter != m_structList.end(); ++iter) + { + const TemplateData *structData = *iter; + NOT_NULL(structData); + const char *structName = structData->m_name.c_str(); + fp.print("\tstruct %s\n", structName); + fp.print("\t{\n"); + structData->writeStructDefinition(fp); + if (structData->m_hasTemplateParam) + { + // the structure needs a constructor and destructor + fp.print("\n"); + fp.print("\t\t %s(void);\n", structName); + fp.print("\t\t %s(const %s & source);\n", structName, structName); + fp.print("\t\t~%s();\n", structName); + // write a dummy operator = for windows + fp.print("#ifdef WIN32\n"); + fp.print("\t\t%s & operator =(const %s &);\n", structName, structName); + fp.print("#endif\n"); + } + if (structData->m_hasTemplateParam || structData->m_hasDynamicVarParam) + { + // the structure needs a (private) assignment operator + fp.print("#ifdef LINUX\n"); + fp.print("\n"); + fp.print("\tprivate:\n"); + fp.print("\t\t%s & operator =(const %s &);\n", structName, structName); + fp.print("#endif \n"); + } + fp.print("\t};\n\n"); + } + + // write protected interface + fp.print("protected:\n"); + for (iter = m_structList.begin(); iter != m_structList.end(); ++iter) + { + const TemplateData *structData = *iter; + NOT_NULL(structData); + const char *structName = structData->m_name.c_str(); + fp.print("\tclass _%s : public ", structName); + if (isWritingForCompiler()) + fp.print("%s\n", COMPILER_ROOT_TEMPLATE_NAME); + else + fp.print("%s\n", ROOT_TEMPLATE_NAME); + fp.print("\t{\n"); + // make the template class a friend + fp.print("\t\tfriend class %s;\n", getName().c_str()); + // write tag definition + fp.print("\tpublic:\n"); + fp.print("\t\tenum\n"); + fp.print("\t\t{\n"); + fp.print("\t\t\t_%s_tag = %s\n", structName, structData->m_structId.tagString.c_str()); + fp.print("\t\t};\n"); + fp.print("\n"); + // write constructor/destructor + fp.print("\tpublic:\n"); + fp.print("\t\t _%s(const std::string & filename);\n", structName); + fp.print("\t\tvirtual ~_%s();\n", structName); + fp.print("\n"); + fp.print("\tvirtual Tag getId(void) const;\n"); + fp.print("\n"); + // write functions and data + structData->writeHeaderParams(fp); + // write registration data + fp.print("\tprivate:\n"); + fp.print("\t\tstatic void registerMe(void);\n"); + fp.print("\t\tstatic ObjectTemplate * create(const std::string & filename);\n"); + // write private copy constructors + fp.print("\tprivate:\n"); + fp.print("\t\t_%s(const _%s &);\n", structName, structName); + fp.print("\t\t_%s & operator =(const _%s &);\n", structName, structName); + fp.print("\t};\n"); + fp.print("\tfriend class %s;\n\n", structData->getName().c_str()); + } +} // TemplateData::writeHeaderStructs + +/** + * Writes out the template's parameters for a header. + * + * @param fp the file to write to + */ +void TemplateData::writeHeaderMethods(File &fp) const +{ +std::string upperName; + + fp.print("public:\n"); + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_COMMENT || param.type == TYPE_NONE) + continue; + + // make a version of the parameter name with the first character upper case + upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + for (int i = 0; i < 3; ++i) + { + switch (param.type) + { + case TYPE_INTEGER: + case TYPE_FLOAT: + case TYPE_BOOL: + case TYPE_STRING: + case TYPE_FILENAME: + case TYPE_STRINGID: + case TYPE_TRIGGER_VOLUME: + fp.print("\t%s get%s%s(", PaddedDataMethodNames[param.type], + upperName.c_str(), MinMaxNames[i]); + break; + case TYPE_TEMPLATE: + fp.print("\tconst %s%s * get%s(", + EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(param.extendedName).c_str(), + upperName.c_str()); + break; + case TYPE_ENUM: + fp.print("\t%s get%s(", param.extendedName.c_str(), + upperName.c_str()); + break; + case TYPE_VECTOR: + fp.print("\tvoid get%s(", upperName.c_str()); + break; + case TYPE_DYNAMIC_VAR: + fp.print("\t%s get%s(", PaddedDataMethodNames[param.type], + upperName.c_str()); + break; + case TYPE_STRUCT: + fp.print("\tvoid get%s%s(", upperName.c_str(), + MinMaxNames[i]); + break; + default: + break; + } + writeMethodParams(fp, param, true); + fp.print(") const;\n"); + if (!HasMinMax[param.type]) + break; + } + + if (param.list_type == LIST_LIST) + { + fp.print("\tsize_t get%sCount(void) const;\n", + upperName.c_str()); + } + } + fp.print("\n"); + fp.print("#ifdef _DEBUG\n"); + fp.print("public:\n"); + fp.print("\t// special code used by datalint\n"); + fp.print("\tvirtual void testValues(void) const;\n"); + fp.print("#endif\n"); + fp.print("\n"); + fp.print("protected:\n"); + fp.print("\tvirtual void load(Iff &file);\n"); + fp.print("\n"); +} // TemplateData::writeHeaderMethods + +/** + * Writes out the template's parameters for a header. + * + * @param fp the file to write to + */ +void TemplateData::writeCompilerHeaderMethods(File &fp) const +{ +std::string upperName; + + DEBUG_FATAL(!m_writeForCompilerFlag, ("write for compiler not enabled")); + + fp.print("public:\n"); + fp.print("\tvirtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0);\n"); + fp.print("\tvirtual void initStructParamOT(StructParamOT ¶m, const char *name);\n"); + fp.print("\tvirtual void setAsEmptyList(const char *name);\n"); +// fp.print("\tvirtual bool isLoaded(const char *name, int index) const;\n"); + fp.print("\tvirtual void setAppend(const char *name);\n"); + fp.print("\tvirtual bool isAppend(const char *name) const;\n"); + fp.print("\tvirtual int getListLength(const char *name) const;\n"); + fp.print("\n"); + fp.print("protected:\n"); + fp.print("\tvirtual void load(Iff &file);\n"); + fp.print("\tvirtual void save(Iff &file);\n"); + fp.print("\n"); +} // TemplateData::writeCompilerHeaderMethods + +/** + * Writes out the template's parameters for a header. + * + * @param fp the file to write to + */ +void TemplateData::writeHeaderVariables(File &fp) const +{ + fp.print("private:\n"); + writeHeaderVariables(fp, m_parameters, "m_"); +} // TemplateData::writeHeaderVariables + +/** + * Writes out a list of parameters for a header. + * + * @param fp the file to write to + * @param list the list to write + * @param namePrefix prefix to add to a parameter name + */ +void TemplateData::writeHeaderVariables(File &fp, const ParameterList &list, + const char *namePrefix) const +{ +// since comments are attached to the parameter following them, we need to keep +// a backlog of comments until we get to a parameter +typedef std::vector< const std::string * > CommentList; +CommentList commentList; +ParameterList::const_iterator iter; + + NOT_NULL(namePrefix); + + std::string extraTab = ""; + if (namePrefix[0] == '\0') + extraTab = "\t"; + + const char * const * variableNames = DataVariableNames; + if (m_writeForCompilerFlag) + variableNames = CompilerDataVariableNames; + + for (iter = list.begin(); iter != list.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type != TYPE_COMMENT) + { + // write out any queued comments + CommentList::const_iterator citer; + for (citer = commentList.begin(); citer != commentList.end(); ++citer) + fp.print("\t%s\n", (*citer)->c_str()); + commentList.clear(); + } + switch (param.type) + { + case TYPE_COMMENT: + // queue the comment until we reach a parameter + commentList.push_back(¶m.description); + break; + case TYPE_INTEGER: + case TYPE_ENUM: + case TYPE_FLOAT: + case TYPE_BOOL: + case TYPE_STRING: + case TYPE_STRINGID: + case TYPE_FILENAME: + case TYPE_VECTOR: + case TYPE_DYNAMIC_VAR: + case TYPE_TEMPLATE: + case TYPE_STRUCT: + case TYPE_TRIGGER_VOLUME: + switch (param.list_type) + { + case LIST_NONE: + fp.print("\t%s%s %s%s;", extraTab.c_str(), + variableNames[param.type], namePrefix, + param.name.c_str()); + break; + case LIST_LIST: + fp.print("\t%sstdvector<%s *>::fwd %s%s;", extraTab.c_str(), + variableNames[param.type], namePrefix, + param.name.c_str()); + break; + case LIST_INT_ARRAY: + case LIST_ENUM_ARRAY: + fp.print("\t%s%s %s%s[%d];", extraTab.c_str(), + variableNames[param.type], namePrefix, + param.name.c_str(), param.list_size); + break; + default: + break; + } + break; + case TYPE_NONE: + default: + break; + } + if (param.type != TYPE_COMMENT) + { + if (param.description.size() != 0) + fp.print("\t\t// %s", param.description.c_str()); + fp.print("\n"); + } + + // add an "isloaded" flag for list parameters to see if we need to go + // down in the hierarchy to get the data + switch (param.type) + { + case TYPE_INTEGER: + case TYPE_FLOAT: + case TYPE_BOOL: + case TYPE_STRING: + case TYPE_STRINGID: + case TYPE_FILENAME: + case TYPE_VECTOR: + case TYPE_DYNAMIC_VAR: + case TYPE_ENUM: + case TYPE_TEMPLATE: + case TYPE_STRUCT: + case TYPE_TRIGGER_VOLUME: + if (param.list_type == LIST_LIST) + { + fp.print("\t%sbool m_%sLoaded;\n", extraTab.c_str(), + param.name.c_str()); + fp.print("\t%sbool m_%sAppend;\n", extraTab.c_str(), + param.name.c_str()); + } + break; + case TYPE_NONE: + case TYPE_COMMENT: + default: + break; + } + } +} // TemplateData::writeHeaderVariables + +/** + * Writes the public definition for a structure. + * + * @param fp the file to write to + */ +void TemplateData::writeStructDefinition(File &fp) const +{ +// since comments are attached to the parameter following them, we need to keep +// a backlog of comments until we get to a parameter +typedef std::vector< const std::string * > CommentList; +CommentList commentList; +ParameterList::const_iterator iter; + + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type != TYPE_COMMENT) + { + // write out any queued comments + CommentList::const_iterator citer; + for (citer = commentList.begin(); citer != commentList.end(); ++citer) + fp.print("\t\t%s\n", (*citer)->c_str()); + commentList.clear(); + } + else + { + commentList.push_back(¶m.description); + continue; + } + + switch (param.list_type) + { + case LIST_NONE: + case LIST_INT_ARRAY: + case LIST_ENUM_ARRAY: + if (PaddedDataStructNames[param.type] != NULL) + { + fp.print("\t\t%s %s", PaddedDataStructNames[param.type], + param.name.c_str()); + } + else if (param.type == TYPE_ENUM) + { + fp.print("\t\tenum %s %s", param.extendedName.c_str(), + param.name.c_str()); + } + else if (param.type == TYPE_STRUCT) + { + fp.print("\t\t%s %s", param.extendedName.c_str(), + param.name.c_str()); + } + if (param.list_type != LIST_NONE) + fp.print("[%d]", param.list_size); + fp.print(";\n"); + break; + case LIST_LIST: + fp.print("\t\tstdvector<"); + if (UnpaddedDataStructNames[param.type] != NULL) + fp.print("%s", UnpaddedDataStructNames[param.type]); + else if (param.type == TYPE_ENUM) + fp.print("enum %s", param.extendedName.c_str()); + else if (param.type == TYPE_STRUCT) + fp.print("%s", param.extendedName.c_str()); + fp.print(">::fwd %s;\n", param.name.c_str()); + break; + default: + break; + } + } +} // TemplateData::writeStructDefinition + +/** + * Writes #includes for any templates used by this template. + * + * @param fp the file to write to + */ +void TemplateData::writeSourceTemplateIncludes(File &fp) const +{ +std::set names; + + fp.print("%s\n", TDF_TEMPLATE_REFS_BEGIN); + + getTemplateNames(names); + + if (names.size() != 0) + { + std::set::const_iterator iter; + for (iter = names.begin(); iter != names.end(); ++iter) + { + fp.print("#include \"%s%s.h\"\n", EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(*iter).c_str()); + } + } + + fp.print("%s\n", TDF_TEMPLATE_REFS_END); +} // TemplateData::writeSourceTemplateIncludes + +/** + * Writes constructor code to initialize the list loaded flags to false. + * + * @param fp the file to write to + */ +void TemplateData::writeSourceLoadedFlagInit(File &fp) const +{ +ParameterList::const_iterator iter; + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_INIT_BEGIN); + + fp.print("\t: %s(filename)\n", getBaseName().c_str()); + + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.list_type != LIST_LIST) + continue; + + fp.print("\t,"); + fp.print("m_%sLoaded(false)\n", param.name.c_str()); + fp.print("\t,m_%sAppend(false)\n", param.name.c_str()); + } + if (m_templateParent == NULL && !isWritingForCompiler()) + { + fp.print("\t,"); + fp.print("m_versionOk(true)\n"); + } + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_INIT_END); +} // TemplateData::writeSourceLoadedFlagInit + +/** + * Writes constructor, destructor for structures (private). + * + * @param fp the file to write to + */ +void TemplateData::writeSourceStructStart(File &fp) const +{ + if (m_templateParent == NULL) + return; + + const std::string & templateNameString = getName(); + const char *name = templateNameString.c_str(); + std::string::size_type colonPos = getName().rfind(':') + 1; + + fp.print("\n"); + fp.print("//=============================================================================\n"); + fp.print("// class %s\n", name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Class constructor.\n"); + fp.print(" */\n"); + fp.print("%s::%s(const std::string & filename)\n", name, &name[colonPos]); + writeSourceLoadedFlagInit(fp); + fp.print("{\n"); + fp.print("} // %s::%s\n", name, &name[colonPos]); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Class destructor.\n"); + fp.print(" */\n"); + fp.print("%s::~%s()\n", name, &name[colonPos]); + fp.print("{\n"); + writeSourceCleanup(fp); + fp.print("} // %s::~%s\n", name, &name[colonPos]); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Static function used to register this template.\n"); + fp.print(" */\n"); + fp.print("void %s::registerMe(void)\n", name); + fp.print("{\n"); + fp.print("\tObjectTemplateList::registerTemplate(_%s_tag, create);\n", m_name.c_str()); + fp.print("} // %s::registerMe\n", name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Creates a %s template.\n", name); + fp.print(" *\n"); + fp.print(" * @return a new instance of the template\n"); + fp.print(" */\n"); + fp.print("ObjectTemplate * %s::create(const std::string & filename)\n", name); + fp.print("{\n"); + fp.print("\treturn new %s(filename);\n", name); + fp.print("} // %s::create\n\n", name); + fp.print("/**\n"); + fp.print(" * Returns the template id.\n"); + fp.print(" *\n"); + fp.print(" * @return the template id\n"); + fp.print(" */\n"); + fp.print("Tag %s::getId(void) const\n", name); + fp.print("{\n"); + fp.print("\treturn _%s_tag;\n", m_name.c_str()); + fp.print("} // %s::getId\n", name); + fp.print("\n"); +} // TemplateData::writeSourceStructStart + +/** + * Writes constructor, destructor for structures (public). + * + * @param fp the file to write to + * @param name the structure name + */ +void TemplateData::writeSourceStructStart(File &fp, const std::string &name) const +{ +ParameterList::const_iterator iter; + + if (m_templateParent == NULL || !m_hasTemplateParam) + return; + + std::string className = m_templateParent->getName() + "::" + name; + + fp.print("\n"); + fp.print("//=============================================================================\n"); + fp.print("// struct %s\n", className.c_str()); + fp.print("\n"); + + // write the default constructor + + fp.print("/**\n"); + fp.print(" * Struct constructor.\n"); + fp.print(" */\n"); + fp.print("%s::%s(void)\n", className.c_str(), name.c_str()); + fp.print("{\n"); + + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type != TYPE_TEMPLATE) + continue; + + const char *pname = param.name.c_str(); + switch (param.list_type) + { + case LIST_NONE: + fp.print("\t%s = NULL;\n", pname); + break; + case LIST_INT_ARRAY: + fp.print("\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t{\n"); + fp.print("\t\t%s[i] = NULL;\n", pname); + fp.print("\t}\n"); + break; + case LIST_ENUM_ARRAY: + fp.print("\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t{\n"); + fp.print("\t\t%s[static_cast<%s>(i)] = NULL;\n", pname, + param.enum_list_name.c_str()); + fp.print("\t}\n"); + break; + case LIST_LIST: + default: + break; + } + } + fp.print("} // %s::%s()\n", className.c_str(), name.c_str()); + fp.print("\n"); + + // write the copy constructor + + fp.print("/**\n"); + fp.print(" * Struct copy constructor.\n"); + fp.print(" */\n"); + fp.print("%s::%s(const %s & source) :\n", className.c_str(), name.c_str(), + className.c_str()); + bool firstParam = true; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + const char *pname = param.name.c_str(); + if (!firstParam) + fp.print(",\n"); + fp.print("\t%s(source.%s)", pname, pname); + firstParam = false; + } + fp.print("\n{\n"); + + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type != TYPE_TEMPLATE) + continue; + + const char *pname = param.name.c_str(); + switch (param.list_type) + { + case LIST_NONE: + fp.print("\tif (%s != NULL)\n", pname); + fp.print("\t\tconst_cast(%s)->addReference();\n", + pname); + break; + case LIST_INT_ARRAY: + fp.print("\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t{\n"); + fp.print("\t\tif (%s[i] != NULL)\n", pname); + fp.print("\t\t\tconst_cast(%s[i])->addReference" + "();\n", pname); + fp.print("\t}\n"); + break; + case LIST_ENUM_ARRAY: + fp.print("\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t{\n"); + fp.print("\t\tif (%s[static_cast<%s>(i)] != NULL)\n", pname, + param.enum_list_name.c_str()); + fp.print("\t\t\tconst_cast(%s[static_cast<%s>" + "(i)])->addReference();\n", pname, param.enum_list_name.c_str()); + fp.print("\t}\n"); + break; + case LIST_LIST: + default: + break; + } + } + fp.print("} // %s::%s(const %s &)\n", className.c_str(), name.c_str(), + className.c_str()); + fp.print("\n"); + + // write the destructor + + fp.print("/**\n"); + fp.print(" * Struct destructor.\n"); + fp.print(" */\n"); + fp.print("%s::~%s()\n", className.c_str(), name.c_str()); + fp.print("{\n"); + + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type != TYPE_TEMPLATE) + continue; + + const char *pname = param.name.c_str(); + switch (param.list_type) + { + case LIST_NONE: + fp.print("\tif (%s != NULL)\n", pname); + fp.print("\t{\n"); + fp.print("\t\t%s->releaseReference();\n", pname); + fp.print("\t\t%s = NULL;\n", pname); + fp.print("\t}\n"); + break; + case LIST_LIST: + case LIST_INT_ARRAY: + if (param.list_type == LIST_LIST) + { + fp.print("\tint count = %s.size();\n", pname); + fp.print("\tfor (int i = 0; i < count; ++i)\n"); + } + else + fp.print("\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t{\n"); + fp.print("\t\tif (%s[i] != NULL)\n", pname); + fp.print("\t\t{\n"); + fp.print("\t\t\t%s[i]->releaseReference();\n", + pname); + fp.print("\t\t\t%s[i] = NULL;\n", pname); + fp.print("\t\t}\n"); + fp.print("\t}\n"); + break; + case LIST_ENUM_ARRAY: + fp.print("\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t{\n"); + fp.print("\t\tif (%s[static_cast<%s>(i)] != NULL)\n", pname, + param.enum_list_name.c_str()); + fp.print("\t\t{\n"); + fp.print("\t\t\t%s[static_cast<%s>(i)]->releaseReference();\n", + pname, param.enum_list_name.c_str()); + fp.print("\t\t\t%s[static_cast<%s>(i)] = NULL;\n", pname, + param.enum_list_name.c_str()); + fp.print("\t\t}\n"); + fp.print("\t}\n"); + break; + default: + break; + } + } + fp.print("} // %s::~%s\n", className.c_str(), name.c_str()); + fp.print("\n"); + + // write a dummy operator = for windows + fp.print("#ifdef WIN32\n"); + fp.print("/**\n"); + fp.print(" * Struct destructor.\n"); + fp.print(" */\n"); + fp.print("%s & %s::operator =(const %s &)\n", className.c_str(), + className.c_str(), className.c_str()); + fp.print("{\n"); + fp.print("\tDEBUG_FATAL(true, (\"operator = should not be called for template " + "structures!\"));\n"); + fp.print("\treturn *this;\n"); + fp.print("} // %s::operator =\n", className.c_str()); + fp.print("#endif\n"); + fp.print("\n"); +} // TemplateData::writeSourceStructStart + +/** + * Writes the source code to load the template data. + * + * @param fp the file to write to + * + * @return 0 on success, -1 on fail + */ +int TemplateData::writeSourceMethods(File &fp) const +{ +int result; + + if (m_writeForCompilerFlag) + { + writeCompilerSourceMethods(fp); + return 0; + } + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_BEGIN); + + result = writeSourceGetData(fp); + if (result != 0) + return result; + writeSourceTestData(fp); + writeSourceReadIff(fp); + + // write methods for any structures + StructMap::const_iterator iter; + for (iter = m_structMap.begin(); iter != m_structMap.end(); ++iter) + { + TemplateData *subStruct = (*iter).second; + NOT_NULL(subStruct); + if (subStruct->m_hasTemplateParam) + subStruct->writeSourceStructStart(fp, (*iter).first); + subStruct->writeSourceStructStart(fp); + result = subStruct->writeSourceMethods(fp); + if (result != 0) + return result; + } + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_END); + return 0; +} // TemplateData::writeSourceMethods + +/** + * Writes the source code to load and save the template data for use in the + * template compiler. + * + * @param fp the file to write to + */ +void TemplateData::writeCompilerSourceMethods(File &fp) const +{ + DEBUG_FATAL(!m_writeForCompilerFlag, ("write for compiler not enabled")); + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_BEGIN); + + writeCompilerSourceAccessMethods(fp); + writeSourceReadIff(fp); + writeSourceWriteIff(fp); + + // write methods for any structures + StructMap::const_iterator iter; + for (iter = m_structMap.begin(); iter != m_structMap.end(); ++iter) + { + TemplateData *subStruct = (*iter).second; + NOT_NULL(subStruct); + subStruct->writeSourceStructStart(fp); + subStruct->writeCompilerSourceMethods(fp); + } + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_END); +} // TemplateData::writeCompilerSourceMethods + +/** + * Writes code to retrieve a parameter from a base template, or return the + * default value if the template is out of date. + * + * @param fp the file to write to + * @param param the parameter to get + * @param minMaxString string to use for min/max getters + */ +void TemplateData::writeSourceReturnBaseValue(File &fp, const Parameter ¶m, + const std::string & minMaxString) const +{ + const char * realMinMaxString; + if (HasMinMax[param.type]) + realMinMaxString = minMaxString.c_str(); + else + realMinMaxString = ""; + + std::string upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + std::string indexString; + if (param.type == TYPE_DYNAMIC_VAR) + { + if (param.list_type == LIST_NONE) + indexString = "list"; + else + indexString = "list, index"; + } + else if (param.type == TYPE_STRUCT) + { + if (param.list_type == LIST_NONE) + indexString = "data"; + else + indexString = "data, index"; + } + else if (param.list_type != LIST_NONE) + indexString = "index"; + if (m_templateParent != NULL) + { + if (!indexString.empty()) + indexString += ", "; + indexString += "versionOk"; + } + + // write code to check if a paramter is loaded, and if not call the base + // template's function + if (param.list_type == LIST_NONE) + fp.print("\tif (!m_%s.isLoaded())\n", param.name.c_str()); + else if (param.list_type == LIST_LIST) + fp.print("\tif (!m_%sLoaded)\n", param.name.c_str()); + else + fp.print("\tif (!m_%s[index].isLoaded())\n", param.name.c_str()); + + fp.print("\t{\n"); + if (DefaultDataReturnValue[param.type] != NULL) + { + fp.print("\t\tif (ms_allowDefaultTemplateParams && " + "/*!%s &&*/ base == NULL)\n", m_templateParent == NULL ? "m_versionOk" : + "versionOk"); + fp.print("\t\t{\n"); + fp.print("\t\t\tDEBUG_WARNING(true, (\"Returning default value for " + "missing parameter %s in template %%s\", DataResource::getName()));\n", + param.name.c_str()); + if (param.type == TYPE_ENUM) + { + fp.print("\t\t\treturn static_cast<%s>%s;\n", + param.extendedName.c_str(), DefaultDataReturnValue[param.type]); + } + else + fp.print("\t\t\treturn %s;\n", DefaultDataReturnValue[param.type]); + fp.print("\t\t}\n"); + fp.print("\t\telse\n"); + fp.print("\t\t{\n"); + fp.print("\t\t\tDEBUG_FATAL(base == NULL, (\"Template parameter %s has " + "not been defined in template %%s!\", DataResource::getName()));\n", + param.name.c_str()); + if (DefaultDataReturnValue[param.type][0] != '\0') + { + fp.print("\t\t\treturn base->get%s%s(%s);\n", upperName.c_str(), + realMinMaxString, indexString.c_str()); + } + else + { + fp.print("\t\t\tbase->get%s%s(%s);\n", upperName.c_str(), + realMinMaxString, indexString.c_str()); + fp.print("\t\t\treturn;\n"); + } + fp.print("\t\t}\n"); + } + else + { + fp.print("\t\tNOT_NULL(base);\n"); + fp.print("\t\treturn base->get%s%s(%s);\n", upperName.c_str(), + realMinMaxString, indexString.c_str()); + } + fp.print("\t}\n\n"); + + // if the param is a list and we are appending, check the index to see if + // we need to get the base value instead of ours + if (param.list_type == LIST_LIST) + { + fp.print("\tif (m_%sAppend && base != NULL)\n", param.name.c_str()); + fp.print("\t{\n"); + fp.print("\t\tint baseCount = base->get%sCount();\n", + upperName.c_str()); + fp.print("\t\tif (index < baseCount)\n"); + if (DefaultDataReturnValue[param.type][0] != '\0') + { + fp.print("\t\t\treturn base->get%s%s(%s);\n", upperName.c_str(), + realMinMaxString, indexString.c_str()); + } + else + { + fp.print("\t\t\t{\n"); + fp.print("\t\t\t\tbase->get%s%s(%s);\n", upperName.c_str(), + realMinMaxString, indexString.c_str()); + fp.print("\t\t\t\treturn;\n"); + fp.print("\t\t\t}\n"); + } + fp.print("\t\tindex -= baseCount;\n"); + fp.print("\t}\n\n"); + } +} // TemplateData::writeSourceReturnBaseValue + +/** + * Writes functions to get parameters. + * + * @param fp the file to write to + * + * @return 0 on success, -1 on fail + */ +int TemplateData::writeSourceGetData(File &fp) const +{ +int result; + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + switch (param.type) + { + case TYPE_INTEGER: + case TYPE_FLOAT: + case TYPE_BOOL: + case TYPE_STRING: + case TYPE_STRINGID: + case TYPE_FILENAME: + case TYPE_TRIGGER_VOLUME: + writeSourceGetGeneric(fp, param); + break; + case TYPE_VECTOR: + writeSourceGetVector(fp, param); + break; + case TYPE_DYNAMIC_VAR: + writeSourceGetDynamicVariable(fp, param); + break; + case TYPE_TEMPLATE: + writeSourceGetTemplate(fp, param); + break; + case TYPE_ENUM: + writeSourceGetEnum(fp, param); + break; + case TYPE_STRUCT: + result = writeSourceGetStruct(fp, param); + if (result != 0) + return result; + break; + default: + break; + } + if (param.list_type == LIST_LIST) + { + // write get count function + const std::string & templateNameString = getName(); + const char *templateName = templateNameString.c_str(); + const char *pname = param.name.c_str(); + std::string upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + fp.print("size_t %s::get%sCount(void) const\n", + templateName, upperName.c_str()); + fp.print("{\n"); + fp.print("\tif (!m_%sLoaded)\n", pname); + fp.print("\t{\n"); + fp.print("\t\tif (m_baseData == NULL)\n"); + fp.print("\t\t\treturn 0;\n"); + fp.print("\t\tconst %s * base = dynamic_cast" + "(m_baseData);\n", templateName, templateName); + fp.print("\t\tDEBUG_FATAL(base == NULL, (\"base template wrong " + "type\"));\n"); + fp.print("\t\treturn base->get%sCount();\n", upperName.c_str()); + fp.print("\t}\n\n"); + fp.print("\tsize_t count = m_%s.size();\n\n", pname); + fp.print("\t// if we are extending our base template, add it's count\n"); + fp.print("\tif (m_%sAppend && m_baseData != NULL)\n", pname); + fp.print("\t{\n"); + fp.print("\t\tconst %s * base = dynamic_cast(m_baseData);\n", + templateName, templateName); + fp.print("\t\tif (base != NULL)\n"); + fp.print("\t\t\tcount += base->get%sCount();\n", upperName.c_str()); + fp.print("\t}\n\n"); + fp.print("\treturn count;\n"); + fp.print("}\t// %s::get%sCount\n", templateName, upperName.c_str()); + fp.print("\n"); + } + } + return 0; +} // TemplateData::writeSourceGetData + +/** + * Writes code used by datalint to test template values. + * + * @param fp the file to write to + */ +void TemplateData::writeSourceTestData(File &fp) const +{ + const std::string & templateNameString = getName(); + const char *templateName = templateNameString.c_str(); + + fp.print("#ifdef _DEBUG\n"); + fp.print("/**\n"); + fp.print(" * Special function used by datalint. Checks for duplicate values " + "in base and derived templates.\n"); + fp.print(" */\n"); + fp.print("void %s::testValues(void) const\n", templateName); + fp.print("{\n"); + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.list_type != LIST_NONE) + { + continue; + } + + std::string upperName(param.name); + upperName[0] = static_cast(toupper(upperName[0])); + + switch (param.type) + { + case TYPE_INTEGER: + case TYPE_FLOAT: + fp.print("\tIGNORE_RETURN(get%sMin(true));\n", upperName.c_str()); + fp.print("\tIGNORE_RETURN(get%sMax(true));\n", upperName.c_str()); + break; + case TYPE_BOOL: + case TYPE_STRING: + case TYPE_STRINGID: + case TYPE_FILENAME: + case TYPE_TRIGGER_VOLUME: + case TYPE_ENUM: + fp.print("\tIGNORE_RETURN(get%s(true));\n", upperName.c_str()); + break; + case TYPE_STRUCT: + break; + default: + break; + } + } + + if (m_fileParent != NULL) + { + // check the base class + if (!getBaseName().empty() && getBaseName() != ROOT_TEMPLATE_NAME) + { + fp.print("\t%s::testValues();\n", getBaseName().c_str()); + } + } + + fp.print("}\t// %s::testValues\n", templateName); + fp.print("#endif\n\n"); +} // TemplateData::writeSourceTestData + +/** + * Writes functions to get a parameter that doesn't have a special access mode. + * + * @param fp the file to write to + * @param param the parameter to get + */ +void TemplateData::writeSourceGetGeneric(File &fp, const Parameter ¶m) const +{ + const std::string & templateNameString = getName(); + const char *templateName = templateNameString.c_str(); + + // make a version of the parameter name with the first character upper case + const char *pname = param.name.c_str(); + std::string upperName(param.name); + upperName[0] = static_cast(toupper(upperName[0])); + + for (int i = 0; i < 3; ++i) + { + fp.print("%s %s::get%s%s(", UnpaddedDataMethodNames[param.type], + templateName, upperName.c_str(), MinMaxNames[i]); + + writeMethodParams(fp, param, false); + fp.print(") const\n"); + fp.print("{\n"); + + if (param.list_type == LIST_NONE) + { + // set up var to receive the test base value + fp.print("#ifdef _DEBUG\n"); + fp.print("%s testDataValue = %s;\n", UnpaddedDataStructNames[param.type], + DefaultDataReturnValue[param.type]); + fp.print("#else\n"); + fp.print("UNREF(testData);\n"); + fp.print("#endif\n\n"); + } + + fp.print("\tconst %s * base = NULL;\n", templateName); + fp.print("\tif (m_baseData != NULL)\n"); + fp.print("\t{\n"); + fp.print("\t\tbase = dynamic_cast(m_baseData);\n", + templateName); +// fp.print("\t\tDEBUG_FATAL(base == NULL, (\"base template wrong type\"));\n"); + + if (param.list_type == LIST_NONE) + { + // get the test base value + fp.print("#ifdef _DEBUG\n"); + fp.print("\t\tif (testData && base != NULL)\n"); + fp.print("\t\t\ttestDataValue = base->get%s%s(true);\n", upperName.c_str(), + MinMaxNames[i]); + fp.print("#endif\n"); + } + + fp.print("\t}\n\n"); + + const char *arrayIndex = ""; + std::string indexName = m_templateParent == NULL ? "" : "versionOk"; + const char *access = "."; + if (param.list_type == LIST_NONE) + { + writeSourceReturnBaseValue(fp, param, MinMaxNames[i]); + } + else + { + arrayIndex = "[index]"; + if (!indexName.empty()) + indexName = ", " + indexName; + indexName = "index" + indexName; + if (param.list_type == LIST_LIST) + { + access = "->"; + writeSourceReturnBaseValue(fp, param, MinMaxNames[i]); + fp.print("\tDEBUG_FATAL(index < 0 || static_cast(index) " + ">= m_%s.size(), (\"template param index out of range\"));\n", + pname); + } + else + { + fp.print("\tDEBUG_FATAL(index < 0 || index >= %d, (\"" + "template param index out of range\"));\n", param.list_size); + writeSourceReturnBaseValue(fp, param, MinMaxNames[i]); + } + } + fp.print("\t%s value = m_%s%s%sget%sValue();\n", + UnpaddedDataMethodNames[param.type], pname, arrayIndex, access, + MinMaxNames[i]); + if ((param.type == TYPE_INTEGER || param.type == TYPE_FLOAT) && + param.list_type != LIST_LIST) + { + fp.print("\tchar delta = m_%s%s%sgetDeltaType();\n", pname, arrayIndex, + access); + fp.print("\tif (delta == '+' || delta == '-' || delta == '_' || delta == '=')\n"); + fp.print("\t{\n"); + fp.print("\t\t%s baseValue = 0;\n", UnpaddedDataMethodNames[param.type]); + fp.print("\t\tif (m_baseData != NULL)\n"); + fp.print("\t\t{\n"); + fp.print("\t\t\tif (base != NULL)\n"); + fp.print("\t\t\t\tbaseValue = base->get%s%s(%s);\n", upperName.c_str(), + MinMaxNames[i], indexName.c_str()); + fp.print("\t\t\telse if (ms_allowDefaultTemplateParams)\n"); + fp.print("\t\t\t\tDEBUG_WARNING(true, (\"No base template for delta, using 0\"));\n"); + fp.print("\t\t\telse\n"); + fp.print("\t\t\t\tNOT_NULL(base);\n"); + fp.print("\t\t}\n"); + fp.print("\t\tif (delta == '+')\n"); + fp.print("\t\t\tvalue = baseValue + value;\n"); + fp.print("\t\telse if (delta == '-')\n"); + fp.print("\t\t\tvalue = baseValue - value;\n"); + fp.print("\t\telse if (delta == '=')\n"); + fp.print("\t\t\tvalue = baseValue + static_cast<%s>(baseValue * (value " + "/ 100.0f));\n", UnpaddedDataMethodNames[param.type]); + fp.print("\t\telse if (delta == '_')\n"); + fp.print("\t\t\tvalue = baseValue - static_cast<%s>(baseValue * (value " + "/ 100.0f));\n", UnpaddedDataMethodNames[param.type]); + fp.print("\t}\n"); + } + + if (param.list_type == LIST_NONE) + { + // check the return value vs the base value, and warn if the same + fp.print("#ifdef _DEBUG\n"); + fp.print("\tif (testData && base != NULL)\n"); + fp.print("\t{\n"); +// fp.print("\t\tif (testDataValue == value)\n"); +// fp.print("\t\t\tDEBUG_WARNING(true, (\"Template %%s, parameter %s is " +// "returning same value as base template.\", DataResource::getName()));" +// "\n", pname); + fp.print("\t}\n"); + fp.print("#endif\n\n"); + } + + fp.print("\treturn value;\n"); + fp.print("}\t// %s::get%s%s\n", templateName, upperName.c_str(), MinMaxNames[i]); + fp.print("\n"); + + if (!HasMinMax[param.type]) + break; + } +} // TemplateData::writeSourceGetGeneric + +/** + * Writes functions to get Vector parameters. + * + * @param fp the file to write to + * @param param the parameter to get + */ +void TemplateData::writeSourceGetVector(File &fp, const Parameter ¶m) const +{ + const std::string & templateNameString = getName(); + const char *templateName = templateNameString.c_str(); + + // make a version of the parameter name with the first character upper case + const char *pname = param.name.c_str(); + std::string upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + fp.print("void %s::get%s(", templateName, + upperName.c_str()); + + writeMethodParams(fp, param, false); + fp.print(") const\n"); + fp.print("{\n"); + + fp.print("\tconst %s * base = NULL;\n", templateName); + fp.print("\tif (m_baseData != NULL)\n"); + fp.print("\t{\n"); + fp.print("\t\tbase = dynamic_cast(m_baseData);\n", + templateName); +// fp.print("\t\tDEBUG_FATAL(base == NULL, (\"base template wrong type\"));\n"); + fp.print("\t}\n\n"); + + const char *arrayIndex = ""; + const char *access = "."; + if (param.list_type == LIST_NONE) + { + writeSourceReturnBaseValue(fp, param, ""); + } + else + { + arrayIndex = "[index]"; + if (param.list_type == LIST_LIST) + { + access = "->"; + writeSourceReturnBaseValue(fp, param, ""); + fp.print("\tDEBUG_FATAL(index < 0 || static_cast(index) " + ">= m_%s.size(), (\"template param index out of range\"));\n", + pname); + } + else + { + fp.print("\tDEBUG_FATAL(index < 0 || index >= %d, (\"" + "template param index out of range\"));\n", param.list_size); + writeSourceReturnBaseValue(fp, param, ""); + } + } + + fp.print("\tconst VectorParamData &myPos = m_%s%s%sgetValue();\n", pname, + arrayIndex, access); + fp.print("\tmyPos.adjustVector(pos);\n"); + fp.print("}\t// %s::get%s\n", templateName, upperName.c_str()); + fp.print("\n"); +} // TemplateData::writeSourceGetVector + +/** + * Writes functions to get DynamicVariable parameters. + * + * @param fp the file to write to + * @param param the parameter to get + */ +void TemplateData::writeSourceGetDynamicVariable(File &fp, const Parameter ¶m) const +{ + const std::string & templateNameString = getName(); + const char *templateName = templateNameString.c_str(); + + // make a version of the parameter name with the first character upper case + const char *pname = param.name.c_str(); + std::string upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + fp.print("void %s::get%s(", templateName, upperName.c_str()); + + writeMethodParams(fp, param, false); + fp.print(") const\n"); + fp.print("{\n"); + + fp.print("\tconst %s * base = NULL;\n", templateName); + fp.print("\tif (m_baseData != NULL)\n"); + fp.print("\t{\n"); + fp.print("\t\tbase = dynamic_cast(m_baseData);\n", + templateName); +// fp.print("\t\tDEBUG_FATAL(base == NULL, (\"base template wrong type\"));\n"); + fp.print("\t}\n\n"); + + if (param.list_type == LIST_NONE) + { + writeSourceReturnBaseValue(fp, param, ""); + fp.print("\tif (m_%s.isExtendingBaseList() && base != NULL)\n", pname); + fp.print("\t\tbase->get%s(list);\n", upperName.c_str()); + fp.print("\tm_%s.getDynamicVariableList(list);\n", pname); + } + else + { + fp.print("\tDEBUG_FATAL(index < 0 || index >= %d, (\"" + "template param index out of range\"));\n", param.list_size); + writeSourceReturnBaseValue(fp, param, ""); + fp.print("\tif (m_%s[index].isExtendingBaseList() && base != NULL)\n", pname); + fp.print("\t\tbase->get%s(list, index);\n", upperName.c_str()); + fp.print("\tm_%s[index].getDynamicVariableList(list);\n", pname); + } + fp.print("}\t// %s::get%s\n", templateName, upperName.c_str()); + fp.print("\n"); +} // TemplateData::writeSourceGetDynamicVariable + +/** + * Writes functions to get Template parameters. + * + * @param fp the file to write to + * @param param the parameter to get + */ +void TemplateData::writeSourceGetTemplate(File &fp, const Parameter ¶m) const +{ + const std::string & templateNameString = getName(); + const char *templateName = templateNameString.c_str(); + + // make a version of the parameter name with the first character upper case + const char *pname = param.name.c_str(); + std::string upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + fp.print("const %s%s * %s::get%s(", EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(param.extendedName).c_str(), templateName, + upperName.c_str()); + + writeMethodParams(fp, param, false); + fp.print(") const\n"); + fp.print("{\n"); + + fp.print("\tconst %s * base = NULL;\n", templateName); + fp.print("\tif (m_baseData != NULL)\n"); + fp.print("\t{\n"); + fp.print("\t\tbase = dynamic_cast(m_baseData);\n", + templateName); +// fp.print("\t\tDEBUG_FATAL(base == NULL, (\"base template wrong type\"));\n"); + fp.print("\t}\n\n"); + + if (param.list_type == LIST_NONE) + { + writeSourceReturnBaseValue(fp, param, ""); + + fp.print("\tconst %s%s * returnValue = NULL;\n", + EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(param.extendedName).c_str()); + fp.print("\tconst std::string & templateName = m_%s.getValue();\n", pname); + fp.print("\tif (!templateName.empty())\n"); + fp.print("\t{\n"); + fp.print("\t\treturnValue = dynamic_cast(" + "ObjectTemplateList::fetch(templateName));\n", + EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(param.extendedName).c_str()); + fp.print("\t\tif (returnValue == NULL)\n"); + fp.print("\t\t\tWARNING_STRICT_FATAL(true, (\"Error loading template %%s\"," + "templateName.c_str()));\n"); + fp.print("\t}\n"); + fp.print("\treturn returnValue;\n"); + } + else + { + const char * access = "."; + if (param.list_type == LIST_LIST) + { + access = "->"; + writeSourceReturnBaseValue(fp, param, ""); + fp.print("\tDEBUG_FATAL(index < 0 || static_cast(index) " + ">= m_%s.size(), (\"template param index out of range\"));\n", + pname); + } + else + { + fp.print("\tDEBUG_FATAL(index < 0 || index >= %d, (\"" + "template param index out of range\"));\n", param.list_size); + writeSourceReturnBaseValue(fp, param, ""); + } + + fp.print("\tconst %s%s * returnValue = NULL;\n", + EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(param.extendedName).c_str()); + fp.print("\tconst std::string & templateName = m_%s[index]%sgetValue();\n", + pname, access); + fp.print("\tif (!templateName.empty())\n"); + fp.print("\t{\n"); + fp.print("\t\treturnValue = dynamic_cast(" + "ObjectTemplateList::fetch(templateName));\n", + EnumLocationTypes[getTemplateLocation()], + filenameLowerToUpper(param.extendedName).c_str()); + fp.print("\t\tif (returnValue == NULL)\n"); + fp.print("\t\t\tWARNING_STRICT_FATAL(true, (\"Error loading template %%s\"," + "templateName.c_str()));\n"); + fp.print("\t}\n"); + fp.print("\treturn returnValue;\n"); + } + fp.print("}\t// %s::get%s\n", templateName, upperName.c_str()); + fp.print("\n"); +} // TemplateData::writeSourceGetTemplate + +/** + * Writes functions to get enum parameters. + * + * @param fp the file to write to + * @param param the parameter to get + */ +void TemplateData::writeSourceGetEnum(File &fp, const Parameter ¶m) const +{ + const std::string & classNameString = getName(); + const char *className = classNameString.c_str(); + const char *templateName = getFileParent()->getTemplateName().c_str(); + + // make a version of the parameter name with the first character upper case + const char *pname = param.name.c_str(); + std::string upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + fp.print("%s::%s %s::get%s(", templateName, + param.extendedName.c_str(), className, upperName.c_str()); + + writeMethodParams(fp, param, false); + fp.print(") const\n"); + fp.print("{\n"); + + if (param.list_type == LIST_NONE) + { + // set up var to receive the test base value + fp.print("#ifdef _DEBUG\n"); + fp.print("%s::%s testDataValue = static_cast<%s::%s>(0);\n", templateName, + param.extendedName.c_str(), templateName, param.extendedName.c_str()); + fp.print("#else\n"); + fp.print("UNREF(testData);\n"); + fp.print("#endif\n\n"); + } + + fp.print("\tconst %s * base = NULL;\n", className); + fp.print("\tif (m_baseData != NULL)\n"); + fp.print("\t{\n"); + fp.print("\t\tbase = dynamic_cast(m_baseData);\n", className); +// fp.print("\t\tDEBUG_FATAL(base == NULL, (\"base template wrong type\"));\n"); + + if (param.list_type == LIST_NONE) + { + // get the test base value + fp.print("#ifdef _DEBUG\n"); + fp.print("\t\tif (testData && base != NULL)\n"); + fp.print("\t\t\ttestDataValue = base->get%s(true);\n", upperName.c_str()); + fp.print("#endif\n"); + } + + fp.print("\t}\n\n"); + + if (param.list_type == LIST_NONE) + { + writeSourceReturnBaseValue(fp, param, ""); + fp.print("\t%s value = static_cast<%s>(m_%s.getValue());\n", + param.extendedName.c_str(), param.extendedName.c_str(), pname); + + // check the return value vs the base value, and warn if the same + fp.print("#ifdef _DEBUG\n"); + fp.print("\tif (testData && base != NULL)\n"); + fp.print("\t{\n"); +// fp.print("\t\tif (testDataValue == value)\n"); +// fp.print("\t\t\tDEBUG_WARNING(true, (\"Template %%s, parameter %s is " +// "returning same value as base template.\", DataResource::getName()));" +// "\n", pname); + fp.print("\t}\n"); + fp.print("#endif\n\n"); + + fp.print("\treturn value;\n"); + } + else + { + if (param.list_type == LIST_LIST) + { + writeSourceReturnBaseValue(fp, param, ""); + fp.print("\tDEBUG_FATAL(index < 0 || static_cast" + "(index) >= m_%s.size(), (\"template param index out of " + "range\"));\n", pname); + } + else + { + fp.print("\tDEBUG_FATAL(index < 0 || index >= %d, (\"" + "template param index out of range\"));\n", param.list_size); + writeSourceReturnBaseValue(fp, param, ""); + } + fp.print("\treturn static_cast<%s>(m_%s[index]->getValue());\n", + param.extendedName.c_str(), pname); + } + fp.print("}\t// %s::get%s\n", className, upperName.c_str()); + fp.print("\n"); +} // TemplateData::writeSourceGetEnum + +/** + * Writes functions to get structure parameters. + * + * @param fp the file to write to + * @param param the parameter to get + * + * @return 0 on success, -1 on fail + */ +int TemplateData::writeSourceGetStruct(File &fp, const Parameter ¶m) const +{ +std::string upperName; + + const std::string & templateNameString = getName(); + const char *templateName = templateNameString.c_str(); + + // make a version of the parameter name with the first character upper case + const char *pname = param.name.c_str(); + upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + + for (int i = 0; i < 3; ++i) + { + fp.print("void %s::get%s%s(", templateName, upperName.c_str(), + MinMaxNames[i]); + + writeMethodParams(fp, param, false); + fp.print(") const\n"); + fp.print("{\n"); + + fp.print("\tconst %s * base = NULL;\n", templateName); + fp.print("\tif (m_baseData != NULL)\n"); + fp.print("\t{\n"); + fp.print("\t\tbase = dynamic_cast(m_baseData);\n", templateName); +// fp.print("\t\tDEBUG_FATAL(base == NULL, (\"base template wrong type\"));\n"); + fp.print("\t}\n\n"); + + if (param.list_type == LIST_NONE) + { + writeSourceReturnBaseValue(fp, param, MinMaxNames[i]); + fp.print("\tconst ObjectTemplate * structTemplate = m_%s.getValue();\n", + pname); + } + else + { + const char * access = ""; + if (param.list_type == LIST_LIST) + { + access = "*"; + + writeSourceReturnBaseValue(fp, param, MinMaxNames[i]); + fp.print("\tDEBUG_FATAL(index < 0 || static_cast(index) >= m_%s.size(), (" + "\"template param index out of range\"));\n", pname); + } + else + { + fp.print("\tDEBUG_FATAL(index < 0 || index >= %d, (\"" + "template param index out of range\"));\n", param.list_size); + writeSourceReturnBaseValue(fp, param, MinMaxNames[i]); + } + fp.print("\tconst ObjectTemplate * structTemplate = (%sm_%s[index])." + "getValue();\n", access, pname); + } + fp.print("\tNOT_NULL(structTemplate);\n"); + fp.print("\tconst _%s *param = dynamic_cast(structTemplate);\n", + param.extendedName.c_str(), param.extendedName.c_str()); + fp.print("\tNOT_NULL(param);\n"); + + const TemplateData *structData = getStruct(param.extendedName.c_str()); + if (structData == NULL) + { + fprintf(stderr, "unable to find structure %s\n", + param.extendedName.c_str()); + return -1; + } + + std::string versionString = "versionOk"; + if (m_templateParent == NULL) + versionString = "m_" + versionString; + structData->writeSourceGetStructAssignments(fp, versionString, MinMaxNames[i]); + + fp.print("}\t// %s::get%s%s\n", templateName, upperName.c_str(), + MinMaxNames[i]); + fp.print("\n"); + } + + return 0; +} // TemplateData::writeSourceGetStruct + +/** + * Writes the assignment statements for retrieving a structure. + * + * @param fp the file to write to + * @param versionString string to use for versionOk checking + * @param minMaxString string to use for min/max getters + */ +void TemplateData::writeSourceGetStructAssignments(File &fp, + const std::string & versionString, const std::string & minMaxString) const +{ +const char * realMinMaxString; // the min/max string for each param + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + if (HasMinMax[param.type]) + realMinMaxString = minMaxString.c_str(); + else + realMinMaxString = ""; + + const char *name = param.name.c_str(); + std::string upperName = param.name; + upperName[0] = static_cast(toupper(upperName[0])); + if (param.type == TYPE_DYNAMIC_VAR || param.type == TYPE_STRUCT) + switch (param.list_type) + { + case LIST_NONE: + fp.print("\tparam->get%s%s(data.%s, %s);\n", upperName.c_str(), + realMinMaxString, name, versionString.c_str()); + break; + case LIST_INT_ARRAY: + fp.print("\t{\n"); + fp.print("\t\tfor (int i = 0; i < %d; ++i)\n", + param.list_size); + fp.print("\t\t\tparam->get%s%s(data.%s[i], i, %s);\n", + upperName.c_str(), realMinMaxString, name, versionString.c_str()); + fp.print("\t}\n"); + break; + case LIST_ENUM_ARRAY: + fp.print("\t{\n"); + fp.print("\t\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t\t\tparam->get%s%s(data.%s[i], static_cast<%s>(i), " + "%s);\n", upperName.c_str(), realMinMaxString, name, + param.enum_list_name.c_str(), versionString.c_str()); + fp.print("\t}\n"); + break; + case LIST_LIST: + fp.print("\t{\n"); + fp.print("\t\tfor (size_t i = 0; i < param->get%sCount(); ++i)\n", + upperName.c_str()); + fp.print("\t\t{\n"); + fp.print("\t\t\tdata.%s.push_back(%s());\n", name, + param.extendedName.c_str()); + fp.print("\t\t\tparam->get%s%s(data.%s.back(), i, %s);\n", + upperName.c_str(), realMinMaxString, name, versionString.c_str()); + fp.print("\t\t}\n"); + fp.print("\t}\n"); + break; + default: + break; + } + else switch (param.list_type) + { + case LIST_NONE: + fp.print("\tdata.%s = param->get%s%s(%s);\n", name, upperName.c_str(), + realMinMaxString, versionString.c_str()); + break; + case LIST_LIST: + fp.print("\t{\n"); + fp.print("\t\tfor (size_t i = 0; i < param->get%sCount(); ++i)\n", + upperName.c_str()); + fp.print("\t\t\tdata.%s.push_back(param->get%s%s(i, %s));\n", + name, upperName.c_str(), realMinMaxString, versionString.c_str()); + fp.print("\t}\n"); + break; + case LIST_INT_ARRAY: + fp.print("\t{\n"); + fp.print("\t\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t\t\tdata.%s[i] = param->get%s%s(i, %s);\n", name, + upperName.c_str(), realMinMaxString, versionString.c_str()); + fp.print("\t}\n"); + break; + case LIST_ENUM_ARRAY: + fp.print("\t{\n"); + fp.print("\t\tfor (int i = 0; i < %d; ++i)\n", param.list_size); + fp.print("\t\t\tdata.%s[i] = param->get%s%s(static_cast<%s>(i), " + "%s);\n", name, upperName.c_str(), realMinMaxString, + param.enum_list_name.c_str(), versionString.c_str()); + fp.print("\t}\n"); + break; + default: + break; + } + } +} // TemplateData::writeSourceGetStructAssignments + +/** + * Writes the source code to load the template data. + * + * @param fp the file to write to + */ +void TemplateData::writeSourceReadIff(File &fp) const +{ + const char * const * variableNames = DataVariableNames; + if (m_writeForCompilerFlag) + variableNames = CompilerDataVariableNames; + + const std::string & templateNameString = getName(); + const std::string & baseNameString = getBaseName(); + const char *templateName = templateNameString.c_str(); + const char *baseName = baseNameString.c_str(); + + fp.print("/**\n"); + fp.print(" * Loads the template data from an iff file. We should already be in the form\n"); + fp.print(" * for this template.\n"); + fp.print(" *\n"); + fp.print(" * @param file\t\tfile to load from\n"); + fp.print(" */\n"); + fp.print("void %s::load(Iff &file)\n", templateName); + fp.print("{\n"); + fp.print("static const int MAX_NAME_SIZE = 256;\n"); + fp.print("char paramName[MAX_NAME_SIZE];\n"); + fp.print("\n"); + + if (m_fileParent != NULL) + { + // check that we are in our form + fp.print("\tif (file.getCurrentName() != %s_tag)\n", + m_fileParent->getTemplateName().c_str()); + fp.print("\t{\n"); + if (!getBaseName().empty() && getBaseName() != ROOT_TEMPLATE_NAME) + fp.print("\t\t%s::load(file);\n", baseName); + fp.print("\t\treturn;\n"); + fp.print("\t}\n"); + fp.print("\n"); + + // enter the form and check it's version + fp.print("\tfile.enterForm();\n"); + fp.print("\tm_templateVersion = file.getCurrentName();\n"); + fp.print("\tif (m_templateVersion == %s)\n", DERIVED_TEMPLATE_TAG_STRING); + + // load the base template + fp.print("\t{\n"); + fp.print("\t\tfile.enterForm();\n"); + fp.print("\t\tfile.enterChunk();\n"); + fp.print("\t\tstd::string baseFilename;\n"); + fp.print("\t\tfile.read_string(baseFilename);\n"); + fp.print("\t\tfile.exitChunk();\n"); + fp.print("\t\tconst ObjectTemplate *base = ObjectTemplateList::fetch(baseFilename);\n"); + + + // fp.print("\t\t%s * mybase = dynamic_cast<%s *>(base);\n", + // templateName, templateName); + // fp.print("\t\tFATAL(mybase == NULL, (\"trying to derive a template from an incompatable template type\"));\n"); + fp.print("\t\tDEBUG_WARNING(base == NULL, (\"was unable to load base template %%s\", baseFilename.c_str()));\n"); + fp.print("\t\tif (m_baseData == base && base != NULL)\n"); + fp.print("\t\t\tbase->releaseReference();\n"); + + fp.print("\t\telse\n"); + fp.print("\t\t{\n"); + fp.print("\t\t\tif (m_baseData != NULL)\n"); + fp.print("\t\t\t\tm_baseData->releaseReference();\n"); + + fp.print("\t\t\tm_baseData = base;\n"); + + fp.print("\t\t}\n"); + fp.print("\t\tfile.exitForm();\n"); + fp.print("\t\tm_templateVersion = file.getCurrentName();\n"); + fp.print("\t}\n"); + fp.print("\tif (getHighestTemplateVersion() != %s)\n", m_version.tagString.c_str()); + fp.print("\t{\n"); + fp.print("\t\tif (DataLint::isEnabled())\n"); + fp.print("\t\t\tDEBUG_WARNING(true, (\"template %%s version out of date\", file.getFileName()));\n"); + if (!isWritingForCompiler()) + fp.print("\t\tm_versionOk = false;\n"); + fp.print("\t}\n"); + fp.print("\n"); + fp.print("\tfile.enterForm();\n"); + } + else + { + fp.print("\tfile.enterForm();\n"); + } + fp.print("\n"); + + int paramCount = 0; + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + ++paramCount; + } + + // read the number of params + fp.print("\tfile.enterChunk();\n"); + fp.print("\tint paramCount = file.read_int32();\n"); + fp.print("\tfile.exitChunk();\n"); + + if (paramCount > 0) + { + fp.print("\tfor (int i = 0; i < paramCount; ++i)\n"); + fp.print("\t{\n"); + fp.print("\t\tfile.enterChunk();\n"); + fp.print("\t\tfile.read_string(paramName, MAX_NAME_SIZE);\n"); + + bool firstParam = true; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + fp.print("\t\t"); + if (!firstParam) + fp.print("else "); + fp.print("if (strcmp(paramName, \"%s\") == 0)\n", param.name.c_str()); + firstParam = false; + switch (param.list_type) + { + case LIST_NONE: + fp.print("\t\t\tm_%s.loadFromIff(file);\n", param.name.c_str()); + break; + case LIST_LIST: + fp.print("\t\t{\n"); + fp.print("\t\t\tstd::vector<%s *>::iterator iter;\n", + variableNames[param.type]); + fp.print("\t\t\tfor (iter = m_%s.begin(); iter != m_%s.end();" + " ++iter)\n", param.name.c_str(), param.name.c_str()); + fp.print("\t\t\t{\n"); + fp.print("\t\t\t\tdelete *iter;\n"); + fp.print("\t\t\t\t*iter = NULL;\n"); + fp.print("\t\t\t}\n"); + fp.print("\t\t\tm_%s.clear();\n", param.name.c_str()); + fp.print("\t\t\tm_%sAppend = file.read_bool8();\n", param.name.c_str()); + fp.print("\t\t\tint listCount = file.read_int32();\n"); + fp.print("\t\t\tfor (int j = 0; j < listCount; ++j)\n"); + fp.print("\t\t\t{\n"); + fp.print("\t\t\t\t%s * newData = new %s;\n", + variableNames[param.type], + variableNames[param.type]); + fp.print("\t\t\t\tnewData->loadFromIff(file);\n"); + fp.print("\t\t\t\tm_%s.push_back(newData);\n", param.name.c_str()); + fp.print("\t\t\t}\n"); + fp.print("\t\t\tm_%sLoaded = true;\n", param.name.c_str()); + fp.print("\t\t}\n"); + break; + case LIST_INT_ARRAY: + case LIST_ENUM_ARRAY: + fp.print("\t\t{\n"); + fp.print("\t\t\tint listCount = file.read_int32();\n"); + fp.print("\t\t\tDEBUG_WARNING(listCount != %d, (\"Template %%s: " + "read array size of %%d for array \\\"%s\\\" of size %d, reading " + "values anyway\", file.getFileName(), listCount));\n", + param.list_size, param.name.c_str(), param.list_size); + fp.print("\t\t\tint j;\n"); + fp.print("\t\t\tfor (j = 0; j < %d && j < listCount; ++j)\n", param.list_size); + fp.print("\t\t\t\tm_%s[j].loadFromIff(file);\n", param.name.c_str()); + fp.print("\t\t\t// if there are more params for %s read and dump them\n", param.name.c_str()); + fp.print("\t\t\tfor (; j < listCount; ++j)\n"); + fp.print("\t\t\t{\n"); + fp.print("\t\t\t\t%s dummy;\n", variableNames[param.type]); + fp.print("\t\t\t\tdummy.loadFromIff(file);\n"); + fp.print("\t\t\t}\n"); + fp.print("\t\t}\n"); + break; + default: + break; + } + } + fp.print("\t\tfile.exitChunk(true);\n"); + fp.print("\t}\n"); + } + else + { + fp.print("\tUNREF(paramName);\n"); + fp.print("\tUNREF(paramCount);\n"); + } + + // exit the form + fp.print("\n"); + fp.print("\tfile.exitForm();\n"); + + if (m_fileParent != NULL) + { + // enter the next form + if (!baseNameString.empty() && baseNameString != ROOT_TEMPLATE_NAME) + { + fp.print("\t%s::load(file);\n", baseName); + fp.print("\tfile.exitForm();\n"); + } + fp.print("\treturn;\n"); + } + else + fp.print("\tUNREF(file);\n"); + + fp.print("} // %s::load\n", templateName); + fp.print("\n"); +} // TemplateData::writeSourceReadIff + +/** + * Writes the source code to save the template data. + * + * @param fp the file to write to + */ +void TemplateData::writeSourceWriteIff(File &fp) const +{ + const std::string & templateNameString = getName(); + const std::string & baseNameString = getBaseName(); + const char *templateName = templateNameString.c_str(); + const char *baseName = baseNameString.c_str(); + + fp.print("/**\n"); + fp.print(" * Saves the template data to an iff file.\n"); + fp.print(" *\n"); + fp.print(" * @param file\t\t\tfile to save to\n"); + if (m_writeForCompilerFlag) + fp.print(" * @param location\t\tfile type (client or server)\n"); + fp.print(" */\n"); + fp.print("void %s::save(Iff &file)\n", templateName); + fp.print("{\n"); + + fp.print("int count;\n\n"); + + // write form enter header stuff + if (m_fileParent != NULL) + { + fp.print("\tfile.insertForm(%s_tag);\n", + m_fileParent->getTemplateName().c_str()); + fp.print("\tif (m_baseTemplateName.size() != 0)\n"); + fp.print("\t{\n"); + fp.print("\t\tfile.insertForm(%s);\n", DERIVED_TEMPLATE_TAG_STRING); + fp.print("\t\tfile.insertChunk(TAG(X, X, X, X));\n"); + fp.print("\t\tfile.insertChunkData(m_baseTemplateName.c_str(), " + "m_baseTemplateName.size() + 1);\n"); + fp.print("\t\tfile.exitChunk();\n"); + fp.print("\t\tfile.exitForm();\n"); + fp.print("\t}\n"); + fp.print("\tfile.insertForm(%s);\n", m_version.tagString.c_str()); + fp.print("\tfile.allowNonlinearFunctions();\n"); + } + else + { + fp.print("\tfile.insertForm(_%s_tag);\n", m_name.c_str()); + } + fp.print("\n"); + + // determine how many parameters there are + ParameterList::const_iterator iter; + fp.print("\tint paramCount = 0;\n"); + fp.print("\n"); + + bool countReffed = false; // flag that the 'count' parameter will + // be referenced + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + const char * extraTab = ""; + if (m_writeForCompilerFlag) + { + if (param.list_type == LIST_LIST) + { + fp.print("\tif (!m_%sLoaded)\n", param.name.c_str()); + fp.print("\t{\n"); + fp.print("\t\t// mark the list as empty and extending the base list\n"); + fp.print("\t\tm_%sAppend = true;\n", param.name.c_str()); + fp.print("\t}\n"); + } +// fp.print("\t{\n"); +// extraTab = "\t"; + } + fp.print("%s\t// save %s\n", extraTab, param.name.c_str()); + fp.print("%s\tfile.insertChunk(TAG(X, X, X, X));\n", extraTab); + fp.print("%s\tfile.insertChunkString(\"%s\");\n", extraTab, + param.name.c_str()); + switch (param.list_type) + { + case LIST_NONE: + fp.print("%s\tm_%s.saveToIff(file);\n", extraTab, param.name.c_str()); + break; + case LIST_LIST: + fp.print("%s\tfile.insertChunkData(&m_%sAppend, sizeof(bool));\n", + extraTab, param.name.c_str()); + fp.print("%s\tcount = m_%s.size();\n", extraTab, param.name.c_str()); + fp.print("%s\tfile.insertChunkData(&count, sizeof(count" + "));\n", extraTab); + fp.print("%s\t{for (int i = 0; i < count; ++i)\n", extraTab); + fp.print("%s\t\tm_%s[i]->saveToIff(file);}\n", extraTab, + param.name.c_str()); + countReffed = true; + break; + case LIST_INT_ARRAY: + case LIST_ENUM_ARRAY: + fp.print("%s\tcount = %d;\n", extraTab, param.list_size); + fp.print("%s\tfile.insertChunkData(&count, sizeof(count" + "));\n", extraTab); + fp.print("%s\t{for (int i = 0; i < %d; ++i)\n", extraTab, + param.list_size); + fp.print("%s\t\tm_%s[i].saveToIff(file);}\n", extraTab, + param.name.c_str()); + countReffed = true; + break; + default: + break; + } + fp.print("%s\tfile.exitChunk();\n", extraTab); + fp.print("%s\t++paramCount;\n", extraTab); + if (m_writeForCompilerFlag) + { +// fp.print("\t}\n"); + } + } + + // write exit header stuff + fp.print("\n"); + fp.print("\t// write number of parameters\n"); + fp.print("\tfile.goToTopOfForm();\n"); + fp.print("\tfile.insertChunk(TAG(P, C, N, T));\n"); +// fp.print("\tfile.enterChunk();\n"); + fp.print("\tfile.insertChunkData(¶mCount, sizeof(paramCount));\n"); + fp.print("\tfile.exitChunk();\n"); + fp.print("\n"); + fp.print("\tfile.exitForm(true);\n"); + + if (m_fileParent != NULL) + { + // call base class write iff method + if (!getBaseName().empty() && getBaseName() != ROOT_TEMPLATE_NAME) + fp.print("\t%s::save(file);\n", baseName); + + // exit the template form + fp.print("\tfile.exitForm();\n"); + } + + if (!countReffed) + fp.print("\tUNREF(count);\n"); + + fp.print("} // %s::save\n", templateName); + fp.print("\n"); +} // TemplateData::writeSourceWriteIff + +/** + * Writes the source code to clean up class data. + * + * @param fp the file to write to + */ +void TemplateData::writeSourceCleanup(File &fp) const +{ + if (m_fileParent != NULL) + fp.print("%s\n", TDF_CLEANUP_BEGIN); + + const char * const * variableNames = DataVariableNames; + if (m_writeForCompilerFlag) + variableNames = CompilerDataVariableNames; + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + switch (param.type) + { + case TYPE_INTEGER: + case TYPE_ENUM: + case TYPE_FLOAT: + case TYPE_BOOL: + case TYPE_STRING: + case TYPE_STRINGID: + case TYPE_FILENAME: + case TYPE_VECTOR: + case TYPE_TEMPLATE: + case TYPE_DYNAMIC_VAR: + case TYPE_STRUCT: + case TYPE_TRIGGER_VOLUME: + if (param.list_type == LIST_LIST) + { + fp.print("\t{\n"); + fp.print("\t\tstd::vector<%s *>::iterator iter;\n", + variableNames[param.type]); + fp.print("\t\tfor (iter = m_%s.begin(); iter != m_%s.end();" + " ++iter)\n", param.name.c_str(), param.name.c_str()); + fp.print("\t\t{\n"); + fp.print("\t\t\tdelete *iter;\n"); + fp.print("\t\t\t*iter = NULL;\n"); + fp.print("\t\t}\n"); + fp.print("\t\tm_%s.clear();\n", param.name.c_str()); + fp.print("\t}\n"); + } + break; + default: + break; + } + } + + if (m_fileParent != NULL) + fp.print("%s\n", TDF_CLEANUP_END); +} // TemplateData::writeSourceCleanup + +/** + * Writes parameter access functions for use in the template compiler. + * + * @param fp the file to write to + * @param location the file location (client or server) + */ +void TemplateData::writeCompilerSourceAccessMethods(File &fp) const +{ +const char * const FUNC_NAMES[] = { + "CompilerIntegerParam", + "FloatParam", + "BoolParam", + "StringParam", + "StringIdParam", + "VectorParam", + "DynamicVariableParam", + "StructParamOT", + "TriggerVolumeParam" +}; +const int FUNC_NAME_SIZE = sizeof(FUNC_NAMES) / sizeof(FUNC_NAMES[0]); +// map data types to FUNC_NAMES above +const std::map::value_type PARAM_FUNC_MAP[] = { + std::map::value_type(TYPE_NONE, -1), + std::map::value_type(TYPE_COMMENT, -1), + std::map::value_type(TYPE_INTEGER, 0), + std::map::value_type(TYPE_FLOAT, 1), + std::map::value_type(TYPE_BOOL, 2), + std::map::value_type(TYPE_STRING, 3), + std::map::value_type(TYPE_STRINGID, 4), + std::map::value_type(TYPE_VECTOR, 5), + std::map::value_type(TYPE_DYNAMIC_VAR, 6), + std::map::value_type(TYPE_TEMPLATE, 3), + std::map::value_type(TYPE_ENUM, 0), + std::map::value_type(TYPE_STRUCT, 7), + std::map::value_type(TYPE_TRIGGER_VOLUME, 8), + std::map::value_type(TYPE_FILENAME, 3), + std::map::value_type(-1, -1) +}; +const int PARAM_FUNC_MAP_SIZE = sizeof(PARAM_FUNC_MAP) / sizeof(PARAM_FUNC_MAP[0]); +const std::map paramFuncMap(&PARAM_FUNC_MAP[0], &PARAM_FUNC_MAP[PARAM_FUNC_MAP_SIZE-1]); +int paramCount; +bool first; +ParameterList::const_iterator iter; + + DEBUG_FATAL(!m_writeForCompilerFlag, ("write for compiler not enabled")); + + const char * const * variableNames = DataVariableNames; + if (m_writeForCompilerFlag) + variableNames = CompilerDataVariableNames; + + const std::string & templateNameString = getName(); + const std::string & baseNameString = getBaseName(); + const char *templateName = templateNameString.c_str(); + const char *baseName = baseNameString.c_str(); + + // write code for predefined-type access methods + for (int i = 0; i < FUNC_NAME_SIZE; ++i) + { + fp.print("%s * %s::get%s(const char *name, bool deepCheck, int index)\n", + FUNC_NAMES[i], templateName, FUNC_NAMES[i]); + fp.print("{\n"); + + paramCount = 0; + first = true; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + std::map::const_iterator mapIter = paramFuncMap.find(param.type); + if (mapIter != paramFuncMap.end() && (*mapIter).second == i) + { + ++paramCount; + const char *pname = param.name.c_str(); + if (first) + { + fp.print("\tif"); + first = false; + } + else + fp.print("\telse if"); + fp.print(" (strcmp(name, \"%s\") == 0)\n", pname); + fp.print("\t{\n"); + switch (param.list_type) + { + case LIST_NONE: + fp.print("\t\tif (index == 0)\n"); + fp.print("\t\t{\n"); + fp.print("\t\t\tif (deepCheck && !isParamLoaded(name, false, 0))\n"); + fp.print("\t\t\t{\n"); + fp.print("\t\t\t\tif (getBaseTemplate() != NULL)\n"); + fp.print("\t\t\t\t\treturn getBaseTemplate()->get%s(name, deepCheck, index);\n", FUNC_NAMES[i]); + fp.print("\t\t\t\treturn NULL;\n"); + fp.print("\t\t\t}\n"); + fp.print("\t\t\treturn &m_%s;\n", pname); + fp.print("\t\t}\n"); + fp.print("\t\tfprintf(stderr, \"trying to access " + "single-parameter \\\"%s\\\" as an array\\n\");\n", + pname); + break; + case LIST_LIST: + fp.print("\t\tif (index >= 0 && index < static_cast(m_%s.size()))\n", + pname); + fp.print("\t\t\treturn m_%s[index];\n", pname); + fp.print("\t\tif (index == static_cast(m_%s.size()))\n", + pname); + fp.print("\t\t{\n"); + fp.print("\t\t\t%s *temp = new %s();\n", + FUNC_NAMES[i], FUNC_NAMES[i]); + fp.print("\t\t\tm_%s.push_back(temp);\n", pname); + fp.print("\t\t\treturn temp;\n"); + fp.print("\t\t}\n"); + fp.print("\t\tfprintf(stderr, \"index for parameter " + "\\\"%s\\\" out of bounds\\n\");\n", pname); + break; + case LIST_INT_ARRAY: + case LIST_ENUM_ARRAY: + fp.print("\t\tif (index >= 0 && index < %d)\n", + param.list_size); + fp.print("\t\t{\n"); + fp.print("\t\t\tif (deepCheck && !isParamLoaded(name, false, index))\n"); + fp.print("\t\t\t{\n"); + fp.print("\t\t\t\tif (getBaseTemplate() != NULL)\n"); + fp.print("\t\t\t\t\treturn getBaseTemplate()->get%s(name, deepCheck, index);\n", FUNC_NAMES[i]); + fp.print("\t\t\t\treturn NULL;\n"); + fp.print("\t\t\t}\n"); + fp.print("\t\t\treturn &m_%s[index];\n", pname); + fp.print("\t\t}\n"); + fp.print("\t\tfprintf(stderr, \"index for parameter " + "\\\"%s\\\" out of bounds\\n\");\n", pname); + break; + default: + break; + } + fp.print("\t}\n"); + } + } + + if (getBaseName().size() > 0) + { + if (paramCount != 0) + fp.print("\telse\n\t"); + fp.print("\treturn %s::get%s(name, deepCheck, index);\n", baseName, FUNC_NAMES[i]); + } + if (paramCount != 0) + fp.print("\treturn NULL;\n"); + fp.print("}\t//%s::get%s\n", templateName, FUNC_NAMES[i]); + fp.print("\n"); + } + + // write structure initialization function + paramCount = 0; + first = true; + fp.print("void %s::initStructParamOT(StructParamOT ¶m, const char *name)\n", + templateName); + fp.print("{\n"); + fp.print("\tif (param.isInitialized())\n"); + fp.print("\t\treturn;\n"); + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type != TYPE_STRUCT) + continue; + + ++paramCount; + const char *pname = param.name.c_str(); + if (first) + { + fp.print("\tif"); + first = false; + } + else + fp.print("\telse if"); + fp.print(" (strcmp(name, \"%s\") == 0)\n", pname); + fp.print("\t\tparam.setValue(new _%s(\"\"));\n", param.extendedName.c_str()); + } + if (getBaseName().size() > 0) + { + if (paramCount != 0) + fp.print("\telse\n\t"); + fp.print("\t%s::initStructParamOT(param, name);\n", baseName); + } + fp.print("} // %s::initStructParamOT\n", templateName); + + // write empty list flag function + paramCount = 0; + first = true; + fp.print("\n"); + fp.print("void %s::setAsEmptyList(const char *name)\n", templateName); + fp.print("{\n"); + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.list_type != LIST_LIST) + continue; + + ++paramCount; + const char *pname = param.name.c_str(); + if (first) + { + fp.print("\tif"); + first = false; + } + else + fp.print("\telse if"); + fp.print(" (strcmp(name, \"%s\") == 0)\n", pname); + fp.print("\t{\n"); + fp.print("\t\tm_%s.clear();\n", pname); + fp.print("\t\tm_%sLoaded = true;\n", pname); + fp.print("\t}\n"); + } + if (getBaseName().size() > 0) + { + if (paramCount != 0) + fp.print("\telse\n\t"); + fp.print("\t%s::setAsEmptyList(name);\n", baseName); + } + fp.print("} // %s::setAsEmptyList\n", templateName); + fp.print("\n"); +/* + // write isLoaded function + paramCount = 0; + first = true; + bool needFinalReturn = false; + fp.print("bool %s::isLoaded(const char *name, int index) const\n", templateName); + fp.print("{\n"); + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + ++paramCount; + const char *pname = param.name.c_str(); + if (first) + { + fp.print("\tif"); + first = false; + } + else + fp.print("\telse if"); + fp.print(" (strcmp(name, \"%s\") == 0)\n", pname); + switch (param.list_type) + { + case LIST_NONE: + fp.print("\t{\n"); + fp.print("\t\tif (index == 0)\n"); + fp.print("\t\t\treturn m_%s.isLoaded();\n", pname); + fp.print("\t\tfprintf(stderr, \"trying to access " + "single-parameter \\\"%s\\\" as an array\\n\");\n", + pname); + fp.print("\t}\n"); + needFinalReturn = true; + break; + case LIST_LIST: + fp.print("\t\treturn m_%sLoaded;\n", pname); + break; + case LIST_INT_ARRAY: + case LIST_ENUM_ARRAY: + fp.print("\t{\n"); + fp.print("\t\tif (index >= 0 && index < %d)\n", + param.list_size); + fp.print("\t\t\treturn m_%s[index].isLoaded();\n", pname); + fp.print("\t\tfprintf(stderr, \"index for parameter " + "\\\"%s\\\" out of bounds\\n\");\n", pname); + fp.print("\t}\n"); + needFinalReturn = true; + break; + default: + break; + } + } + // if we are a derived class, go down the hierarchy + if (getBaseName().size() > 0) + { + if (paramCount != 0) + fp.print("\telse\n\t"); + fp.print("\treturn %s::isLoaded(name, index);\n", baseName); + } + if (needFinalReturn) + fp.print("\treturn false;\n"); + fp.print("} // %s::isLoaded\n", templateName); + fp.print("\n"); +*/ + // write setAppend function + first = true; + paramCount = 0; + fp.print("void %s::setAppend(const char *name)\n", templateName); + fp.print("{\n"); + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.list_type != LIST_LIST) + continue; + + ++paramCount; + const char *pname = param.name.c_str(); + if (first) + { + fp.print("\tif"); + first = false; + } + else + fp.print("\telse if"); + fp.print(" (strcmp(name, \"%s\") == 0)\n", pname); + fp.print("\t\tm_%sAppend = true;\n", pname); + } + // if we are a derived class, go down the hierarchy + if (getBaseName().size() > 0) + { + if (paramCount > 0) + fp.print("\telse\n\t"); + fp.print("\t%s::setAppend(name);\n", baseName); + } + else if (paramCount == 0) + fp.print("\tUNREF(name);\n"); + fp.print("} // %s::setAppend\n", templateName); + fp.print("\n"); + + // write isAppend function + first = true; + paramCount = 0; + fp.print("bool %s::isAppend(const char *name) const\n", templateName); + fp.print("{\n"); + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.list_type != LIST_LIST) + continue; + + ++paramCount; + const char *pname = param.name.c_str(); + if (first) + { + fp.print("\tif"); + first = false; + } + else + fp.print("\telse if"); + fp.print(" (strcmp(name, \"%s\") == 0)\n", pname); + fp.print("\t\treturn m_%sAppend;\n", pname); + } + // if we are a derived class, go down the hierarchy + if (getBaseName().size() > 0) + { + if (paramCount > 0) + fp.print("\telse\n\t"); + fp.print("\treturn %s::isAppend(name);\n", baseName); + } + else if (paramCount == 0) + fp.print("\tUNREF(name);\n"); + fp.print("} // %s::isAppend\n", templateName); + fp.print("\n"); + + // write getListLength function + paramCount = 0; + first = true; + fp.print("\n"); + fp.print("int %s::getListLength(const char *name) const\n", templateName); + fp.print("{\n"); + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = (*iter); + if (param.list_type == LIST_NONE) + continue; + + ++paramCount; + const char *pname = param.name.c_str(); + if (first) + { + fp.print("\tif"); + first = false; + } + else + fp.print("\telse if"); + fp.print(" (strcmp(name, \"%s\") == 0)\n", pname); + fp.print("\t{\n"); + + if(param.list_type == LIST_LIST) + { + fp.print("\t\treturn m_%s.size();\n", pname); + } + else // param.list_type == LIST_INT or LIST_ENUM + { + fp.print("\t\treturn sizeof(m_%s) / sizeof(%s);\n", pname, variableNames[param.type]); + } + + fp.print("\t}\n"); + } + // if we are a derived class, go down the hierarchy + if (getBaseName().size() > 0) + { + if (paramCount != 0) + fp.print("\telse\n\t"); + fp.print("\treturn %s::getListLength(name);\n", baseName); + } + fp.print("} // %s::getListLength\n", templateName); + fp.print("\n"); +} // TemplateData::writeCompilerSourceAccessMethods + + +//======================================================================== +// default template writing functions + +/** + * Writes a default template file that can be used to make a template iff file. + * + * @param fp file to write to + */ +void TemplateData::writeDefaultTemplateFile(File &fp) const +{ + writeEnumsToDefaultTemplate(fp); + writeStructsToDefaultTemplate(fp); + + ParameterList::const_iterator iter; + for (iter = m_parameters.begin(); iter != m_parameters.end(); ++iter) + { + const Parameter ¶m = *iter; + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + + writeParamTypeToDefaultTemplate(fp, param); + writeParameterDefault(fp, param); + } +} // TemplateData::writeDefaultTemplateFile + +/** + * Writes the enums defined for this template as comments. + * + * @param fp file to write to + */ +void TemplateData::writeEnumsToDefaultTemplate(File &fp) const +{ + EnumMap::const_iterator mapIter; + for (mapIter = m_enumMap.begin(); mapIter != m_enumMap.end(); ++mapIter) + { + fp.print("// enum type %s:\n", (*mapIter).first.c_str()); + + const EnumList &list = (*mapIter).second; + EnumList::const_iterator listIter; + for (listIter = list.begin(); listIter != list.end(); ++listIter) + { + const EnumData &data = *listIter; + fp.print("// %s", data.name.c_str()); + if (data.comment.size() != 0) + fp.print("\t\t(%s)", data.comment.c_str()); + fp.print("\n"); + } + + fp.print("\n"); + } +} // TemplateData::writeEnumsToDefaultTemplate + +/** + * Writes the structs defined for this template as comments. + * + * @param fp file to write to + */ +void TemplateData::writeStructsToDefaultTemplate(File &fp) const +{ + StructMap::const_iterator mapIter; + for (mapIter = m_structMap.begin(); mapIter != m_structMap.end(); ++mapIter) + { + fp.print("// struct %s:\n", (*mapIter).first.c_str()); + + const TemplateData *data = (*mapIter).second; + NOT_NULL(data); + ParameterList::const_iterator listIter; + for (listIter = data->m_parameters.begin(); + listIter != data->m_parameters.end(); ++listIter) + { + const Parameter ¶m = *listIter; + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + fp.print("// %s\t\t", param.name.c_str()); + writeParamTypeToDefaultTemplate(fp, param); + } + + fp.print("\n"); + } +} // TemplateData::writeStructsToDefaultTemplate + +/** + * Writes a parameter type as a comment. + * + * @param fp file to write to + * @param param parameter to write about + */ +void TemplateData::writeParamTypeToDefaultTemplate(File &fp, + const Parameter ¶m) const +{ + fp.print("// "); + switch (param.list_type) + { + case LIST_LIST: + fp.print("list, of type "); + break; + case LIST_INT_ARRAY: + fp.print("array, size %d, indexed by an integer, of type ", + param.list_size); + break; + case LIST_ENUM_ARRAY: + fp.print("array, indexed by enum type %s, of type ", + param.enum_list_name.c_str()); + break; + case LIST_NONE: + default: + break; + } + + switch (param.type) + { + case TYPE_INTEGER: + fp.print("integer\n"); + break; + case TYPE_FLOAT: + fp.print("floating point\n"); + break; + case TYPE_BOOL: + fp.print("boolean\n"); + break; + case TYPE_STRING: + fp.print("string\n"); + break; + case TYPE_STRINGID: + fp.print("string id\n"); + break; + case TYPE_VECTOR: + fp.print("vector\n"); + break; + case TYPE_DYNAMIC_VAR: + fp.print("objvar list\n"); + break; + case TYPE_TEMPLATE: + fp.print("template type %s\n", param.extendedName.c_str()); + break; + case TYPE_ENUM: + fp.print("enum type %s\n", param.extendedName.c_str()); + break; + case TYPE_STRUCT: + fp.print("struct %s\n", param.extendedName.c_str()); + break; + case TYPE_TRIGGER_VOLUME: + fp.print("trigger volume\n"); + break; + case TYPE_FILENAME: + fp.print("filename\n"); + break; + case TYPE_COMMENT: + case TYPE_NONE: + default: + break; + } +} // TemplateData::writeParamTypeToDefaultTemplate + +/** + * Writes a parameter default to a template file. + * + * @param fp file to write to + * @param param parameter to write + * @param index index of param to write (for fixed-length lists; <0 to write all of list) + */ +void TemplateData::writeParameterDefault(File &fp, const Parameter ¶m, int index) const +{ + switch (param.list_type) + { + case LIST_NONE: + fp.print("%s = ", param.name.c_str()); + writeDefaultValue(fp, param); + fp.print("\n"); + break; + case LIST_LIST: + fp.print("%s = [ ", param.name.c_str()); +// writeDefaultValue(fp, param); + fp.print(" ]\n"); + break; + case LIST_INT_ARRAY: + { + if (index >= 0 && index < param.list_size) + { + fp.print("%s[%d] = ", param.name.c_str(), index); + writeDefaultValue(fp, param); + fp.print("\n"); + } + else + { + for (int i = 0; i < param.list_size; ++i) + { + fp.print("%s[%d] = ", param.name.c_str(), i); + writeDefaultValue(fp, param); + fp.print("\n"); + } + } + } + break; + case LIST_ENUM_ARRAY: + { + const EnumList * enumList = getEnumList(param.enum_list_name, false); + DEBUG_FATAL(enumList == NULL, ("unknown enum name %s", + param.enum_list_name.c_str())); + + if (index >= 0 && index < param.list_size) + { + fp.print("%s[%s] = ", param.name.c_str(), enumList->at(index).name.c_str()); + writeDefaultValue(fp, param); + fp.print("\n"); + } + else + { + EnumList::const_iterator listIter; + for (listIter = enumList->begin(); listIter != enumList->end(); ++listIter) + { + fp.print("%s[%s] = ", param.name.c_str(), (*listIter).name.c_str()); + writeDefaultValue(fp, param); + fp.print("\n"); + } + } + } + break; + default: + break; + } +} // TemplateData::writeParameterDefault + +/** + * Writes a structure parameter default to a template file. + * + * @param fp file to write to + * @param param parameter to write + * @param final flag that this is the final struct + */ +void TemplateData::writeStructParameterDefault(File &fp, const Parameter ¶m, + bool final) const +{ + switch (param.list_type) + { + case LIST_NONE: + fp.print("\t%s = ", param.name.c_str()); + writeDefaultValue(fp, param); + break; + case LIST_LIST: + fp.print("\t%s = [ ", param.name.c_str()); +// writeDefaultValue(fp, param); + fp.print(" ]", param.name.c_str()); + break; + case LIST_INT_ARRAY: + { + for (int i = 0; i < param.list_size; ++i) + { + fp.print("\t%s[%d] = ", param.name.c_str(), i); + writeDefaultValue(fp, param); + if (i < param.list_size - 1) + fp.print(",\n", param.name.c_str()); + } + } + break; + case LIST_ENUM_ARRAY: + { + const EnumList * enumList = getEnumList(param.enum_list_name, false); + DEBUG_FATAL(enumList == NULL, ("unknown enum name %s", + param.enum_list_name.c_str())); + + EnumList::const_iterator listIter; + for (listIter = enumList->begin(); listIter != enumList->end(); ++listIter) + { + fp.print("\t%s[%s] = ", param.name.c_str(), (*listIter).name.c_str()); + writeDefaultValue(fp, param); + if (listIter + 1 != enumList->end()) + fp.print(",\n", param.name.c_str()); + } + } + break; + default: + break; + } + if (!final) + fp.print(",\n", param.name.c_str()); +} // TemplateData::writeStructParameterDefault + +/** + * Writes the default value for a template parameter to a template file. + * + * @param fp file to write to + * @param param parameter to write + */ +void TemplateData::writeDefaultValue(File &fp, const Parameter ¶m) const +{ + switch (param.type) + { + case TYPE_INTEGER: + if (0 < param.min_int_limit) + fp.print("%d", param.min_int_limit); + else if (0 > param.max_int_limit) + fp.print("%d", param.max_int_limit); + else + fp.print("0"); + break; + case TYPE_FLOAT: + if (0 < param.min_float_limit) + fp.print("%f", param.min_float_limit); + else if (0 > param.max_float_limit) + fp.print("%f", param.max_float_limit); + else + fp.print("0.0"); + break; + case TYPE_BOOL: + fp.print("false"); + break; + case TYPE_STRING: + case TYPE_FILENAME: + fp.print("\"\""); + break; + case TYPE_STRINGID: + fp.print("\"string_id_table\" \"\""); + break; + case TYPE_VECTOR: + fp.print("0.0 0.0 0.0 0.0"); + break; + case TYPE_DYNAMIC_VAR: + fp.print("[]"); + break; + case TYPE_TEMPLATE: +// fp.print("\"%s\"", getName().c_str()); + fp.print("\"\""); + break; + case TYPE_ENUM: + { + const EnumList * enumList = getEnumList(param.extendedName, false); + DEBUG_FATAL(enumList == NULL, ("unknown enum name %s", + param.extendedName.c_str())); + fp.print("%s", enumList->at(0).name.c_str()); + } + break; + case TYPE_STRUCT: + { + fp.print("[\n"); + StructMap::const_iterator mapIter = m_structMap.find(param.extendedName); + DEBUG_FATAL(mapIter == m_structMap.end(), ("unknown struct name %s", + param.enum_list_name.c_str())); + const TemplateData *data = (*mapIter).second; + NOT_NULL(data); + ParameterList::const_iterator listIter; + for (listIter = data->m_parameters.begin(); + listIter != data->m_parameters.end(); ++listIter) + { + const Parameter ¶m = *listIter; + if (param.type == TYPE_NONE || param.type == TYPE_COMMENT) + continue; + writeStructParameterDefault(fp, param, + listIter + 1 == data->m_parameters.end()); + } + fp.print("]"); + } + break; + case TYPE_TRIGGER_VOLUME: + fp.print("\"dummyVolume\" 0.1"); + break; + case TYPE_COMMENT: + case TYPE_NONE: + default: + break; + } +} // TemplateData::writeDefaultValue + +const TemplateData::Parameter *TemplateData::getParameter( + const char *name, bool deepCheck) const +{ + NOT_NULL(name); + + TemplateData::Parameter const *result = NULL; + + // Shallow check, just checks this immediate tdf + + ParameterMap::const_iterator iter = m_parameterMap.find(name); + + if (iter != m_parameterMap.end()) + { + result = &(*iter).second; + } + else if (deepCheck) + { + // Deep check recurses all inherited tdf files + + const TemplateDefinitionFile *TemplateDefinitionFile = getTdfForParameter(name); + + if (TemplateDefinitionFile != NULL) + { + result = TemplateDefinitionFile->getTemplateData(TemplateDefinitionFile->getHighestVersion())->getParameter(name); + } + } + + return result; +} // TemplateData::getParameter + +//======================================================================== +// template creation functions diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.h new file mode 100644 index 00000000..f953098f --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateData.h @@ -0,0 +1,247 @@ +//======================================================================== +// +// TemplateData.h - data for a given version of a template +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_TemplateData_H +#define _INCLUDED_TemplateData_H + +#include "sharedFoundation/Tag.h" +#include "TemplateGlobals.h" + +class File; +class TemplateDefinitionFile; +class TpfTemplate; +class TemplateDataIterator; + +static const int INVALID_ENUM_RESULT = INT_MIN; + +struct TagInfo +{ + Tag tag; + std::string tagString; +}; + + +class TemplateData +{ + friend class TemplateDataIterator; + +public: + + // public enums + enum ParamType + { + TYPE_NONE, + TYPE_COMMENT, + TYPE_INTEGER, + TYPE_FLOAT, + TYPE_BOOL, + TYPE_STRING, + TYPE_STRINGID, + TYPE_VECTOR, + TYPE_DYNAMIC_VAR, + TYPE_TEMPLATE, + TYPE_ENUM, + TYPE_STRUCT, + TYPE_TRIGGER_VOLUME, + TYPE_FILENAME, + NUM_PARAM_TYPES + }; + enum ListType + { + LIST_NONE, + LIST_LIST, + LIST_INT_ARRAY, + LIST_ENUM_ARRAY + }; + + // info about a template parameter + struct Parameter + { + ParamType type; + std::string name; + std::string description; // description of the parameter or a line comment + std::string extendedName; // name for template, enum, or struct types + int min_int_limit; // for type range + int max_int_limit; // for type range + float min_float_limit; // for type range + float max_float_limit; // for type range + ListType list_type; + int list_size; + std::string enum_list_name; // enum used for enum indexed list + }; + + struct EnumData + { + std::string name; + std::string valueName; + int value; + std::string comment; + }; + + typedef std::vector EnumList; + typedef std::map EnumMap; + +public: + + explicit TemplateData(int version, const TemplateDefinitionFile &parent); + explicit TemplateData(const TemplateData *parent, const std::string name); + ~TemplateData(); + + const std::string getName(void) const; + const std::string getBaseName(void) const; + TemplateLocation getTemplateLocation(void) const; + const TagInfo & getVersion(void) const; + + bool hasList(void) const; + + void setWriteForCompiler(bool flag); + bool isWritingForCompiler(void) const; + + // template definition parsing functions + const char * parseLine(const File &fp, const char *buffer, char *tokenbuf); + const Parameter *getParameter(const char *name, bool deepCheck = false) const; + int parseIntValue(const File &fp, const char * line, const char ** endLine, char * intbuf) const; + int getEnumValue(const char * enumValue) const; + int getEnumValue(const std::string & enumType, const char * enumValue) const; + const EnumList * getEnumList(const std::string & name, bool define) const; + const TemplateData * getStruct(const char *name) const; + const TemplateDefinitionFile * getTdf() const; + const TemplateDefinitionFile * getTdfParent() const; + const TemplateDefinitionFile * getTdfForParameter(const char *parameterName) const; + + // template verification functions + bool verifyTemplate(const TpfTemplate *tpfTemplate, const File &file) const; + void updateTemplate(const TpfTemplate *tpfTemplate, File & file) const; + + // template C++ writing functions + void writeRegisterTemplate(File &fp, const char * leadInChars) const; + void writeHeaderFwdDecls(File &fp) const; + void writeHeaderParams(File &fp) const; + void writeSourceTemplateIncludes(File &fp) const; + void writeSourceLoadedFlagInit(File &fp) const; + int writeSourceMethods(File &fp) const; + void writeSourceCleanup(File &fp) const; + + // template writing functions + void writeDefaultTemplateFile(File &fp) const; + +private: + + enum ParseState + { + STATE_PARAM, + STATE_ENUM, + STATE_STRUCT + }; + + typedef std::vector ParameterList; + typedef std::map ParameterMap; + typedef std::vector StructList; + typedef std::map StructMap; + + const TemplateDefinitionFile * m_fileParent; // if the data is for the root template + const TemplateData * m_templateParent; // if the data is for a structure in a template + TagInfo m_structId; // id of the structure + bool m_hasTemplateParam; // flag that one of the parameters is a template (for structures) + bool m_hasDynamicVarParam; // flag that one of the parameters is a dynamic variable (for structures) + bool m_hasList; // flag that one of the parameters is a list + std::string m_name; // template name + std::string m_baseName; // name of base class (if any) + bool m_writeForCompilerFlag; // flag that the C++ we are writing is for the template compiler + TagInfo m_version; // version of this data + int m_bracketCount; // number of '[' we haved parsed + ParseState m_parseState; // whether we are parsing parameters, enum def, of struct def + ParameterList m_parameters; // parameters for the template + ParameterMap m_parameterMap; // param name->parameter lookup + EnumList * m_currentEnumList; // current enum being parsed from tdf file + EnumMap m_enumMap; // enums defined for the template + TemplateData * m_currentStruct; // current struct being parsed from tdf file + StructMap m_structMap; // structs defined for the template + StructList m_structList; // structs defined for the template, in order that they were in the definition file + +private: + + // no default constructor + TemplateData(void); + TemplateData(const TemplateData &parent); + TemplateData & operator =(const TemplateData &); + + // access functions + void getTemplateNames(stdset::fwd &names) const; + const TemplateDefinitionFile * getFileParent(void) const; + + // template definition parsing functions + const char * parseEnum(const File &fp, const char *buffer, char *tokenbuf); + const char * parseStruct(const File &fp, const char *buffer, char *tokenbuf); + + // template C++ writing functions + void writeMethodParams(File &fp, const Parameter ¶m, bool headerParams) const; + void writeHeaderEnums(File &fp) const; + void writeHeaderStructs(File &fp) const; + void writeHeaderMethods(File &fp) const; + void writeHeaderVariables(File &fp) const; + void writeHeaderVariables(File &fp, const ParameterList &list, + const char *namePrefix) const; + void writeStructDefinition(File &fp) const; + void writeSourceStructStart(File &fp) const; + void writeSourceStructStart(File &fp, const std::string &name) const; + void writeSourceReturnBaseValue(File &fp, const Parameter ¶m, const std::string & minMaxString) const; + int writeSourceGetData(File &fp) const; + void writeSourceTestData(File &fp) const; + void writeSourceGetGeneric(File &fp, const Parameter ¶m) const; + void writeSourceGetVector(File &fp, const Parameter ¶m) const; + void writeSourceGetDynamicVariable(File &fp, const Parameter ¶m) const; + void writeSourceGetTemplate(File &fp, const Parameter ¶m) const; + void writeSourceGetEnum(File &fp, const Parameter ¶m) const; + int writeSourceGetStruct(File &fp, const Parameter ¶m) const; + void writeSourceGetStructAssignments(File &fp, const std::string & versionString, const std::string & minMaxString) const; + void writeSourceReadIff(File &fp) const; + void writeSourceWriteIff(File &fp) const; + + // template C++ template compiler functions + void writeCompilerHeaderParams(File &fp) const; + void writeCompilerSourceMethods(File &fp) const; + void writeCompilerHeaderMethods(File &fp) const; + void writeCompilerSourceAccessMethods(File &fp) const; + + // default template writing functions + void writeEnumsToDefaultTemplate(File &fp) const; + void writeStructsToDefaultTemplate(File &fp) const; + void writeParamTypeToDefaultTemplate(File &fp, const Parameter ¶m) const; + void writeParameterDefault(File &fp, const Parameter ¶m, int index = -1) const; + void writeStructParameterDefault(File &fp, const Parameter ¶m, bool final) const; + void writeDefaultValue(File &fp, const Parameter ¶m) const; +}; + + +inline const TagInfo & TemplateData::getVersion(void) const +{ + return m_version; +} + +inline bool TemplateData::hasList(void) const +{ + return m_hasList; +} + +inline bool TemplateData::isWritingForCompiler(void) const +{ + return m_writeForCompilerFlag; +} + +inline const TemplateDefinitionFile * TemplateData::getFileParent(void) const +{ + if (m_fileParent != NULL) + return m_fileParent; + if (m_templateParent != NULL) + return m_templateParent->getFileParent(); + return NULL; +} // TemplateData::getFileParent + + +#endif // _INCLUDED_TemplateData_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.cpp new file mode 100644 index 00000000..11b8d2dd --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.cpp @@ -0,0 +1,176 @@ +//======================================================================== +// +// TemplateDataIterator.cpp +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +// Includes +///////////////////////////////////// + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" + +#include "TemplateDataIterator.h" + +#include "File.h" +#include "TemplateDefinitionFile.h" + +// ============================================================================ +// +// TemplateDataIterator class methods +// +// ============================================================================ + +//----------------------------------------------------------------------------- + +TemplateDataIterator::TemplateDataIterator() +: m_templateDataToIterate(NULL), + m_numItems(0), + m_noMoreData(true) +{ +} + +//----------------------------------------------------------------------------- + +TemplateDataIterator::TemplateDataIterator(const TemplateData& templateData) +: m_templateDataToIterate(NULL), + m_numItems(0), + m_noMoreData(true) +{ + setTo(templateData); +} + +//----------------------------------------------------------------------------- + +TemplateDataIterator::~TemplateDataIterator() +{ + m_templateDataToIterate = NULL; +} + +//----------------------------------------------------------------------------- + +void +TemplateDataIterator::setTo(const TemplateData &templateData) +{ + m_listOfParamLists.clear(); + m_templateDataToIterate = &templateData; + + // Loop through the TDF and all of its parents and add all of their + // .. parameter lists into this iterator's list collection. When we're + // .. done, the order of parameter lists will start with the base TDF's and + // .. end at the child TDF's. + const ParameterList* parameterListToAdd; + + while(m_templateDataToIterate != NULL) + { + parameterListToAdd = &(m_templateDataToIterate->m_parameters); + m_numItems += parameterListToAdd->size(); + + // Occasionally, TDF files are stubbed and have no parameters. Be sure + // .. not to add them as they just waste our time. + if(!parameterListToAdd->empty()) + { + m_listOfParamLists.push_back(parameterListToAdd); + } + + // Get the template data from the parent TDF + if(m_templateDataToIterate->m_fileParent != NULL) + { + const TemplateDefinitionFile* parentFile = + m_templateDataToIterate->m_fileParent->getBaseDefinitionFile(); + + if(parentFile != NULL) + { + m_templateDataToIterate = parentFile->getTemplateData(parentFile->getHighestVersion()); + } + else + { + m_templateDataToIterate = NULL; + } + } + else + { + m_templateDataToIterate = NULL; + } + + } + + // Initialize internal iterators + reset(); +} + +//----------------------------------------------------------------------------- + +bool +TemplateDataIterator::end() const +{ + return (m_noMoreData == true); +} + +//----------------------------------------------------------------------------- + +void +TemplateDataIterator::next() +{ + // Increment to the next parameter + ++m_currentParamPtr; + + // Have we gone to the end of our current parameter list? + if(m_currentParamPtr == (*m_currentParamListPtr)->end()) + { + // Go to the next list. If there are no more lists, then + // .. we are done iterating. Otherwise, set the current + // .. parameter to the beginning of the next list. + ++m_currentParamListPtr; + + if(m_currentParamListPtr == m_listOfParamLists.end()) + { + m_noMoreData = true; + } + else + { + m_currentParamPtr = (*m_currentParamListPtr)->begin(); + } + } +} + +//----------------------------------------------------------------------------- + +int +TemplateDataIterator::size() const +{ + return m_numItems; +} + +//----------------------------------------------------------------------------- + +void +TemplateDataIterator::reset() +{ + if(m_numItems > 0) + { + m_noMoreData = false; + } + + m_currentParamListPtr = m_listOfParamLists.begin(); + m_currentParamPtr = (*m_currentParamListPtr)->begin(); +} + +//----------------------------------------------------------------------------- + +const TemplateData::Parameter * +TemplateDataIterator::operator *() const +{ + if(this->end()) + { + return NULL; + } + else + { + const TemplateData::Parameter *currParam = &(*m_currentParamPtr); + + return currParam; + } +} + diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.h new file mode 100644 index 00000000..7710a426 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDataIterator.h @@ -0,0 +1,79 @@ +// ============================================================================ +// +// TemplateDataIterator.h +// +// This class iterates over a TdfFile and provides incremental access to the +// template data contained within. An iterator is provided because TDF's +// inherit most of their parameters, but this detail should be transparent +// to the programmer. Once you want to create a template from a TDF, you don't +// care where the fields come from -- you just want to know what's available. +// +// Initialize a TemplateDataIterator to a TemplateData. Iterating on it will +// provide access to a TemplateData Parameter. +// +// See also TemplateData, Parameter +// +// Used by TemplateEditor +// +// Copyright Sony Online Entertainment +// +// ============================================================================ + +#ifndef TEMPLATEDATAITERATOR_H +#define TEMPLATEDATAITERATOR_H + +#include "TemplateData.h" + +class TemplateDataIterator +{ +public: + + // Public typedefs and enumerations + ///////////// + + typedef TemplateData::Parameter Parameter; + + // Construction / destruction + ///////////// + TemplateDataIterator(); + explicit TemplateDataIterator(const TemplateData &templateData); + ~TemplateDataIterator(); + + // Iteration + ///////////// + void setTo(const TemplateData &templateData); + bool end() const; + void next(); + void reset(); + + // Accessors + ///////////// + int size() const; + const Parameter* operator *() const; + +private: + + // Private typedefs and enumerations + ///////////// + + // Template data's store their parameters in parameter lists + typedef TemplateData::ParameterList ParameterList; + typedef ParameterList::const_iterator ParameterListItr; + + // Our parameter iterator needs to iterate over lists of parameter lists + typedef std::list ParameterListList; + typedef ParameterListList::const_iterator ParameterListListItr; + + // Private Data + ///////////// + const TemplateData *m_templateDataToIterate; + + ParameterListList m_listOfParamLists; // A list of param lists, one from each TDF ancestor. + ParameterListListItr m_currentParamListPtr; // Current param list we are iterating through + ParameterListItr m_currentParamPtr; // Current parameter we are iterating on + + int m_numItems; + bool m_noMoreData; +}; + +#endif // TEMPLATEDATAITERATOR_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.cpp new file mode 100644 index 00000000..d57d342b --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.cpp @@ -0,0 +1,631 @@ +//======================================================================== +// +// TemplateDefinitionFile.cpp - a template definition file interpreter. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "File.h" +#include "TemplateGlobals.h" +#include "TemplateDefinitionFile.h" +#include "TemplateData.h" +#include "sharedRegex/RegexServices.h" +#include "sharedFoundation/SetupSharedFoundation.h" + +//============================================================================== + +/** + * Class constructor. + */ +TemplateDefinitionFile::TemplateDefinitionFile(void) : + m_baseDefinitionFile(NULL), + m_writeForCompilerFlag(false), + m_filterCompiledRegex(NULL) +{ + cleanup(); +} // TemplateDefinitionFile::TemplateDefinitionFile + +/** + * Class destructor. + */ +TemplateDefinitionFile::~TemplateDefinitionFile() +{ + cleanup(); +} // TemplateDefinitionFile::~TemplateDefinitionFile + +/** + * Resets all the class data. + */ +void TemplateDefinitionFile::cleanup(void) +{ + m_highestVersion = 0; + m_templateId.tag = NO_TAG; + m_templateId.tagString = NO_TAG_STRING; + m_templateLocation = LOC_NONE; + IGNORE_RETURN(m_templateName.erase()); + IGNORE_RETURN(m_baseName.erase()); + IGNORE_RETURN(m_templateNameFilter.erase()); + m_path.clear(); + m_compilerPath.clear(); + m_fileComments.clear(); + + if (m_baseDefinitionFile != NULL) + { + delete m_baseDefinitionFile; + m_baseDefinitionFile = NULL; + } + + std::map::iterator iter; + for (iter = m_templateMap.begin(); iter != m_templateMap.end(); ++iter) + { + delete (*iter).second; + (*iter).second = NULL; + } + m_templateMap.clear(); + + if (m_filterCompiledRegex != NULL) + { + RegexServices::freeMemory(m_filterCompiledRegex); + m_filterCompiledRegex = NULL; + } +} // TemplateDefinitionFile::cleanup + +/** + * Sets the write for compile flags on the tamplate data instances. + * + * @param flag flag that we are going to write code for the template compiler + */ +void TemplateDefinitionFile::setWriteForCompiler(bool flag) +{ + m_writeForCompilerFlag = flag; + if (flag && m_baseName.size() == 0) + { + m_baseName = COMPILER_ROOT_TEMPLATE_NAME; + } + else if (!flag && m_baseName == COMPILER_ROOT_TEMPLATE_NAME) + { + m_baseName = ""; + } + + std::map::iterator iter; + for (iter = m_templateMap.begin(); iter != m_templateMap.end(); ++iter) + (*iter).second->setWriteForCompiler(flag); +} // TemplateDefinitionFile::setWriteForCompiler + +/** + * Returns the template file name filter for this definition. + */ +const std::string & TemplateDefinitionFile::getTemplateNameFilter(void) const +{ +static const std::string wildcard = "*"; + + if (!m_templateNameFilter.empty()) + return m_templateNameFilter; + + if (m_baseDefinitionFile != NULL) + return m_baseDefinitionFile->getTemplateNameFilter(); + + return wildcard; +} // TemplateDefinitionFile::getTemplateNameFileter + +/** + * Tests if a template file name is valid for this definition. + * + * @param name the template file name + * + * @return true if the name is valid, false if not + */ +bool TemplateDefinitionFile::isValidTemplateName(const Filename & name) const +{ + if (m_templateNameFilter.empty()) + { + if (m_baseDefinitionFile != NULL) + return m_baseDefinitionFile->isValidTemplateName(name); + else + return true; + } + + int const maxCaptureCount = 10; + int const matchDataElementCount = maxCaptureCount * 3; + int matchData[matchDataElementCount]; + + int const matchCode = pcre_exec(m_filterCompiledRegex, NULL, name.getName().c_str(), name.getName().length(), 0, 0, matchData, matchDataElementCount); + bool const result = (matchCode >= 0); + + if (matchCode < -1) + { + fprintf(stderr, "ERROR: pcre_exec() failed, error code [%d].\n", matchCode); + return false; + } + + return result; +} // TemplateDefinitionFile::isValidTemplateName + +/** + * Writes file-level comments. + * + * @param fp the file to write to + */ +void TemplateDefinitionFile::writeFileComments(File &fp) const +{ + std::vector::const_iterator iter; + for (iter = getFileComments().begin(); iter != getFileComments().end(); ++iter) + { + fp.print("%s\n", (*iter).c_str()); + } +} // TemplateDefinitionFile::writeFileComments + +/** + * Writes the template id tag definition. + * + * @param fp the file to write to + */ +void TemplateDefinitionFile::writeTemplateId(File &fp) const +{ + fp.print("%s\n", TDF_ID_BEGIN); + fp.print("\tenum\n"); + fp.print("\t{\n"); + fp.print("\t\t%s_tag = %s\n", getTemplateName().c_str(), getTemplateId().tagString.c_str()); + fp.print("\t};\n"); + fp.print("%s\n", TDF_ID_END); +} // TemplateDefinitionFile::writeTemplateId + +/** + * Writes the beginning of a class header file. + * + * @param fp the file to write to + */ +void TemplateDefinitionFile::writeClassHeaderBegin(File &fp) const +{ + const char * name = getTemplateName().c_str(); + const char * baseName = getBaseName().c_str(); + const char * baseNamePath = ""; + if (baseName[0] == '\0' && m_templateLocation != LOC_NONE) + { + baseNamePath = "sharedObject/"; + baseName = ROOT_TEMPLATE_NAME; + } + else if(_stricmp(baseName, "tpfTemplate") == 0) + { + baseNamePath = "sharedTemplateDefinition/"; + } + + fp.print("//========================================================================\n"); + fp.print("//\n"); + fp.print("// %s.h\n", name); + fp.print("//\n"); + fp.print("//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be\n"); + fp.print("//overwritten the next time the template definition is compiled. Do not\n"); + fp.print("//make changes to code inside these blocks.\n"); + fp.print("//\n"); + if (getFileComments().size() > 0) + { + writeFileComments(fp); + fp.print("//\n"); + } + fp.print("// copyright 2001 Sony Online Entertainment\n"); + fp.print("//\n"); + fp.print("//========================================================================\n"); + fp.print("\n"); + fp.print("#ifndef _INCLUDED_%s_H\n", name); + fp.print("#define _INCLUDED_%s_H\n", name); + fp.print("\n"); + fp.print("#include \"%s%s.h\"\n", baseNamePath, baseName); + fp.print("#include \"sharedFoundation/DynamicVariable.h\"\n"); + if (m_writeForCompilerFlag) + fp.print("#include \"sharedTemplateDefinition/TpfTemplate.h\"\n"); + else + fp.print("#include \"sharedUtility/TemplateParameter.h\"\n"); + fp.print("\n"); + fp.print("\n"); + fp.print("class Vector;\n"); + fp.print("typedef StructParam StructParamOT;\n"); + if (!m_writeForCompilerFlag) + { + std::map::const_iterator iter; + iter = m_templateMap.find(m_highestVersion); + if (iter != m_templateMap.end()) + (*iter).second->writeHeaderFwdDecls(fp); + } + fp.print("\n"); + fp.print("\n"); + fp.print("class %s : public %s\n", name, baseName); + fp.print("{\n"); + fp.print("public:\n"); + writeTemplateId(fp); + fp.print("public:\n"); + fp.print("\t %s(const std::string & filename);\n", name); + fp.print("\tvirtual ~%s();\n", name); + fp.print("\n"); + fp.print("\tvirtual Tag getId(void) const;\n"); + fp.print("\tvirtual Tag getTemplateVersion(void) const;\n"); + fp.print("\tvirtual Tag getHighestTemplateVersion(void) const;\n"); + if (m_writeForCompilerFlag) + fp.print("\tstatic void install(void);\n"); + else + fp.print("\tstatic void install(bool allowDefaultTemplateParams = true);\n"); + fp.print("\n"); +} // writeClassHeaderBegin + +/** + * Writes the ending of a class header file. + * + * @param fp the file to write to + * @param sourceTemplate the template we are writing code for + */ +void TemplateDefinitionFile::writeClassHeaderEnd(File &fp, const TemplateData & sourceTemplate) const +{ + UNREF(sourceTemplate); + + const char *name = getTemplateName().c_str(); + + fp.print("\n"); + fp.print("private:\n"); + fp.print("\tTag m_templateVersion;\t// the template version\n"); + fp.print("\tbool m_versionOk;\t// flag that the template version loaded is " + "the one we expect\n"); + if (!m_writeForCompilerFlag) + fp.print("\tstatic bool ms_allowDefaultTemplateParams;\t// flag to allow defaut params instead of fataling\n"); + fp.print("\n"); + fp.print("\tstatic void registerMe(void);\n"); + fp.print("\tstatic ObjectTemplate * create(const std::string & filename);\n"); + fp.print("\n"); + fp.print("\t// no copying\n"); + fp.print("\t%s(const %s &);\n", name, name); + fp.print("\t%s & operator =(const %s &);\n", name, name); + fp.print("};\n"); + fp.print("\n"); + fp.print("\n"); + if (m_writeForCompilerFlag) + { + fp.print("inline void %s::install(void)\n", name); + fp.print("{\n"); + } + else + { + fp.print("inline void %s::install(bool allowDefaultTemplateParams)\n", name); + fp.print("{\n"); + fp.print("\tms_allowDefaultTemplateParams = allowDefaultTemplateParams;\n"); + } + sourceTemplate.writeRegisterTemplate(fp, "\t"); + fp.print("}\n"); + fp.print("\n"); + fp.print("\n"); + fp.print("#endif\t// _INCLUDED_%s_H\n", name); +} // TemplateDefinitionFile::writeClassHeaderEnd + +/** + * Writes the beginning of a class source file. + * + * @param fp the file to write to + * @param sourceTemplate the template we are writing code for + */ +void TemplateDefinitionFile::writeClassSourceBegin(File &fp, const TemplateData & sourceTemplate) const +{ + const char *name = getTemplateName().c_str(); + + fp.print("//========================================================================\n"); + fp.print("//\n"); + fp.print("// %s.cpp\n", name); + fp.print("//\n"); + fp.print("//IMPORTANT: Any code between //@BEGIN TFD... and //@END TFD... will be\n"); + fp.print("//overwritten the next time the template definition is compiled. Do not\n"); + fp.print("//make changes to code inside these blocks.\n"); + fp.print("//\n"); + if (getFileComments().size() > 0) + { + writeFileComments(fp); + fp.print("//\n"); + } + fp.print("// copyright 2001 Sony Online Entertainment\n"); + fp.print("//\n"); + fp.print("//========================================================================\n"); + fp.print("\n"); + if (m_writeForCompilerFlag) + { + fp.print("#include \"sharedTemplate/FirstSharedTemplate.h\"\n"); + fp.print("#include \"sharedTemplateDefinition/TemplateData.h\"\n"); + fp.print("#include \"sharedTemplateDefinition/TemplateGlobals.h\"\n", name); + } + else if (m_templateLocation == LOC_CLIENT) + fp.print("#include \"%s\"\n", CLIENT_TEMPLATE_PRECOMPILED_HEADER_NAME); + else if (m_templateLocation == LOC_SERVER) + fp.print("#include \"%s\"\n", SERVER_TEMPLATE_PRECOMPILED_HEADER_NAME); + else + fp.print("#include \"%s\"\n", SHARED_TEMPLATE_PRECOMPILED_HEADER_NAME); + fp.print("#include \"%s.h\"\n", name); + fp.print("#include \"sharedDebug/DataLint.h\"\n"); + fp.print("#include \"sharedFile/Iff.h\"\n"); + if (m_writeForCompilerFlag) + fp.print("#include \"sharedTemplateDefinition/ObjectTemplate.h\"\n"); + else + { + fp.print("#include \"sharedObject/ObjectTemplate.h\"\n"); + fp.print("#include \"sharedObject/ObjectTemplateList.h\"\n"); + sourceTemplate.writeSourceTemplateIncludes(fp); + } + fp.print("#include \n"); + fp.print("\n"); + + if (!m_writeForCompilerFlag) + { + fp.print("const std::string DefaultString(\"\");\n"); + fp.print("const StringId DefaultStringId(\"\", 0);\n"); + fp.print("const Vector DefaultVector(0,0,0);\n"); + fp.print("const TriggerVolumeData DefaultTriggerVolumeData;\n"); + fp.print("\n"); + fp.print("bool %s::ms_allowDefaultTemplateParams = true;\n", name); + } + + fp.print("\n"); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Class constructor.\n"); + fp.print(" */\n"); + fp.print("%s::%s(const std::string & filename)\n", name, name); +// if (sourceTemplate.hasList()) + sourceTemplate.writeSourceLoadedFlagInit(fp); + fp.print("{\n"); +// fp.print("\tsetId(%s);\n", getTemplateId().tagString.c_str()); + fp.print("} // %s::%s\n", name, name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Class destructor.\n"); + fp.print(" */\n"); + fp.print("%s::~%s()\n", name, name); + fp.print("{\n"); + sourceTemplate.writeSourceCleanup(fp); + fp.print("} // %s::~%s\n", name, name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Static function used to register this template.\n"); + fp.print(" */\n"); + fp.print("void %s::registerMe(void)\n", name); + fp.print("{\n"); + fp.print("\tObjectTemplateList::registerTemplate(%s_tag, create);\n", name); + fp.print("} // %s::registerMe\n", name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Creates a %s template.\n", name); + fp.print(" *\n"); + fp.print(" * @return a new instance of the template\n"); + fp.print(" */\n"); + fp.print("ObjectTemplate * %s::create(const std::string & filename)\n", name); + fp.print("{\n"); + fp.print("\treturn new %s(filename);\n", name); + fp.print("} // %s::create\n", name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Returns the template id.\n"); + fp.print(" *\n"); + fp.print(" * @return the template id\n"); + fp.print(" */\n"); + fp.print("Tag %s::getId(void) const\n", name); + fp.print("{\n"); + fp.print("\treturn %s_tag;\n", name); + fp.print("} // %s::getId\n", name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Returns this template's version.\n"); + fp.print(" *\n"); + fp.print(" * @return the version\n"); + fp.print(" */\n"); + fp.print("Tag %s::getTemplateVersion(void) const\n", name); + fp.print("{\n"); + fp.print("\treturn m_templateVersion;\n"); + fp.print("} // %s::getTemplateVersion\n", name); + fp.print("\n"); + fp.print("/**\n"); + fp.print(" * Returns the highest version of this template or it's base templates.\n"); + fp.print(" *\n"); + fp.print(" * @return the highest version\n"); + fp.print(" */\n"); + fp.print("Tag %s::getHighestTemplateVersion(void) const\n", name); + fp.print("{\n"); + fp.print("\tif (m_baseData == NULL)\n"); + fp.print("\t\treturn m_templateVersion;\n"); + fp.print("\tconst %s * base = dynamic_cast(m_baseData);\n", name, name); + fp.print("\tif (base == NULL)\n"); + fp.print("\t\treturn m_templateVersion;\n"); + fp.print("\treturn std::max(m_templateVersion, base->getHighestTemplateVersion());\n"); + fp.print("} // %s::getHighestTemplateVersion\n", name); + fp.print("\n"); +} // TemplateDefinitionFile::writeClassSourceBegin + +/** + * Main parser for a tdf file. Parses initialization data, creates the header and + * source files, and passes parameter definitions to the appropriate function. + * + * @param fp file to parse + * + * @return 0 on success, -1 on fail + */ +int TemplateDefinitionFile::parse(File &fp) +{ +static const int BUFFER_SIZE = 1024; +int lineLen; +char buffer[BUFFER_SIZE]; +char token[BUFFER_SIZE]; +TemplateData *currentTemplate = NULL; + + cleanup(); + + setTemplateFilename(fp.getFilename().getName()); + + for (;;) + { + lineLen = fp.readLine(buffer, BUFFER_SIZE); + if (lineLen == -1) + break; + else if (lineLen == -2) + return -1; + + const char *line = buffer; + line = getNextWhitespaceToken(line, token); + if (*token == '\0') + break; + + if (strcmp(token, "version") == 0) + { + if (m_templateName.size() == 0) + { + fp.printError("no template name defined"); + return -1; + } + else if (m_templateId.tag == NO_TAG) + { + fp.printError("no template id defined"); + return -1; + } + else if (m_path.getPath().size() == 0) + { + fp.printError("no path defined"); + return -1; + } + else if (m_compilerPath.getPath().size() == 0) + { + fp.printError("no compiler path defined"); + return -1; + } +// if (m_baseName.size() == 0 && m_templateName != ROOT_TEMPLATE_NAME) +// m_baseName = ROOT_TEMPLATE_NAME; + line = getNextWhitespaceToken(line, token); + int version = atoi(token); + if (version < 0 || version > 9999) + { + fp.printError("version out of range"); + return -1; + } + if (m_templateMap.find(version) != m_templateMap.end()) + { + fp.printError("version already defined"); + return -1; + } + if (version > m_highestVersion) + m_highestVersion = version; + + currentTemplate = new TemplateData(version, *this); + m_templateMap[version] = currentTemplate; + } + else if (currentTemplate != NULL) + { + line = currentTemplate->parseLine(fp, buffer, token); + if (line == CHAR_ERROR) + return -1; + } + else if (*token == '/' && *(token + 1) == '/') + { + if (m_baseName.size() == 0 && m_templateId.tag == NO_TAG) + m_fileComments.push_back(buffer); + } + else if (strcmp(token, "base") == 0) + { + if (m_baseName.size() != 0) + { + fp.printError("base name already defined"); + return -1; + } + line = getNextWhitespaceToken(line, token); + setBaseFilename(token); + + // load and parse the base template + Filename baseFileName = fp.getFilename(); + baseFileName.setName(token); + File baseFp(baseFileName, "rt"); + if (!baseFp.isOpened()) + { + fp.printError("unable to open base template definition"); + return -1; + } + if (m_baseDefinitionFile == NULL) + m_baseDefinitionFile = new TemplateDefinitionFile; + else + m_baseDefinitionFile->cleanup(); + int result = m_baseDefinitionFile->parse(baseFp); + if (result != 0) + return result; + } + else if (strcmp(token, "id") == 0) + { + if (m_templateId.tag != NO_TAG) + { + fp.printError("template id already defined"); + return -1; + } + line = getNextWhitespaceToken(line, token); + if (strlen(token) != 4) + { + fp.printError("id not 4 characters"); + return -1; + } + m_templateId.tag = ConvertStringToTag(token); + m_templateId.tagString = ConvertStringToTagString(token); + } + else if (strcmp(token, "templatename") == 0) + { + line = getNextWhitespaceToken(line, token); + m_templateNameFilter = token; + + //-- Attempt to compile the regex. + if (m_filterCompiledRegex != NULL) + { + // First free the existing compiled regex. + RegexServices::freeMemory(m_filterCompiledRegex); + m_filterCompiledRegex = NULL; + } + + //-- Compile the new regex. + char const *errorString = NULL; + int errorOffset = 0; + + m_filterCompiledRegex = pcre_compile(m_templateNameFilter.c_str(), 0, &errorString, &errorOffset, NULL); + WARNING(m_filterCompiledRegex == NULL, ("TemplateDefinitionFile::parse(): pcre_compile() failed, error=[%s], errorOffset=[%d], regex text=[%s].", errorString, errorOffset, m_templateNameFilter.c_str())); + } + else if (strcmp(token, "clientpath") == 0 || + strcmp(token, "serverpath") == 0 || + strcmp(token, "sharedpath") == 0) + { + if (m_path.getPath().size() != 0) + { + fp.printError("path already defined"); + return -1; + } + if (strcmp(token, "clientpath") == 0) + m_templateLocation = LOC_CLIENT; + else if (strcmp(token, "serverpath") == 0) + m_templateLocation = LOC_SERVER; + else + m_templateLocation = LOC_SHARED; + line = getNextWhitespaceToken(line, token); + m_path.setPath(token); + m_path.prependPath(fp.getFilename()); + // reset the template name to add the corrent prefix to the template + // name + setTemplateFilename(m_templateFilename); + if (!m_baseFilename.empty()) + setBaseFilename(m_baseFilename); + } + else if (strcmp(token, "compilerpath") == 0) + { + if (m_compilerPath.getPath().size() != 0) + { + fp.printError("compiler path already defined"); + return -1; + } + line = getNextWhitespaceToken(line, token); + m_compilerPath.setPath(token); + m_compilerPath.prependPath(fp.getFilename()); + } + else + { + char errbuf[2048]; + sprintf(errbuf, "I don't know how to handle this line!: <%s>. " + "Barfed on token <%s>.", buffer, token); + fp.printError(errbuf); + return -1; + } + } + return 0; +} // TemplateDefinitionFile::parse diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.h new file mode 100644 index 00000000..82487e67 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateDefinitionFile.h @@ -0,0 +1,159 @@ +//======================================================================== +// +// TemplateDefinitionFile.h - a template definition file interpreter. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_TemplateDefinitionFile_H +#define _INCLUDED_TemplateDefinitionFile_H + +#include "pcre.h" +#include "sharedFoundation/Tag.h" +#include "TemplateData.h" + +class File; + + +class TemplateDefinitionFile +{ +public: + TemplateDefinitionFile(void); + ~TemplateDefinitionFile(); + + void setTemplateFilename(const std::string &name); + void setBaseFilename(const std::string &name); + + bool isWriteForCompiler(void) const; + void setWriteForCompiler(bool flag); + + const std::string & getTemplateNameFilter(void) const; + bool isValidTemplateName(const Filename & name) const; + + void writeFileComments(File &fp) const; + void writeTemplateId(File &fp) const; + void writeClassHeaderBegin(File &fp) const; + void writeClassHeaderEnd(File &fp, const TemplateData & sourceTemplate) const; + void writeClassSourceBegin(File &fp, const TemplateData & sourceTemplate) const; + + int parse(File &fp); + + const Filename & getPath(void) const; + const Filename & getCompilerPath(void) const; + TemplateLocation getTemplateLocation(void) const; + TemplateData * getTemplateData(int version) const; + const std::vector & getFileComments(void) const; + const std::string & getTemplateName(void) const; + const std::string & getTemplateFilename(void) const; + const std::string & getBaseName(void) const; + const std::string & getBaseFilename(void) const; + const TemplateDefinitionFile * getBaseDefinitionFile(void) const; + const TagInfo & getTemplateId(void) const; + int getHighestVersion(void) const; + +private: + void cleanup(void); + + Filename m_path; + Filename m_compilerPath; + TemplateLocation m_templateLocation; + std::map m_templateMap; + std::vector m_fileComments; + std::string m_templateName; + std::string m_templateFilename; + std::string m_baseName; + std::string m_baseFilename; + TemplateDefinitionFile * m_baseDefinitionFile; + TagInfo m_templateId; + bool m_writeForCompilerFlag; // flag that the C++ we are writing is for the template compiler + int m_highestVersion; + std::string m_templateNameFilter; + pcre *m_filterCompiledRegex; +}; + + +inline void TemplateDefinitionFile::setTemplateFilename(const std::string &name) +{ + m_templateFilename = name; + m_templateName = EnumLocationTypes[m_templateLocation] + + filenameLowerToUpper(name); +} + +inline void TemplateDefinitionFile::setBaseFilename(const std::string &name) +{ + m_baseFilename = name; + m_baseName = EnumLocationTypes[m_templateLocation] + + filenameLowerToUpper(name); +} + +inline bool TemplateDefinitionFile::isWriteForCompiler(void) const +{ + return m_writeForCompilerFlag; +} + +inline const Filename & TemplateDefinitionFile::getPath(void) const +{ + return m_path; +} + +inline const Filename & TemplateDefinitionFile::getCompilerPath(void) const +{ + return m_compilerPath; +} + +inline TemplateLocation TemplateDefinitionFile::getTemplateLocation(void) const +{ + return m_templateLocation; +} + +inline TemplateData *TemplateDefinitionFile::getTemplateData(int version) const +{ + std::map::const_iterator iter = m_templateMap.find(version); + if (iter == m_templateMap.end()) + return NULL; + return (*iter).second; +} + +inline const std::vector &TemplateDefinitionFile::getFileComments(void) const +{ + return m_fileComments; +} + +inline const std::string &TemplateDefinitionFile::getTemplateName(void) const +{ + return m_templateName; +} + +inline const std::string &TemplateDefinitionFile::getTemplateFilename(void) const +{ + return m_templateFilename; +} + +inline const std::string &TemplateDefinitionFile::getBaseName(void) const +{ + return m_baseName; +} + +inline const std::string &TemplateDefinitionFile::getBaseFilename(void) const +{ + return m_baseFilename; +} + +inline const TemplateDefinitionFile * TemplateDefinitionFile::getBaseDefinitionFile(void) const +{ + return m_baseDefinitionFile; +} + +inline const TagInfo & TemplateDefinitionFile::getTemplateId(void) const +{ + return m_templateId; +} + +inline int TemplateDefinitionFile::getHighestVersion(void) const +{ + return m_highestVersion; +} + + +#endif // _INCLUDED_TemplateDefinitionFile_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.cpp new file mode 100644 index 00000000..2b376aa0 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.cpp @@ -0,0 +1,312 @@ +//======================================================================== +// +// TemplateGlobals.cpp - global functions/data +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "TemplateGlobals.h" + +#ifdef WIN32 +bool WindowsUnicode = false; +#endif + + +//============================================================================== +// functions + +/** + * Strips a character string of leading and trailing whitespace. + * + * @param buffer the string to strip + * + * @return the length of the stripped string + */ +int strip(char *buffer) +{ + NOT_NULL(buffer); + + // find the 1st non-space character + char *to = buffer; + char *from = buffer; + while (isspace(*from) && *from != '\0') + ++from; + if (*from == '\0') // entire line was whitespace + return 0; + // move the string forward + if (from != to) + { + while (*from != '\0') + *to++ = *from++; + *to = '\0'; + } + from = buffer + strlen(buffer) - 1; + while (isspace(*from)) + --from; + *(from + 1) = '\0'; + return from - buffer + 1; +} // strip + +/** + * Gets the next whitespace-delimited token from a string. + * + * @param buffer string to get the token from + * @param token buffer to store the token in; assume that it is at least + * the size of buffer + * + * @return the next non-whitespace character in the string after the token, or + * NULL if the end of line has been reached + */ +const char *getNextWhitespaceToken(const char *buffer, char *token) +{ + NOT_NULL(token); + + *token = '\0'; + if (buffer == NULL) + return NULL; + + const char *from = buffer; + char *to = token; + + // skip any leading whitespace + while (isspace(*from) && *from != '\0') + ++from; + if (*from == '\0') + return NULL; + + // copy the token + while (!isspace(*from) && *from != '\0') + *to++ = *from++; + *to = '\0'; + + // skip trailing whitespace + while (isspace(*from) && *from != '\0') + ++from; + if (*from == '\0') + return NULL; + return from; +} // getNextWhitespaceToken + +/** + * Gets the next token from a string. + * + * @param buffer string to get the token from + * @param token buffer to store the token in; assume that it is at least + * the size of buffer + * + * @return the next token, defined by the 1st non-whitespace character in buffer: + * if it is '/' and the next character is '/', NULL + * if it is a double-quote, the text until the next double quote (not including \") + * if it is a symbol, the symbol + * if it is a number, the next characters that make a valid integer or float + * if it is a character, the text until the next whitespace or symbol, not including _ + * if it is NULL, NULL + */ +const char *getNextToken(const char *buffer, char *token) +{ + NOT_NULL(token); + + *token = '\0'; + if (buffer == NULL) + return NULL; + + const char *from = buffer; + char *to = token; + + // skip any leading whitespace + while (isspace(*from) && *from != '\0') + ++from; + if (*from == '\0') + return NULL; + + if (*from == '/' && *(from+1) == '/') + { + // comment + return NULL; + } + else if (isdigit(*from) || + ((*from == '+' || *from == '-') && isdigit(*(from + 1))) + ) + { + *to++ = *from++; + while (isdigit(*from) && *from != '\0') + *to++ = *from++; + if (*from == '.' && isdigit(*(from + 1))) + { + *to++ = *from++; + while (isdigit(*from) && *from != '\0') + *to++ = *from++; + } + } + else if (isalpha(*from)) + { + while ((isalnum(*from) || *from == '_') && *from != '\0') + *to++ = *from++; + } + else if (*from == '"') + { + *to++ = *from++; + while (*from != '"' && *from != '\0') + { + if (*from != '\\') + *to++ = *from++; + else + { + // copy the \ and the next character blindly + *to++ = *from++; + if (*from != '\0') + *to++ = *from++; + } + } + if (*from == '"') + *to++ = *from++; + } + else + { + *to++ = *from++; + } + *to = '\0'; + + // skip trailing whitespace + while (isspace(*from) && *from != '\0') + ++from; + if (*from == '\0') + return NULL; + return from; +} // getNextToken + +/** + * Converts a file name in the form name1_name2_name3 to Name1Name2Name3. + * + * @param filename the lower-case file name + * + * @return the file name converted to upper case + */ +std::string filenameLowerToUpper(const std::string & filename) +{ + size_t count = filename.size(); + std::string newname; + newname.reserve(count); + + for (size_t i = 0; i < count; ++i) + { + if (i > 0) + { + if (filename[i] != '_') + newname += filename[i]; + else + newname += static_cast(toupper(filename[++i])); + } + else + newname += static_cast(toupper(filename[i])); + } + return newname; +} // filenameLowerToUpper + +/** + * Converts a file name in the form Name1Name2Name3 to name1_name2_name3. + * + * @param filename the upper-case file name + * + * @return the file name converted to lower case + */ +std::string filenameUpperToLower(const std::string & filename) +{ + size_t count = filename.size(); + std::string newname; + newname.reserve(count + 5); // add some padding for underscores + + for (size_t i = 0; i < count; ++i) + { + if (i > 0) + { + if (!isupper(filename[i])) + newname += filename[i]; + else + { + newname += '_'; + newname += static_cast(tolower(filename[i])); + } + } + else + newname += static_cast(tolower(filename[i])); + } + return newname; +} // filenameUpperToLower + +/** + * Concatinates two paths together. + * + * @param path1 original path + * @param path2 path to concatinate to path2 + * + * @return the concatinated path + * +std::string concatPaths(const char *path1, const char *path2) +{ + // test for missing path + if (path1 == NULL || *path1 == '\0') + return path2; + if (path2 == NULL || *path2 == '\0') + return path1; + +#ifdef WIN32 + // test if path2 is an absolute path + if ((isalpha(*path2) && *(path2 + 1) == ':') || *path2 == PATH_SEPARATOR) + return path2; +#else + if (*path2 == PATH_SEPARATOR) + return path2; +#endif + + std::string path = path1; + if (path1[strlen(path1) - 1] != PATH_SEPARATOR) + path += PATH_SEPARATOR; + path += path2; + return path; +} // concatPaths +*/ +/** + * Finds the next highest path of a given path. + * + * @param path the original path + * + * @return the new path + * +std::string getNextHighestPath(const char *path) +{ + NOT_NULL(path); + + + + + + + // find the two highest path separators + const char *separator1 = strrchr(path, PATH_SEPARATOR); + if (separator1 == NULL) + { +#ifdef WIN32 + if (isalpha(*path) && *(path + 1) == ':') + return std::string(path, 2); + else + return std::string(); +#else + return std::string(); +#endif + } + else if (separator1 == path) + return std::string(path, 1); +#ifdef WIN32 + else if (isalpha(*path) && *(path + 1) == ':' && separator1 == path + 2) + return std::string(path, 3); +#endif + const char *separator2 = strrchr(separator1 - 1, PATH_SEPARATOR); + if (separator2 == NULL) + return std::string(path, separator1 - path); + + return std::string(path, separator2 - path); +} // getNextHighestPath +*/ diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.h new file mode 100644 index 00000000..ed059d5f --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TemplateGlobals.h @@ -0,0 +1,161 @@ +//======================================================================== +// +// TemplateGlobals.h - program globals +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_TemplateGlobals_H +#define _INCLUDED_TemplateGlobals_H + +#include +#include "sharedFoundation/Tag.h" + +//======================================================================== + +// constants +const int MAX_DIRECTORY_DEPTH = 64; // assume we never have a directory deeper than this + +const char * const ROOT_TEMPLATE_NAME = "ObjectTemplate"; +const char * const COMPILER_ROOT_TEMPLATE_NAME = "TpfTemplate"; + +const char * const CLIENT_TEMPLATE_PRECOMPILED_HEADER_NAME = "clientGame/FirstClientGame.h"; +const char * const SERVER_TEMPLATE_PRECOMPILED_HEADER_NAME = "serverGame/FirstServerGame.h"; +const char * const SHARED_TEMPLATE_PRECOMPILED_HEADER_NAME = "sharedGame/FirstSharedGame.h"; + +const char * const TDF_BEGIN = "//@BEGIN TFD"; +const char * const TDF_END = "//@END TFD"; +const char * const TDF_ID_BEGIN = "//@BEGIN TFD ID"; +const char * const TDF_ID_END = "//@END TFD ID"; +const char * const TDF_TEMPLATE_REFS_BEGIN = "//@BEGIN TFD TEMPLATE REFS"; +const char * const TDF_TEMPLATE_REFS_END = "//@END TFD TEMPLATE REFS"; +const char * const TDF_INSTALL_BEGIN = "//@BEGIN TFD INSTALL"; +const char * const TDF_INSTALL_END = "//@END TFD INSTALL"; +const char * const TDF_INIT_BEGIN = "//@BEGIN TFD INIT"; +const char * const TDF_INIT_END = "//@END TFD INIT"; +const char * const TDF_CLEANUP_BEGIN = "//@BEGIN TFD CLEANUP"; +const char * const TDF_CLEANUP_END = "//@END TFD CLEANUP"; +const char * const TDF_INLINES_BEGIN = "//@BEGIN TFD INLINES"; +const char * const TDF_INLINES_END = "//@END TFD INLINES"; + +const char * const TEMPLATE_DEFINITION_EXTENSION = "tdf"; +const char * const TEMPLATE_EXTENSION = "tpf"; +const char * const IFF_EXTENSION = "iff"; +const char * const TEMPLATE_BINARY_EXSTENSION = IFF_EXTENSION; + +const Tag NO_TAG = TAG(0,0,0,0); +const char * const NO_TAG_STRING = "TAG(0,0,0,0)"; +const Tag DERIVED_TEMPLATE_TAG = TAG(D,E,R,V); +const char * const DERIVED_TEMPLATE_TAG_STRING = "TAG(D,E,R,V)"; + +// this is the error code returned by a function that returns a const char * +const char * const CHAR_ERROR = reinterpret_cast(-1); + + +enum TemplateLocation +{ + LOC_NONE, + LOC_CLIENT, + LOC_SERVER, + LOC_SHARED +}; + +// map enum TemplateLocation to string types +const char * const EnumLocationTypes[] = +{ + "", + "Client", + "Server", + "Shared" +}; + + +//------------------------------------------------------------------------ +// global variables + +#ifdef WIN32 +extern bool WindowsUnicode; +#endif + + +//------------------------------------------------------------------------ +// global functions + +extern int strip(char *buffer); +extern const char *getNextWhitespaceToken(const char *buffer, char *token); +extern const char *getNextToken(const char *buffer, char *token); +extern std::string filenameLowerToUpper(const std::string & filename); +extern std::string filenameUpperToLower(const std::string & filename); +//extern std::string concatPaths(const char *path1, const char *path2); +//extern std::string getNextHighestPath(const char *path); + + +//------------------------------------------------------------------------ +// inline functions + +inline std::string ConvertStringToTagString(const char *string) +{ +static const char SUFFIX[4] = {',', ',', ',', ')'}; + + std::string tagString = "TAG("; + for (int i = 0; i < 4; ++i) + { + tagString += string[i]; + tagString += SUFFIX[i]; + } + return tagString; +} + +inline bool isinteger(const char *string) +{ + char *endptr; + errno = 0; + strtol(string, &endptr, 10); + if (errno == ERANGE || *endptr != '\0') + return false; + return true; +} + +inline bool isfloat(const char *string) +{ + char *endptr; + strtod(string, &endptr); + if (errno == ERANGE || *endptr != '\0') + { + return false; + } + return true; +} + + +template +inline void splitPath( + const std::basic_string & path, + std::vector > & splitPath, + T splitter + ) +{ + typename std::basic_string::size_type pos = 0; + typename std::basic_string::size_type oldPos = 0; + for (;;) + { + oldPos = pos; + pos = path.find(splitter, pos); + if (pos != std::basic_string::npos) + { + splitPath.push_back(path.substr(oldPos, pos - oldPos)); + ++pos; + } + else + { +// splitPath.push_back(path.substr(oldPos, path.size() - oldPos)); + return; + } + } +} + +//======================================================================== + + +#endif // _INCLUDED_TemplateGlobals_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp new file mode 100644 index 00000000..a762863f --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.cpp @@ -0,0 +1,2514 @@ +//======================================================================== +// +// TpfFile.cpp - a template file interpreter. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "sharedTemplateDefinition/TpfFile.h" + +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/CompilerDynamicVariableParamData.h" +#include "sharedTemplateDefinition/CompilerIntegerParam.h" +#include "sharedTemplateDefinition/TemplateGlobals.h" +#include "sharedTemplateDefinition/TpfTemplate.h" +#include "UnicodeUtils.h" + +#include + +#ifdef WIN32 +#include +#endif // WIN32 + + +/** + * Class constructor. + */ +TpfFile::TpfFile(void) : + m_template(NULL), + m_baseTemplateName(), + m_currTemplateDef(NULL), + m_templateData(NULL), + m_highestTemplateData(NULL), + m_parameter(NULL), + m_path(), + m_iffPath(), + m_templateLocation(LOC_NONE) +// m_checkParameters(true) +{ +} // TpfFile::TpfFile + +/** + * Class destructor. + */ +TpfFile::~TpfFile() +{ + cleanup(); +} // TpfFile::~TpfFile + +/** + * Resets class variables. + */ +void TpfFile::cleanup(void) +{ + m_parameter = NULL; + m_fp.close(); + if (m_template != NULL) + { + delete m_template; + m_template = NULL; + } + m_currTemplateDef = NULL; + IGNORE_RETURN(m_baseTemplateName.erase()); +} // TpfFile::cleanup + +/** + * Prints an error when an integer param could go below the minimum limit for + * the param. + */ +void TpfFile::printMinIntError(void) +{ + char numbuf[16]; + sprintf(numbuf, "%d", m_parameter->min_int_limit); + std::string errbuf = "number cannot be lower than the min limit for this " + "parameter ("; + errbuf += numbuf; + errbuf += ")"; + m_fp.printError(errbuf.c_str()); +} // TpfFile::printMinIntError + +/** + * Prints an error when an integer param could go below the maximum limit for + * the param. + */ +void TpfFile::printMaxIntError(void) +{ + char numbuf[16]; + sprintf(numbuf, "%d", m_parameter->max_int_limit); + std::string errbuf = "number cannot be higher than the max limit for this " + "parameter ("; + errbuf += numbuf; + errbuf += ")"; + m_fp.printError(errbuf.c_str()); +} // TpfFile::printMaxIntError + +/** + * Prints an error when a float param could go below the minimum limit for + * the param. + */ +void TpfFile::printMinFloatError(void) +{ + char numbuf[24]; + sprintf(numbuf, "%f", m_parameter->min_float_limit); + std::string errbuf = "number cannot be lower than the min limit for this " + "parameter ("; + errbuf += numbuf; + errbuf += ")"; + m_fp.printError(errbuf.c_str()); +} // TpfFile::printMinFloatError + +/** + * Prints an error when a float param could go below the maximum limit for + * the param. + */ +void TpfFile::printMaxFloatError(void) +{ + char numbuf[24]; + sprintf(numbuf, "%f", m_parameter->max_float_limit); + std::string errbuf = "number cannot be higher than the max limit for this " + "parameter ("; + errbuf += numbuf; + errbuf += ")"; + m_fp.printError(errbuf.c_str()); +} // TpfFile::printMaxFloatError + +/** + * Reads the next line of the template file for parameters that are split + * across lines. + * + * @return the start of the next line, or CHAR_ERROR on error + */ +const char * TpfFile::goToNextLine(void) +{ + do + { + int lineLen = m_fp.readLine(m_buffer, BUFFER_SIZE); + if (lineLen < 0) + { + if (lineLen == -1) + m_fp.printError("unexpected end-of-file"); + return CHAR_ERROR; + } + IGNORE_RETURN(getNextToken(m_buffer, m_token)); + } while (*m_token == '\0'); + + return m_buffer; +} // TpfFile::goToNextLine + +/** + * Loads a template file into memory and parses it. + * + * @param filename template file to read from + * + * @return 0 on success, -1 on fail + */ +int TpfFile::loadTemplate(const Filename & filename) +{ + int result = 0; + + cleanup(); + + if (!m_fp.open(filename, "rt")) + { + fprintf(stderr, "Cannot open template file %s\n", + m_fp.getFilename().getFullFilename().c_str()); + return -1; + } + + // read the template file and make a template from the data + while (result == 0) + { + int lineLen = m_fp.readLine(m_buffer, BUFFER_SIZE); + if (lineLen == -1) + { + // if we are a base template, check for missing parameters + if (m_highestTemplateData != NULL && m_template != NULL && + !m_highestTemplateData->verifyTemplate(m_template, m_fp)) + { + result = -1; + } + break; + } + else if (lineLen == -2) + { + result = -1; + break; + } + + // parse the 1st token: comment, @flag, or variable name + const char *line = m_buffer; + line = getNextToken(line, m_token); + if (*m_token == '\0' && line == NULL) + { + // empty line or comment + continue; + } + else if (*m_token == '@') + { + result = parseTemplateCommand(line); + } + else if (isalpha(*m_token)) + { + if (m_template == NULL) + { + m_fp.printError("unable to parse parameters, no template class defined"); + return -1; + } + line = parseAssignment(line); + if (line == CHAR_ERROR) + result = -1; + else if (line != NULL) + { + char buffer[1024]; + if (getNextToken(line, buffer)) + { + sprintf(buffer, "excess characters ignored : <%s>", line); + m_fp.printWarning(buffer); + } + } + } + else + { + m_fp.printError("unexpected token at start of line"); + result = -1; + } + } + + if (result == 0) + { + // determine the iff path based on the template directory + m_iffPath = filename.getAbsolutePath(); + std::string::size_type dsrcPos = m_iffPath.find("dsrc"); + if (dsrcPos != std::string::npos) + { + m_iffPath.replace(dsrcPos, strlen("dsrc"), "data"); + } + else + { + m_iffPath = ""; + m_fp.printError("can't find \"dsrc\" in template path"); + result = -1; + } + } + + m_fp.close(); + + return result; +} // TpfFile::loadTemplate + +/** + * Makes client and server template iff files from a template file. + * + * @param filename template file to read from + * + * @return 0 on success, -1 on fail + */ +int TpfFile::makeIffFiles(const Filename & filename) +{ + int result = loadTemplate(filename); + if (result != 0) + return result; + + Filename iffname(NULL, m_iffPath.c_str(), filename.getName().c_str(), + IFF_EXTENSION); + Iff iffFile(1024, true, true); + m_template->save(iffFile); + return WriteIffFile(iffFile, iffname); +} // TpfFile::makeIffFiles + +/** + * Writes iff data to a file. + * + * @param iffData the iff data to write + * @param fileName the file name to write to + * + * @return 0 on success, -1 on fail + */ +int TpfFile::WriteIffFile(Iff & iffData, const Filename & fileName) +{ + int result = 0; + + fileName.verifyAndCreatePath(); + +#ifdef WIN32 + + char currentWorkingDirectory[_MAX_PATH]; + _getcwd(currentWorkingDirectory, sizeof(currentWorkingDirectory)); + + if (WindowsUnicode) + { + // there are problems with long path names in Windows that changing to + // the directory seems to fix + char *buffer = NULL; + DWORD buflen; + // get our current path + buflen = GetFullPathName(".", 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(".", buflen + 1, buffer, NULL); + Unicode::String srcPath = Unicode::narrowToWide(buffer); + delete[] buffer; + srcPath = L"\\\\?\\" + srcPath; + // get the destination path + std::string correctPath(fileName.getDrive() + fileName.getPath()); + buflen = GetFullPathName(correctPath.c_str(), 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(correctPath.c_str(), buflen + 1, buffer, NULL); + Unicode::String destPath = Unicode::narrowToWide(buffer); + delete[] buffer; + destPath = L"\\\\?\\" + destPath; + // change to the destination path + + if (SetCurrentDirectoryW(destPath.c_str()) == 0) + { + fprintf(stderr, "Unable to find directory %s\n", + fileName.getPath().c_str()); + return -1; + } + if (!iffData.write((fileName.getName() + fileName.getExtension()).c_str(), true)) + { + result = -1; + } + } + else + { + char *buffer = NULL; + DWORD buflen; + // get our current path + buflen = GetFullPathName(".", 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(".", buflen + 1, buffer, NULL); + std::string srcPath = buffer; + delete[] buffer; + // get the destination path + std::string correctPath(fileName.getDrive() + fileName.getPath()); + buflen = GetFullPathName(correctPath.c_str(), 0, buffer, NULL); + buffer = new char[buflen + 1]; + buflen = GetFullPathName(correctPath.c_str(), buflen + 1, buffer, NULL); + std::string destPath = buffer; + delete[] buffer; + // change to the destination path + if (destPath.size() >= MAX_PATH) + { + fprintf(stderr, "Path to iff file is too long for your version of " + "Windows to handle, use Windows 2000 or Linux\n"); + return -1; + } + + if (SetCurrentDirectory(destPath.c_str()) == 0) + { + fprintf(stderr, "Unable to find or create directory %s\n", fileName.getPath().c_str()); + return -1; + } + + if (!iffData.write((fileName.getName() + fileName.getExtension()).c_str(), true)) + { + result = -1; + } + } + + // Go back to the previous current working directory + + _chdir(currentWorkingDirectory); +#else + if (!iffData.write(fileName.getFullFilename().c_str(), true)) + result = -1; +#endif + + if (result != 0) + { + fprintf(stderr, "Unable to write to file %s\n", + fileName.getFullFilename().c_str()); + } + + return result; +} // TpfFile::WriteIffFile + +/** + * Adds or removes parameters from a template based on the current template + * definition. + * + * @param filename template file to read from + * + * @return 0 on success, -1 on fail + * +int TpfFile::updateTemplate(const Filename & filename) +{ +int result = 0; + + cleanup(); + + File temp_fp; + if (!temp_fp.open(tmpnam(NULL), "wt")) + { + fprintf(stderr, "error opening temp file for template replacement\n"); + return -1; + } + + if (!m_fp.open(filename, "rt")) + { + fprintf(stderr, "Cannot open template file %s\n", + m_fp.getFilename().getFullFilename().c_str()); + return -1; + } + + // read the template file and make a template from the data + while (result == 0) + { + int lineLen = m_fp.readLine(m_buffer, BUFFER_SIZE); + if (lineLen == -1) + { + break; + } + else if (lineLen == -2) + { + result = -1; + break; + } + + // parse the 1st token: comment, @flag, or variable name + const char *line = m_buffer; + line = getNextToken(line, m_token); + if (*m_token == '\0' && line == NULL) + { + // empty line or comment + if (temp_fp.puts(m_buffer) < 0) + { + m_fp.printError("error writing to temp file"); + result = -1; + } + } + else if (*m_token == '@') + { + // @base or @class + const char *templine = getNextToken(line, m_token); + if (templine == NULL) + { + m_fp.printEolError(); + return -1; + } + if (strcmp(m_token, "base") == 0) + { + // this is a derived template, ignore + temp_fp.close(); + remove(temp_fp.getFilename()); + return 0; + } + if (temp_fp.puts(m_buffer) < 0) + { + m_fp.printError("error writing to temp file"); + result = -1; + } + else + { + // if we are a base template, check for missing parameters + if (m_highestTemplateData != NULL && m_template != NULL) + { + m_highestTemplateData->updateTemplate(m_template, temp_fp); + } + result = parseTemplateCommand(line); + } + } + else if (isalpha(*m_token)) + { + m_parameter = m_templateData->getParameter(m_token); + if (m_parameter == NULL) + { + } + else + { + } + } + else + { + m_fp.printError("unexpected token at start of line"); + result = -1; + } + } + + if (result != 0) + { + temp_fp.close(); + remove(temp_fp.getFilename()); + } + return result; +} // TpfFile::updateTemplate +*/ +/** + * Parses an '@' template command. + * + * @param line buffer containing the command + * + * @return 0 on success, -1 on error + */ +int TpfFile::parseTemplateCommand(const char *line) +{ + line = getNextToken(line, m_token); + if (line == NULL) + { + m_fp.printEolError(); + return -1; + } + if (strcmp(m_token, "base") == 0) + { + if (m_template != NULL && !m_template->getBaseTemplateName().empty()) + { + m_fp.printError("base template already defined"); + return -1; + } + line = getNextWhitespaceToken(line, m_token); + if (isalpha(*m_token)) + { + if (m_template != NULL) + { + if (m_template->setBaseTemplateName(m_token) != 0) + { + std::string error("Unable to open base template: "); + error += m_token; + + m_fp.printError(error.c_str()); + return -1; + } + } + else + m_baseTemplateName = m_token; + } + else + { + m_fp.printError("invalid base name"); + return -1; + } + } + else if (strcmp(m_token, "class") == 0) + { + line = getNextToken(line, m_token); + if (isalpha(*m_token)) + { + // if we are a base template, check for missing parameters + // @todo: fix so we can verify non-base templates + if (m_highestTemplateData != NULL && m_template != NULL && + !m_highestTemplateData->verifyTemplate(m_template, m_fp)) + { + return -1; + } + + // load the template definition for the class + Filename defName(m_fp.getFilename().getDrive().c_str(), m_fp.getFilename().getPath().c_str(), m_token, TEMPLATE_DEFINITION_EXTENSION); + File fp; + int i = 0; + while (!fp.exists(defName) && i < MAX_DIRECTORY_DEPTH) + { + defName.appendPath(NEXT_HIGHER_PATH); + ++i; + } + if (i == MAX_DIRECTORY_DEPTH) + { + std::string errMsg = "unable to open template definition file " + + defName.getName(); + m_fp.printError(errMsg.c_str()); + return -1; + } + if (!fp.open(defName, "rt")) + { + return -1; + } + int result = 0; + + if(m_currTemplateDef == NULL) + { + result = m_templateDef.parse(fp); + m_currTemplateDef = &m_templateDef; + m_highestTemplateData = m_templateDef.getTemplateData(m_templateDef. + getHighestVersion()); + } + else + { + const TemplateData *templateDataChild = m_currTemplateDef->getTemplateData(m_currTemplateDef->getHighestVersion()); + + bool lookingForMatchingData = true; + + while(lookingForMatchingData) + { + if(templateDataChild == NULL) // DHERMAN Check here for template definition names not matching + { + char errbuf[256]; + + sprintf(errbuf, "can't find template definition %s", defName.getName().c_str()); + m_fp.printError(errbuf); + result = -1; + + lookingForMatchingData = false; + } + else + { + m_currTemplateDef = templateDataChild->getTdfParent(); + + if(templateDataChild->getName() == defName.getName()) + { + templateDataChild = m_currTemplateDef->getTemplateData(m_currTemplateDef->getHighestVersion()); + } + else + { + lookingForMatchingData = false; + } + } + } + } + + fp.close(); + if (result != 0) + return result; + + line = getNextToken(line, m_token); + if (!isdigit(*m_token)) + { + m_fp.printError("no version given for template definition class"); + return -1; + } + int version = static_cast(atol(m_token)); + + m_templateData = m_currTemplateDef->getTemplateData(version); + if (m_templateData == NULL) + { + char errbuf[256]; + sprintf(errbuf, "can't find version %d in template definition %s", + version, defName.getName().c_str()); + m_fp.printError(errbuf); + return -1; + } + + // check if the template filename matches the definition filter + if (!m_currTemplateDef->isValidTemplateName(m_fp.getFilename())) + { + fprintf(stderr, "Invalid template name, match filter = %s\n", m_currTemplateDef->getTemplateNameFilter().c_str()); + return -1; + } + + if (m_template == NULL) + { + // this is the highest class level, make a blank template + // with it + const TagInfo & templateId = m_currTemplateDef->getTemplateId(); + m_template = dynamic_cast(TpfTemplate::createTemplate( + templateId.tag)); + if (m_template == NULL) + { + m_fp.printError("Unable to create template class. May not be installed."); + return -1; + } + m_template->setParentFile(this); + if (!m_baseTemplateName.empty()) + { + if (m_template->setBaseTemplateName(m_baseTemplateName) != 0) + { + std::string error("Unable to open base template: "); + error += m_baseTemplateName; + + m_fp.printError(error.c_str()); + return -1; + } + m_baseTemplateName.clear(); + } + m_path = m_currTemplateDef->getPath(); + m_templateLocation = m_currTemplateDef->getTemplateLocation(); + } + else + { + // we are moving down the hierarchy + // do we care? (only if we have duplicate parameter names) + } + } + else + { + m_fp.printError("invalid class name"); + return -1; + } + } + else if (strcmp(m_token, "enum_header") == 0) + { + // line should be a fully pathed name of a c-style header file + // containing enum definitions + return parseEnumHeader(line); + } + else + { + m_fp.printError("unknown template command"); + return -1; + } + return 0; +} // TpfFile::parseTemplateCommand + +/** + * Parses a c-style header containing enum definitions. + * + * @param headerName the file name of the header file + * + * @return 0 on success, -1 on fail + */ +int TpfFile::parseEnumHeader(const char * headerName) +{ +static int nextEnumNameId = 0; +enum +{ + PARSE_ENUM_TOKEN, + PARSE_ENUM_NAME, + PARSE_START_BRACKET, + PARSE_END_BRACKET, + PARSE_ENUM_DEF, + PARSE_ENUM_ASSIGNMENT, + PARSE_ENUM_VALUE +} parseState = PARSE_ENUM_TOKEN; +TemplateData::EnumList * enumList = NULL; // current list being defined +TemplateData::EnumData * enumData = NULL; // current item being defined +int currentEnumValue = 0; + + File fp; + Filename headerFilename(NULL, NULL, headerName, NULL); + int i = 0; + while (!fp.exists(headerFilename) && i < MAX_DIRECTORY_DEPTH) + { + headerFilename.prependPath(NEXT_HIGHER_PATH); + ++i; + } + if (i == MAX_DIRECTORY_DEPTH) + { + m_fp.printError("Can't open enum header file"); + return -1; + } + if (!fp.open(headerFilename, "rt")) + return -1; + + for (;;) + { + int lineLen = fp.readLine(m_buffer, BUFFER_SIZE); + if (lineLen == -1) + { + if (parseState == PARSE_ENUM_TOKEN) + return 0; + fp.printError("unexpected end of file"); + return -1; + } + else if (lineLen == -2) + { + return -1; + } + + const char * line = m_buffer; + while (line != NULL) + { + const char * templine = getNextToken(line, m_token); + switch (parseState) + { + case PARSE_ENUM_TOKEN : + if (strcmp(m_token, "enum") != 0) + break; + parseState = PARSE_ENUM_NAME; + break; + case PARSE_ENUM_NAME : + { + std::string enumName; + if (isalpha(*m_token)) + { + enumName = m_token; + } + else + { + char tempBuf[64]; + sprintf(tempBuf, "enumName%d", nextEnumNameId++); + enumName = tempBuf; + templine = line; + } + std::pair result = + m_enumHeaderMap.insert(std::make_pair(enumName, + TemplateData::EnumList())); + if (!result.second) + { + fp.printError("can't create enum list"); + return -1; + } + enumList = &(*result.first).second; + currentEnumValue = 0; + parseState = PARSE_START_BRACKET; + } + break; + case PARSE_START_BRACKET : + if (*m_token == '{') + parseState = PARSE_END_BRACKET; + break; + case PARSE_END_BRACKET : + if (*m_token == '}') + { + enumList = NULL; + parseState = PARSE_ENUM_TOKEN; + } + else + { + parseState = PARSE_ENUM_DEF; + templine = line; + } + break; + case PARSE_ENUM_DEF: + if (isalpha(*m_token) && enumList != NULL) + { + enumList->push_back(TemplateData::EnumData()); + enumData = &enumList->back(); + enumData->name = m_token; + parseState = PARSE_ENUM_ASSIGNMENT; + } + else + parseState = PARSE_END_BRACKET; + break; + case PARSE_ENUM_ASSIGNMENT: + if (*m_token == '=') + parseState = PARSE_ENUM_VALUE; + else + { + enumData->value = currentEnumValue++; + templine = line; + enumData = NULL; + parseState = PARSE_END_BRACKET; + } + break; + case PARSE_ENUM_VALUE: + if (isalpha(*m_token)) + { + enumData->valueName = m_token; + TemplateData::EnumList::const_iterator iter; + for (iter = enumList->begin(); iter != enumList->end(); ++iter) + { + if ((*iter).name == std::string(enumData->valueName)) + { + break; + } + } + if (iter == enumList->end()) + { + fp.printError("can't find matching enum value"); + return -1; + } + currentEnumValue = (*iter).value; + enumData->value = currentEnumValue++; + enumData = NULL; + parseState = PARSE_END_BRACKET; + } + else + { + fp.printError("expected enum value"); + return -1; + } + break; + default: + break; + } + line = templine; + } + } +} // TpfFile::parseEnumHeader + +/** + * Finds the integral value associated with an enum value (from a C header). + * + * @param enumValue the enumeration value + * + * @return the value, or INVALID_ENUM_RESULT if not found + */ +int TpfFile::getEnumHeaderValue(const char * enumValue) const +{ + NOT_NULL(enumValue); + + TemplateData::EnumMap::const_iterator mapIter; + for (mapIter = m_enumHeaderMap.begin(); mapIter != m_enumHeaderMap.end(); ++mapIter) + { + const TemplateData::EnumList &elist = (*mapIter).second; + TemplateData::EnumList::const_iterator listIter; + for (listIter = elist.begin(); listIter != elist.end(); ++listIter) + { + if ((*listIter).name == enumValue) + return (*listIter).value; + } + } + + return INVALID_ENUM_RESULT; +} // TpfFile::getEnumHeaderValue(const char *) + +/** + * Parses a parameter assignment. m_token should contain the parameter name on + * entry + * + * @param line buffer containing the assignment statement + * + * @return character where parsing stopped on success, -1 on error + */ +const char * TpfFile::parseAssignment(const char *line) +{ + NOT_NULL(m_template); + + // get the parameter type info + m_parameter = m_templateData->getParameter(m_token); + if (m_parameter == NULL) + { + std::string errmsg = "cannot find parameter "; + errmsg += m_token; + m_fp.printError(errmsg.c_str()); + return CHAR_ERROR; + } + + // get the array index (if any) + int arrayIndex = -1; + line = getNextToken(line, m_token); + + if (*m_token == '[') + { + if (m_parameter->list_type != TemplateData::LIST_INT_ARRAY && + m_parameter->list_type != TemplateData::LIST_ENUM_ARRAY) + { + m_fp.printError("non-array parameter being assigned as array"); + return CHAR_ERROR; + } + if (line == NULL) + { + // we need to read the next line to continue parsing + line = goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + // get the index, either a number or enum name + line = getNextToken(line, m_token); + if (isdigit(*m_token)) + arrayIndex = atoi(m_token); + else + { + arrayIndex = m_highestTemplateData->getEnumValue( + m_parameter->enum_list_name, m_token); + if (arrayIndex == INVALID_ENUM_RESULT) + { + m_fp.printError("enum value not found - invalid for index type"); + return CHAR_ERROR; + } + } + if (arrayIndex < 0 || arrayIndex >= m_parameter->list_size) + { + m_fp.printError("array index out of range"); + return CHAR_ERROR; + } + // check for the ending ] + line = getNextToken(line, m_token); + if (line == NULL) + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if (*m_token != ']') + { + m_fp.printError("expected ] at end of parameter array index"); + return CHAR_ERROR; + } + line = getNextToken(line, m_token); + if (line == NULL) + { + m_fp.printEolError(); + return CHAR_ERROR; + } + } + else if (line == NULL) + { + m_fp.printEolError(); + return CHAR_ERROR; + } + + // m_token should now be = + if (*m_token != '=') + { + m_fp.printError("expected = after parameter name"); + return CHAR_ERROR; + } + + switch (m_parameter->type) + { + case TemplateData::TYPE_INTEGER: + line = parseValue(getIntegerParam2, + parseIntegerParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_FLOAT: + line = parseValue(getFloatParam2, + parseFloatParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_BOOL: + line = parseValue(getBoolParam2, + parseBoolParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_STRING: + line = parseValue(getStringParam2, + parseStringParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_STRINGID: + line = parseValue(getStringIdParam2, + parseStringIdParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_FILENAME: + line = parseValue(getStringParam2, + parseFilenameParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_VECTOR: + line = parseValue(getVectorParam2, + parseVectorParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_TEMPLATE: + line = parseValue(getStringParam2, + parseTemplateParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_ENUM: + line = parseValue(getIntegerParam2, + parseEnumParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_DYNAMIC_VAR: + line = parseValue(getDynamicVariableParam2, + parseDynamicVariableParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_STRUCT: + line = parseValue(getStructParam2, + parseStructParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_TRIGGER_VOLUME: + line = parseValue(getTriggerVolumeParam2, + parseTriggerVolumeParameter2, *this, line, arrayIndex); + break; + case TemplateData::TYPE_COMMENT: + case TemplateData::TYPE_NONE: + default: + break; + } + + return line; +} // TpfFile::parseAssignment + +/** + * Parses an integer parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseIntegerParameter(CompilerIntegerParam & param, const char *line) +{ + NOT_NULL(line); + + const char * tempLine = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList( + parseIntegerParameter2, *this, param, tempLine); + } + else if (isinteger(m_token) || isalpha(*m_token)) + { + int value = m_highestTemplateData->parseIntValue(m_fp, line, &line, m_token); + if (line == CHAR_ERROR) + return CHAR_ERROR; + + if (line != NULL && *line == 'd') + { + // rolling die + int base = 0; + int num_dice = value; + if (num_dice < 1) + { + m_fp.printError("number of dice < 1"); + return CHAR_ERROR; + } + ++line; + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if (!isinteger(m_token)) + { + m_fp.printError("can't find die sides value"); + return CHAR_ERROR; + } + int num_sides = atoi(m_token); + if (num_sides < 2) + { + m_fp.printError("number of die sides < 2"); + return CHAR_ERROR; + } + line = getNextToken(line, m_token); + if (*m_token != '\0') + { + if (!isinteger(m_token)) + { + m_fp.printError("can't find base value"); + return CHAR_ERROR; + } + base = atoi(m_token); + } + // check lower and upper limits + if (num_dice + base < m_parameter->min_int_limit) + { + printMinIntError(); + return CHAR_ERROR; + } + if (num_dice * num_sides + base > m_parameter->max_int_limit) + { + printMaxIntError(); + return CHAR_ERROR; + } + param.setValue(num_dice, num_sides, base); + } + else if (line != NULL && *line == '.' && *(line+1) == '.') + { + // range + int min_value = value; + int max_value = INT_MAX; + line += 2; + tempLine = getNextToken(line, m_token); + if (*m_token != '\0' && (isinteger(m_token) || isalpha(*m_token))) + { + max_value = m_highestTemplateData->parseIntValue(m_fp, line, &line, m_token); + if (line == CHAR_ERROR) + return CHAR_ERROR; + } + else if (*m_token == '\0') + line = tempLine; + if (min_value < m_parameter->min_int_limit) + { + printMinIntError(); + return CHAR_ERROR; + } + if (max_value > m_parameter->max_int_limit) + { + printMaxIntError(); + return CHAR_ERROR; + } + if (min_value > max_value) + { + m_fp.printError("min value greater than max value"); + return CHAR_ERROR; + } + param.setValue(min_value, max_value); + } + else + { + if (value < m_parameter->min_int_limit) + { + printMinIntError(); + return CHAR_ERROR; + } + if (value > m_parameter->max_int_limit) + { + printMaxIntError(); + return CHAR_ERROR; + } + param.setValue(value); + + // if this integer was defined by enum value(s), we need to save off + // a vector of the enums used to make the integer + if (isalpha(*m_token)) + { + tempLine = m_token; + char tempBuffer[64]; + std::vector enumList; + while (tempLine != NULL) + { + tempLine = getNextToken(tempLine, tempBuffer); + if (isalpha(*tempBuffer)) + enumList.push_back(tempBuffer); + } + param.addSourceEnumList(enumList); + } + } + } + else if (*m_token == '.' && tempLine != NULL && *tempLine == '.') + { + // range with lower bound of INT_MIN + line = tempLine + 1; + int max_value = INT_MAX; + tempLine = getNextToken(line, m_token); + if (*m_token != '\0' && (isinteger(m_token) || isalpha(*m_token))) + { + max_value = m_highestTemplateData->parseIntValue(m_fp, line, &line, m_token); + if (line == CHAR_ERROR) + return CHAR_ERROR; + } + else if (*m_token == '\0') + line = tempLine; + if (INT_MIN < m_parameter->min_int_limit) + { + printMinIntError(); + return CHAR_ERROR; + } + if (max_value > m_parameter->max_int_limit) + { + printMaxIntError(); + return CHAR_ERROR; + } + param.setValue(INT_MIN, max_value); + } + else if (*m_token == '(') + { + // offset from base template value + line = getNextToken(tempLine, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if ((*m_token != '+' && *m_token != '-') || *(m_token + 1) != '\0') + { + m_fp.printError("invalid delta flag (expected '+' or '-')"); + return CHAR_ERROR; + } + char deltaType = *m_token; + param.setDeltaType(deltaType); + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if (*m_token != ')') + { + m_fp.printError("expected ')' after delta flag"); + return CHAR_ERROR; + } + line = parseIntegerParameter(param, line); + if (line != NULL && *line == '%') + { + // % offset from base value + line = getNextToken(line, m_token); + if (deltaType == '+') + deltaType = '='; + else + deltaType = '_'; + param.setDeltaType(deltaType); + } + } + else + { + m_fp.printError("invalid value for integer assignment"); + return CHAR_ERROR; + } + return line; +} // parseIntegerParameter + +/** + * Parses a float parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseFloatParameter(FloatParam & param, const char *line) +{ + NOT_NULL(line); + + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList( + parseFloatParameter2, *this, param, line); + } + else if (isfloat(m_token)) + { + if (line != NULL && *line == '.' && *(line+1) == '.') + { + // range + float min_value = static_cast(atof(m_token)); + float max_value = FLT_MAX; + line += 2; + const char * tempLine = getNextToken(line, m_token); + if (*m_token != '\0' && isfloat(m_token)) + { + max_value = static_cast(atof(m_token)); + line = tempLine; + } + else if (*m_token == '\0') + line = tempLine; + if (min_value < m_parameter->min_float_limit) + { + printMinFloatError(); + return CHAR_ERROR; + } + if (max_value > m_parameter->max_float_limit) + { + printMaxFloatError(); + return CHAR_ERROR; + } + if (min_value > max_value) + { + m_fp.printError("min value greater than max value"); + return CHAR_ERROR; + } + param.setValue(min_value, max_value); + } + else + { + float value = static_cast(atof(m_token)); + if (value < m_parameter->min_float_limit) + { + printMinFloatError(); + return CHAR_ERROR; + } + if (value > m_parameter->max_float_limit) + { + printMaxFloatError(); + return CHAR_ERROR; + } + param.setValue(value); + } + } + else if (*m_token == '.' && line != NULL && *line == '.') + { + // range with lower bound of -FLT_MAX + ++line; + float max_value = FLT_MAX; + const char * tempLine = getNextToken(line, m_token); + if (*m_token != '\0' && isfloat(m_token)) + { + max_value = static_cast(atof(m_token)); + line = tempLine; + } + else if (*m_token == '\0') + line = tempLine; + if (-FLT_MAX < m_parameter->min_float_limit) + { + printMinFloatError(); + return CHAR_ERROR; + } + if (max_value > m_parameter->max_float_limit) + { + printMaxFloatError(); + return CHAR_ERROR; + } + param.setValue(-FLT_MAX, max_value); + } + else if (*m_token == '(') + { + // offset from base template value + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if ((*m_token != '+' && *m_token != '-') || *(m_token + 1) != '\0') + { + m_fp.printError("invalid delta flag (expected '+' or '-')"); + return CHAR_ERROR; + } + char deltaType = *m_token; + param.setDeltaType(deltaType); + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if (*m_token != ')') + { + m_fp.printError("expected ')' after delta flag"); + return CHAR_ERROR; + } + line = parseFloatParameter(param, line); + if (line != NULL && *line == '%') + { + // % offset from base value + line = getNextToken(line, m_token); + if (deltaType == '+') + deltaType = '='; + else + deltaType = '_'; + param.setDeltaType(deltaType); + } + } + else if (isalpha(*m_token)) + { + // check to see if this is a valid enum + int value = m_highestTemplateData->getEnumValue(m_token); + if (value == INVALID_ENUM_RESULT) + { + m_fp.printError("enum name not found"); + return CHAR_ERROR; + } + param.setValue(static_cast(value)); + } + else + { + m_fp.printError("invalid value for float assignment"); + return CHAR_ERROR; + } + return line; +} // TpfFile::parseFloatParameter + +/** + * Parses a bool parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseBoolParameter(BoolParam & param, const char *line) +{ + NOT_NULL(line); + + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList(parseBoolParameter2, *this, param, line); + } + else if (strcmp(m_token, "true") == 0) + { + param.setValue(true); + } + else if (strcmp(m_token, "false") == 0) + { + param.setValue(false); + } + else + { + m_fp.printError("invalid value for boolean assignment"); + return CHAR_ERROR; + } + return line; +} // TpfFile::parseBoolParameter + +/** + * Parses a string parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseStringParameter(StringParam & param, const char *line) +{ + NOT_NULL(line); + + line = getNextToken(line, m_token); + int tokenLen = strlen(m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList(parseStringParameter2, *this, param, line); + } + else if (*m_token == '\"' && *(m_token + tokenLen - 1) == '\"') + { + *(m_token + tokenLen - 1) = '\0'; + param.setValue(m_token + 1); + } + else + { + m_fp.printError("invalid value for string assignment"); + return CHAR_ERROR; + } + return line; +} // TpfFile::parseStringParameter + +/** + * Parses a string id parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseStringIdParameter(StringIdParam & param, const char *line) +{ + NOT_NULL(line); + + const char *templine = getNextToken(line, m_token); + if (*m_token == '{') + { + // weighted list + line = parseWeightedList(parseStringIdParameter2, *this, param, + templine); + } + else + { + StringIdParamData data; + // get the string id table name + line = parseFilenameParameter(data.table, line); + if (line == CHAR_ERROR) + return line; + + // get the string id table index + line = parseStringParameter(data.index, line); + param.setValue(data); + } + return line; +} // TpfFile::parseStringIdParameter + +/** + * Parses a filename parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseFilenameParameter(StringParam & param, const char *line) +{ + NOT_NULL(line); + + line = getNextToken(line, m_token); + int tokenLen = strlen(m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList(parseFilenameParameter2, *this, param, + line); + } + else if (*m_token == '\"' && *(m_token + tokenLen - 1) == '\"') + { + *(m_token + tokenLen - 1) = '\0'; + // @todo: test filename for invalid chars and tweak slashes + Filename localname; + localname.setName(m_token + 1); + std::string lowername = localname.getName(); + for (std::string::size_type i = 0; i < lowername.size(); ++i) + { + if (!islower(lowername[i]) && + !isdigit(lowername[i]) && + lowername[i] != '_') + { + m_fp.printError("Illegal character in filename, only lowercase, " + "numbers, and \"_\" allowed"); + return CHAR_ERROR; + } + } + param.setValue(localname.getFullFilename().c_str()); + } + else + { + m_fp.printError("invalid value for filename assignment"); + return CHAR_ERROR; + } + return line; +} // TpfFile::parseFilenameParameter + +/** + * Parses a vector parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseVectorParameter(VectorParam & param, const char *line) +{ + NOT_NULL(line); + + const char *templine = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList( + parseVectorParameter2, *this, param, templine); + } + else if (isdigit(*m_token) || (*m_token == '.' && *line == '.')) + { + VectorParamData data; + + // assume x, z, radius + data.ignoreY = true; + line = parseFloatParameter(data.x, line); + if (line == CHAR_ERROR) + return line; + line = parseFloatParameter(data.z, line); + if (line == CHAR_ERROR) + return line; + line = parseFloatParameter(data.radius, line); + if (line == CHAR_ERROR) + return line; + // see if there is a fourth value + IGNORE_RETURN(getNextToken(line, m_token)); + if (isdigit(*m_token) || (*m_token == '.' && *line == '.')) + { + // shift values and get radius + data.ignoreY = false; + data.y = data.z; + data.z = data.radius; + line = parseFloatParameter(data.radius, line); + if (line == CHAR_ERROR) + return line; + } + param.setValue(data); + } + else + { + m_fp.printError("invalid value for vector assignment"); + return CHAR_ERROR; + } + return line; +} // TpfFile::parseVectorParameter + +/** + * Parses a template parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseTemplateParameter(StringParam & param, const char *line) +{ + return parseFilenameParameter(param, line); +} // TpfFile::parseTemplateParameter + +/** + * Parses an enum parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseEnumParameter(CompilerIntegerParam & param, const char *line) +{ + NOT_NULL(line); + + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList( + parseEnumParameter2, *this, param, line); + } + else if (isalpha(*m_token)) + { + int value = m_highestTemplateData->getEnumValue( + m_parameter->extendedName, m_token); + if (value == INVALID_ENUM_RESULT) + { + m_fp.printError("enum name not found - invalid for parameter type"); + return CHAR_ERROR; + } + param.setValue(value); + } + else + { + m_fp.printError("invalid value for enum assignment"); + return CHAR_ERROR; + } + return line; +} // TpfFile::parseEnumParameter + +/** + * Parses a DynamicVariable parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseDynamicVariableParameter(DynamicVariableParam & param, + const char *line) +{ + NOT_NULL(line); + + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if (*m_token == '{') + { + // weighted list + line = parseWeightedList( + parseDynamicVariableParameter2, *this, param, line); + return line; + } + if (*m_token == '+') + { + // extending an objevar list + if (m_template != NULL && m_template->getBaseTemplateName().empty()) + { + m_fp.printError("trying to extend an objvar list from a base template"); + return CHAR_ERROR; + } + param.setExtendingBaseList(true); + line = getNextToken(line, m_token); + } + if (*m_token != '[') + { + m_fp.printError("expected [ at start of objvar assignment"); + return CHAR_ERROR; + } + else + { + if (line == NULL) + { + // we need to read the next line to continue parsing + line = goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + // check for empty list + const char *templine = getNextToken(line, m_token); + if (*m_token == ']') + { + param.setIsLoaded(); + return templine; + } + + // set up the incoming objvar as an objvar list + DynamicVariableParamData &data = const_cast + (param.getValue()); + if (data.m_type != DynamicVariableParamData::UNKNOWN) + { + m_fp.printError("objvar parser given non-empty param"); + return CHAR_ERROR; + } + data.m_name = ""; + data.m_type = DynamicVariableParamData::LIST; + data.m_data.lparam = new std::vector; + + line = parseDynamicVariableParameterList(data, line); + if (line != CHAR_ERROR) + param.setIsLoaded(); + } + return line; +} // TpfFile::parseDynamicVariableParameter + +/** + * Parses a DynamicVariable list parameter assignment. + * + * @param param a DynamicVariableParamData containing an empty list + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseDynamicVariableParameterList( + DynamicVariableParamData & data, const char *line) +{ +std::string name; + + NOT_NULL(line); + + if (data.m_type != DynamicVariableParamData::LIST || + data.m_data.lparam == NULL) + { + m_fp.printError("parse objvar list not given a list"); + return CHAR_ERROR; + } + if (data.m_data.lparam->size() != 0) + { + m_fp.printError("parse objvar list not given an empty list"); + return CHAR_ERROR; + } + + // test for empty list + IGNORE_RETURN(getNextToken(line, m_token)); + if (*m_token == ']') + { + line = getNextToken(line, m_token); + } + + while (*m_token != ']') + { + // test to see if we need to go to the next line + IGNORE_RETURN(getNextToken(line, m_token)); + if (*m_token == '\0') + { + // we need to read the next line to continue parsing + line = goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + // get the objvar name + line = getNextToken(line, m_token); + int tokenLen = strlen(m_token); + if (tokenLen < 3 || *m_token != '\"' || *(m_token + tokenLen - 1) != '\"') + { + m_fp.printError("cannot find objvar name"); + return CHAR_ERROR; + } + *(m_token + tokenLen - 1) = '\0'; + name = m_token + 1; + // next token should be '=' + line = getNextToken(line, m_token); + if (*m_token != '=') + { + m_fp.printError("expected = after objvar name"); + return CHAR_ERROR; + } + // we now need to look ahead to see what the objvar type is + bool expectingNumber = false; + const char *paramStart = line; + DynamicVariableParamData::DataType type = DynamicVariableParamData::UNKNOWN; + for (;;) + { + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (isdigit(*m_token) || expectingNumber) + { + // may be integer or float + if (isinteger(m_token)) + { + type = DynamicVariableParamData::INTEGER; + break; + } + else if (isfloat(m_token)) + { + type = DynamicVariableParamData::FLOAT; + break; + } + } + else if (*m_token == '.' && *line == '.' && isdigit(*(line + 1))) + { + // may be integer or float, force into number test on next pass + ++line; + expectingNumber = true; + continue; + } + else if (*m_token == '{') + { + // looks like a weighted list, keep going + continue; + } + else if (*m_token == '[') + { + type = DynamicVariableParamData::LIST; + break; + } + else if (*m_token == '"') + { + type = DynamicVariableParamData::STRING; + break; + } + else if (isalpha(*m_token)) + { + // check to see if this is a valid enum + int value = m_highestTemplateData->getEnumValue(m_token); + if (value == INVALID_ENUM_RESULT) + { + // try the C header enums + value = getEnumHeaderValue(m_token); + } + if (value != INVALID_ENUM_RESULT) + { + type = DynamicVariableParamData::INTEGER; +// param.setValue(value); + break; + } + } + // the token was nothing we recognize + std::string errbuf = "unexpected token "; + errbuf += m_token; + errbuf += ", cannot determine objvar type"; + m_fp.printError(errbuf.c_str()); + return CHAR_ERROR; + } + // now parse the objvar data + line = paramStart; + CompilerDynamicVariableParamData *newData = new CompilerDynamicVariableParamData(name, type); + NOT_NULL(newData); + switch (type) + { + case DynamicVariableParamData::INTEGER: + line = parseIntegerParameter(*dynamic_cast( + newData->m_data.iparam), line); + break; + case DynamicVariableParamData::FLOAT: + line = parseFloatParameter(*newData->m_data.fparam, line); + break; + case DynamicVariableParamData::STRING: + line = parseStringParameter(*newData->m_data.sparam, line); + break; + case DynamicVariableParamData::LIST: + line = getNextToken(line, m_token); + if (*m_token != '[') + { + m_fp.printError("expected [ at start of objvar sub-list"); + line = CHAR_ERROR; + } + else + { + if (line == NULL) + { + // we need to read the next line to continue parsing + line = goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + line = parseDynamicVariableParameterList(*newData, line); + } + break; + case DynamicVariableParamData::UNKNOWN: + default: + m_fp.printError("it should be impossible to get to this line"); + line = CHAR_ERROR; + break; + } + if (line == CHAR_ERROR) + { + delete newData; + return line; + } + data.m_data.lparam->push_back(newData); + + // we now expect a ',' or ']' + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + if (*m_token != ',' && *m_token != ']') + { + m_fp.printError("expected , or ] at end or objvar assignment"); + return CHAR_ERROR; + } + } + + return line; +} // TpfFile::parseDynamicVariableParameterList + +/** + * Parses a struct parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseStructParameter(StructParamOT & param, const char *line) +{ + line = getNextToken(line, m_token); + if (*m_token == '\0') + { + m_fp.printEolError(); + return CHAR_ERROR; + } + else if (*m_token == '{') + { + // weighted list + line = parseWeightedList< StructParamOT, StructParamOT::WeightedList, StructParamOT::WeightedValue >( + parseStructParameter2, *this, param, line); + } + else if (*m_token != '[') + { + m_fp.printError("expected [ at start of struct data"); + return CHAR_ERROR; + } + else + { + // we need to swap out the current template and template data for the + // structure's template and template data, and save the parameter data + const TemplateData::Parameter *oldParameter = m_parameter; + const TemplateData *oldTemplateData = m_templateData; + m_templateData = m_templateData->getStruct(m_parameter->extendedName.c_str()); + NOT_NULL(m_templateData); + + TpfTemplate *oldTemplate = m_template; + if (!param.isInitialized()) + { + m_template->initStructParamOT(param, m_parameter->name.c_str()); + if (!param.isInitialized()) + { + std::string errbuf = "cannot initialize struct " + + m_parameter->name; + m_fp.printError(errbuf.c_str()); + m_templateData = oldTemplateData; + return CHAR_ERROR; + } + } + m_template = dynamic_cast(const_cast(param.getValue())); + NOT_NULL(m_template); + + for (;;) + { + // test to see if we need to go to the next line + IGNORE_RETURN(getNextToken(line, m_token)); + if (*m_token == '\0') + { + // we need to read the next line to continue parsing + line = goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + line = getNextToken(line, m_token); + line = parseAssignment(line); + if (line == CHAR_ERROR) + break; + // check for ',' or ']' + line = getNextToken(line, m_token); + if (*m_token == ']') + { + // end of list + break; + } + else if (*m_token != ',') + { + m_fp.printError("expected , or ]"); + line = CHAR_ERROR; + break; + } + } + + if (!m_templateData->verifyTemplate(m_template, m_fp)) + line = CHAR_ERROR; + + m_templateData = oldTemplateData; + m_template = oldTemplate; + m_parameter = oldParameter; + } + return line; +} // TpfFile::parseStructParameter + +/** + * Parses a trigger volume parameter assignment. + * + * @param param template parameter + * @param line buffer containing the assignment statement + * + * @return character in line where parsing stopped, or NULL if at eol, or -1 if + * error + */ +const char * TpfFile::parseTriggerVolumeParameter(TriggerVolumeParam & param, + const char *line) +{ + NOT_NULL(line); + + const char *templine = getNextToken(line, m_token); + if (*m_token == '{') + { + // weighted list + line = parseWeightedList( + parseTriggerVolumeParameter2, *this, param, templine); + } + else + { + TriggerVolumeParamData data; + // get the trigger volume name + line = parseStringParameter(data.name, line); + if (line == CHAR_ERROR) + return line; + + // get the trigger volume radius + line = parseFloatParameter(data.radius, line); + param.setValue(data); + } + return line; +} // TpfFile::parseTriggerVolumeParameter + + +//======================================================================== +// static callback functions + +CompilerIntegerParam *TpfFile::getIntegerParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getCompilerIntegerParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getIntegerParam2 + +FloatParam *TpfFile::getFloatParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getFloatParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getFloatParam2 + +BoolParam *TpfFile::getBoolParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getBoolParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getBoolParam2 + +StringParam *TpfFile::getStringParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getStringParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getStringParam2 + +StringIdParam *TpfFile::getStringIdParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getStringIdParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getStringIdParam2 + +VectorParam *TpfFile::getVectorParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getVectorParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getVectorParam2 + +DynamicVariableParam *TpfFile::getDynamicVariableParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getDynamicVariableParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getDynamicVariableParam2 + +StructParamOT *TpfFile::getStructParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getStructParamOT(paramName.c_str(), false, arrayIndex); +} // TpfFile::getStructParam2 + +TriggerVolumeParam *TpfFile::getTriggerVolumeParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex) +{ + return templt.getTriggerVolumeParam(paramName.c_str(), false, arrayIndex); +} // TpfFile::getTriggerVolumeParam2 + +const char * TpfFile::parseIntegerParameter2(TpfFile &file, + CompilerIntegerParam & param, const char *line) +{ + return file.parseIntegerParameter(param, line); +} // TpfFile::parseIntegerParameter2 + +const char * TpfFile::parseFloatParameter2(TpfFile &file, + FloatParam & param, const char *line) +{ + return file.parseFloatParameter(param, line); +} // TpfFile::parseFloatParameter2 + +const char * TpfFile::parseBoolParameter2(TpfFile &file, + BoolParam & param, const char *line) +{ + return file.parseBoolParameter(param, line); +} // TpfFile::parseBoolParameter2 + +const char * TpfFile::parseStringParameter2(TpfFile &file, + StringParam & param, const char *line) +{ + return file.parseStringParameter(param, line); +} // TpfFile::parseStringParameter2 + +const char * TpfFile::parseStringIdParameter2(TpfFile &file, + StringIdParam & param, const char *line) +{ + return file.parseStringIdParameter(param, line); +} // TpfFile::parseStringIdParameter2 + +const char * TpfFile::parseFilenameParameter2(TpfFile &file, + StringParam & param, const char *line) +{ + return file.parseFilenameParameter(param, line); +} // TpfFile::parseFilenameParameter2 + +const char * TpfFile::parseVectorParameter2(TpfFile &file, + VectorParam & param, const char *line) +{ + return file.parseVectorParameter(param, line); +} // TpfFile::parseVectorParameter2 + +const char * TpfFile::parseTemplateParameter2(TpfFile &file, + StringParam & param, const char *line) +{ + return file.parseTemplateParameter(param, line); +} // TpfFile::parseTemplateParameter2 + +const char * TpfFile::parseEnumParameter2(TpfFile &file, + CompilerIntegerParam & param, const char *line) +{ + return file.parseEnumParameter(param, line); +} // TpfFile::parseEnumParameter2 + +const char * TpfFile::parseDynamicVariableParameter2(TpfFile &file, + DynamicVariableParam & param, const char *line) +{ + return file.parseDynamicVariableParameter(param, line); +} // TpfFile::parseDynamicVariableParameter2 + +const char * TpfFile::parseStructParameter2(TpfFile &file, + StructParamOT & param, const char *line) +{ + return file.parseStructParameter(param, line); +} // TpfFile::parseStructParameter2 + +const char * TpfFile::parseTriggerVolumeParameter2(TpfFile &file, + TriggerVolumeParam & param, const char *line) +{ + return file.parseTriggerVolumeParameter(param, line); +} // TpfFile::parseTriggerVolumeParameter2 + +//======================================================================== +// friend functions + +/** + * Parses the value being assigned to a parameter. + * + * @param getParamFunc function used to get the parameter + * @param parseFunc function to parse the parameter value + * @param file template file being read from + * @param line current line being read from + * @param arrayIndex parameter array index (if the parameter is an array) + * + * @return point where parsing stopped, or -1 on error + */ +template +const char * parseValue( + Q * (*getParamFunc)(TpfTemplate &, const std::string &, int), + const char * (*parseFunc)(TpfFile &file, Q & param, const char *line), + TpfFile &file, const char *line, int arrayIndex) +{ +Q * param; + + NOT_NULL(file.m_parameter); + NOT_NULL(file.m_template); + + // check for derived flag + const char *tempLine = getNextToken(line, file.m_token); + if (file.m_token[0] == '@') + { + tempLine = getNextToken(tempLine, file.m_token); + if (strcmp(file.m_token, "derived") == 0) + { + if (file.m_parameter->list_type == TemplateData::LIST_INT_ARRAY || + file.m_parameter->list_type == TemplateData::LIST_ENUM_ARRAY) + { + file.m_template->addPureVirtualParam(file.m_parameter->name, arrayIndex); + } + else + file.m_template->addPureVirtualParam(file.m_parameter->name); + return tempLine; + } + } + + if (file.m_parameter->list_type == TemplateData::LIST_LIST || + ((file.m_parameter->list_type == TemplateData::LIST_INT_ARRAY || + file.m_parameter->list_type == TemplateData::LIST_ENUM_ARRAY) && + arrayIndex == -1)) + { + if (arrayIndex != -1) + { + file.m_fp.printError("array being assigned as list"); + return CHAR_ERROR; + } + line = getNextToken(line, file.m_token); + if (*file.m_token == '+') + { + if (file.m_parameter->list_type == TemplateData::LIST_INT_ARRAY || + file.m_parameter->list_type == TemplateData::LIST_ENUM_ARRAY) + { + file.m_fp.printError("cannot extend fixed-size list"); + return CHAR_ERROR; + } + // extending a list + if (file.getBaseTemplateName().empty()) + { + file.m_fp.printError("trying to extend a list from a base template"); + return CHAR_ERROR; + } + file.m_template->setAppend(file.m_parameter->name.c_str()); + line = getNextToken(line, file.m_token); + } + if (*file.m_token != '[') + { + file.m_fp.printError("expected [ at start of list"); + return CHAR_ERROR; + } + if (line == NULL) + { + // we need to read the next line to continue parsing + line = file.goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + if (!file.m_template->isParamLoaded(file.m_parameter->name, false)) + { + // mark the parameter as being loaded, and clear the list + file.m_template->addLoadedParam(file.m_parameter->name); + file.m_template->setAsEmptyList(file.m_parameter->name.c_str()); + } + // test for empty list + const char *templine = getNextToken(line, file.m_token); + if (*file.m_token == ']') + { + return templine; + } + int index; + // parse the list elements + for (index = 0; *file.m_token != ']'; ++index) + { + // get the next parameters in the list + param = (*getParamFunc)(*file.m_template, + file.m_parameter->name, index); + if (param == NULL) + { + std::string errmsg = "cannot find parameter " + file.m_parameter->name; + file.m_fp.printError(errmsg.c_str()); + return CHAR_ERROR; + } + // test to see if we need to go to the next line + IGNORE_RETURN(getNextToken(line, file.m_token)); + if (*file.m_token == '\0') + { + // we need to read the next line to continue parsing + line = file.goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + line = (*parseFunc)(file, *param, line); + if (line == CHAR_ERROR) + return line; + // see if we have more values or if we are finished + line = getNextToken(line, file.m_token); + if (*file.m_token != ',' && *file.m_token != ']') + { + file.m_fp.printError("expected , or ]"); + return CHAR_ERROR; + } + } + if (file.m_parameter->list_type == TemplateData::LIST_INT_ARRAY || + file.m_parameter->list_type == TemplateData::LIST_ENUM_ARRAY) + { + // verify that the number of items is the same as the list size + if (file.m_parameter->list_size != index) + { + char errBuf[256]; + sprintf(errBuf, "Invalid number of items in list, expected %d, " + "got %d", file.m_parameter->list_size, index); + file.m_fp.printError(errBuf); + return CHAR_ERROR; + } + } + } + else + { + if (arrayIndex == -1) + arrayIndex = 0; + param = (*getParamFunc)(*file.m_template, + file.m_parameter->name, arrayIndex); + if (param == NULL) + { + // if the tpf version is less than the current version, print a + // warning and ignore + if (static_cast(file.m_templateData->getVersion().tag) < + file.m_currTemplateDef->getHighestVersion()) + { + std::string errmsg = "ignoring parameter " + file.m_parameter->name + + " due to being removed from later version (need to update the " + "template to the latest version)"; + file.m_fp.printWarning(errmsg.c_str()); + return NULL; + } + else + { + std::string errmsg = "cannot find parameter " + file.m_parameter->name + + " in definition file"; + file.m_fp.printError(errmsg.c_str()); + return CHAR_ERROR; + } + } + else + file.m_template->addLoadedParam(file.m_parameter->name, arrayIndex); + line = (*parseFunc)(file, *param, line); + } + return line; +} // parseValue + +/** + * Parses a weighted list of values. + * + * @param parseFunc function to parse a parameter value + * @param file template file being read from + * @param param template parameter to fill with data + * @param line current line being read from + * + * @return point where parsing stopped, or -1 on error + */ +template +const char *parseWeightedList( + const char * (*parseFunc)(TpfFile &file, Q & param, const char *line), + TpfFile &file, Q & param, const char *line) +{ + LIST *list = new LIST; + NOT_NULL(list); + param.setValue(list); + int totalWeight = 0; + for (;;) + { + VALUE value; + Q *valueParam = NULL; + value.value = valueParam = new Q; + NOT_NULL(valueParam); + list->push_back(value); + VALUE *newValue = &list->back(); + // test to see if we need to go to the next line + IGNORE_RETURN(getNextToken(line, file.m_token)); + if (*file.m_token == '\0') + { + // we need to read the next line to continue parsing + line = file.goToNextLine(); + if (line == CHAR_ERROR) + return line; + } + // get value + line = (*parseFunc)(file, *valueParam, line); + if (line == CHAR_ERROR) + return line; + line = getNextToken(line, file.m_token); + if (*file.m_token == '\0') + { + file.m_fp.printEolError(); + return CHAR_ERROR; + } + if (*file.m_token != ':') + { + file.m_fp.printError("expected ':' in weighted list"); + return CHAR_ERROR; + } + // get weight + line = getNextToken(line, file.m_token); + if (*file.m_token == '\0') + { + file.m_fp.printEolError(); + return CHAR_ERROR; + } + if (!isinteger(file.m_token)) + { + file.m_fp.printError("expected integer weight value"); + return CHAR_ERROR; + } + int weight = atoi(file.m_token); + totalWeight += weight; + newValue->weight = weight; + // see if we have more values or if we are finished + line = getNextToken(line, file.m_token); + if (*file.m_token == '}') + { + // end of list + break; + } + else if (*file.m_token != ',') + { + file.m_fp.printError("expected , or }"); + return CHAR_ERROR; + } + } + if (totalWeight != 100) + { + file.m_fp.printError("weights do not add up to 100"); + return CHAR_ERROR; + } + return line; +} // parseWeightedList + +std::string TpfFile::getFileName() const +{ + return m_fp.getFilename().getName() + m_fp.getFilename().getExtension(); +} + +const std::string & TpfFile::getBaseTemplateName() const +{ + if (m_template != NULL) + return m_template->getBaseTemplateName(); + return m_baseTemplateName; +} diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.h new file mode 100644 index 00000000..bed9ad25 --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfFile.h @@ -0,0 +1,224 @@ +//======================================================================== +// +// TpfFile.h - a template file interpreter. +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_TpfFile_H +#define _INCLUDED_TpfFile_H + +#include "File.h" +#include "ObjectTemplate.h" +#include "sharedUtility/TemplateParameter.h" +#include "TemplateDefinitionFile.h" +#include "TemplateData.h" + + +class CompilerIntegerParam; +class TpfTemplate; +class TpfFile; + +typedef StructParam StructParamOT; + + +//======================================================================== +// friend functions + +// can we do this some how? +//template +//typedef const char * (*ParseParamFuncPtr)(T & param, const char *line); +template +const char *parseWeightedList( + const char * (*parseFunc)(TpfFile &, Q &, const char *), + TpfFile &file, Q & param, const char *line); + +template +const char * parseValue( + Q * (*getParamFunc)(TpfTemplate &, const std::string &, int), + const char * (*parseFunc)(TpfFile &, Q &, const char *), + TpfFile &file, const char *line, int arrayIndex); + + +//======================================================================== +// + +class TpfFile +{ + template + friend const char *parseWeightedList( + const char * (*parseFunc)(TpfFile &, Q &, const char *), + TpfFile &file, Q & param, const char *line); + + template + friend const char * parseValue( + Q * (*getParamFunc)(TpfTemplate &, const std::string &, int), + const char * (*parseFunc)(TpfFile &, Q &, const char *), + TpfFile &file, const char *line, int arrayIndex); + +public: + TpfFile(void); + ~TpfFile(); + + int loadTemplate(const Filename & filename); + int makeIffFiles(const Filename & filename); +// int updateTemplate(const Filename & filename); + + TemplateLocation getTemplateLocation(void) const; + + const std::string & getTpfPath(void) const; + const std::string & getPath(void) const; + const std::string & getIffPath(void) const; + std::string getFileName() const; + const std::string & getBaseTemplateName() const; + + const TemplateDefinitionFile * getTemplateDefinitionFile() const; + + TpfTemplate * getTemplate() const; + +public: + enum + { + // we can't define const int values, but we can define enum values + BUFFER_SIZE = 16384 + }; + + File m_fp; // tpf being read + char m_buffer[BUFFER_SIZE]; // storage for reading tpf + char m_token[BUFFER_SIZE]; // storage for next token + TpfTemplate * m_template; // template we are creating + std::string m_baseTemplateName; // temp storage of template we want to derive our template from + TemplateDefinitionFile m_templateDef; // definition file for the template + const TemplateDefinitionFile *m_currTemplateDef; // which definition (in the TDF hierarchy) we're on + const TemplateData * m_templateData; // template data info for the whole TpfFile + const TemplateData * m_highestTemplateData; // template data info for the highest tdf version + const TemplateData::Parameter* m_parameter; // info on current parameter + std::string m_path; // where to put the C++ files + std::string m_iffPath; // where to put the iff files + TemplateLocation m_templateLocation; // what kind of template this is + TemplateData::EnumMap m_enumHeaderMap; // template-wide enum map defined by external c headers + + void cleanup(void); + const char * goToNextLine(void); + void printMinIntError(void); + void printMaxIntError(void); + void printMinFloatError(void); + void printMaxFloatError(void); + int WriteIffFile(Iff & iffData, const Filename & fileName); + int parseTemplateCommand(const char *line); + int parseEnumHeader(const char * headerName); + int getEnumHeaderValue(const char * enumValue) const; + const char * parseAssignment(const char *line); + const char * parseIntegerParameter(CompilerIntegerParam & param, const char *line); + const char * parseFloatParameter(FloatParam & param, const char *line); + const char * parseBoolParameter(BoolParam & param, const char *line); + const char * parseStringParameter(StringParam & param, const char *line); + const char * parseStringIdParameter(StringIdParam & param, const char *line); + const char * parseFilenameParameter(StringParam & param, const char *line); + const char * parseVectorParameter(VectorParam & param, const char *line); + const char * parseTemplateParameter(StringParam & param, const char *line); + const char * parseEnumParameter(CompilerIntegerParam & param, const char *line); + const char * parseDynamicVariableParameter(DynamicVariableParam & param, const char *line); + const char * parseDynamicVariableParameterList(DynamicVariableParamData & data, const char *line); + const char * parseStructParameter(StructParamOT & param, const char *line); + const char * parseTriggerVolumeParameter(TriggerVolumeParam & param, const char *line); + +private: + // callback functions + static CompilerIntegerParam *getIntegerParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static FloatParam *getFloatParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static BoolParam *getBoolParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static StringParam *getStringParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static StringIdParam *getStringIdParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static VectorParam *getVectorParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static DynamicVariableParam *getDynamicVariableParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static StructParamOT *getStructParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static TriggerVolumeParam *getTriggerVolumeParam2(TpfTemplate &templt, + const std::string ¶mName, int arrayIndex); + static const char * parseIntegerParameter2(TpfFile &file, + CompilerIntegerParam & param, const char *line); + static const char * parseFloatParameter2(TpfFile &file, + FloatParam & param, const char *line); + static const char * parseBoolParameter2(TpfFile &file, + BoolParam & param, const char *line); + static const char * parseStringParameter2(TpfFile &file, + StringParam & param, const char *line); + static const char * parseStringIdParameter2(TpfFile &file, + StringIdParam & param, const char *line); + static const char * parseFilenameParameter2(TpfFile &file, + StringParam & param, const char *line); + static const char * parseVectorParameter2(TpfFile &file, + VectorParam & param, const char *line); + static const char * parseTemplateParameter2(TpfFile &file, + StringParam & param, const char *line); + static const char * parseEnumParameter2(TpfFile &file, + CompilerIntegerParam & param, const char *line); + static const char * parseDynamicVariableParameter2(TpfFile &file, + DynamicVariableParam & param, const char *line); + static const char * parseStructParameter2(TpfFile &file, + StructParamOT & param, const char *line); + static const char * parseTriggerVolumeParameter2(TpfFile &file, + TriggerVolumeParam & param, const char *line); + +private: + // no copying + TpfFile(const TpfFile &); + TpfFile &operator =(const TpfFile &); +}; + + +inline TemplateLocation TpfFile::getTemplateLocation(void) const +{ + return m_templateLocation; +} + +inline const std::string & TpfFile::getTpfPath(void) const +{ + return m_fp.getFilename().getPath(); +} + +inline const std::string & TpfFile::getPath(void) const +{ + return m_path; +} + +inline const std::string & TpfFile::getIffPath(void) const +{ + return m_iffPath; +} + +inline const TemplateDefinitionFile * TpfFile::getTemplateDefinitionFile() const +{ + return &m_templateDef; +} + +inline TpfTemplate * TpfFile::getTemplate() const +{ + return m_template; +} + +//======================================================================== +// friend functions + +template +const char *parseWeightedList( + const char * (*parseFunc)(TpfFile &, Q &, const char *), + TpfFile &file, Q & param, const char *line); + +template +const char * parseValue( + Q * (*getParamFunc)(TpfTemplate &, const std::string &, int), + const char * (*parseFunc)(TpfFile &, Q &, const char *), + TpfFile &file, const char *line, int arrayIndex); + + +#endif // _INCLUDED_TpfFile_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.cpp b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.cpp new file mode 100644 index 00000000..3773bcfd --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.cpp @@ -0,0 +1,442 @@ +//======================================================================== +// +// TpfTemplate.cpp - adds extra functionality to Template for the compiler +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h" +#include "sharedTemplateDefinition/TpfTemplate.h" + +#include "sharedFile/Iff.h" +#include "sharedTemplateDefinition/TpfFile.h" + + +//======================================================================== +// member functions + +/** + * Class constructor. + */ +TpfTemplate::TpfTemplate(const std::string & filename) : + ObjectTemplate(filename), + m_parentFile(NULL), + m_baseTemplateName(), + m_baseTemplateFile(NULL) +{ +} // TpfTemplate::TpfTemplate + +/** + * Class destructor. + */ +TpfTemplate::~TpfTemplate() +{ + m_parentFile = NULL; + m_baseTemplateName.clear(); + if (m_baseTemplateFile != NULL) + { + delete m_baseTemplateFile; + m_baseTemplateFile = NULL; + } +} // TpfTemplate::~TpfTemplate + +/** + * Sets the name of the base template for this template. + * + * @param name the base template name + * + * @return 0 on success, error code on error + */ +int TpfTemplate::setBaseTemplateName(const std::string & name) +{ + m_baseTemplateName = name; + + if (m_parentFile == NULL) + return -1; + + // load the base template + if (m_baseTemplateFile != NULL) + { + delete m_baseTemplateFile; + m_baseTemplateFile = NULL; + } + + Filename baseTemplateFileName(NULL, NULL, name.c_str(), TEMPLATE_EXTENSION); + Filename sourceTpfPath(NULL, m_parentFile->getTpfPath().c_str(), NULL, NULL); + Filename tempPath(baseTemplateFileName); + + tempPath.setPath(sourceTpfPath.getPath().c_str()); + tempPath.appendPath(baseTemplateFileName); + tempPath.setDrive(m_parentFile->m_fp.getFilename().getDrive().c_str()); + + File fp; + int i = 0; + while (!fp.exists(tempPath) && i < MAX_DIRECTORY_DEPTH) + { + sourceTpfPath.appendPath(NEXT_HIGHER_PATH); + tempPath.setPath(sourceTpfPath.getPath().c_str()); + tempPath.appendPath(baseTemplateFileName); + ++i; + } + if (i == MAX_DIRECTORY_DEPTH) + return -1; + + m_baseTemplateFile = new TpfFile; + return m_baseTemplateFile->loadTemplate(tempPath); +} // TpfTemplate::setBaseTemplateName + +/** + * Returns the template this template is derived from. + * + * @return the base template + */ +TpfTemplate * TpfTemplate::getBaseTemplate(void) const +{ + if (m_baseTemplateFile != NULL) + return m_baseTemplateFile->getTemplate(); + return NULL; +} // TpfTemplate::getBaseTemplate + +/** + * Saves the template to an iff file. + * + * @param file file to save to + */ +void TpfTemplate::save(Iff &file) +{ + UNREF(file); +} // TpfTemplate::save + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +CompilerIntegerParam *TpfTemplate::getCompilerIntegerParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getCompilerIntegerParam + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +FloatParam *TpfTemplate::getFloatParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getFloatParam + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +BoolParam *TpfTemplate::getBoolParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getBoolParam + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +StringParam *TpfTemplate::getStringParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getStringParam + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +StringIdParam *TpfTemplate::getStringIdParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getStringIdParam + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +VectorParam *TpfTemplate::getVectorParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getVectorParam + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +DynamicVariableParam *TpfTemplate::getDynamicVariableParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getDynamicVariableParam + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +StructParamOT *TpfTemplate::getStructParamOT(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getStructParamOT + +/** + * Parameter accessor function for derived classes. + * + * @param name name of the parameter to get + * @param deepcheck flag to check base template if the parameter isn't loaded + * @param index array index of the parameter + * + * @return the parameter, or NULL if not found + */ +TriggerVolumeParam *TpfTemplate::getTriggerVolumeParam(const char *name, bool deepCheck, int index) +{ + UNREF(name); + UNREF(deepCheck); + UNREF(index); + return NULL; +} // TpfTemplate::getTriggerVolumeParam + +/** + * Initializes a structure param with the right structure type. + * + * @param param the structure param to initialize + * @param name name of the parameter to get + */ +void TpfTemplate::initStructParamOT(StructParamOT ¶m, const char *name) +{ + UNREF(param); + UNREF(name); +} // TpfTemplate::getStructParamOT + +/** + * Marks a list parameter as being an empty list. + * + * @param name name of the parameter to set + */ +void TpfTemplate::setAsEmptyList(const char *name) +{ + UNREF(name); +} // TpfTemplate::setAsEmptyList + +/** + * Sets the append flag for a list parameter. + * + * @param name the parameter name + */ +void TpfTemplate::setAppend(const char *name) +{ + UNREF(name); +} // TpfTemplate::setAppend + +/** + * Returns if the append flag is set for a list parameter. + * + * @param name the parameter name + * + * @return the flag + */ +bool TpfTemplate::isAppend(const char *name) const +{ + UNREF(name); + return false; +} // TpfTemplate::isAppend + +/** + * Get the length of items in a list parameter. + * + * @param name the parameter name + * + * @return number of items in the parameter list, or -1 + * if the item is not a list + */ +int TpfTemplate::getListLength(const char *name) const +{ + return -1; + UNREF(name); +} // TpfTemplate::getListLength + +/** + * Adds a param to the loaded list. + * + * @param name the parameter name + * @param index the array index of the parameter + */ +void TpfTemplate::addLoadedParam(const std::string & name, int index) +{ + std::string indexedName; + nameAndIndexToName(name, index, indexedName); + m_loadedParams.insert(indexedName); +} // TpfTemplate::addLoadedParam + +/** + * Tests if a param is loaded. + * + * @param name the parameter name + * @param index the array index of the parameter + * + * @return true if the parameter is loaded, false if not + */ +bool TpfTemplate::isParamLoaded(const std::string & name, bool deepCheck, int index) const +{ + std::string indexedName; + nameAndIndexToName(name, index, indexedName); + return isParamLoadedLocal(indexedName, deepCheck); +} // TpfTemplate::isParamLoaded + +/** + * Adds a param to the pure virtual list. + * + * @param name the parameter name + * @param index the array index of the parameter + */ +void TpfTemplate::addPureVirtualParam(const std::string & name, int index) +{ + std::string indexedName; + nameAndIndexToName(name, index, indexedName); + m_pureVirtualParams.insert(indexedName); +} // TpfTemplate::addPureVirtualParam + +/** + * Tests if a param is pure virtual (defined by @derived). + * + * @param name the parameter name + * @param index the array index of the parameter + * + * @return true if the parameter is pure virtual, false if not + */ +bool TpfTemplate::isParamPureVirtual(const std::string & name, bool deepCheck, int index) const +{ + std::string indexedName; + nameAndIndexToName(name, index, indexedName); + return isParamPureVirtualLocal(indexedName, deepCheck); +} // TpfTemplate::isParamPureVirtual + +/** + * Converts a parameter name and index to a single name. + * + * @param name the paramter name + * @param index the parameter array index + * @param indexedName string for the modified name + */ +void TpfTemplate::nameAndIndexToName(const std::string & name, int index, + std::string & indexedName) const +{ + char buffer[16]; + _itoa(index, buffer, 10); + indexedName = name + "["; + indexedName += buffer; +} // TpfTemplate::nameAndIndexToName + +/** + * Tests if a param is loaded. + * + * @param name the parameter name + * + * @return true if the parameter is loaded, false if not + */ +bool TpfTemplate::isParamLoadedLocal(const std::string &name, bool deepCheck) const +{ + bool result = false; + std::set::const_iterator i = m_loadedParams.find(name); + + if (i != m_loadedParams.end()) + { + result = true; + } + else if (deepCheck && getBaseTemplate() != NULL) + { + result = getBaseTemplate()->isParamLoadedLocal(name); + } + + return result; +} // TpfTemplate::isParamLoadedLocal + +/** + * Tests if a param is pure virtual (defined by @derived). + * + * @param name the parameter name + * + * @return true if the parameter is pure virtual, false if not + */ +bool TpfTemplate::isParamPureVirtualLocal(const std::string &name, bool deepCheck) const +{ + bool result = false; + + std::set::const_iterator i = m_pureVirtualParams.find(name); + + if (i != m_pureVirtualParams.end()) + { + result = true; + } + else if (deepCheck && (getBaseTemplate() != NULL)) + { + result = getBaseTemplate()->isParamPureVirtualLocal(name); + } + + return result; +} // TpfTemplate::isParamPureVirtualLocal diff --git a/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.h b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.h new file mode 100644 index 00000000..527b858e --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/shared/core/TpfTemplate.h @@ -0,0 +1,108 @@ +//======================================================================== +// +// TpfTemplate.h - adds extra functionality to Template for the compiler +// +// copyright 2001 Sony Online Entertainment +// +//======================================================================== + +#ifndef _INCLUDED_TpfTemplate_H +#define _INCLUDED_TpfTemplate_H + +#include "sharedTemplateDefinition/CompilerIntegerParam.h" +#include "sharedTemplateDefinition/ObjectTemplate.h" +#include "sharedTemplateDefinition/TemplateData.h" +#include "sharedUtility/TemplateParameter.h" + +#include +#include +#include + +class CompilerIntegerParam; +class TpfFile; +typedef StructParam StructParamOT; + + +//======================================================================== + +class TpfTemplate : public ObjectTemplate +{ +public: + explicit TpfTemplate(const std::string & filename); + virtual ~TpfTemplate(); + + TpfFile * getParentFile(void) const; + void setParentFile(TpfFile * file); + + const std::string & getBaseTemplateName(void) const; + int setBaseTemplateName(const std::string & name); + + TpfTemplate * getBaseTemplate(void) const; + + virtual void save(Iff &file) = 0; + + static ObjectTemplate * createTemplate(Tag id); + + virtual CompilerIntegerParam *getCompilerIntegerParam(const char *name, bool deepCheck = true, int index = 0); + virtual FloatParam *getFloatParam(const char *name, bool deepCheck = true, int index = 0); + virtual BoolParam *getBoolParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringParam *getStringParam(const char *name, bool deepCheck = true, int index = 0); + virtual StringIdParam *getStringIdParam(const char *name, bool deepCheck = true, int index = 0); + virtual VectorParam *getVectorParam(const char *name, bool deepCheck = true, int index = 0); + virtual DynamicVariableParam *getDynamicVariableParam(const char *name, bool deepCheck = true, int index = 0); + virtual StructParamOT *getStructParamOT(const char *name, bool deepCheck = true, int index = 0); + virtual TriggerVolumeParam *getTriggerVolumeParam(const char *name, bool deepCheck = true, int index = 0); + virtual void initStructParamOT(StructParamOT ¶m, const char *name); + virtual void setAsEmptyList(const char *name); + virtual void setAppend(const char *name); + virtual bool isAppend(const char *name) const; + virtual int getListLength(const char *name) const; + + void addLoadedParam(const std::string & name, int index = 0); + bool isParamLoaded(const std::string & name, bool deepCheck = true, int index = 0) const; + void addPureVirtualParam(const std::string & name, int index = 0); + bool isParamPureVirtual(const std::string &name, bool deepCheck = true, int index = 0) const; + +protected: + TpfFile * m_parentFile; + std::string m_baseTemplateName; + TpfFile * m_baseTemplateFile; + +private: + std::set m_loadedParams; + std::set m_pureVirtualParams; + std::map > m_intParamEnumMap; + + void nameAndIndexToName(const std::string & name, int index, std::string & newName) const; + bool isParamLoadedLocal(const std::string &name, bool deepCheck = true) const; + bool isParamPureVirtualLocal(const std::string &name, bool deepCheck = true) const; + +private: + // no copying templates + TpfTemplate(const TpfTemplate &source); + TpfTemplate & operator =(const TpfTemplate &source); +}; + + +inline TpfFile * TpfTemplate::getParentFile(void) const +{ + return m_parentFile; +} + +inline void TpfTemplate::setParentFile(TpfFile * file) +{ + m_parentFile = file; +} + +inline const std::string & TpfTemplate::getBaseTemplateName(void) const +{ + return m_baseTemplateName; +} // TpfTemplate::getBaseTemplateName + +inline ObjectTemplate * TpfTemplate::createTemplate(Tag id) +{ + return ObjectTemplateList::fetch(id); +} + + +#endif // _INCLUDED_TpfTemplate_H diff --git a/engine/shared/library/sharedTemplateDefinition/src/win32/FirstSharedTemplateDefinition.cpp b/engine/shared/library/sharedTemplateDefinition/src/win32/FirstSharedTemplateDefinition.cpp new file mode 100644 index 00000000..b156d0fd --- /dev/null +++ b/engine/shared/library/sharedTemplateDefinition/src/win32/FirstSharedTemplateDefinition.cpp @@ -0,0 +1 @@ +#include "sharedTemplateDefinition/FirstSharedTemplateDefinition.h"