Esempio n. 1
0
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CPathKeyFrame::CalculateFrameDuration( void )
{
	// calculate time from speed
	if ( m_pNextKey && m_flSpeed > 0 )
	{
		m_flNextTime = (m_Origin - m_pNextKey->m_Origin).Length() / m_flSpeed;

		// couldn't get time from distance, get it from rotation instead
		if ( !m_flNextTime )
		{
			// speed is in degrees per second
			// find the largest rotation component and use that
			QAngle ang = m_Angles - m_pNextKey->m_Angles;
			FixupAngles( ang );
			float x = 0;
			for ( int i = 0; i < 3; i++ )
			{
				if ( abs(ang[i]) > x )
				{
					x = abs(ang[i]);
				}
			}

			m_flNextTime = x / m_flSpeed;
		}
	}
}
Esempio n. 2
0
void GetAttachment(CBaseEntity *pEntity, int iBone, Vector *pVecOrigin, Vector *pVecAngles)
{
	Vector vecOrigin, vecAngles;
	edict_t *pEdict = pEntity->edict();

	// force to update frame
	StudioFrameAdvanceEnt(pEdict);

	GET_ATTACHMENT(pEdict, iBone, vecOrigin, vecAngles);

	if (!pEntity->IsPlayer()) {
		FixupAngles(pEdict, vecOrigin);
	}

	if (pVecOrigin) {
		*pVecOrigin = vecOrigin;
	}

	if (pVecAngles) {
		*pVecAngles = vecAngles;
	}
}
Esempio n. 3
0
void GetBonePosition(CBaseEntity *pEntity, int iBone, Vector *pVecOrigin, Vector *pVecAngles)
{
	Vector vecOrigin, vecAngles;
	edict_t *pEdict = pEntity->edict();

	// force to update frame
	StudioFrameAdvanceEnt(pEdict);

	pEntity->pev->angles.x = -pEntity->pev->angles.x;
	GET_BONE_POSITION(pEdict, iBone, vecOrigin, vecAngles);
	pEntity->pev->angles.x = -pEntity->pev->angles.x;

	if (!pEntity->IsPlayer()) {
		FixupAngles(pEdict, vecOrigin);
	}

	if (pVecOrigin) {
		*pVecOrigin = vecOrigin;
	}

	if (pVecAngles) {
		*pVecAngles = vecAngles;
	}
}