diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h b/Generals/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h index 04284c0f18a..0ec053b0993 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h @@ -38,15 +38,14 @@ class AssistedTargetingUpdateModuleData : public UpdateModuleData public: Int m_clipSize; WeaponSlotType m_weaponSlot; - ThingTemplate *m_laserFromAssisted; - ThingTemplate *m_laserToTarget; + + AsciiString m_laserFromAssistedName; + AsciiString m_laserToTargetName; AssistedTargetingUpdateModuleData() { m_clipSize = 1; m_weaponSlot = PRIMARY_WEAPON; - m_laserFromAssisted = nullptr; - m_laserToTarget = nullptr; } static void buildFieldParse(MultiIniFieldParse& p); @@ -72,4 +71,7 @@ class AssistedTargetingUpdate : public UpdateModule private: void makeFeedbackLaser( const ThingTemplate *laserTemplate, const Object *from, const Object *to ); + + const ThingTemplate *m_laserFromAssisted; + const ThingTemplate *m_laserToTarget; }; diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp index 20f57f56049..5d6aec0dfd8 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp @@ -49,23 +49,24 @@ //------------------------------------------------------------------------------------------------- void AssistedTargetingUpdateModuleData::buildFieldParse(MultiIniFieldParse& p) { - UpdateModuleData::buildFieldParse(p); + UpdateModuleData::buildFieldParse(p); static const FieldParse dataFieldParse[] = { { "AssistingClipSize", INI::parseInt, nullptr, offsetof( AssistedTargetingUpdateModuleData, m_clipSize ) }, { "AssistingWeaponSlot", INI::parseLookupList, TheWeaponSlotTypeNamesLookupList, offsetof( AssistedTargetingUpdateModuleData, m_weaponSlot ) }, - { "LaserFromAssisted", INI::parseThingTemplate, nullptr, offsetof( AssistedTargetingUpdateModuleData, m_laserFromAssisted ) }, - { "LaserToTarget", INI::parseThingTemplate, nullptr, offsetof( AssistedTargetingUpdateModuleData, m_laserToTarget ) }, + { "LaserFromAssisted", INI::parseAsciiString, nullptr, offsetof( AssistedTargetingUpdateModuleData, m_laserFromAssistedName ) }, + { "LaserToTarget", INI::parseAsciiString, nullptr, offsetof( AssistedTargetingUpdateModuleData, m_laserToTargetName ) }, { nullptr, nullptr, nullptr, 0 } }; - p.add(dataFieldParse); + p.add(dataFieldParse); } //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- AssistedTargetingUpdate::AssistedTargetingUpdate( Thing *thing, const ModuleData* moduleData ) : UpdateModule( thing, moduleData ) { - setWakeFrame(getObject(), UPDATE_SLEEP_FOREVER); + m_laserFromAssisted = nullptr; + m_laserToTarget = nullptr; } //------------------------------------------------------------------------------------------------- @@ -100,10 +101,10 @@ void AssistedTargetingUpdate::assistAttack( const Object *requestingObject, Obje me->setWeaponLock( md->m_weaponSlot, LOCKED_TEMPORARILY ); me->getAI()->aiAttackObject( victimObject, md->m_clipSize, CMD_FROM_AI ); - if( md->m_laserFromAssisted ) - makeFeedbackLaser( md->m_laserFromAssisted, requestingObject, me ); - if( md->m_laserToTarget ) - makeFeedbackLaser( md->m_laserToTarget, me, victimObject ); + if( m_laserFromAssisted ) + makeFeedbackLaser( m_laserFromAssisted, requestingObject, me ); + if( m_laserToTarget ) + makeFeedbackLaser( m_laserToTarget, me, victimObject ); } //------------------------------------------------------------------------------------------------- @@ -137,6 +138,11 @@ void AssistedTargetingUpdate::makeFeedbackLaser( const ThingTemplate *laserTempl //------------------------------------------------------------------------------------------------- UpdateSleepTime AssistedTargetingUpdate::update() { + const AssistedTargetingUpdateModuleData *d = getAssistedTargetingUpdateModuleData(); + + m_laserFromAssisted = TheThingFactory->findTemplate( d->m_laserFromAssistedName ); + m_laserToTarget = TheThingFactory->findTemplate( d->m_laserToTargetName ); + return UPDATE_SLEEP_FOREVER; } @@ -174,8 +180,11 @@ void AssistedTargetingUpdate::xfer( Xfer *xfer ) // ------------------------------------------------------------------------------------------------ void AssistedTargetingUpdate::loadPostProcess() { + const AssistedTargetingUpdateModuleData *d = getAssistedTargetingUpdateModuleData(); + + m_laserFromAssisted = TheThingFactory->findTemplate( d->m_laserFromAssistedName ); + m_laserToTarget = TheThingFactory->findTemplate( d->m_laserToTargetName ); // extend base class UpdateModule::loadPostProcess(); - } diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h index c784a12d450..4362325ca35 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AssistedTargetingUpdate.h @@ -39,15 +39,13 @@ class AssistedTargetingUpdateModuleData : public UpdateModuleData Int m_clipSize; WeaponSlotType m_weaponSlot; - AsciiString m_laserFromAssistedName; - AsciiString m_laserToTargetName; + AsciiString m_laserFromAssistedName; + AsciiString m_laserToTargetName; AssistedTargetingUpdateModuleData() { m_clipSize = 1; m_weaponSlot = PRIMARY_WEAPON; - m_laserFromAssistedName.clear(); - m_laserToTargetName.clear(); } static void buildFieldParse(MultiIniFieldParse& p); @@ -76,6 +74,4 @@ class AssistedTargetingUpdate : public UpdateModule const ThingTemplate *m_laserFromAssisted; const ThingTemplate *m_laserToTarget; - - }; diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp index a9473b48d70..4757457d8e6 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AssistedTargetingUpdate.cpp @@ -49,7 +49,7 @@ //------------------------------------------------------------------------------------------------- void AssistedTargetingUpdateModuleData::buildFieldParse(MultiIniFieldParse& p) { - UpdateModuleData::buildFieldParse(p); + UpdateModuleData::buildFieldParse(p); static const FieldParse dataFieldParse[] = { { "AssistingClipSize", INI::parseInt, nullptr, offsetof( AssistedTargetingUpdateModuleData, m_clipSize ) }, @@ -58,7 +58,7 @@ void AssistedTargetingUpdateModuleData::buildFieldParse(MultiIniFieldParse& p) { "LaserToTarget", INI::parseAsciiString, nullptr, offsetof( AssistedTargetingUpdateModuleData, m_laserToTargetName ) }, { nullptr, nullptr, nullptr, 0 } }; - p.add(dataFieldParse); + p.add(dataFieldParse); } //------------------------------------------------------------------------------------------------- @@ -101,7 +101,6 @@ void AssistedTargetingUpdate::assistAttack( const Object *requestingObject, Obje me->setWeaponLock( md->m_weaponSlot, LOCKED_TEMPORARILY ); me->getAI()->aiAttackObject( victimObject, md->m_clipSize, CMD_FROM_AI ); - if( m_laserFromAssisted ) makeFeedbackLaser( m_laserFromAssisted, requestingObject, me ); if( m_laserToTarget ) @@ -120,9 +119,6 @@ void AssistedTargetingUpdate::makeFeedbackLaser( const ThingTemplate *laserTempl if( !laser ) return; - // Give it a good basis in reality to ensure it can draw when on screen. - laser->setPosition(from->getPosition()); - Drawable *draw = laser->getDrawable(); static const NameKeyType key_LaserUpdate = NAMEKEY( "LaserUpdate" ); LaserUpdate *update = (LaserUpdate*)draw->findClientUpdateModule( key_LaserUpdate ); @@ -132,6 +128,9 @@ void AssistedTargetingUpdate::makeFeedbackLaser( const ThingTemplate *laserTempl return; } + // Give it a good basis in reality to ensure it can draw when on screen. + laser->setPosition(from->getPosition()); + update->initLaser( getObject(), to, from->getPosition(), to->getPosition(), "" ); } @@ -139,15 +138,11 @@ void AssistedTargetingUpdate::makeFeedbackLaser( const ThingTemplate *laserTempl //------------------------------------------------------------------------------------------------- UpdateSleepTime AssistedTargetingUpdate::update() { - - const AssistedTargetingUpdateModuleData *d = getAssistedTargetingUpdateModuleData(); + const AssistedTargetingUpdateModuleData *d = getAssistedTargetingUpdateModuleData(); m_laserFromAssisted = TheThingFactory->findTemplate( d->m_laserFromAssistedName ); - - m_laserToTarget = TheThingFactory->findTemplate( d->m_laserToTargetName ); - return UPDATE_SLEEP_FOREVER; } @@ -185,12 +180,11 @@ void AssistedTargetingUpdate::xfer( Xfer *xfer ) // ------------------------------------------------------------------------------------------------ void AssistedTargetingUpdate::loadPostProcess() { - const AssistedTargetingUpdateModuleData *d = getAssistedTargetingUpdateModuleData(); + const AssistedTargetingUpdateModuleData *d = getAssistedTargetingUpdateModuleData(); m_laserFromAssisted = TheThingFactory->findTemplate( d->m_laserFromAssistedName ); m_laserToTarget = TheThingFactory->findTemplate( d->m_laserToTargetName ); // extend base class UpdateModule::loadPostProcess(); - }