summaryrefslogtreecommitdiffstats
path: root/tools/worldbuilder/code/gameengine/mayacamera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/worldbuilder/code/gameengine/mayacamera.cpp')
-rw-r--r--tools/worldbuilder/code/gameengine/mayacamera.cpp151
1 files changed, 151 insertions, 0 deletions
diff --git a/tools/worldbuilder/code/gameengine/mayacamera.cpp b/tools/worldbuilder/code/gameengine/mayacamera.cpp
new file mode 100644
index 0000000..6104cd5
--- /dev/null
+++ b/tools/worldbuilder/code/gameengine/mayacamera.cpp
@@ -0,0 +1,151 @@
+//=============================================================================
+// Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved.
+//
+// File: MayaCamera.cpp
+//
+// Description: Implement MayaCamera
+//
+// History: 22/07/2002 + Created -- Cary Brisebois
+//
+//=============================================================================
+
+//========================================
+// System Includes
+//========================================
+// Foundation Tech
+#include <raddebug.hpp>
+
+//========================================
+// Project Includes
+//========================================
+#include "MayaCamera.h"
+#include "main/constants.h"
+#include "utility/mext.h"
+
+
+//******************************************************************************
+//
+// Global Data, Local Data, Local Classes
+//
+//******************************************************************************
+const MString WB_CAM_NAME( "WorldBuilderCam" );
+
+//******************************************************************************
+//
+// Public Member Functions
+//
+//******************************************************************************
+
+//==============================================================================
+// MayaCamera::MayaCamera
+//==============================================================================
+// Description: Constructor.
+//
+// Parameters: None.
+//
+// Return: N/A.
+//
+//==============================================================================
+MayaCamera::MayaCamera()
+{
+ EnsureCamExists();
+}
+
+//==============================================================================
+// MayaCamera::~MayaCamera
+//==============================================================================
+// Description: Destructor.
+//
+// Parameters: None.
+//
+// Return: N/A.
+//
+//==============================================================================
+MayaCamera::~MayaCamera()
+{
+}
+
+//=============================================================================
+// MayaCamera::EnsureCamExists
+//=============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: void
+//
+//=============================================================================
+void MayaCamera::EnsureCamExists()
+{
+ MStatus status;
+ MFnCamera fnCamera;
+
+ MDagPath path;
+
+ if ( !MExt::FindDagNodeByName( &path, WB_CAM_NAME ) )
+ {
+ fnCamera.create( &status );
+ assert( status );
+
+ fnCamera.setName( WB_CAM_NAME + MString( "Camera" ) );
+
+ MFnDependencyNode transform( fnCamera.parent( 0 ) );
+
+ MString transName = WB_CAM_NAME;
+ transform.setName( transName );
+ }
+}
+
+//=============================================================================
+// MayaCamera::Set
+//=============================================================================
+// Description: Comment
+//
+// Parameters: ( const rmt::Vector& position, const rmt::Vector& target, const rmt::Vector& vup, float fov )
+//
+// Return: void
+//
+//=============================================================================
+void MayaCamera::Set( const rmt::Vector& position, const rmt::Vector& target, const rmt::Vector& vup, float fov )
+{
+ MStatus status;
+
+ EnsureCamExists();
+
+ MDagPath path;
+ bool found = MExt::FindDagNodeByName( &path, WB_CAM_NAME );
+ assert( found );
+
+ MFnCamera fnCamera( path, &status );
+ assert( status );
+
+
+ //Scale it so you can see it.
+ MFnTransform fnTransform( fnCamera.parent( 0 ) );
+ const double scale[3] = { 200, 200, 200 } ;
+ fnTransform.setScale( scale );
+
+ MPoint eyePosition;
+ eyePosition.x = position.x * WBConstants::Scale;
+ eyePosition.y = position.y * WBConstants::Scale;
+ eyePosition.z = -position.z * WBConstants::Scale;
+
+ MVector viewDirection;
+ viewDirection.x = (target.x - position.x) * WBConstants::Scale;
+ viewDirection.y = (target.y - position.y) * WBConstants::Scale;
+ viewDirection.z = -(target.z - position.z) * WBConstants::Scale;
+
+ MVector viewUp;
+ viewUp.x = vup.x;
+ viewUp.y = vup.y;
+ viewUp.z = -vup.z;
+
+ status = fnCamera.set( eyePosition, viewDirection, viewUp, rmt::DegToRadian(fov), 4/3 );
+ assert( status );
+}
+
+//******************************************************************************
+//
+// Private Member Functions
+//
+//******************************************************************************