summaryrefslogtreecommitdiffstats
path: root/tools/worldbuilder/code/contexts/locatorcontext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/worldbuilder/code/contexts/locatorcontext.cpp')
-rw-r--r--tools/worldbuilder/code/contexts/locatorcontext.cpp887
1 files changed, 887 insertions, 0 deletions
diff --git a/tools/worldbuilder/code/contexts/locatorcontext.cpp b/tools/worldbuilder/code/contexts/locatorcontext.cpp
new file mode 100644
index 0000000..7c1ff0a
--- /dev/null
+++ b/tools/worldbuilder/code/contexts/locatorcontext.cpp
@@ -0,0 +1,887 @@
+//----------------------------------------
+// System Includes
+//----------------------------------------
+#include <math.h>
+
+//----------------------------------------
+// Project Includes
+//----------------------------------------
+
+#include "Locatorcontext.h"
+#include "nodes/EventLocatorNode.h"
+#include "nodes/ScriptLocatorNode.h"
+#include "nodes/GenericLocatorNode.h"
+#include "nodes/CarStartLocatorNode.h"
+#include "nodes/TriggerVolumeNode.h"
+#include "nodes/zoneeventlocatornode.h"
+#include "nodes/occlusionlocatornode.h"
+#include "nodes/interiorentrancelocatornode.h"
+#include "nodes/directionallocatornode.h"
+#include "nodes/ActionEventLocatorNode.h"
+#include "nodes/FOVLocatorNode.h"
+#include "nodes/BreakableCameraLocatorNode.h"
+#include "nodes/StaticCameraLocatorNode.h"
+#include "nodes/PedGroupLocator.h"
+#include "utility/mext.h"
+#include "utility/mui.h"
+#include "main/worldbuilder.h"
+#include "main/constants.h"
+
+#include "resources/resource.h"
+
+//----------------------------------------
+// Constants, Typedefs and Statics
+//----------------------------------------
+
+const short OFFSET = 10;
+const double SCALE_FACTOR = 0.002;
+const double DEFAULT_SCALE = 5;
+
+const char* LocatorContext::stringId = "LocatorContext";
+
+LocatorType::Type LocatorContext::mLastLocatorType = LocatorType::NUM_TYPES;
+LocatorEvent::Event LocatorContext::mLastEvent = LocatorEvent::CHECK_POINT;
+
+//==============================================================================
+// LocatorContextCmd::LocatorContextCmd
+//==============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: LocatorContextCmd
+//
+//==============================================================================
+LocatorContextCmd::LocatorContextCmd()
+{
+}
+
+//==============================================================================
+// LocatorContextCmd::~LocatorContextCmd
+//==============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: LocatorContextCmd
+//
+//==============================================================================
+LocatorContextCmd::~LocatorContextCmd()
+{
+}
+
+//-----------------------------------------------------------------------------
+// c r e a t o r
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+void* LocatorContextCmd::creator()
+{
+ return new LocatorContextCmd();
+}
+
+//-----------------------------------------------------------------------------
+// m a k e O b j
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+MPxContext* LocatorContextCmd::makeObj()
+{
+ return new LocatorContext();
+}
+
+//==============================================================================
+// LocatorContext::LocatorContext
+//==============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: LocatorContext
+//
+//==============================================================================
+LocatorContext::LocatorContext() :
+ mXCurrent( 0 ),
+ mYCurrent( 0 )
+{
+ SetHelpString();
+
+ setTitleString( "Locator Creation Tool" );
+}
+
+//==============================================================================
+// LocatorContext::~LocatorContext
+//==============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: LocatorContext
+//
+//==============================================================================
+LocatorContext::~LocatorContext()
+{
+}
+
+//==============================================================================
+// LocatorContext::abortAction
+//==============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: void
+//
+//==============================================================================
+void LocatorContext::abortAction()
+{
+ ProcessState( ABORTED );
+}
+
+//-----------------------------------------------------------------------------
+// c o m p l e t e A c t i o n
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+void LocatorContext::completeAction()
+{
+ ProcessState( COMPLETED );
+}
+
+//-----------------------------------------------------------------------------
+// d e l e t e A c t i o n
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+void LocatorContext::deleteAction()
+{
+ ProcessState( DELETED );
+}
+
+//-----------------------------------------------------------------------------
+// d o D r a g
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+MStatus LocatorContext::doDrag( MEvent& event )
+{
+
+ event.getPosition( mXDrag, mYDrag );
+ ProcessState( MOUSEDRAG );
+ return MS::kSuccess;
+}
+
+//-----------------------------------------------------------------------------
+// d o E n t e r R e g i o n
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+MStatus LocatorContext::doEnterRegion( MEvent& event )
+{
+ SetHelpString();
+
+ return MS::kSuccess;
+}
+
+//-----------------------------------------------------------------------------
+// d o H o l d
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+MStatus LocatorContext::doHold( MEvent& event )
+{
+ MStatus status = MS::kSuccess;
+ return status;
+}
+
+//-----------------------------------------------------------------------------
+// d o P r e s s
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+MStatus LocatorContext::doPress( MEvent& event )
+{
+ event.getPosition( mXCurrent, mYCurrent );
+ ProcessState( BUTTONDOWN );
+ return MS::kSuccess;
+}
+
+//-----------------------------------------------------------------------------
+// d o R e l e a s e
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+MStatus LocatorContext::doRelease( MEvent& event )
+{
+ if ( event.mouseButton() == MEvent::kLeftMouse )
+ {
+ event.getPosition( mXCurrent, mYCurrent );
+ ProcessState( BUTTONUP );
+ }
+
+ return MS::kSuccess;
+}
+
+//-----------------------------------------------------------------------------
+// t o o l O f f C l e a n u p
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+void LocatorContext::toolOffCleanup()
+{
+ if ( mLocatorTransform != MObject::kNullObj )
+ {
+ mLocator = MObject::kNullObj;
+ mLocatorTransform = MObject::kNullObj;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// t o o l O n S e t u p
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+void LocatorContext::toolOnSetup( MEvent& event )
+{
+ setCursor( MCursor::crossHairCursor );
+}
+
+//-----------------------------------------------------------------------------
+//
+// P R I V A T E M E M B E R S
+//
+//-----------------------------------------------------------------------------
+
+
+//-----------------------------------------------------------------------------
+// p r o c e s s S t a t e
+//
+// Synopsis:
+//
+// Parameters: NONE
+//
+// Returns: NOTHING
+//
+// Constraints: NONE
+//
+//-----------------------------------------------------------------------------
+void LocatorContext::ProcessState( Stimulus stimulus )
+{
+ switch( stimulus )
+ {
+ case BUTTONDOWN:
+ {
+ }
+ break;
+ case MOUSEDRAG:
+ {
+ }
+ break;
+ case BUTTONUP:
+ {
+ InitLocator();
+ }
+ break;
+ case COMPLETED:
+ case ABORTED:
+ {
+ if ( mLocatorTransform != MObject::kNullObj )
+ {
+ mLocator = MObject::kNullObj;
+ mLocatorTransform = MObject::kNullObj;
+ }
+ }
+ break;
+ case DELETED:
+ {
+ if ( mLocatorTransform != MObject::kNullObj )
+ {
+ MGlobal::deleteNode( mLocator );
+ MGlobal::deleteNode( mLocatorTransform );
+ }
+ }
+ break;
+ default:
+ {
+ }
+ break;
+ }
+
+ SetHelpString();
+}
+
+//==============================================================================
+// LocatorContext::SetHelpString
+//==============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: void
+//
+//==============================================================================
+void LocatorContext::SetHelpString()
+{
+ mHelp = "Click to create Locator.";
+
+ setHelpString( mHelp );
+}
+
+//==============================================================================
+// LocatorContext::InitLocator
+//==============================================================================
+// Description: Comment
+//
+// Parameters: ()
+//
+// Return: void
+//
+//==============================================================================
+void LocatorContext::InitLocator()
+{
+ //Get the mesh below the clicked point and find it's y height.
+ MPoint intersectPoint;
+
+ if ( MExt::MeshClickIntersect( mXCurrent, mYCurrent, intersectPoint ) )
+ {
+ bool needsTriggerVolume = false;
+ bool lockTriggerRotation = false;
+ MString newName;
+
+ //What kind of locator do we want?
+ switch ( WorldBuilder::GetLocatorType() )
+ {
+ case LocatorType::EVENT:
+ {
+ MUI::PopupDialogue( IDD_DIALOG1, &EventLocatorNameCallBack );
+
+ newName = MString( EventLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+// if ( mLastLocatorType == LocatorType::EVENT )
+// {
+// if ( !mLocator.isNull() )
+// {
+// //Make this the same kind of event as the last one
+// MFnDependencyNode fnNode( mLocator );
+// fnNode.findPlug( EventLocatorNode::sEvent ).getValue( mLastEvent );
+// }
+// }
+// else
+ {
+ mLastLocatorType = LocatorType::EVENT;
+ }
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( EventLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+
+
+ MFnDependencyNode fnNode( mLocator );
+ fnNode.findPlug( EventLocatorNode::sEvent ).setValue( mLastEvent );
+
+ //Lock out the x and z axis on the transform.
+// MFnDependencyNode fnDepNode( mLocatorTransform );
+// fnDepNode.findPlug( MString("rx") ).setLocked( true );
+// fnDepNode.findPlug( MString("ry") ).setLocked( true );
+// fnDepNode.findPlug( MString("rz") ).setLocked( true );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::SCRIPT:
+ {
+ mLastLocatorType = LocatorType::SCRIPT;
+
+ MUI::PopupDialogue( IDD_DIALOG5, &ScriptLocatorNameCallBack );
+
+ newName = MString( ScriptLocatorNode::GetNewName() );
+
+ const char* script = ScriptLocatorNode::GetScriptName();
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( ScriptLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+
+ //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+ fnDepNode.findPlug( MString("rx") ).setLocked( true );
+ fnDepNode.findPlug( MString("ry") ).setLocked( true );
+ fnDepNode.findPlug( MString("rz") ).setLocked( true );
+
+ fnDepNode.setObject( mLocator );
+ fnDepNode.findPlug( ScriptLocatorNode::sScript ).setValue( script );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::GENERIC:
+ {
+ mLastLocatorType = LocatorType::GENERIC;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &GenericLocatorNameCallBack );
+
+ newName = MString( GenericLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( GenericLocatorNode::stringId ),
+ &newName );
+
+ //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+ fnDepNode.findPlug( MString("rx") ).setLocked( true );
+ fnDepNode.findPlug( MString("ry") ).setLocked( true );
+ fnDepNode.findPlug( MString("rz") ).setLocked( true );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::CAR_START:
+ {
+ mLastLocatorType = LocatorType::CAR_START;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &CarStartLocatorNameCallBack );
+
+ newName = MString( CarStartLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( CarStartLocatorNode::stringId ),
+ &newName );
+
+ //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+ fnDepNode.findPlug( MString("rx") ).setLocked( true );
+ fnDepNode.findPlug( MString("rz") ).setLocked( true );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::DYNAMIC_ZONE:
+ {
+ mLastLocatorType = LocatorType::DYNAMIC_ZONE;
+
+ MUI::PopupDialogue( IDD_DIALOG3, &ZoneEventLocatorNameCallBack );
+
+ newName = MString( ZoneEventLocatorNode::GetNewName() );
+
+ const char* zone = ZoneEventLocatorNode::GetZoneName();
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( ZoneEventLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+
+ //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+ fnDepNode.findPlug( MString("rx") ).setLocked( true );
+ fnDepNode.findPlug( MString("ry") ).setLocked( true );
+ fnDepNode.findPlug( MString("rz") ).setLocked( true );
+
+ fnDepNode.setObject( mLocator );
+ fnDepNode.findPlug( ZoneEventLocatorNode::sZone ).setValue( zone );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::OCCLUSION:
+ {
+ mLastLocatorType = LocatorType::OCCLUSION;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &OcclusionLocatorNameCallBack );
+
+ newName = MString( OcclusionLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( OcclusionLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+
+ //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+ fnDepNode.findPlug( MString("rx") ).setLocked( true );
+ fnDepNode.findPlug( MString("ry") ).setLocked( true );
+ fnDepNode.findPlug( MString("rz") ).setLocked( true );
+
+ fnDepNode.setObject( mLocator );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::INTERIOR_ENTRANCE:
+ {
+ mLastLocatorType = LocatorType::INTERIOR_ENTRANCE;
+
+ MUI::PopupDialogue( IDD_DIALOG3, &InteriorEntranceLocatorNameCallBack );
+
+ newName = MString( InteriorEntranceLocatorNode::GetNewName() );
+
+ const char* zone = InteriorEntranceLocatorNode::GetZoneName();
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( InteriorEntranceLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+
+// //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+// fnDepNode.findPlug( MString("rx") ).setLocked( true );
+// fnDepNode.findPlug( MString("ry") ).setLocked( true );
+// fnDepNode.findPlug( MString("rz") ).setLocked( true );
+
+ fnDepNode.setObject( mLocator );
+ fnDepNode.findPlug( InteriorEntranceLocatorNode::sZone ).setValue( zone );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::DIRECTIONAL:
+ {
+ mLastLocatorType = LocatorType::DIRECTIONAL;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &DirectionalLocatorNameCallBack );
+
+ newName = MString( DirectionalLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( DirectionalLocatorNode::stringId ),
+ &newName );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::ACTION:
+ {
+ mLastLocatorType = LocatorType::ACTION;
+
+ MUI::PopupDialogue( IDD_DIALOG4, &ActionEventLocatorNameCallBack );
+
+ newName = MString( ActionEventLocatorNode::GetNewName() );
+ MString objName = ActionEventLocatorNode::GetNewObj();
+ MString jointName = ActionEventLocatorNode::GetNewJoint();
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( ActionEventLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+
+ //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+ //fnDepNode.findPlug( MString("rx") ).setLocked( true );
+ //fnDepNode.findPlug( MString("ry") ).setLocked( true );
+ //fnDepNode.findPlug( MString("rz") ).setLocked( true );
+
+ fnDepNode.setObject( mLocator );
+ fnDepNode.findPlug( ActionEventLocatorNode::sObject ).setValue( objName );
+ fnDepNode.findPlug( ActionEventLocatorNode::sJoint ).setValue( jointName );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::FOV:
+ {
+ mLastLocatorType = LocatorType::FOV;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &FOVLocatorNameCallBack );
+
+ newName = MString( FOVLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( FOVLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+
+ //Lock out the x and z axis on the transform.
+ MFnDependencyNode fnDepNode( mLocatorTransform );
+ fnDepNode.findPlug( MString("rx") ).setLocked( true );
+ fnDepNode.findPlug( MString("ry") ).setLocked( true );
+ fnDepNode.findPlug( MString("rz") ).setLocked( true );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::BREAKABLE_CAMERA:
+ {
+ mLastLocatorType = LocatorType::BREAKABLE_CAMERA;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &BreakableCameraLocatorNameCallBack );
+
+ newName = MString( BreakableCameraLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( BreakableCameraLocatorNode::stringId ),
+ &newName );
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::STATIC_CAMERA:
+ {
+ mLastLocatorType = LocatorType::STATIC_CAMERA;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &StaticCameraLocatorNameCallBack );
+
+ newName = MString( StaticCameraLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( StaticCameraLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ case LocatorType::PED_GROUP:
+ {
+ mLastLocatorType = LocatorType::PED_GROUP;
+
+ MUI::PopupDialogue( IDD_DIALOG1, &PedGroupLocatorNameCallBack );
+
+ newName = MString( PedGroupLocatorNode::GetNewName() );
+
+ if ( newName.length() > 0 )
+ {
+
+ //TODO, parent this properly.
+ MExt::CreateNode( mLocator,
+ mLocatorTransform,
+ MString( PedGroupLocatorNode::stringId ),
+ &newName );
+
+ needsTriggerVolume = true;
+ }
+ else
+ {
+ goto DIE; //Die outta here. It's cancelled.
+ }
+ }
+ break;
+ default:
+ assert( false );
+ break;
+ }
+
+ assert( !mLocator.isNull() );
+
+ MExt::SetWorldPosition( intersectPoint, mLocator );
+
+ if ( needsTriggerVolume )
+ {
+ //Create and connect a trigger volume to this node.
+ MObject tv;
+ MObject tvt;
+
+ MString name( newName );
+ name += MString( "Trigger" );
+
+ MExt::CreateNode( tv,
+ tvt,
+ MString( TriggerVolumeNode::stringId ),
+ &name );
+
+ MExt::SetWorldPosition( intersectPoint, tv );
+
+ MFnTransform fnTransform( tvt );
+ const double scale[3] = { DEFAULT_SCALE, DEFAULT_SCALE, DEFAULT_SCALE };
+
+ //Scale this bad-boy!
+ fnTransform.setScale( scale );
+
+ if ( lockTriggerRotation )
+ {
+ fnTransform.findPlug( MString( "rx" ) ).setLocked( true );
+ fnTransform.findPlug( MString( "ry" ) ).setLocked( true );
+ fnTransform.findPlug( MString( "rz" ) ).setLocked( true );
+ }
+
+ //Connect the Trigger Volume to the Locator.
+ MExt::Connect( tv, "locator", mLocator, "triggers" );
+
+ WorldBuilder::AddChild( tv );
+ }
+
+ WorldBuilder::AddChild( mLocator );
+
+ }
+
+DIE:
+ MGlobal::clearSelectionList();
+}