diff --git a/Engine/source/T3D/fx/lightning.cpp b/Engine/source/T3D/fx/lightning.cpp index 080bbed820..385068ddfd 100644 --- a/Engine/source/T3D/fx/lightning.cpp +++ b/Engine/source/T3D/fx/lightning.cpp @@ -863,11 +863,47 @@ void Lightning::strikeRandomPoint() } //-------------------------------------------------------------------------- -void Lightning::strikeObject(ShapeBase*) +void Lightning::strikeObject(ShapeBase* targetObj) { AssertFatal(isServerObject(), "Error, client objects may not initiate lightning!"); - AssertFatal(false, "Lightning::strikeObject is not implemented."); + Point3F strikePoint = targetObj->getPosition(); + Point3F objectCenter; + + targetObj->getObjBox().getCenter(&objectCenter); + objectCenter.convolve(targetObj->getScale()); + targetObj->getTransform().mulP(objectCenter); + + bool playerInWarmup = false; + Player *playerObj = dynamic_cast< Player * >(targetObj); + if (playerObj) + { + if (!playerObj->getControllingClient()) + { + playerInWarmup = true; + } + } + + if (!playerInWarmup) + { + applyDamage_callback(objectCenter, 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); + if (nc != NULL) + { + LightningStrikeEvent* pEvent = new LightningStrikeEvent; + pEvent->mLightning = this; + + pEvent->mStart.x = strikePoint.x; + pEvent->mStart.y = strikePoint.y; + pEvent->mTarget = targetObj; + + nc->postNetEvent(pEvent); + } + } } diff --git a/Engine/source/T3D/fx/lightning.h b/Engine/source/T3D/fx/lightning.h index 340d4e067f..ed08bbd82d 100644 --- a/Engine/source/T3D/fx/lightning.h +++ b/Engine/source/T3D/fx/lightning.h @@ -229,7 +229,7 @@ class Lightning : public GameBase void warningFlashes(); void strikeRandomPoint(); - void strikeObject(ShapeBase*); + void strikeObject(ShapeBase* targetObj); void processEvent(LightningStrikeEvent*); DECLARE_CONOBJECT(Lightning);