diff --git a/Engine/source/T3D/fx/lightning.cpp b/Engine/source/T3D/fx/lightning.cpp index 385068ddfd..e6c315796c 100644 --- a/Engine/source/T3D/fx/lightning.cpp +++ b/Engine/source/T3D/fx/lightning.cpp @@ -870,25 +870,30 @@ void Lightning::strikeObject(ShapeBase* targetObj) Point3F strikePoint = targetObj->getPosition(); Point3F objectCenter; - targetObj->getObjBox().getCenter(&objectCenter); - objectCenter.convolve(targetObj->getScale()); - targetObj->getTransform().mulP(objectCenter); + Box3F wb = getWorldBox(); + if (!wb.isContained(strikePoint)) + return; + + Point3F targetRel = strikePoint - getPosition(); + Point3F length(wb.len_x() / 2.0f, wb.len_y() / 2.0f, wb.len_z() / 2.0f); + + Point3F strikePos = targetRel / length; bool playerInWarmup = false; Player *playerObj = dynamic_cast< Player * >(targetObj); if (playerObj) { - if (!playerObj->getControllingClient()) - { - playerInWarmup = true; - } + if (!playerObj->getControllingClient()) + { + playerInWarmup = true; + } } if (!playerInWarmup) { - applyDamage_callback(objectCenter, VectorF(0.0, 0.0, 1.0), targetObj); + applyDamage_callback(targetObj->getWorldSphere().center, VectorF(0.0, 0.0, 1.0), targetObj); } - + SimGroup* pClientGroup = Sim::getClientGroup(); for (SimGroup::iterator itr = pClientGroup->begin(); itr != pClientGroup->end(); itr++) { NetConnection* nc = static_cast(*itr); @@ -897,16 +902,15 @@ void Lightning::strikeObject(ShapeBase* targetObj) LightningStrikeEvent* pEvent = new LightningStrikeEvent; pEvent->mLightning = this; - pEvent->mStart.x = strikePoint.x; - pEvent->mStart.y = strikePoint.y; - pEvent->mTarget = targetObj; + pEvent->mStart.x = strikePoint.x; + pEvent->mStart.y = strikePoint.y; + pEvent->mTarget = targetObj; nc->postNetEvent(pEvent); } } } - //-------------------------------------------------------------------------- U32 Lightning::packUpdate(NetConnection* con, U32 mask, BitStream* stream) {