| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731 |
- /*
- ** Command & Conquer Generals Zero Hour(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- ////////////////////////////////////////////////////////////////////////////////
- // //
- // (c) 2001-2003 Electronic Arts Inc. //
- // //
- ////////////////////////////////////////////////////////////////////////////////
- // FILE: ModuleFactory.cpp ////////////////////////////////////////////////////////////////////////
- // Author: Colin Day, September 2001
- // Desc: TheModuleFactory is where we actually instance modules for objects
- // and drawbles. Those modules are things such as an UpdateModule
- // or DamageModule or DrawModule etc.
- //
- // TheModuleFactory will contain a list of ModuleTemplates, when we
- // request a new module, we will look for that template in our
- // list and create it
- //
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- // INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
- #include "PreRTS.h" // This must go first in EVERY cpp file int the GameEngine
- #include "Common/Module.h"
- #include "Common/ModuleFactory.h"
- #include "Common/NameKeyGenerator.h"
- // behavior includes
- #include "GameLogic/Module/AutoHealBehavior.h"
- #include "GameLogic/Module/GrantStealthBehavior.h"
- #include "GameLogic/Module/NeutronBlastBehavior.h"
- #include "GameLogic/Module/BehaviorModule.h"
- #include "GameLogic/Module/BridgeBehavior.h"
- #include "GameLogic/Module/BridgeScaffoldBehavior.h"
- #include "GameLogic/Module/BridgeTowerBehavior.h"
- #include "GameLogic/Module/CountermeasuresBehavior.h"
- #include "GameLogic/Module/DumbProjectileBehavior.h"
- #include "GameLogic/Module/InstantDeathBehavior.h"
- #include "GameLogic/Module/SlowDeathBehavior.h"
- #include "GameLogic/Module/HelicopterSlowDeathUpdate.h"
- #include "GameLogic/Module/NeutronMissileSlowDeathUpdate.h"
- #include "GameLogic/Module/CaveContain.h"
- #include "GameLogic/Module/OpenContain.h"
- #include "GameLogic/Module/OverchargeBehavior.h"
- #include "GameLogic/Module/HealContain.h"
- #include "GameLogic/Module/GarrisonContain.h"
- #include "GameLogic/Module/InternetHackContain.h"
- #include "GameLogic/Module/RailedTransportContain.h"
- #include "GameLogic/Module/RiderChangeContain.h"
- #include "GameLogic/Module/TransportContain.h"
- #include "GameLogic/Module/MobNexusContain.h"
- #include "GameLogic/Module/TunnelContain.h"
- #include "GameLogic/Module/OverlordContain.h"
- #include "GameLogic/Module/HelixContain.h"
- #include "GameLogic/Module/ParachuteContain.h"
- #ifdef ALLOW_SURRENDER
- #include "GameLogic/Module/POWTruckBehavior.h"
- #include "GameLogic/Module/PrisonBehavior.h"
- #include "GameLogic/Module/PropagandaCenterBehavior.h"
- #endif
- #include "GameLogic/Module/PropagandaTowerBehavior.h"
- #include "GameLogic/Module/BunkerBusterBehavior.h"
- #include "GameLogic/Module/FireWeaponWhenDamagedBehavior.h"
- #include "GameLogic/Module/FireWeaponWhenDeadBehavior.h"
- #include "GameLogic/Module/GenerateMinefieldBehavior.h"
- #include "GameLogic/Module/ParkingPlaceBehavior.h"
- #include "GameLogic/Module/FlightDeckBehavior.h"
- #include "GameLogic/Module/PoisonedBehavior.h"
- #include "GameLogic/Module/RebuildHoleBehavior.h"
- #include "GameLogic/Module/SupplyWarehouseCripplingBehavior.h"
- #include "GameLogic/Module/TechBuildingBehavior.h"
- #include "GameLogic/Module/MinefieldBehavior.h"
- #include "GameLogic/Module/BattleBusSlowDeathBehavior.h"
- #include "GameLogic/Module/JetSlowDeathBehavior.h"
- // die includes
- #include "GameLogic/Module/CreateCrateDie.h"
- #include "GameLogic/Module/CreateObjectDie.h"
- #include "GameLogic/Module/CrushDie.h"
- #include "GameLogic/Module/DamDie.h"
- #include "GameLogic/Module/DestroyDie.h"
- #include "GameLogic/Module/EjectPilotDie.h"
- #include "GameLogic/Module/FXListDie.h"
- #include "GameLogic/Module/RebuildHoleExposeDie.h"
- #include "GameLogic/Module/SpecialPowerCompletionDie.h"
- #include "GameLogic/Module/UpgradeDie.h"
- #include "GameLogic/Module/KeepObjectDie.h"
- // logic update includes
- #include "GameLogic/Module/AIUpdate.h"
- #include "GameLogic/Module/AnimationSteeringUpdate.h"
- #include "GameLogic/Module/AssistedTargetingUpdate.h"
- #include "GameLogic/Module/BaseRegenerateUpdate.h"
- #include "GameLogic/Module/BoneFXUpdate.h"
- #include "GameLogic/Module/ChinookAIUpdate.h"
- #include "GameLogic/Module/DefaultProductionExitUpdate.h"
- #include "GameLogic/Module/DeletionUpdate.h"
- #include "GameLogic/Module/SmartBombTargetHomingUpdate.h"
- #include "GameLogic/Module/DeliverPayloadAIUpdate.h"
- #include "GameLogic/Module/DozerAIUpdate.h"
- #include "GameLogic/Module/DynamicGeometryInfoUpdate.h"
- #include "GameLogic/Module/DynamicShroudClearingRangeUpdate.h"
- #include "GameLogic/Module/EnemyNearUpdate.h"
- #include "GameLogic/Module/FireSpreadUpdate.h"
- #include "GameLogic/Module/FirestormDynamicGeometryInfoUpdate.h"
- #include "GameLogic/Module/FireWeaponUpdate.h"
- #include "GameLogic/Module/FlammableUpdate.h"
- #include "GameLogic/Module/FloatUpdate.h"
- #include "GameLogic/Module/TensileFormationUpdate.h"
- #include "GameLogic/Module/HackInternetAIUpdate.h"
- #include "GameLogic/Module/DeployStyleAIUpdate.h"
- #include "GameLogic/Module/AssaultTransportAIUpdate.h"
- #include "GameLogic/Module/HeightDieUpdate.h"
- #include "GameLogic/Module/HordeUpdate.h"
- #include "GameLogic/Module/JetAIUpdate.h"
- #include "GameLogic/Module/LaserUpdate.h"
- #include "GameLogic/Module/PointDefenseLaserUpdate.h"
- #include "GameLogic/Module/CleanupHazardUpdate.h"
- #include "GameLogic/Module/AutoFindHealingUpdate.h"
- #include "GameLogic/Module/CommandButtonHuntUpdate.h"
- #include "GameLogic/Module/PilotFindVehicleUpdate.h"
- #include "GameLogic/Module/DemoTrapUpdate.h"
- #include "GameLogic/Module/ParticleUplinkCannonUpdate.h"
- #include "GameLogic/Module/SpectreGunshipUpdate.h"
- #include "GameLogic/Module/SpectreGunshipDeploymentUpdate.h"
- #include "GameLogic/Module/BaikonurLaunchPower.h"
- #include "GameLogic/Module/BattlePlanUpdate.h"
- #include "GameLogic/Module/LifetimeUpdate.h"
- #include "GameLogic/Module/RadiusDecalUpdate.h"
- #include "GameLogic/Module/AutoDepositUpdate.h"
- #include "GameLogic/Module/MissileAIUpdate.h"
- #include "GameLogic/Module/NeutronMissileUpdate.h"
- #include "GameLogic/Module/OCLUpdate.h"
- #include "GameLogic/Module/PhysicsUpdate.h"
- #ifdef ALLOW_SURRENDER
- #include "GameLogic/Module/POWTruckAIUpdate.h"
- #endif
- #include "GameLogic/Module/ProductionUpdate.h"
- #include "GameLogic/Module/ProjectileStreamUpdate.h"
- #include "GameLogic/Module/ProneUpdate.h"
- #include "GameLogic/Module/QueueProductionExitUpdate.h"
- #include "GameLogic/Module/RadarUpdate.h"
- #include "GameLogic/Module/RepairDockUpdate.h"
- #ifdef ALLOW_SURRENDER
- #include "GameLogic/Module/PrisonDockUpdate.h"
- #endif
- #include "GameLogic/Module/RailedTransportDockUpdate.h"
- #include "GameLogic/Module/RailedTransportAIUpdate.h"
- #include "GameLogic/Module/RailroadGuideAIUpdate.h"
- #include "GameLogic/Module/SlavedUpdate.h"
- #include "GameLogic/Module/MobMemberSlavedUpdate.h"
- #include "GameLogic/Module/SpecialAbilityUpdate.h"
- #include "GameLogic/Module/MissileLauncherBuildingUpdate.h"
- #include "GameLogic/Module/StealthDetectorUpdate.h"
- #include "GameLogic/Module/StealthUpdate.h"
- #include "GameLogic/Module/SpawnPointProductionExitUpdate.h"
- #include "GameLogic/Module/SpawnBehavior.h"
- #include "GameLogic/Module/SpyVisionUpdate.h"
- #include "GameLogic/Module/StickyBombUpdate.h"
- #include "GameLogic/Module/FireOCLAfterWeaponCooldownUpdate.h"
- #include "GameLogic/Module/HijackerUpdate.h"
- #include "GameLogic/Module/StructureCollapseUpdate.h"
- #include "GameLogic/Module/StructureToppleUpdate.h"
- #include "GameLogic/Module/SupplyCenterDockUpdate.h"
- #include "GameLogic/Module/SupplyCenterProductionExitUpdate.h"
- #include "GameLogic/Module/SupplyTruckAIUpdate.h"
- #include "GameLogic/Module/SupplyWarehouseDockUpdate.h"
- #include "GameLogic/Module/ToppleUpdate.h"
- #include "GameLogic/Module/TransportAIUpdate.h"
- #include "GameLogic/Module/WanderAIUpdate.h"
- #include "GameLogic/Module/WaveGuideUpdate.h"
- #include "GameLogic/Module/WeaponBonusUpdate.h"
- #include "GameLogic/Module/WorkerAIUpdate.h"
- #include "GameLogic/Module/PowerPlantUpdate.h"
- #include "GameLogic/Module/CheckpointUpdate.h"
- #include "GameLogic/Module/EMPUpdate.h"
- // upgrade includes
- #include "GameLogic/Module/ActiveShroudUpgrade.h"
- #include "GameLogic/Module/ArmorUpgrade.h"
- #include "GameLogic/Module/CommandSetUpgrade.h"
- #include "GameLogic/Module/GrantScienceUpgrade.h"
- #include "GameLogic/Module/PassengersFireUpgrade.h"
- #include "GameLogic/Module/LocomotorSetUpgrade.h"
- #include "GameLogic/Module/ObjectCreationUpgrade.h"
- #include "GameLogic/Module/RadarUpgrade.h"
- #include "GameLogic/Module/PowerPlantUpgrade.h"
- #include "GameLogic/Module/ReplaceObjectUpgrade.h"
- #include "GameLogic/Module/ModelConditionUpgrade.h"
- #include "GameLogic/Module/StatusBitsUpgrade.h"
- #include "GameLogic/Module/SubObjectsUpgrade.h"
- #include "GameLogic/Module/StealthUpgrade.h"
- #include "GameLogic/Module/UnpauseSpecialPowerUpgrade.h"
- #include "GameLogic/Module/WeaponBonusUpgrade.h"
- #include "GameLogic/Module/WeaponSetUpgrade.h"
- #include "GameLogic/Module/WeaponBonusUpgrade.h"
- #include "GameLogic/Module/CostModifierUpgrade.h"
- #include "GameLogic/Module/ExperienceScalarUpgrade.h"
- #include "GameLogic/Module/MaxHealthUpgrade.h"
- // create includes
- #include "GameLogic/Module/LockWeaponCreate.h"
- #include "GameLogic/Module/SupplyCenterCreate.h"
- #include "GameLogic/Module/SupplyWarehouseCreate.h"
- #include "GameLogic/Module/GrantUpgradeCreate.h"
- #include "GameLogic/Module/PreorderCreate.h"
- #include "GameLogic/Module/SpecialPowerCreate.h"
- #include "GameLogic/Module/VeterancyGainCreate.h"
- // damage includes
- #include "GameLogic/Module/BoneFXDamage.h"
- #include "GameLogic/Module/TransitionDamageFX.h"
- // collide includes
- #include "GameLogic/Module/FireWeaponCollide.h"
- #include "GameLogic/Module/SquishCollide.h"
- #include "GameLogic/Module/ConvertToCarBombCrateCollide.h"
- #include "GameLogic/Module/ConvertToHijackedVehicleCrateCollide.h"
- #include "GameLogic/Module/HealCrateCollide.h"
- #include "GameLogic/Module/MoneyCrateCollide.h"
- #include "GameLogic/Module/SabotageCommandCenterCrateCollide.h"
- #include "GameLogic/Module/SabotageFakeBuildingCrateCollide.h"
- #include "GameLogic/Module/SabotageInternetCenterCrateCollide.h"
- #include "GameLogic/Module/SabotageMilitaryFactoryCrateCollide.h"
- #include "GameLogic/Module/SabotagePowerPlantCrateCollide.h"
- #include "GameLogic/Module/SabotageSuperweaponCrateCollide.h"
- #include "GameLogic/Module/SabotageSupplyCenterCrateCollide.h"
- #include "GameLogic/Module/SabotageSupplyDropzoneCrateCollide.h"
- #include "GameLogic/Module/SalvageCrateCollide.h"
- #include "GameLogic/Module/ShroudCrateCollide.h"
- #include "GameLogic/Module/UnitCrateCollide.h"
- #include "GameLogic/Module/VeterancyCrateCollide.h"
- // body includes
- #include "GameLogic/Module/InactiveBody.h"
- #include "GameLogic/Module/ActiveBody.h"
- #include "GameLogic/Module/HighlanderBody.h"
- #include "GameLogic/Module/ImmortalBody.h"
- #include "GameLogic/Module/StructureBody.h"
- #include "GameLogic/Module/HiveStructureBody.h"
- #include "GameLogic/Module/UndeadBody.h"
- // contain includes
- // (none)
- // special power modules
- #include "GameLogic/Module/CashHackSpecialPower.h"
- #include "GameLogic/Module/DefectorSpecialPower.h"
- #ifdef ALLOW_DEMORALIZE
- #include "GameLogic/Module/DemoralizeSpecialPower.h"
- #endif
- #include "GameLogic/Module/OCLSpecialPower.h"
- #include "GameLogic/Module/SpecialAbility.h"
- #include "GameLogic/Module/SpyVisionSpecialPower.h"
- #include "GameLogic/Module/CashBountyPower.h"
- #include "GameLogic/Module/CleanupAreaPower.h"
- #include "GameLogic/Module/FireWeaponPower.h"
- // destroy includes
- // (none)
- // client update includes
- #include "GameClient/Module/AnimatedParticleSysBoneClientUpdate.h"
- #include "GameClient/Module/SwayClientUpdate.h"
- #include "GameClient/Module/BeaconClientUpdate.h"
- // PUBLIC DATA ////////////////////////////////////////////////////////////////////////////////////
- ModuleFactory *TheModuleFactory = NULL; ///< the module factory singleton
- // PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
- #ifdef _INTERNAL
- // for occasional debugging...
- //#pragma optimize("", off)
- //#pragma MESSAGE("************************************** WARNING, optimization disabled for debugging purposes")
- #endif
- //-------------------------------------------------------------------------------------------------
- //-------------------------------------------------------------------------------------------------
- ModuleFactory::ModuleFactory( void )
- {
- m_moduleTemplateMap.clear();
- m_moduleDataList.clear();
-
- }
- //-------------------------------------------------------------------------------------------------
- //-------------------------------------------------------------------------------------------------
- ModuleFactory::~ModuleFactory( void )
- {
- m_moduleTemplateMap.clear();
- for (ModuleDataList::iterator i = m_moduleDataList.begin(); i != m_moduleDataList.end(); ++i)
- {
- const ModuleData* data = *i;
- delete data;
- }
- m_moduleDataList.clear();
- }
- //-------------------------------------------------------------------------------------------------
- /** Initialize the module factory. Any class that needs to be attached
- * to objects or drawables as modules needs to add a template
- * for that class here */
- //-------------------------------------------------------------------------------------------------
- void ModuleFactory::init( void )
- {
- // behavior modules
- addModule( AutoHealBehavior );
- addModule( GrantStealthBehavior );
- addModule( NeutronBlastBehavior );
- addModule( BridgeBehavior );
- addModule( BridgeScaffoldBehavior );
- addModule( BridgeTowerBehavior );
- addModule( CountermeasuresBehavior );
- addModule( DumbProjectileBehavior );
- addModule( PhysicsBehavior );
- addModule( InstantDeathBehavior );
- addModule( SlowDeathBehavior );
- addModule( HelicopterSlowDeathBehavior );
- addModule( NeutronMissileSlowDeathBehavior );
- addModule( CaveContain );
- addModule( OpenContain );
- addModule( OverchargeBehavior );
- addModule( HealContain );
- addModule( GarrisonContain );
- addModule( InternetHackContain );
- addModule( TransportContain );
- addModule( RiderChangeContain );
- addModule( RailedTransportContain );
- addModule( MobNexusContain );
- addModule( TunnelContain );
- addModule( OverlordContain );
- addModule( HelixContain );
- addModule( ParachuteContain );
- #ifdef ALLOW_SURRENDER
- addModule( POWTruckBehavior );
- addModule( PrisonBehavior );
- addModule( PropagandaCenterBehavior );
- #endif
- addModule( PropagandaTowerBehavior );
- addModule( BunkerBusterBehavior );
- addModule( FireWeaponWhenDamagedBehavior );
- addModule( FireWeaponWhenDeadBehavior );
- addModule( GenerateMinefieldBehavior );
- addModule( ParkingPlaceBehavior );
- addModule( FlightDeckBehavior );
- addModule( PoisonedBehavior );
- addModule( RebuildHoleBehavior );
- addModule( SupplyWarehouseCripplingBehavior );
- addModule( TechBuildingBehavior );
- addModule( MinefieldBehavior );
- addModule( BattleBusSlowDeathBehavior );
- addModule( JetSlowDeathBehavior );
- addModule( RailroadBehavior );
- addModule( SpawnBehavior );
- // die modules
- addModule( DestroyDie );
- addModule( FXListDie );
- addModule( CrushDie );
- addModule( DamDie );
- addModule( CreateCrateDie );
- addModule( CreateObjectDie );
- addModule( EjectPilotDie );
- addModule( SpecialPowerCompletionDie );
- addModule( RebuildHoleExposeDie );
- addModule( UpgradeDie );
- addModule( KeepObjectDie );
- // update modules
- addModule( AssistedTargetingUpdate );
- addModule( AutoFindHealingUpdate );
- addModule( BaseRegenerateUpdate );
- addModule( StealthDetectorUpdate );
- addModule( StealthUpdate );
- addModule( DeletionUpdate );
- addModule( SmartBombTargetHomingUpdate );
- addModule( DynamicShroudClearingRangeUpdate );
- addModule( DeployStyleAIUpdate );
- addModule( AssaultTransportAIUpdate );
- addModule( HordeUpdate );
- addModule( ToppleUpdate );
- addModule( EnemyNearUpdate );
- addModule( LifetimeUpdate );
- addModule( RadiusDecalUpdate );
- addModule( EMPUpdate );
- addModule( LeafletDropBehavior );
- addModule( AutoDepositUpdate );
- addModule( WeaponBonusUpdate );
- addModule( MissileAIUpdate );
- addModule( NeutronMissileUpdate );
- addModule( FireSpreadUpdate );
- addModule( FireWeaponUpdate );
- addModule( FlammableUpdate );
- addModule( FloatUpdate );
- addModule( TensileFormationUpdate );
- addModule( HeightDieUpdate );
- addModule( ChinookAIUpdate );
- addModule( JetAIUpdate );
- addModule( AIUpdateInterface );
- addModule( SupplyTruckAIUpdate );
- addModule( DeliverPayloadAIUpdate );
- addModule( HackInternetAIUpdate );
- addModule( DynamicGeometryInfoUpdate );
- addModule( FirestormDynamicGeometryInfoUpdate );
- addModule( LaserUpdate );
- addModule( PointDefenseLaserUpdate );
- addModule( CleanupHazardUpdate );
- addModule( CommandButtonHuntUpdate );
- addModule( PilotFindVehicleUpdate );
- addModule( DemoTrapUpdate );
- addModule( ParticleUplinkCannonUpdate );
- addModule( SpectreGunshipUpdate );
- addModule( SpectreGunshipDeploymentUpdate );
- addModule( BaikonurLaunchPower );
- addModule( BattlePlanUpdate );
- addModule( ProjectileStreamUpdate );
- addModule( QueueProductionExitUpdate );
- addModule( RepairDockUpdate );
- #ifdef ALLOW_SURRENDER
- addModule( PrisonDockUpdate );
- #endif
- addModule( RailedTransportDockUpdate );
- addModule( DefaultProductionExitUpdate );
- addModule( SpawnPointProductionExitUpdate );
- addModule( SpyVisionUpdate );
- addModule( SlavedUpdate );
- addModule( MobMemberSlavedUpdate );
- addModule( OCLUpdate );
- addModule( SpecialAbilityUpdate );
- addModule( MissileLauncherBuildingUpdate );
- addModule( SupplyCenterProductionExitUpdate );
- addModule( SupplyCenterDockUpdate );
- addModule( SupplyWarehouseDockUpdate );
- addModule( DozerAIUpdate );
- #ifdef ALLOW_SURRENDER
- addModule( POWTruckAIUpdate );
- #endif
- addModule( RailedTransportAIUpdate );
- addModule( ProductionUpdate );
- addModule( ProneUpdate );
- addModule( StickyBombUpdate );
- addModule( FireOCLAfterWeaponCooldownUpdate );
- addModule( HijackerUpdate );
- addModule( StructureToppleUpdate );
- addModule( StructureCollapseUpdate );
- addModule( BoneFXUpdate );
- addModule( RadarUpdate );
- addModule( AnimationSteeringUpdate );
- addModule( TransportAIUpdate );
- addModule( WanderAIUpdate );
- addModule( WaveGuideUpdate );
- addModule( WorkerAIUpdate );
- addModule( PowerPlantUpdate );
- addModule( CheckpointUpdate );
- // upgrade modules
- addModule( CostModifierUpgrade );
- addModule( ActiveShroudUpgrade );
- addModule( ArmorUpgrade );
- addModule( CommandSetUpgrade );
- addModule( GrantScienceUpgrade );
- addModule( PassengersFireUpgrade );
- addModule( StatusBitsUpgrade );
- addModule( SubObjectsUpgrade );
- addModule( StealthUpgrade );
- addModule( RadarUpgrade );
- addModule( PowerPlantUpgrade );
- addModule( LocomotorSetUpgrade );
- addModule( ObjectCreationUpgrade );
- addModule( ReplaceObjectUpgrade );
- addModule( ModelConditionUpgrade );
- addModule( UnpauseSpecialPowerUpgrade );
- addModule( WeaponBonusUpgrade );
- addModule( WeaponSetUpgrade );
- addModule( WeaponBonusUpgrade );
- addModule( ExperienceScalarUpgrade );
- addModule( MaxHealthUpgrade );
- // create modules
- addModule( LockWeaponCreate );
- addModule( PreorderCreate );
- addModule( SupplyCenterCreate );
- addModule( SupplyWarehouseCreate );
- addModule( SpecialPowerCreate );
- addModule( GrantUpgradeCreate );
- addModule( VeterancyGainCreate );
- // damage modules
- addModule( BoneFXDamage );
- addModule( TransitionDamageFX );
- // collide modules
- addModule( FireWeaponCollide );
- addModule( SquishCollide );
- addModule( HealCrateCollide );
- addModule( MoneyCrateCollide );
- addModule( ShroudCrateCollide );
- addModule( UnitCrateCollide );
- addModule( VeterancyCrateCollide );
- addModule( ConvertToCarBombCrateCollide );
- addModule( ConvertToHijackedVehicleCrateCollide );
- addModule( SabotageCommandCenterCrateCollide );
- addModule( SabotageFakeBuildingCrateCollide );
- addModule( SabotageInternetCenterCrateCollide );
- addModule( SabotageMilitaryFactoryCrateCollide );
- addModule( SabotagePowerPlantCrateCollide );
- addModule( SabotageSuperweaponCrateCollide );
- addModule( SabotageSupplyCenterCrateCollide );
- addModule( SabotageSupplyDropzoneCrateCollide );
- addModule( SalvageCrateCollide );
- // body modules
- addModule( InactiveBody );
- addModule( ActiveBody );
- addModule( HighlanderBody );
- addModule( ImmortalBody );
- addModule( StructureBody );
- addModule( HiveStructureBody );
- addModule( UndeadBody );
- // contain modules
- // (none)
- // special power modules
- addModule( CashHackSpecialPower );
- addModule( DefectorSpecialPower );
- #ifdef ALLOW_DEMORALIZE
- addModule( DemoralizeSpecialPower );
- #endif
- addModule( OCLSpecialPower );
- addModule( FireWeaponPower );
- addModule( SpecialAbility );
- addModule( SpyVisionSpecialPower );
- addModule( CashBountyPower );
- addModule( CleanupAreaPower );
- // destroy modules
- // (none)
- // client update modules
- addModule( AnimatedParticleSysBoneClientUpdate );
- addModule( SwayClientUpdate );
- addModule( BeaconClientUpdate );
- } // end init
- //-------------------------------------------------------------------------------------------------
- Int ModuleFactory::findModuleInterfaceMask(const AsciiString& name, ModuleType type)
- {
- if (name.isEmpty())
- return 0;
- const ModuleTemplate* moduleTemplate = findModuleTemplate(name, type);
- if (moduleTemplate)
- {
- return moduleTemplate->m_whichInterfaces;
- }
- return 0;
- }
- //-------------------------------------------------------------------------------------------------
- ModuleData* ModuleFactory::newModuleDataFromINI(INI* ini, const AsciiString& name, ModuleType type,
- const AsciiString& moduleTag)
- {
- if (name.isEmpty())
- return NULL;
- const ModuleTemplate* moduleTemplate = findModuleTemplate(name, type);
- if (moduleTemplate)
- {
- ModuleData* md = (*moduleTemplate->m_createDataProc)(ini);
- md->setModuleTagNameKey( NAMEKEY( moduleTag ) );
- m_moduleDataList.push_back(md);
- return md;
- }
- return NULL;
- }
- // PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////////////////////
- //-------------------------------------------------------------------------------------------------
- /*static*/ NameKeyType ModuleFactory::makeDecoratedNameKey(const AsciiString& name, ModuleType type)
- {
- char tmp[256];
- tmp[0] = '0' + (int)type;
- strcpy(&tmp[1], name.str());
- return TheNameKeyGenerator->nameToKey(tmp);
- }
- //-------------------------------------------------------------------------------------------------
- const ModuleFactory::ModuleTemplate* ModuleFactory::findModuleTemplate(const AsciiString& name, ModuleType type)
- {
- NameKeyType namekey = makeDecoratedNameKey(name, type);
- ModuleTemplateMap::const_iterator it = m_moduleTemplateMap.find(namekey);
- if (it == m_moduleTemplateMap.end())
- {
- DEBUG_CRASH(( "Module name '%s' not found\n", name.str() ));
- return NULL;
- }
- else
- {
- return &(*it).second;
- }
- }
- //-------------------------------------------------------------------------------------------------
- /** Allocate a new acton class istance given the name */
- //-------------------------------------------------------------------------------------------------
- Module *ModuleFactory::newModule( Thing *thing, const AsciiString& name, const ModuleData* moduleData, ModuleType type )
- {
- // sanity
- if( name.isEmpty() )
- {
- DEBUG_CRASH(("attempting to create module with empty name\n"));
- return NULL;
- }
- const ModuleTemplate* mt = findModuleTemplate(name, type);
- if (mt)
- {
- Module* mod = (*mt->m_createProc)( thing, moduleData );
- #ifdef _DEBUG
- if (type == MODULETYPE_BEHAVIOR)
- {
- BehaviorModule* bm = (BehaviorModule*)mod;
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_BODY)) != 0) == (bm->getBody() != NULL),
- ("getInterfaceMask bad for MODULE_BODY (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_COLLIDE)) != 0) == (bm->getCollide() != NULL),
- ("getInterfaceMask bad for MODULE_COLLIDE (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_CONTAIN)) != 0) == (bm->getContain() != NULL),
- ("getInterfaceMask bad for MODULE_CONTAIN (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_CREATE)) != 0) == (bm->getCreate() != NULL),
- ("getInterfaceMask bad for MODULE_CREATE (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_DAMAGE)) != 0) == (bm->getDamage() != NULL),
- ("getInterfaceMask bad for MODULE_DAMAGE (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_DESTROY)) != 0) == (bm->getDestroy() != NULL),
- ("getInterfaceMask bad for MODULE_DESTROY (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_DIE)) != 0) == (bm->getDie() != NULL),
- ("getInterfaceMask bad for MODULE_DIE (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_SPECIAL_POWER)) != 0) == (bm->getSpecialPower() != NULL),
- ("getInterfaceMask bad for MODULE_SPECIAL_POWER (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_UPDATE)) != 0) == (bm->getUpdate() != NULL),
- ("getInterfaceMask bad for MODULE_UPDATE (%s)\n",name.str()));
- DEBUG_ASSERTCRASH(
- ((mt->m_whichInterfaces & (MODULEINTERFACE_UPGRADE)) != 0) == (bm->getUpgrade() != NULL),
- ("getInterfaceMask bad for MODULE_UPGRADE (%s)\n",name.str()));
- }
- #endif
- return mod;
- }
- return NULL;
- } // end newModule
- //-------------------------------------------------------------------------------------------------
- /** Add a module template to our list of templates */
- //-------------------------------------------------------------------------------------------------
- void ModuleFactory::addModuleInternal( NewModuleProc proc, NewModuleDataProc dataproc, ModuleType type, const AsciiString& name, Int whichIntf )
- {
- NameKeyType namekey = makeDecoratedNameKey(name, type);
- ModuleTemplate& mtm = m_moduleTemplateMap[namekey]; // this creates it if it does not exist already
- mtm.m_createProc = proc;
- mtm.m_createDataProc = dataproc;
- mtm.m_whichInterfaces = whichIntf;
- }
- //-------------------------------------------------------------------------------------------------
- void ModuleFactory::crc( Xfer *xfer )
- {
- for (ModuleDataList::iterator mdIt = m_moduleDataList.begin(); mdIt != m_moduleDataList.end(); ++mdIt)
- {
- ((ModuleData *)(*mdIt))->crc(xfer);
- }
- }
- //-------------------------------------------------------------------------------------------------
- void ModuleFactory::xfer( Xfer *xfer )
- {
- // version
- XferVersion currentVersion = 1;
- XferVersion version = currentVersion;
- xfer->xferVersion( &version, currentVersion );
- for (ModuleDataList::iterator mdIt = m_moduleDataList.begin(); mdIt != m_moduleDataList.end(); ++mdIt)
- {
- ((ModuleData *)(*mdIt))->xfer(xfer);
- }
- }
- //-------------------------------------------------------------------------------------------------
- void ModuleFactory::loadPostProcess( void )
- {
- }
|