diff IndoorCamera.cpp @ 0:8b8875f5b359

Initial commit
author Nomad
date Fri, 05 Oct 2012 16:07:14 +0200
parents
children 5159d2e6f559
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IndoorCamera.cpp	Fri Oct 05 16:07:14 2012 +0200
@@ -0,0 +1,112 @@
+#include "IndoorCamera.h"
+#include "Render.h"
+#include "Game.h"
+#include "Indoor.h"
+#include "Math.h"
+
+#include "mm7_data.h"
+
+
+
+
+
+IndoorCamera *pIndoorCamera; // idb
+
+
+
+
+
+//----- (00481CCE) --------------------------------------------------------
+float IndoorCamera::ViewTransform(RenderVertexSoft *a1)
+{
+  float result; // eax@1
+  double vCamToVertexZ; // st7@1
+  double v3; // st6@1
+  double v4; // st5@1
+  double v5; // st4@1
+  float v6; // ST04_4@3
+  float v7; // [sp+0h] [bp-14h]@1
+  float v8; // [sp+8h] [bp-Ch]@1
+  float vCamToVertexX; // [sp+Ch] [bp-8h]@1
+  float vCamToVertexY; // [sp+10h] [bp-4h]@1
+
+  v8 = fRotationXCosine;
+  result = fRotationXSine;
+  v7 = fRotationXSine;
+  vCamToVertexX = a1->vWorldPosition.x - (double)pos.x;
+  vCamToVertexY = a1->vWorldPosition.y - (double)pos.y;
+  vCamToVertexZ = a1->vWorldPosition.z - (double)pos.z;
+  v3 = fRotationYCosine;
+  v4 = fRotationYSine;
+  v5 = vCamToVertexY * fRotationYSine + fRotationYCosine * vCamToVertexX;
+  if ( sRotationX )
+  {
+    v6 = v5;
+    a1->vWorldViewPosition.x = v5 * fRotationXCosine + fRotationXSine * vCamToVertexZ;
+    a1->vWorldViewPosition.y = v3 * vCamToVertexY - v4 * vCamToVertexX;
+    a1->vWorldViewPosition.z = v8 * vCamToVertexZ - v6 * v7;
+  }
+  else
+  {
+    a1->vWorldViewPosition.x = v5;
+    a1->vWorldViewPosition.y = v3 * vCamToVertexY - v4 * vCamToVertexX;
+    a1->vWorldViewPosition.z = vCamToVertexZ;
+  }
+  return result;
+}
+
+
+
+//----- (0042394D) --------------------------------------------------------
+void IndoorCamera::Initialize(int degFov, unsigned int uViewportWidth, unsigned int uViewportHeight)
+{
+  IndoorCamera *v4; // esi@1
+  double v5; // st7@1
+
+  v4 = this;
+  v5 = (double)(signed int)(signed __int64)((double)(signed int)uViewportWidth
+                                          * 0.5
+                                          / tan((double)(degFov >> 1) * 0.01745329)
+                                          + 0.5);
+  v4->flt_1C_fov = v5;
+  v4->flt_20_inv_1C = 65536.0 / v5;
+}
+
+//----- (004239A7) --------------------------------------------------------
+void IndoorCamera::Initialize2()
+{
+  IndoorCamera *v1; // esi@1
+  double v2; // st7@4
+  double v3; // st7@6
+  int v4; // eax@6
+  int v5; // eax@6
+  int v6; // ST04_4@6
+  int v7; // eax@6
+  int v8; // ST04_4@6
+
+  v1 = this;
+  this->fRotationYSine = sin((3.141592653589793 + 3.141592653589793) * (double)this->sRotationY * 0.00048828125);
+  v1->fRotationYCosine = cos((3.141592653589793 + 3.141592653589793) * (double)v1->sRotationY * 0.00048828125);
+  if ( byte_4D864C && pGame->uFlags & 0x80 || uCurrentlyLoadedLevelType == LEVEL_Indoor)
+  {
+    v1->fRotationXSine = sin((3.141592653589793 + 3.141592653589793) * (double)-v1->sRotationX * 0.00048828125);
+    v2 = (3.141592653589793 + 3.141592653589793) * (double)-v1->sRotationX;
+  }
+  else
+  {
+    v1->fRotationXSine = sin((3.141592653589793 + 3.141592653589793) * (double)v1->sRotationX * 0.00048828125);
+    v2 = (3.141592653589793 + 3.141592653589793) * (double)v1->sRotationX;
+  }
+  v3 = cos(v2 * 0.00048828125);
+  v4 = v1->sRotationY;
+  v1->fRotationXCosine = v3;
+  v5 = stru_5C6E00->SinCos(v4 - stru_5C6E00->uIntegerHalfPi);
+  v6 = v1->sRotationY;
+  v1->_int_sine = v5;
+  v1->_int_cosine = stru_5C6E00->SinCos(v6);
+  v7 = stru_5C6E00->SinCos(v1->sRotationX - stru_5C6E00->uIntegerHalfPi);
+  v8 = v1->sRotationX;
+  v1->_int_sine_2 = v7;
+  v1->_int_cosine_2 = stru_5C6E00->SinCos(v8);
+}
+// 4D864C: using guessed type char byte_4D864C;
\ No newline at end of file