Don't like ads? PRO users don't see any ads ;-)
Guest

Compass in Torque Script

By: a guest on Aug 7th, 2012  |  syntax: C#  |  size: 2.84 KB  |  hits: 29  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. function placeCarAtSpot(%x, %y, %name)
  2. {
  3.         %holder = new guiSwatchCtrl() { color = "0 0 0 0"; extent = PlayGui.extent; position = "0 0 0"; };
  4.         %car=new guiBitmapCtrl();
  5.         %label = new guiTextCtrl();
  6.         playGUI.add(%holder);
  7.         %holder.add(%car);
  8.         %holder.add(%label);
  9.         %car.name = %name;
  10.         %car.setbitmap("base/client/ui/CI/car");
  11.         %car.extent="20 20";
  12.         %centerx = getWord(PlayGui.extent,0)/2;
  13.         %centery = getWord(PlayGui.extent,1)/2;
  14.         %x -= 10;
  15.         %y -= 10;
  16.         %x = mFloor(%centerx+%x);
  17.         %y = mFloor(%centery+%y);
  18.         %car.position=%x SPC %y;
  19.         %label.setText(%name);
  20.         %label.position = (%x-getWord(%label.extent,0)/2)+10 SPC %y-15;
  21.         return %holder;
  22. }
  23.  
  24. function setPlayerPositions()
  25. {
  26.         for(%i = 0; %i < serverConnection.getCount(); %i++)
  27.         {
  28.                 %o = serverConnection.getObject(%i);
  29.                 if(%o.getClassname() $= "Player")
  30.                 {
  31.                         %pos = vectorScale(getPlayerPos(%o),1);
  32.                         %throwPos = vectorSub(%pos, serverConnection.getControlObject().getPosition());
  33.                         %x = getWord(%throwPos, 0);
  34.                         %y = getWord(%throwPos, 1);
  35.                         %angle = getWord(axisToEuler(getWords(serverConnection.getControlObject().getTransform(),3,6)),2)+180;
  36.                         %pos = angleToXY(%angle, %x, %y);
  37.                         if(isObject($car[%o.getShapeName()]))
  38.                                 $car[%o.getShapeName()].delete();
  39.                         $car[%o.getShapeName()] = placeCarAtSpot(getWord(%Pos,0),getWord(%Pos,1), %o.getShapeName());
  40.                 }
  41.         }
  42. }
  43.  
  44. function getPlayerPos(%obj)
  45. {
  46.         //trade secret
  47. }
  48.  
  49. function eulerToAxis(%euler)
  50. {
  51.         %euler = VectorScale(%euler,$pi / 180);
  52.         %matrix = MatrixCreateFromEuler(%euler);
  53.         return getWords(%matrix,3,6);
  54. }
  55.  
  56. function getSmallestScreenDim()
  57. {
  58.         %dim = PlayGui.extent;
  59.         if(getWord(%dim,0) > getWord(%dim,1))
  60.                 return getWord(%dim,1);
  61.         return getWord(%dim,0);
  62. }
  63.  
  64. function angleToXY(%angle, %xx, %yy)
  65. {
  66.         %angle = mDegToRad(%angle-180);
  67.         %ang2 = mAtan(%xx,%yy);
  68.         %dist = mSqrt(mPow(%xx*-1,2) + mPow(%yy*-1,2));
  69.         if(%dist > (getSmallestScreenDim()/2)-1)
  70.                 %dist = (getSmallestScreenDim()/2)-15;
  71.         %angle += %ang2;
  72.         %x = mSin(%angle) * %dist;
  73.         %y = mCos(%angle) * %dist;
  74.         return mFloatLength(%x,0) SPC mFloatLength(%y,0)*-1;
  75. }
  76.        
  77.  
  78. function axisToEuler(%axis)
  79. {
  80.         %angleOver2 = getWord(%axis,3) * 0.5;
  81.         %angleOver2 = -%angleOver2;
  82.         %sinThetaOver2 = mSin(%angleOver2);
  83.         %cosThetaOver2 = mCos(%angleOver2);
  84.         %q0 = %cosThetaOver2;
  85.         %q1 = getWord(%axis,0) * %sinThetaOver2;
  86.         %q2 = getWord(%axis,1) * %sinThetaOver2;
  87.         %q3 = getWord(%axis,2) * %sinThetaOver2;
  88.         %q0q0 = %q0 * %q0;
  89.         %q1q2 = %q1 * %q2;
  90.         %q0q3 = %q0 * %q3;
  91.         %q1q3 = %q1 * %q3;
  92.         %q0q2 = %q0 * %q2;
  93.         %q2q2 = %q2 * %q2;
  94.         %q2q3 = %q2 * %q3;
  95.         %q0q1 = %q0 * %q1;
  96.         %q3q3 = %q3 * %q3;
  97.         %m13 = 2.0 * (%q1q3 - %q0q2);
  98.         %m21 = 2.0 * (%q1q2 - %q0q3);
  99.         %m22 = 2.0 * %q0q0 - 1.0 + 2.0 * %q2q2;
  100.         %m23 = 2.0 * (%q2q3 + %q0q1);
  101.         %m33 = 2.0 * %q0q0 - 1.0 + 2.0 * %q3q3;
  102.         return mRadToDeg(mAsin(%m23)) SPC mRadToDeg(mAtan(-%m13, %m33)) SPC mRadToDeg(mAtan(-%m21, %m22));
  103. }