Subversion Repositories Games.Carmageddon

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include "vector.h"
  2. #include "harness/trace.h"
  3. #include <math.h>
  4.  
  5.  
  6. #define BR_MAC2(A, B, C, D) ((A) * (B) + (C) * (D))
  7. #define BR_MAC4(A, B, C, D, E, F, G, H) ((A) * (B) + (C) * (D) + (E) * (F) + (G) * (H))
  8.  
  9. // IDA: void __cdecl BrVector2Copy(br_vector2 *v1, br_vector2 *v2)
  10. void BrVector2Copy(br_vector2* v1, br_vector2* v2) {
  11.     LOG_TRACE("(%p, %p)", v1, v2);
  12.  
  13.     v1->v[0] = v2->v[0];
  14.     v1->v[1] = v2->v[1];
  15. }
  16.  
  17. // IDA: void __cdecl BrVector2Set(br_vector2 *v1, br_scalar s1, br_scalar s2)
  18. void BrVector2Set(br_vector2* v1, br_scalar s1, br_scalar s2) {
  19.     LOG_TRACE("(%p, %f, %f)", v1, s1, s2);
  20.  
  21.     v1->v[0] = s1;
  22.     v1->v[1] = s2;
  23. }
  24.  
  25. // IDA: void __cdecl BrVector2SetInt(br_vector2 *v1, int i1, int i2)
  26. void BrVector2SetInt(br_vector2* v1, int i1, int i2) {
  27.     LOG_TRACE("(%p, %d, %d)", v1, i1, i2);
  28.  
  29.     v1->v[0] = BR_SCALAR(i1);
  30.     v1->v[1] = BR_SCALAR(i2);
  31. }
  32.  
  33. // IDA: void __cdecl BrVector2SetFloat(br_vector2 *v1, float f1, float f2)
  34. void BrVector2SetFloat(br_vector2* v1, float f1, float f2) {
  35.     LOG_TRACE("(%p, %f, %f)", v1, f1, f2);
  36.  
  37.     v1->v[0] = f1;
  38.     v1->v[1] = f2;
  39. }
  40.  
  41. // IDA: void __cdecl BrVector2Negate(br_vector2 *v1, br_vector2 *v2)
  42. void BrVector2Negate(br_vector2* v1, br_vector2* v2) {
  43.     LOG_TRACE("(%p, %p)", v1, v2);
  44.  
  45.     v1->v[0] = -v2->v[0];
  46.     v1->v[1] = -v2->v[1];
  47. }
  48.  
  49. // IDA: void __cdecl BrVector2Add(br_vector2 *v1, br_vector2 *v2, br_vector2 *v3)
  50. void BrVector2Add(br_vector2* v1, br_vector2* v2, br_vector2* v3) {
  51.     LOG_TRACE("(%p, %p, %p)", v1, v2, v3);
  52.  
  53.     v1->v[0] = v2->v[0] + v3->v[0];
  54.     v1->v[1] = v2->v[1] + v3->v[1];
  55. }
  56.  
  57. // IDA: void __cdecl BrVector2Accumulate(br_vector2 *v1, br_vector2 *v2)
  58. void BrVector2Accumulate(br_vector2* v1, br_vector2* v2) {
  59.     LOG_TRACE("(%p, %p)", v1, v2);
  60.  
  61.     v1->v[0] += v2->v[0];
  62.     v1->v[1] += v2->v[1];
  63. }
  64.  
  65. // IDA: void __cdecl BrVector2Sub(br_vector2 *v1, br_vector2 *v2, br_vector2 *v3)
  66. void BrVector2Sub(br_vector2* v1, br_vector2* v2, br_vector2* v3) {
  67.     LOG_TRACE("(%p, %p, %p)", v1, v2, v3);
  68.  
  69.     v1->v[0] = v2->v[0] - v3->v[0];
  70.     v1->v[1] = v2->v[1] - v3->v[1];
  71. }
  72.  
  73. // IDA: void __cdecl BrVector2Scale(br_vector2 *v1, br_vector2 *v2, br_scalar s)
  74. void BrVector2Scale(br_vector2* v1, br_vector2* v2, br_scalar s) {
  75.     LOG_TRACE("(%p, %p, %f)", v1, v2, s);
  76.  
  77.     v1->v[0] = v2->v[0] * s;
  78.     v1->v[1] = v2->v[1] * s;
  79. }
  80.  
  81. // IDA: void __cdecl BrVector2InvScale(br_vector2 *v1, br_vector2 *v2, br_scalar s)
  82. void BrVector2InvScale(br_vector2* v1, br_vector2* v2, br_scalar s) {
  83.     LOG_TRACE("(%p, %p, %f)", v1, v2, s);
  84.  
  85.     v1->v[0] = v2->v[0] / s;
  86.     v1->v[1] = v2->v[1] / s;
  87. }
  88.  
  89. // IDA: br_scalar __cdecl BrVector2Dot(br_vector2 *v1, br_vector2 *v2)
  90. br_scalar BrVector2Dot(br_vector2* v1, br_vector2* v2) {
  91.     LOG_TRACE("(%p, %p)", v1, v2);
  92.  
  93.     return BR_MAC2(v1->v[0], v2->v[0], v1->v[1], v2->v[1]);
  94. }
  95.  
  96. // IDA: br_scalar __cdecl BrVector2Length(br_vector2 *v1)
  97. br_scalar BrVector2Length(br_vector2* v1) {
  98.     LOG_TRACE("(%p)", v1);
  99.  
  100.     return sqrtf(BR_MAC2(v1->v[0], v1->v[0], v1->v[1], v1->v[1]));
  101. }
  102.  
  103. // IDA: br_scalar __cdecl BrVector2LengthSquared(br_vector2 *v1)
  104. br_scalar BrVector2LengthSquared(br_vector2* v1) {
  105.     LOG_TRACE("(%p)", v1);
  106.  
  107.     return BR_MAC2(v1->v[0], v1->v[0], v1->v[1], v1->v[1]);
  108. }
  109.  
  110. // IDA: void __cdecl BrVector3Copy(br_vector3 *v1, br_vector3 *v2)
  111. void BrVector3Copy(br_vector3* v1, br_vector3* v2) {
  112.     LOG_TRACE("(%p, %p)", v1, v2);
  113.  
  114.     v1->v[0] = v2->v[0];
  115.     v1->v[1] = v2->v[1];
  116.     v1->v[2] = v2->v[2];
  117. }
  118.  
  119. // IDA: void __cdecl BrVector3Set(br_vector3 *v1, br_scalar s1, br_scalar s2, br_scalar s3)
  120. void BrVector3Set(br_vector3* v1, br_scalar s1, br_scalar s2, br_scalar s3) {
  121.     LOG_TRACE("(%p, %f, %f, %f)", v1, s1, s2, s3);
  122.  
  123.     v1->v[0] = s1;
  124.     v1->v[1] = s2;
  125.     v1->v[2] = s3;
  126. }
  127.  
  128. // IDA: void __cdecl BrVector3SetInt(br_vector3 *v1, int i1, int i2, int i3)
  129. void BrVector3SetInt(br_vector3* v1, int i1, int i2, int i3) {
  130.     LOG_TRACE("(%p, %d, %d, %d)", v1, i1, i2, i3);
  131.  
  132.     v1->v[0] = BR_SCALAR(i1);
  133.     v1->v[1] = BR_SCALAR(i2);
  134.     v1->v[2] = BR_SCALAR(i3);
  135. }
  136.  
  137. // IDA: void __cdecl BrVector3SetFloat(br_vector3 *v1, float f1, float f2, float f3)
  138. void BrVector3SetFloat(br_vector3* v1, float f1, float f2, float f3) {
  139.     LOG_TRACE8("(%p, %f, %f, %f)", v1, f1, f2, f3);
  140.  
  141.     v1->v[0] = BR_SCALAR(f1);
  142.     v1->v[1] = BR_SCALAR(f2);
  143.     v1->v[2] = BR_SCALAR(f3);
  144. }
  145.  
  146. // IDA: void __cdecl BrVector3Negate(br_vector3 *v1, br_vector3 *v2)
  147. void BrVector3Negate(br_vector3* v1, br_vector3* v2) {
  148.     LOG_TRACE("(%p, %p)", v1, v2);
  149.  
  150.     v1->v[0] = -v2->v[0];
  151.     v1->v[1] = -v2->v[1];
  152.     v1->v[2] = -v2->v[2];
  153. }
  154.  
  155. // IDA: void __cdecl BrVector3Add(br_vector3 *v1, br_vector3 *v2, br_vector3 *v3)
  156. void BrVector3Add(br_vector3* v1, br_vector3* v2, br_vector3* v3) {
  157.     LOG_TRACE("(%p, %p, %p)", v1, v2, v3);
  158.  
  159.     v1->v[0] = v2->v[0] + v3->v[0];
  160.     v1->v[1] = v2->v[1] + v3->v[1];
  161.     v1->v[2] = v2->v[2] + v3->v[2];
  162. }
  163.  
  164. // IDA: void __cdecl BrVector3Accumulate(br_vector3 *v1, br_vector3 *v2)
  165. void BrVector3Accumulate(br_vector3* v1, br_vector3* v2) {
  166.     LOG_TRACE10("(%p, %p)", v1, v2);
  167.  
  168.     v1->v[0] += v2->v[0];
  169.     v1->v[1] += v2->v[1];
  170.     v1->v[2] += v2->v[2];
  171. }
  172.  
  173. // IDA: void __cdecl BrVector3Sub(br_vector3 *v1, br_vector3 *v2, br_vector3 *v3)
  174. void BrVector3Sub(br_vector3* v1, br_vector3* v2, br_vector3* v3) {
  175.     LOG_TRACE("(%p, %p, %p)", v1, v2, v3);
  176.  
  177.     v1->v[0] = v2->v[0] - v3->v[0];
  178.     v1->v[1] = v2->v[1] - v3->v[1];
  179.     v1->v[2] = v2->v[2] - v3->v[2];
  180. }
  181.  
  182. // IDA: void __cdecl BrVector3Scale(br_vector3 *v1, br_vector3 *v2, br_scalar s)
  183. void BrVector3Scale(br_vector3* v1, br_vector3* v2, br_scalar s) {
  184.     LOG_TRACE("(%p, %p, %f)", v1, v2, s);
  185.  
  186.     v1->v[0] = v2->v[0] * s;
  187.     v1->v[1] = v2->v[1] * s;
  188.     v1->v[2] = v2->v[2] * s;
  189. }
  190.  
  191. // IDA: void __cdecl BrVector3InvScale(br_vector3 *v1, br_vector3 *v2, br_scalar s)
  192. void BrVector3InvScale(br_vector3* v1, br_vector3* v2, br_scalar s) {
  193.     LOG_TRACE("(%p, %p, %f)", v1, v2, s);
  194.  
  195.     v1->v[0] = v2->v[0] / s;
  196.     v1->v[1] = v2->v[1] / s;
  197.     v1->v[2] = v2->v[2] / s;
  198. }
  199.  
  200. // IDA: br_scalar __cdecl BrVector3Dot(br_vector3 *v1, br_vector3 *v2)
  201. br_scalar BrVector3Dot(br_vector3* v1, br_vector3* v2) {
  202.     LOG_TRACE("(%p, %p)", v1, v2);
  203.  
  204.     return BR_MAC3(v1->v[0], v2->v[0], v1->v[1], v2->v[1], v1->v[2], v2->v[2]);
  205. }
  206.  
  207. // IDA: void __cdecl BrVector3Cross(br_vector3 *v1, br_vector3 *v2, br_vector3 *v3)
  208. void BrVector3Cross(br_vector3* v1, br_vector3* v2, br_vector3* v3) {
  209.     LOG_TRACE("(%p, %p, %p)", v1, v2, v3);
  210.  
  211.     v1->v[0] = v2->v[1] * v3->v[2] - v2->v[2] * v3->v[1];
  212.     v1->v[1] = v2->v[2] * v3->v[0] - v2->v[0] * v3->v[2];
  213.     v1->v[2] = v2->v[0] * v3->v[1] - v2->v[1] * v3->v[0];
  214. }
  215.  
  216. // IDA: br_scalar __cdecl BrVector3Length(br_vector3 *v1)
  217. br_scalar BrVector3Length(br_vector3* v1) {
  218.     LOG_TRACE("(%p)", v1);
  219.  
  220.     return sqrtf(BR_MAC3(v1->v[0], v1->v[0], v1->v[1], v1->v[1], v1->v[2], v1->v[2]));
  221. }
  222.  
  223. // IDA: br_scalar __cdecl BrVector3LengthSquared(br_vector3 *v1)
  224. br_scalar BrVector3LengthSquared(br_vector3* v1) {
  225.     LOG_TRACE("(%p)", v1);
  226.  
  227.     return BR_MAC3(v1->v[0], v1->v[0], v1->v[1], v1->v[1], v1->v[2], v1->v[2]);
  228. }
  229.  
  230. // IDA: void __cdecl BrVector3Normalise(br_vector3 *v1, br_vector3 *v2)
  231. void BrVector3Normalise(br_vector3* v1, br_vector3* v2) {
  232.     br_scalar scale;
  233.     LOG_TRACE10("(%p, %p)", v1, v2);
  234.  
  235.     scale = BR_LENGTH3(v2->v[0], v2->v[1], v2->v[2]);
  236.  
  237.     if (scale > BR_SCALAR_EPSILON * 2) {
  238.         v1->v[0] = v2->v[0] / scale;
  239.         v1->v[1] = v2->v[1] / scale;
  240.         v1->v[2] = v2->v[2] / scale;
  241.  
  242.     } else {
  243.         v1->v[0] = BR_SCALAR(1.0);
  244.         v1->v[1] = BR_SCALAR(0.0);
  245.         v1->v[2] = BR_SCALAR(0.0);
  246.     }
  247. }
  248.  
  249. // IDA: void __cdecl BrVector3NormaliseLP(br_vector3 *v1, br_vector3 *v2)
  250. void BrVector3NormaliseLP(br_vector3* v1, br_vector3* v2) {
  251.     br_scalar scale;
  252.     LOG_TRACE("(%p, %p)", v1, v2);
  253.  
  254.     scale = 1.f / sqrtf(BR_MAC3(v2->v[0], v2->v[0], v2->v[1], v2->v[1], v2->v[2], v2->v[2]));
  255.     if (scale != 0.f) {
  256.         v1->v[0] = v2->v[0] * scale;
  257.         v1->v[1] = v2->v[1] * scale;
  258.         v1->v[2] = v2->v[2] * scale;
  259.     }
  260. }
  261.  
  262. // IDA: br_scalar __cdecl BrVector4Dot(br_vector4 *v1, br_vector4 *v2)
  263. br_scalar BrVector4Dot(br_vector4* v1, br_vector4* v2) {
  264.     LOG_TRACE("(%p, %p)", v1, v2);
  265.  
  266.     return BR_MAC4(v1->v[0], v2->v[0], v1->v[1], v2->v[1], v1->v[2], v2->v[2], v1->v[3], v2->v[3]);
  267. }
  268.  
  269. // IDA: void __cdecl BrVector4Copy(br_vector4 *v1, br_vector4 *v2)
  270. void BrVector4Copy(br_vector4* v1, br_vector4* v2) {
  271.     LOG_TRACE("(%p, %p)", v1, v2);
  272.  
  273.     v1->v[0] = v2->v[0];
  274.     v1->v[1] = v2->v[1];
  275.     v1->v[2] = v2->v[2];
  276.     v1->v[3] = v2->v[3];
  277. }
  278.  
  279. // IDA: br_scalar __usercall BrFVector2Dot@<ST0>(br_fvector2 *v1@<EAX>, br_vector2 *v2@<EDX>)
  280. br_scalar BrFVector2Dot(br_fvector2* v1, br_vector2* v2) {
  281.     LOG_TRACE("(%p, %p)", v1, v2);
  282.  
  283.     return BR_MAC2(v1->v[0], v2->v[0], v1->v[1], v2->v[1]);
  284. }
  285.  
  286. // IDA: void __usercall BrFVector3Copy(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>)
  287. void BrFVector3Copy(br_fvector3* v1, br_vector3* v2) {
  288.     LOG_TRACE("(%p, %p)", v1, v2);
  289.  
  290.     v1->v[0] = v2->v[0];
  291.     v1->v[1] = v2->v[1];
  292.     v1->v[2] = v2->v[2];
  293. }
  294.  
  295. // IDA: void __usercall BrVector3ScaleF(br_vector3 *v1@<EAX>, br_fvector3 *v2@<EDX>, br_scalar s)
  296. void BrVector3ScaleF(br_vector3* v1, br_fvector3* v2, br_scalar s) {
  297.     LOG_TRACE("(%p, %p, %f)", v1, v2, s);
  298.  
  299.     v1->v[0] = v2->v[0] * s;
  300.     v1->v[1] = v2->v[1] * s;
  301.     v1->v[2] = v2->v[2] * s;
  302. }
  303.  
  304. // IDA: br_scalar __usercall BrFVector3Dot@<ST0>(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>)
  305. br_scalar BrFVector3Dot(br_fvector3* v1, br_vector3* v2) {
  306.     LOG_TRACE("(%p, %p)", v1, v2);
  307.  
  308.     return BR_MAC3(v1->v[0], v2->v[0], v1->v[1], v2->v[1], v1->v[2], v2->v[2]);
  309. }
  310.  
  311. // IDA: void __usercall BrFVector3Normalise(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>)
  312. void BrFVector3Normalise(br_fvector3* v1, br_vector3* v2) {
  313.     br_scalar scale;
  314.     LOG_TRACE("(%p, %p)", v1, v2);
  315.  
  316.     scale = sqrtf(BR_MAC3(v2->v[0], v2->v[0], v2->v[1], v2->v[1], v2->v[2], v2->v[2]));
  317.     if (scale != 0.f) {
  318.         scale = 1.f / scale;
  319.         v1->v[0] = v2->v[0] * scale;
  320.         v1->v[1] = v2->v[1] * scale;
  321.         v1->v[2] = v2->v[2] * scale;
  322.     } else {
  323.         v1->v[0] = 1.f;
  324.         v1->v[1] = 0.f;
  325.         v1->v[2] = 0.f;
  326.     }
  327. }
  328.  
  329. // IDA: void __usercall BrFVector3NormaliseLP(br_fvector3 *v1@<EAX>, br_vector3 *v2@<EDX>)
  330. void BrFVector3NormaliseLP(br_fvector3* v1, br_vector3* v2) {
  331.     br_scalar scale;
  332.     LOG_TRACE("(%p, %p)", v1, v2);
  333.  
  334.     scale = 1.f / sqrtf(BR_MAC3(v2->v[0], v2->v[0], v2->v[1], v2->v[1], v2->v[2], v2->v[2]));
  335.     v1->v[0] = v2->v[0] * scale;
  336.     v1->v[1] = v2->v[1] * scale;
  337.     v1->v[2] = v2->v[2] * scale;
  338. }
  339.  
  340. // IDA: void __cdecl BrVector2Normalise(br_vector2 *v1, br_vector2 *v2)
  341. void BrVector2Normalise(br_vector2* v1, br_vector2* v2) {
  342.     br_scalar scale;
  343.     LOG_TRACE("(%p, %p)", v1, v2);
  344.  
  345.     scale = sqrtf(BR_MAC2(v2->v[0], v2->v[0], v2->v[1], v2->v[1]));
  346.     if (scale > 2.3841858e-7f) {
  347.         scale = 1.f / scale;
  348.         v1->v[0] = v2->v[0] * scale;
  349.         v1->v[1] = v2->v[1] * scale;
  350.  
  351.     } else {
  352.         v1->v[0] = 1.f;
  353.         v1->v[1] = 0.f;
  354.     }
  355. }
  356.