function placeCarAtSpot(%x, %y, %name)
{
%holder = new guiSwatchCtrl() { color = "0 0 0 0"; extent = PlayGui.extent; position = "0 0 0"; };
%car=new guiBitmapCtrl();
%label = new guiTextCtrl();
playGUI.add(%holder);
%holder.add(%car);
%holder.add(%label);
%car.name = %name;
%car.setbitmap("base/client/ui/CI/car");
%car.extent="20 20";
%centerx = getWord(PlayGui.extent,0)/2;
%centery = getWord(PlayGui.extent,1)/2;
%x -= 10;
%y -= 10;
%x = mFloor(%centerx+%x);
%y = mFloor(%centery+%y);
%car.position=%x SPC %y;
%label.setText(%name);
%label.position = (%x-getWord(%label.extent,0)/2)+10 SPC %y-15;
return %holder;
}
function setPlayerPositions()
{
for(%i = 0; %i < serverConnection.getCount(); %i++)
{
%o = serverConnection.getObject(%i);
if(%o.getClassname() $= "Player")
{
%pos = vectorScale(getPlayerPos(%o),1);
%throwPos = vectorSub(%pos, serverConnection.getControlObject().getPosition());
%x = getWord(%throwPos, 0);
%y = getWord(%throwPos, 1);
%angle = getWord(axisToEuler(getWords(serverConnection.getControlObject().getTransform(),3,6)),2)+180;
%pos = angleToXY(%angle, %x, %y);
if(isObject($car[%o.getShapeName()]))
$car[%o.getShapeName()].delete();
$car[%o.getShapeName()] = placeCarAtSpot(getWord(%Pos,0),getWord(%Pos,1), %o.getShapeName());
}
}
}
function getPlayerPos(%obj)
{
//trade secret
}
function eulerToAxis(%euler)
{
%euler = VectorScale(%euler,$pi / 180);
%matrix = MatrixCreateFromEuler(%euler);
return getWords(%matrix,3,6);
}
function getSmallestScreenDim()
{
%dim = PlayGui.extent;
if(getWord(%dim,0) > getWord(%dim,1))
return getWord(%dim,1);
return getWord(%dim,0);
}
function angleToXY(%angle, %xx, %yy)
{
%angle = mDegToRad(%angle-180);
%ang2 = mAtan(%xx,%yy);
%dist = mSqrt(mPow(%xx*-1,2) + mPow(%yy*-1,2));
if(%dist > (getSmallestScreenDim()/2)-1)
%dist = (getSmallestScreenDim()/2)-15;
%angle += %ang2;
%x = mSin(%angle) * %dist;
%y = mCos(%angle) * %dist;
return mFloatLength(%x,0) SPC mFloatLength(%y,0)*-1;
}
function axisToEuler(%axis)
{
%angleOver2 = getWord(%axis,3) * 0.5;
%angleOver2 = -%angleOver2;
%sinThetaOver2 = mSin(%angleOver2);
%cosThetaOver2 = mCos(%angleOver2);
%q0 = %cosThetaOver2;
%q1 = getWord(%axis,0) * %sinThetaOver2;
%q2 = getWord(%axis,1) * %sinThetaOver2;
%q3 = getWord(%axis,2) * %sinThetaOver2;
%q0q0 = %q0 * %q0;
%q1q2 = %q1 * %q2;
%q0q3 = %q0 * %q3;
%q1q3 = %q1 * %q3;
%q0q2 = %q0 * %q2;
%q2q2 = %q2 * %q2;
%q2q3 = %q2 * %q3;
%q0q1 = %q0 * %q1;
%q3q3 = %q3 * %q3;
%m13 = 2.0 * (%q1q3 - %q0q2);
%m21 = 2.0 * (%q1q2 - %q0q3);
%m22 = 2.0 * %q0q0 - 1.0 + 2.0 * %q2q2;
%m23 = 2.0 * (%q2q3 + %q0q1);
%m33 = 2.0 * %q0q0 - 1.0 + 2.0 * %q3q3;
return mRadToDeg(mAsin(%m23)) SPC mRadToDeg(mAtan(-%m13, %m33)) SPC mRadToDeg(mAtan(-%m21, %m22));
}