本文整理汇总了C++中CServerDE::GetObjectRotation方法的典型用法代码示例。如果您正苦于以下问题:C++ CServerDE::GetObjectRotation方法的具体用法?C++ CServerDE::GetObjectRotation怎么用?C++ CServerDE::GetObjectRotation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CServerDE
的用法示例。
在下文中一共展示了CServerDE::GetObjectRotation方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateNormalRotation
void Rotating::UpdateNormalRotation()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
DRotation rRot;
pServerDE->GetObjectRotation(m_hObject, &rRot);
DFLOAT fTime = pServerDE->GetTime();
DFLOAT fDeltaTime = fTime - m_fLastTime;
if (m_vVelocity.x > 0.0f)
{
m_fPitch += (m_vSign.x * (m_vVelocity.x * fDeltaTime));
}
if (m_vVelocity.y > 0.0f)
{
m_fYaw += (m_vSign.y * (m_vVelocity.y * fDeltaTime));
}
if (m_vVelocity.z > 0.0f)
{
m_fRoll += (m_vSign.z * (m_vVelocity.z * fDeltaTime));
}
pServerDE->SetupEuler(&rRot, m_fPitch, m_fYaw, m_fRoll);
pServerDE->RotateObject(m_hObject, &rRot);
m_fLastTime = fTime;
}
示例2: Update
DBOOL CHandWeaponModel::Update()
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return 0;
if (m_bFirstUpdate)
{
m_bFirstUpdate = DFALSE;
DDWORD dwFlags = pServerDE->GetObjectFlags(m_hObject);
if (m_bVisible)
pServerDE->SetObjectFlags(m_hObject, dwFlags | FLAG_VISIBLE);
else
pServerDE->SetObjectFlags(m_hObject, dwFlags & ~FLAG_VISIBLE);
if( !m_bDropped )
{
pServerDE->SetNextUpdate(m_hObject, 0.0f);
return DTRUE;
}
}
// See if standing on anything
CollisionInfo collisionInfo;
pServerDE->GetStandingOn(m_hObject, &collisionInfo);
DBOOL bIsStandingOn = (collisionInfo.m_hObject != DNULL);
if (bIsStandingOn)
{
// Spawn a powerup
DVector vF, vPos, vU;
DRotation rRot;
// We want the rotation aligned.
pServerDE->GetObjectRotation(m_hObject, &rRot);
pServerDE->GetRotationVectors(&rRot, &vU, &vPos, &vF);
vF.y = 0.0f;
VEC_SET(vU, 0,1,0);
pServerDE->AlignRotation(&rRot, &vF, &vU);
pServerDE->GetObjectPos(m_hObject, &vPos);
vPos.y += 10;
SpawnWeaponPickup(m_dwType, m_hObject, &vPos, &rRot, !m_bOwnedByPlayer);
return DFALSE;
}
pServerDE->SetNextUpdate( m_hObject, 0.01f);
return DTRUE;
}
示例3: Drop
void CHandWeaponModel::Drop()
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
m_bDropped = DTRUE;
DVector vF, vR, vU;
DRotation rRot;
// Set some minimum dims, and make sure x and z are the same.
DVector vDims;
pServerDE->GetModelAnimUserDims(m_hObject, &vDims, pServerDE->GetModelAnimation(m_hObject));
if (vDims.x < 10.0f)
vDims.x = 10.0f;
if (vDims.x > vDims.z)
vDims.z = vDims.x;
else
vDims.x = vDims.z;
// g_pServerDE->BPrint("Setting PU dims %f,%f,%f", VEC_EXPAND(vDims));
if (pServerDE->SetObjectDims2(m_hObject, &vDims) == DE_ERROR)
// Get vectors to set a velocity
pServerDE->GetObjectRotation(m_hObject, &rRot);
pServerDE->GetRotationVectors(&rRot, &vU, &vR, &vF);
// Set some forward and upward velocity
VEC_ADD(vF, vF, vU);
VEC_MULSCALAR(vF, vF, 150.0f);
pServerDE->SetVelocity(m_hObject, &vF);
// Make it visible
DDWORD dwFlags = pServerDE->GetObjectFlags(m_hObject);
pServerDE->SetObjectFlags(m_hObject, dwFlags | FLAG_NOSLIDING | FLAG_VISIBLE | FLAG_GRAVITY | FLAG_REMOVEIFOUTSIDE);
// Show the model on the client now
/* if(m_dwClientID)
{
HMESSAGEWRITE hMsg = pServerDE->StartSpecialEffectMessage(this);
pServerDE->WriteToMessageByte(hMsg, SFX_WEAPONHANDMODEL_ID);
pServerDE->WriteToMessageDWord(hMsg, m_dwClientID);
pServerDE->WriteToMessageByte(hMsg, (m_bLeftHand << 1) | DTRUE);
pServerDE->EndMessage2(hMsg, MESSAGE_GUARANTEED);
}
*/
// Set next update for 1 second to spawn a powerup
pServerDE->SetNextUpdate( m_hObject, 1.0f);
}
示例4: CreateSurface
void VolumeBrush::CreateSurface()
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
ObjectCreateStruct theStruct;
INIT_OBJECTCREATESTRUCT(theStruct);
DVector vPos, vDims, vScale;
VEC_INIT(vScale);
pServerDE->GetObjectDims(m_hObject, &vDims);
pServerDE->GetObjectPos(m_hObject, &vPos);
DRotation rRot;
pServerDE->GetObjectRotation(m_hObject, &rRot);
VEC_COPY(m_vLastPos, vPos);
vPos.y += vDims.y - (m_fSurfaceHeight/2.0f);
VEC_COPY(theStruct.m_Pos, vPos);
ROT_COPY(theStruct.m_Rotation, rRot);
HCLASS hClass = pServerDE->GetClass("PolyGrid");
PolyGrid* pSurface = DNULL;
if (hClass)
{
pSurface = (PolyGrid *)pServerDE->CreateObject(hClass, &theStruct);
}
if (pSurface)
{
m_hSurfaceObj = pSurface->m_hObject;
vDims.y = m_fSurfaceHeight;
DFLOAT fXPan = 1.0f + (m_vCurrent.x * 0.01f);
DFLOAT fYPan = 1.0f + (m_vCurrent.y * 0.01f);
pSurface->Setup(&vDims, &m_vSurfaceColor1, &m_vSurfaceColor2,
m_hstrSurfaceSprite, m_fXScaleMin, m_fXScaleMax,
m_fYScaleMin, m_fYScaleMax, m_fXScaleDuration,
m_fYScaleDuration, fXPan, fYPan, m_fSurfaceAlpha,
m_dwNumSurfacePolies);
// pServerDE->SetObjectColor(m_hSurfaceObj,1.0f,0,0,0.1f);
}
}
示例5: Update
void CMovement::Update()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !m_hObject) return;
// Save our last position...
VEC_COPY(m_vLastPos,m_vPos);
pServerDE->GetObjectPos(m_hObject, &m_vPos);
// Retrieve object vectors for current frame..
pServerDE->GetObjectRotation(m_hObject, &m_rRot);
pServerDE->GetRotationVectors(&m_rRot, &m_vUp, &m_vRight, &m_vForward);
return;
}
示例6: HandleDestruction
void CDestructable::HandleDestruction()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
if (m_hstrDeathTriggerTarget)
{
LPBASECLASS pD = pServerDE->HandleToObject(m_hObject);
SendTriggerMsgToObjects(pD, m_hstrDeathTriggerTarget, m_hstrDeathTriggerMessage);
}
// See if we need to spawn anything
if (m_hstrSpawnObject)
{
DVector vPos;
DRotation rRot;
pServerDE->GetObjectPos(m_hObject, &vPos);
pServerDE->GetObjectRotation(m_hObject, &rRot);
SpawnObject(pServerDE->GetStringData(m_hstrSpawnObject), &vPos, &rRot, &m_vSpawnObjectVel);
}
}
示例7: EngineMessageFn
DDWORD BugAI::EngineMessageFn(DDWORD messageID, void *pData, DFLOAT fData)
{
switch(messageID)
{
case MID_PRECREATE:
{
// Need to call base class to have the object name read in before
// we call PostPropRead()
DDWORD dwRet = AI_Mgr::EngineMessageFn(messageID, pData, fData);
if (fData == 1.0)
AI_Mgr::ReadProp((ObjectCreateStruct*)pData); // inside BaseCharacter
PostPropRead((ObjectCreateStruct*)pData);
return dwRet;
}
break;
case MID_INITIALUPDATE:
{
InitialUpdate((DVector *)pData);
break;
}
case MID_UPDATE:
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return 0;
//gotta keep the bug stuck to whatever surface it is on
DRotation rRot;
DVector vU,vR,vF,vVel,vPos;
pServerDE->GetObjectPos(m_hObject,&vPos);
pServerDE->GetObjectRotation(m_hObject,&rRot);
pServerDE->GetRotationVectors(&rRot,&vU,&vR,&vF);
VEC_MULSCALAR(vVel,vU,-15.0f);
Move(vVel, MATH_EPSILON);
//check if there is something below, if not rotate
IntersectQuery IQuery;
IntersectInfo ii;
IQuery.m_Flags = INTERSECT_OBJECTS;
IQuery.m_FilterFn = DNULL;
DVector vTemp;
VEC_MULSCALAR(vTemp,vU,-2.0f);
VEC_COPY(IQuery.m_From,vPos);
VEC_ADD(IQuery.m_To,IQuery.m_From,vTemp);
if(pServerDE->IntersectSegment(&IQuery, &ii))
{
DRotation rRot;
DVector vDown;
VEC_MULSCALAR(vDown,vU,-1.0f);
pServerDE->AlignRotation(&rRot,&vDown,&vF);
pServerDE->SetObjectRotation(m_hObject,&rRot);
}
}
break;
default : break;
}
return AI_Mgr::EngineMessageFn(messageID, pData, fData);
}
示例8: HandleDamage
void CDestructable::HandleDamage(HOBJECT hSender, HMESSAGEREAD hRead)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
DVector vDir,vPos;
pServerDE->ReadFromMessageVector(hRead, &vDir);
DFLOAT fDamage = pServerDE->ReadFromMessageFloat(hRead);
DBYTE nDamageType = pServerDE->ReadFromMessageByte(hRead);
HOBJECT hWhoHit = pServerDE->ReadFromMessageObject(hRead);
pServerDE->ReadFromMessageVector(hRead, &vPos);
// char buf[50];
DFLOAT fOldHitPoints = m_fHitPoints;
fDamage = fDamage * m_fResistance;
// Just return if we can't take damage
if (m_bGodMode || (m_bTriggerOnly && nDamageType != DAMAGE_TYPE_DEATH) || fDamage < 0)
{
return;
}
if (!IsPlayerToPlayerDamageOk(hSender, hWhoHit))
{
return;
}
// If instant death, don't bother calculating stuff..
if( m_bDestructable && nDamageType == DAMAGE_TYPE_DEATH)
{
m_fArmorPoints = 0;
m_fHitPoints = 0;
m_fDeathHitPoints = 0;
m_fLastDamagePercent = 100.0f;
m_fLastDamageAmount = (DFLOAT)m_fMaxHitPoints;
nDamageType &= 0x0f; // Mask off the damage type flags
m_nLastDamageType = nDamageType;
}
else
{
// Special pre-damage base character modifiers
if (IsAICharacter(m_hObject))
{
m_nNodeHit = CalculateHitLimb(vDir,vPos,fDamage);
if(m_nNodeHit == -1 && !(nDamageType & DAMAGE_TYPE_NORMAL))
m_nNodeHit = SetProperNode(pServerDE->IntRandom(0,NUM_ALL_NODES - 3));
else if(m_nNodeHit >= 0)
m_nNodeHit = SetProperNode(m_nNodeHit);
else
return;
//Compute one side got hit for recoils
DVector vU, vR, vF, vTmpDir;
DRotation rRot;
pServerDE->GetObjectRotation(m_hObject, &rRot);
pServerDE->GetRotationVectors(&rRot, &vU, &vR, &vF);
VEC_COPY(vTmpDir, vDir);
VEC_MULSCALAR(vTmpDir,vTmpDir,-1.0f);
DFLOAT fAmount = (DFLOAT) atan2(vTmpDir.x, vTmpDir.z);
DFLOAT fAmount2 = (DFLOAT) atan2(vF.x, vF.z);
if(fAmount < 0.0f)
fAmount = (MATH_PI*2) + fAmount;
if(fAmount2 < 0.0f)
fAmount2 = (MATH_PI*2) + fAmount2;
DFLOAT fAngle = fAmount2 - fAmount;
if(fAngle <= MATH_PI/2 || fAngle >= 3*MATH_PI/2) //Hit the front
{
m_nSideHit = 0;
}
else //Hit the back
{
m_nSideHit = 6;
}
if (m_hLastDamager)
pServerDE->BreakInterObjectLink(m_hObject, m_hLastDamager);
m_hLastDamager = hWhoHit;
if(m_hLastDamager)
pServerDE->CreateInterObjectLink(m_hObject, m_hLastDamager);
if(m_nNodeHit == NODE_NECK)
{
AI_Mgr* pAI = (AI_Mgr*)pServerDE->HandleToObject(m_hObject);
if(pAI->m_bCabal || pServerDE->IsKindOf(pServerDE->GetObjectClass(m_hObject), pServerDE->GetClass("SoulDrudge")))
m_fHitPoints = 0;
fDamage *= 1.5f;
}
else if(m_nNodeHit == NODE_TORSO)
//.........这里部分代码省略.........
示例9: Update
//.........这里部分代码省略.........
DRotation rRot;
DVector m_vUp, m_vRight, m_vForward;
DVector vPos, vTemp, vDir, vDims;
// Need to build a table of Sprites and There Positions...
// Then Update Each position???
//
int x = m_nFireIndex;
{
// Remove everything if we're done.
if (fTime > m_fStartTime[x] + m_fDuration[x])
{
m_fStartTime[x] = pServerDE->GetTime();
if (m_hSprite[x])
{
g_pServerDE->RemoveObject(m_hSprite[x]);
m_hSprite[x] = DNULL;
}
if (m_hSmokeTrail[x])
{
g_pServerDE->RemoveObject(m_hSmokeTrail[x]);
m_hSmokeTrail[x] = DNULL;
}
// Add Flame
VEC_INIT(m_vUp);
VEC_INIT(m_vRight);
VEC_INIT(m_vForward);
if (!m_hLinkObject) return DFALSE;
pServerDE->GetObjectRotation(m_hLinkObject, &rRot);
pServerDE->GetRotationVectors(&rRot, &m_vUp, &m_vRight, &m_vForward);
if (!m_hLinkObject) return DFALSE;
pServerDE->GetObjectDims(m_hLinkObject, &vDims);
pServerDE->GetObjectPos(m_hLinkObject, &vPos);
// Need to use the Dims of the Object to set these!!!
VEC_MULSCALAR(vDims, vDims, 0.8f);
DFLOAT m_fForwardOffset = pServerDE->Random(-vDims.x, vDims.x);
DFLOAT m_fUpOffset = pServerDE->Random(-vDims.y, vDims.y/2.0f);
DFLOAT m_fRightOffset = pServerDE->Random(-vDims.z, vDims.z);
VEC_MULSCALAR(vTemp, m_vForward, m_fForwardOffset);
VEC_ADD(vPos, vPos, vTemp);
// vPos is a point in front of you.
// vDir is a point in front of you, but down
VEC_COPY(vDir, vPos);
vDir.y = vDir.y - m_fUpOffset;
vDir.x = vDir.x - m_fRightOffset;
vDir.z = vDir.z - m_fForwardOffset;
VEC_COPY(vPos, vDir);
ObjectCreateStruct theStruct;
INIT_OBJECTCREATESTRUCT(theStruct);
theStruct.m_Flags = FLAG_VISIBLE;
theStruct.m_ObjectType = OT_SPRITE;
VEC_COPY(theStruct.m_Pos, vPos);
theStruct.m_SkinName[0] = '\0';