335 lines
8.8 KiB
Plaintext
335 lines
8.8 KiB
Plaintext
//Constant
|
|
global int $gMAX_LANES = 4;
|
|
|
|
global string $gSelectedName;
|
|
global string $gOriginField;
|
|
global string $gRoadField;
|
|
global string $gTopField;
|
|
global string $gBottomField;
|
|
global string $gLanesField;
|
|
global string $gShoulderField;
|
|
|
|
global int $gSelectionScriptJob;
|
|
|
|
global string $gSelectedObjectName;
|
|
|
|
global proc teOpenEditorWindow()
|
|
{
|
|
global string $gSelectedName;
|
|
global string $gOriginField;
|
|
global string $gRoadField;
|
|
global string $gTopField;
|
|
global string $gBottomField;
|
|
global string $gLanesField;
|
|
global string $gShoulderField;
|
|
global int $gMAX_LANES;
|
|
|
|
|
|
if ( `window -exists TE_TileEditor` )
|
|
{
|
|
deleteUI -window TE_TileEditor;
|
|
}
|
|
|
|
window -rtf true -title "TE Tile Editor" TE_TileEditor;
|
|
|
|
columnLayout -adjustableColumn true;
|
|
|
|
string $selectedRow = `rowLayout -numberOfColumns 3 -columnWidth 1 170`;
|
|
$gSelectedName = `textField -editable false -text "" -width 170`;
|
|
string $selectedButton = `button -label "Select Mesh" -command ("teSelectMesh()")`;
|
|
string $doneButton = `button -label "Done" -command ("teDoneEditingMesh()")`;
|
|
|
|
setParent ..;
|
|
|
|
string $originRow = `rowLayout -numberOfColumns 2`;
|
|
string $originButton = `button -label "Set Origin" -command ("teSelectOrigin()")`;
|
|
$gOriginField = `intField -value -1 -editable false`;
|
|
setParent ..;
|
|
|
|
|
|
string $roadRow = `rowLayout -numberOfColumns 2`;
|
|
string $roadButton = `button -label "Set Road Dir" -command ("teSelectRoadDir()")`;
|
|
$gRoadField = `intField -value -1 -editable false`;
|
|
setParent ..;
|
|
|
|
|
|
string $topRow = `rowLayout -numberOfColumns 2`;
|
|
string $topButton = `button -label "Set TOP" -command ("teSelectTOP()")`;
|
|
$gTopField = `intField -value -1 -editable false`;
|
|
setParent ..;
|
|
|
|
|
|
string $bottomRow = `rowLayout -numberOfColumns 2`;
|
|
string $bottomButton = `button -label "Set BOTTOM" -command ("teSelectBOTTOM()")`;
|
|
$gBottomField = `intField -value -1 -editable false`;
|
|
setParent ..;
|
|
|
|
//The following #1 is a trick that the scripting system converts into the value of the field/control...
|
|
string $laneRow = `rowLayout -numberOfColumns 2`;
|
|
string $laneLabel = `text -label "Num. Lanes" -align "center"`;
|
|
$gLanesField = `intField -value 1 -min 0 -max $gMAX_LANES -step 1 -editable true -changeCommand ("teSetNumLanes(#1)")`;
|
|
setParent ..;
|
|
|
|
$gShoulderField = `checkBox -label "Has Shoulder" -value true -changeCommand ("teSetShoulder(#1)")`;
|
|
|
|
setParent ..; //columnLayout
|
|
|
|
showWindow;
|
|
}
|
|
|
|
global proc teCloseEditorWindow()
|
|
{
|
|
global string $gSelectedName;
|
|
global string $gOriginField;
|
|
global string $gRoadField;
|
|
global string $gTopField;
|
|
global string $gBottomField;
|
|
global string $gLanesField;
|
|
global string $gShoulderField;
|
|
|
|
global int $gSelectionScriptJob;
|
|
|
|
if ( `window -exists TE_TileEditor` )
|
|
{
|
|
deleteUI -window TE_TileEditor;
|
|
}
|
|
|
|
$gSelectedName = "";
|
|
$gOriginField = "";
|
|
$gRoadField = "";
|
|
$gTopField = "";
|
|
$gBottomField = "";
|
|
$gLanesField = "";
|
|
$gShoulderField = "";
|
|
|
|
$gSelectionScriptJob = 0;
|
|
}
|
|
|
|
global proc teSelectMesh()
|
|
{
|
|
global string $gSelectedName;
|
|
global int $gSelectionScriptJob;
|
|
global string $gSelectedObjectName;
|
|
|
|
//May want to inform the TrackEditor of this selection if it is good.
|
|
string $selectedObjects[] = `ls -sl -dag`;
|
|
string $selectedObjectName = $selectedObjects[0];
|
|
string $selectedNodeType;
|
|
|
|
if ( $selectedObjectName != "" )
|
|
{
|
|
//There is something selected
|
|
|
|
$selectedNodeType = `nodeType $selectedObjectName `;
|
|
|
|
if ( $selectedNodeType == "transform" )
|
|
{
|
|
//We don't want the transform, we want the child node.
|
|
$selectedObjectName = $selectedObjects[1];
|
|
}
|
|
|
|
if ( $selectedObjectName != "" )
|
|
{
|
|
$selectedNodeType = `nodeType $selectedObjectName `;
|
|
|
|
if ( $selectedNodeType == "mesh" )
|
|
{
|
|
//We're in business
|
|
textField -edit -text $selectedObjectName $gSelectedName;
|
|
|
|
teSwitchToVertexSelection( 1 ); //Turn on vertex selection.
|
|
|
|
teAddSettingsToObject( $selectedObjectName );
|
|
|
|
$gSelectedObjectName = $selectedObjectName;
|
|
|
|
teUpdateEditorWindow();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
global proc teUpdateEditorWindow()
|
|
{
|
|
global string $gSelectedName;
|
|
global string $gOriginField;
|
|
global string $gRoadField;
|
|
global string $gTopField;
|
|
global string $gBottomField;
|
|
global string $gSelectedObjectName;
|
|
global string $gLanesField;
|
|
global string $gShoulderField;
|
|
|
|
//Update the fields according to the selected object.
|
|
|
|
int $valsSet = false;
|
|
|
|
if ( $gSelectedObjectName != "" )
|
|
{
|
|
string $attr[] = `listAttr -st teOrigin $gSelectedObjectName`;
|
|
|
|
if ( $attr[0] != "" )
|
|
{
|
|
textField -edit -text $gSelectedObjectName $gSelectedName;
|
|
|
|
float $origin = `getAttr ($gSelectedObjectName + ".teOrigin")`;
|
|
intField -edit -value $origin $gOriginField;
|
|
|
|
float $road = `getAttr ($gSelectedObjectName + ".teRoad")`;
|
|
intField -edit -value $road $gRoadField;
|
|
|
|
float $top = `getAttr ($gSelectedObjectName + ".teTop")`;
|
|
intField -edit -value $top $gTopField;
|
|
|
|
float $bottom = `getAttr ($gSelectedObjectName + ".teBottom")`;
|
|
intField -edit -value $bottom $gBottomField;
|
|
|
|
int $lanes = `getAttr ($gSelectedObjectName + ".teLanes")`;
|
|
intField -edit -value $lanes $gLanesField;
|
|
|
|
int $hasShoulder = `getAttr ($gSelectedObjectName + ".teShoulder")`;
|
|
checkBox -edit -value $hasShoulder $gShoulderField;
|
|
|
|
$valsSet = 1;
|
|
}
|
|
}
|
|
|
|
if ( !$valsSet )
|
|
{
|
|
textField -edit -text "" $gSelectedName;
|
|
|
|
intField -edit -value -1 $gOriginField;
|
|
intField -edit -value -1 $gRoadField;
|
|
intField -edit -value -1 $gTopField;
|
|
intField -edit -value -1 $gBottomField;
|
|
intField -edit -value 0 $gLanesField;
|
|
checkBox -edit -value false $gShoulderField;
|
|
}
|
|
}
|
|
|
|
global proc teSwitchToVertexSelection( int $on )
|
|
{
|
|
if ( $on )
|
|
{
|
|
selectMode -component;
|
|
selectType -vertex true;
|
|
}
|
|
else
|
|
{
|
|
selectMode -object;
|
|
}
|
|
}
|
|
|
|
global proc teDoneEditingMesh()
|
|
{
|
|
global string $gSelectedObjectName;
|
|
|
|
$gSelectedObjectName = ""; //Clear the selection.
|
|
|
|
teSwitchToVertexSelection( 0 ); //Turn on vertex selection.
|
|
|
|
teUpdateEditorWindow();
|
|
}
|
|
|
|
global proc teAddSettingsToObject( string $objectName )
|
|
{
|
|
string $attr[] = `listAttr -st teOrigin $objectName`;
|
|
|
|
if ( $attr[0] == "" )
|
|
{
|
|
addAttr -ln teOrigin -sn teO -at long -defaultValue -1 $objectName;
|
|
|
|
addAttr -ln teRoad -sn teR -at long -defaultValue -1 $objectName;
|
|
|
|
addAttr -ln teTop -sn teT -at long -defaultValue -1 $objectName;
|
|
|
|
addAttr -ln teBottom -sn teB -at long -defaultValue -1 $objectName;
|
|
|
|
addAttr -ln teLanes -sn teL -at long -defaultValue 1 $objectName;
|
|
|
|
addAttr -ln teShoulder -sn teS -at bool -defaultValue true $objectName;
|
|
|
|
//This is for connecting to roads
|
|
addAttr -ln teWhichRoad -sn teWR -at message $objectName;
|
|
|
|
//This is a hint of the type
|
|
addAttr -ln teTypeHint -sn teTH -at long -defaultValue -1 $objectName;
|
|
}
|
|
}
|
|
|
|
global proc teSelectOrigin()
|
|
{
|
|
global string $gSelectedObjectName;
|
|
|
|
int $pos = `TE_GetSelectedVertexIndex`;
|
|
|
|
if ( $pos >= 0 )
|
|
{
|
|
setAttr ( $gSelectedObjectName + ".teOrigin" ) $pos;
|
|
}
|
|
|
|
teUpdateEditorWindow();
|
|
}
|
|
|
|
global proc teSelectRoadDir()
|
|
{
|
|
global string $gSelectedObjectName;
|
|
|
|
int $pos = `TE_GetSelectedVertexIndex`;
|
|
|
|
if ( $pos >= 0 )
|
|
{
|
|
setAttr ( $gSelectedObjectName + ".teRoad" ) $pos;
|
|
}
|
|
|
|
teUpdateEditorWindow();
|
|
}
|
|
|
|
global proc teSelectTOP()
|
|
{
|
|
global string $gSelectedObjectName;
|
|
|
|
int $pos = `TE_GetSelectedVertexIndex`;
|
|
|
|
if ( $pos >= 0 )
|
|
{
|
|
setAttr ( $gSelectedObjectName + ".teTop" ) $pos;
|
|
}
|
|
|
|
teUpdateEditorWindow();
|
|
}
|
|
|
|
global proc teSelectBOTTOM()
|
|
{
|
|
global string $gSelectedObjectName;
|
|
|
|
int $pos = `TE_GetSelectedVertexIndex`;
|
|
|
|
if ( $pos >= 0 )
|
|
{
|
|
setAttr ( $gSelectedObjectName + ".teBottom" ) $pos;
|
|
}
|
|
|
|
teUpdateEditorWindow();
|
|
}
|
|
|
|
|
|
global proc teSetNumLanes( int $numLanes )
|
|
{
|
|
global string $gSelectedObjectName;
|
|
|
|
if ( $gSelectedObjectName != "" )
|
|
{
|
|
setAttr ( $gSelectedObjectName + ".teLanes" ) $numLanes;
|
|
}
|
|
}
|
|
|
|
global proc teSetShoulder( int $hasShoulder )
|
|
{
|
|
global string $gSelectedObjectName;
|
|
|
|
if ( $gSelectedObjectName != "" )
|
|
{
|
|
setAttr ( $gSelectedObjectName + ".teShoulder" ) $hasShoulder;
|
|
}
|
|
} |