Browse Source

add strikeObject functionality feature

Johxz 8 years ago
parent
commit
3cd82d9229
2 changed files with 39 additions and 3 deletions
  1. 38 2
      Engine/source/T3D/fx/lightning.cpp
  2. 1 1
      Engine/source/T3D/fx/lightning.h

+ 38 - 2
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(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<NetConnection*>(*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);
+      }
+   }
 }
 }
 
 
 
 

+ 1 - 1
Engine/source/T3D/fx/lightning.h

@@ -229,7 +229,7 @@ class Lightning : public GameBase
 
 
    void warningFlashes();
    void warningFlashes();
    void strikeRandomPoint();
    void strikeRandomPoint();
-   void strikeObject(ShapeBase*);
+   void strikeObject(ShapeBase* targetObj);
    void processEvent(LightningStrikeEvent*);
    void processEvent(LightningStrikeEvent*);
 
 
    DECLARE_CONOBJECT(Lightning);
    DECLARE_CONOBJECT(Lightning);