mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Merge pull request #1938 from John3/add_strikeObject
added strikeObject lightning feature
This commit is contained in:
commit
5c8a82180b
|
|
@ -867,13 +867,53 @@ 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;
|
||||||
|
|
||||||
|
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 (!playerInWarmup)
|
||||||
|
{
|
||||||
|
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<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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
U32 Lightning::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
|
U32 Lightning::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue