function rgbGradient(%step, %c1, %c2)
{
%r1 = getWord(%c1, 0);
%g1 = getWord(%c1, 1);
%b1 = getWord(%c1, 2);
%r2 = getWord(%c2, 0);
%g2 = getWord(%c2, 1);
%b2 = getWord(%c2, 2);
%r3 = %r1 + %step * (%r2 - %r1);
%g3 = %g1 + %step * (%g2 - %g1);
%b3 = %b1 + %step * (%b2 - %b1);
return %r3 SPC %g3 SPC %b3;
}
function rgbToHex( %rgb )
{
%r = _compToHex( 255 * getWord( %rgb, 0 ) );
%g = _compToHex( 255 * getWord( %rgb, 1 ) );
%b = _compToHex( 255 * getWord( %rgb, 2 ) );
return %r @ %g @ %b;
}
function _compToHex( %comp )
{
%left = mFloor( %comp / 16 );
%comp = mFloor( %comp - %left * 16 );
%left = getSubStr( "0123456789ABCDEF", %left, 1 );
%comp = getSubStr( "0123456789ABCDEF", %comp, 1 );
return %left @ %comp;
}
function hexToRgb( %rgb )
{
%r = _hexToComp( getSubStr( %rgb, 0, 2 ) ) / 255;
%g = _hexToComp( getSubStr( %rgb, 2, 2 ) ) / 255;
%b = _hexToComp( getSubStr( %rgb, 4, 2 ) ) / 255;
return %r SPC %g SPC %b;
}
function _hexToComp(%hex)
{
%left = getSubStr(%hex,0,1);
%comp = getSubStr(%hex,1,2);
%left = striPos("0123456789ABCDEF",%left);
%comp = striPos("0123456789ABCDEF",%comp);
if(%left < 0 || %comp < 0)
{
return 0;
}
return %left * 16 + %comp;
}
function vectorAngleRotate(%vec,%ref,%ang)
{
%x = getWord(%vec,0);
%y = getWord(%vec,1);
%z = getWord(%vec,2);
%u = getWord(%ref,0);
%v = getWord(%ref,1);
%w = getWord(%ref,2);
%cos = mCos(%ang);
%sin = mSin(%ang);
return %u*(%u*%x+%v*%y+%w*%z)*(1-%cos)+%x*%cos+(%v*%z-%w*%y)*%sin SPC %u*(%u*%x+%v*%y+%w*%z)*(1-%cos)+%y*%cos+(%w*%x-%u*%z)*%sin SPC %u*(%u*%x+%v*%y+%w*%z)*(1-%cos)+%z*%cos+(%u*%y-%v*%x)*%sin;
}
function player::getUpVectorHack(%pl)
{
%muz = MatrixMulVector(%pl.getSlotTransform(0),"0 1 0");
%forward = %pl.getForwardVector();
%up = %pl.getUpVector();
return vectorAngleRotate(%muz,vectorCross(%forward,%up),$PI/2);
}
function player::getEyeVectorHack(%pl)
{
%forward = %pl.getForwardVector();
%eye = %pl.getEyeVector();
%x = getWord(%eye, 0);
%y = getWord(%eye, 1);
%yaw = mATan(getWord(%forward,0),getWord(%forward,1));
%pitch = mATan(getWord(%eye,2),mSqrt(%x*%x+%y*%y));
return MatrixMulVector(MatrixCreateFromEuler(%pitch SPC 0 SPC -%yaw),"0 1 0");
}
function vectorRelativeShift(%forward,%up,%shift)
{
return vectorAdd(vectorAdd(vectorScale(%forward,getWord(%shift,0)),vectorScale(vectorCross(%forward,%up),getWord(%shift,1))),vectorScale(%up,getWord(%shift,2)));
}
i don't leave home without these functions
credit to my ex wife port and old friend amade