писал уже ночью - взял за основу русский тутор на вальв девелопмент нетворк... не понимаю, что за еруда - ошибки 2447 - хотя всё закрыл, что мог
code:
void ClientModeShared::OverrideView( CViewSetup *pSetup );
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
{
if(!pPlayer)
return;
pPlayer->OverrideView( pSetup );
}
if( ::input->CAM_IsThirdPerson() );
{
Vector camForward, camRight, camUp;
AngleVectors( pPlayer->EyeAngles(), &camForward, &camRight, &camUp );
trace_t tr, tr2;
Vector vecStart, vecStop, vecDirection, vecSetDirection;
static float camCurrentY;
static float camCurrentX=16.0f; //used for fluid camera transfers
float camDelta=0.5f;
vecStart=pSetup->origin;
AngleVectors(pPlayer->EyeAngles(), &vecDirection);
vecSetDirection.Init(0,0,1.0f);
vecDirection=vecDirection.Cross(vecSetDirection);
vecStop = vecStart + vecDirection*52.0f;
UTIL_TraceLine( vecStart, vecStop, MASK_ALL, pPlayer, COLLISION_GROUP_NONE, &tr );
if (tr.fraction == 1)
{
if(camCurrentX < 16.0f)
camCurrentX +=camDelta;
if(camCurrentX >16.0f)
camCurrentX=16.0f;
VectorMA( pSetup->origin, camCurrentX, camRight, pSetup->origin); //set the right offset
VectorMA( pSetup->origin, 16.0f, camUp, pSetup->origin);
vecStart=tr.endpos;
}
else
{
vecStop = vecStart + vecDirection * -52.0f;
UTIL_TraceLine( vecStart, vecStop, MASK_ALL, pPlayer, COLLISION_GROUP_NONE, &tr );
if (tr.fraction == 1)
{
if(camCurrentX > -16.0f)
camCurrentX -=camDelta;
if(camCurrentX < -16.0f)
camCurrentX=-16.0f;
VectorMA( pSetup->origin, camCurrentX, camRight, pSetup->origin);
VectorMA( pSetup->origin, 16.0f, camUp, pSetup->origin);
vecStart=tr.endpos;
}
else
{
VectorMA( pSetup->origin, 0.0f, camRight, pSetup->origin);
AngleVectors(pPlayer->EyeAngles(), &vecDirection);
vecSetDirection.Init(1.0f,0,0);
vecDirection=vecDirection.Cross(vecSetDirection);
vecStop = vecStart +vecDirection*32.0f;
UTIL_TraceLine( vecStart, vecStop, MASK_ALL, pPlayer, COLLISION_GROUP_NONE, &tr);
if(tr.fraction == 1)
{
VectorMA( pSetup->origin, 32.0f, camUp, pSetup->origin);
vecStart=tr.endpos;
}
else
{
VectorMA( pSetup->origin, 0.0f, camUp, pSetup->origin);
}
}
}
AngleVectors(pPlayer->EyeAngles(), &vecDirection);
vecStop = vecStart + vecDirection * -96;
UTIL_TraceLine( vecStart, vecStop, MASK_ALL, pPlayer, COLLISION_GROUP_NONE, &tr );
vecStart=pSetup->origin;
vecStop = vecStart+vecDirection*-96;
UTIL_TraceLine( vecStart, vecStop, MASK_ALL, pPlayer, COLLISION_GROUP_NONE, &tr );
if(tr.fraction != 1)
{
camCurrentY = -96 * tr.fraction + 10.0f;
}
else
{
camCurrentY=-96.0f;
VectorMA( pSetup->origin, camCurrentY, camForward, pSetup->origin);
}
}