void CPhysicsObject::GetPosition(Vector *worldPosition, QAngle *angles) const { if (!worldPosition && !angles) return; btTransform transform = m_pObject->getWorldTransform() * ((btMassCenterMotionState *)m_pObject->getMotionState())->m_centerOfMassOffset.inverse(); if (worldPosition) ConvertPosToHL(transform.getOrigin(), *worldPosition); if (angles) ConvertRotationToHL(transform.getBasis(), *angles); }
// Basically get the last inputs to IPhysicsShadowController::Update(), returns last input to timeOffset in Update() float CShadowController::GetTargetPosition(Vector *pPositionOut, QAngle *pAnglesOut) { if (pPositionOut) ConvertPosToHL(m_shadow.targetPosition, *pPositionOut); if (pAnglesOut) ConvertRotationToHL(m_shadow.targetRotation, *pAnglesOut); return m_timeOffset; }
int CPlayerController::GetShadowPosition(Vector *position, QAngle *angles) { btRigidBody *pObject = m_pObject->GetObject(); btTransform transform; ((btMassCenterMotionState *)pObject->getMotionState())->getGraphicTransform(transform); if (position) ConvertPosToHL(transform.getOrigin(), *position); if (angles) ConvertRotationToHL(transform.getBasis(), *angles); // Yep. We're returning a variable totally unrelated to the shadow's position. return m_ticksSinceUpdate; }
int CPhysicsObject::GetShadowPosition(Vector* position, QAngle* angles) const { btTransform transform; ((btMassCenterMotionState*)m_pObject->getMotionState())->getGraphicTransform(transform); if (position) { ConvertPosToHL(transform.getOrigin(), *position); } if (angles) { ConvertRotationToHL(transform.getBasis(), *angles); } return 0; }
void ConvertShadowControllerToHL( const shadowcontrol_params_t &in, hlshadowcontrol_params_t &out ) { ConvertPositionToHL( in.targetPosition, out.targetPosition ); ConvertRotationToHL( in.targetRotation, out.targetRotation ); out.teleportDistance = ConvertDistanceToHL( in.teleportDistance ); ConvertForceImpulseToHL( in.maxSpeed, out.maxSpeed); VectorAbs( out.maxSpeed, out.maxSpeed ); ConvertAngularImpulseToHL( in.maxAngular, out.maxAngular ); VectorAbs( out.maxAngular, out.maxAngular ); out.dampFactor = in.dampFactor; }
void CPhysicsObject::GetPosition( Vector *worldPosition, QAngle *angles ) { IVP_U_Matrix matrix; m_pObject->get_m_world_f_object_AT( &matrix ); if ( worldPosition ) { ConvertPositionToHL( matrix.vv, *worldPosition ); } if ( angles ) { ConvertRotationToHL( matrix, *angles ); } }
int CPhysicsObject::GetShadowPosition(Vector *position, QAngle *angles) const { // Valve vphysics just interpolates current position to next PSI if (!position && !angles) return m_pEnv->GetNumSubSteps(); btTransform transform; ((btMassCenterMotionState *)m_pObject->getMotionState())->getGraphicTransform(transform); float deltaTime = m_pEnv->GetSubStepTime(); btTransformUtil::integrateTransform(transform, m_pObject->getLinearVelocity(), m_pObject->getAngularVelocity(), deltaTime, transform); if (position) ConvertPosToHL(transform.getOrigin(), *position); if (angles) ConvertRotationToHL(transform.getBasis(), *angles); // Simulated PSIs return m_pEnv->GetNumSubSteps(); }
int CPhysicsObject::GetShadowPosition( Vector *position, QAngle *angles ) { IVP_U_Matrix matrix; IVP_Environment *pEnv = m_pObject->get_environment(); CPhysicsEnvironment *pVEnv = (CPhysicsEnvironment *)pEnv->client_data; double psi = pEnv->get_next_PSI_time().get_seconds(); m_pObject->calc_at_matrix( psi, &matrix ); if ( angles ) { ConvertRotationToHL( matrix, *angles ); } if ( position ) { ConvertPositionToHL( matrix.vv, *position ); } return pVEnv->GetSimulatedPSIs(); }
void CPhysicsObject::GetPosition(Vector* worldPosition, QAngle* angles) const { btTransform transform; ((btMassCenterMotionState*)m_pObject->getMotionState())->getGraphicTransform(transform); if (worldPosition) ConvertPosToHL(transform.getOrigin(), *worldPosition); if (angles) ConvertRotationToHL(transform.getBasis(), *angles); }