/*
============
After rotating, set angle to exact final angle, call "move done" function
============
*/
void CBaseToggle :: AngularMoveDoneNow( void )
{
//	ALERT(at_console, "AngularMoveDone %f\n", pev->ltime);
	UTIL_SetAvelocity(this, g_vecZero);
	if (m_pMoveWith)
	{
		UTIL_SetAngles(this, m_vecFinalAngle + m_pMoveWith->pev->angles);
	}
	else
	{
		UTIL_SetAngles(this, m_vecFinalAngle);
	}
	DontThink();
	if ( m_pfnCallWhenMoveDone )
		(this->*m_pfnCallWhenMoveDone)();
}
void UTIL_AssignAngles(CBaseEntity *pEntity, const Vector vecAngles, BOOL bInitiator)
{
	Vector vecDiff = vecAngles - pEntity->pev->angles;
	if (vecDiff.Length() > 0.01 && CVAR_GET_FLOAT("sohl_mwdebug"))
		ALERT(at_debug, "SetAngles %s %s: (%f %f %f) goes to (%f %f %f)\n", STRING(pEntity->pev->classname), STRING(pEntity->pev->targetname), pEntity->pev->angles.x, pEntity->pev->angles.y, pEntity->pev->angles.z, vecAngles.x, vecAngles.y, vecAngles.z);

	//	UTIL_SetDesiredAngles(pEntity, vecAngles);
	UTIL_SetAngles(pEntity, vecAngles);

	if (bInitiator && pEntity->m_pMoveWith)
	{
		pEntity->m_vecOffsetAngles = vecAngles - pEntity->m_pMoveWith->pev->angles;
	}
	if (pEntity->m_pChildMoveWith) // now I've moved pEntity, does anything else have to move with it?
	{
		CBaseEntity* pChild = pEntity->m_pChildMoveWith;
		Vector vecTemp;
		while (pChild)
		{
			if (pChild->pev->avelocity == pEntity->pev->avelocity) // if the child isn't turning under its own power
			{
				UTIL_AssignAngles(pChild, vecAngles + pChild->m_vecOffsetAngles, FALSE);
			}
			else
			{
				vecTemp = vecDiff + pChild->pev->angles;
				UTIL_AssignAngles(pChild, vecTemp, FALSE);
			}
			//ALERT(at_console,"  child origin becomes (%f %f %f)\n",pChild->pev->origin.x,pChild->pev->origin.y,pChild->pev->origin.z);
			//ALERT(at_console,"ent %p has sibling %p\n",pChild,pChild->m_pSiblingMoveWith);
			pChild = pChild->m_pSiblingMoveWith;
		}
	}
}
Ejemplo n.º 3
0
void CPendulum :: StopThink( void )
{
	UTIL_SetAngles(this, m_start); //LRC
	//pev->angles = m_start;
	pev->speed = 0;
	DontThink();
	UTIL_SetAvelocity(this, g_vecZero); //LRC
	//pev->avelocity = g_vecZero;
}
Ejemplo n.º 4
0
void CPendulum :: SwingThink( void )
{
	float delta, dt;
	
	delta = CBaseToggle :: AxisDelta( pev->spawnflags, pev->angles, m_center );
	dt = gpGlobals->time - m_time;	// How much time has passed?
	m_time = gpGlobals->time;		// Remember the last time called

	if ( delta > 0 && m_accel > 0 )
		pev->speed -= m_accel * dt;	// Integrate velocity
	else 
		pev->speed += m_accel * dt;

	if ( pev->speed > m_maxSpeed )
		pev->speed = m_maxSpeed;
	else if ( pev->speed < -m_maxSpeed )
		pev->speed = -m_maxSpeed;

	// scale the destdelta vector by the time spent traveling to get velocity
	UTIL_SetAvelocity(this, pev->speed * pev->movedir); //LRC
	//pev->avelocity = pev->speed * pev->movedir;

//	ALERT(at_console, "m_damp %f, m_dampSpeed %f\n", m_damp, m_dampSpeed);
//	ALERT(at_console, "SwingThink: delta %f, dt %f, speed %f, avel %f %f %f\n", delta, dt, pev->speed, pev->avelocity.x, pev->avelocity.y, pev->avelocity.z);

	// Call this again
	SetNextThink(0.1);
	SetThink(&CPendulum ::SwingThink);

//	if (m_pMoveWith) // correct MoveWith problems associated with fast-thinking entities
//		UTIL_AssignOrigin(this, m_vecMoveWithOffset + m_pMoveWith->pev->origin);

	if ( m_damp )
	{
		m_dampSpeed -= m_damp * m_dampSpeed * dt;
		if ( m_dampSpeed < 30.0 )
		{
			UTIL_SetAngles(this, m_center); //LRC
			//pev->angles = m_center;
			pev->speed = 0;
			ALERT(at_debug, "**CANCELLING pendulum think!\n");
			DontThink();
			UTIL_SetAvelocity(this, g_vecZero); //LRC
			//pev->avelocity = g_vecZero;
		}
		else if ( pev->speed > m_dampSpeed )
			pev->speed = m_dampSpeed;
		else if ( pev->speed < -m_dampSpeed )
			pev->speed = -m_dampSpeed;

	}
}