cod2-sdk/bin/maya/NoteTrack.mel
2006-04-20 00:00:00 +00:00

470 lines
13 KiB
Text

/* NoteTrack.mel Richard Cheek 2004
Script to make and control the note track window and note track nodes.
Note track nodes are simple locators with 2 menu attributes that can be animated.
*/
// Set up global vars
global string $NoteTracksMainList = "Null:rechamber:reload done:fire:footstep_left_small:footstep_left_large:footstep_right_small:footstep_right_large:anim_alertness = casual:anim_alertness = alert:anim_alertness = aiming:anim_movement = \\\"stop\\\":anim_movement = \\\"walk\\\":anim_movement = \\\"run\\\":anim_pose = \\\"stand\\\":anim_pose = \\\"crouch\\\":anim_pose = \\\"crawl\\\":anim_pose = \\\"prone\\\":anim_pose = \\\"back\\\":anim_gunhand = \\\"left\\\":anim_gunhand = \\\"right\\\":anim_gunhand = \\\"none\\\":attach clip right:detach clip right:anim_melee = \\\"right\\\":anim_melee = \\\"left\\\":swish small:swish large:bodyfall small:bodyfall large:dropgun:gravity on:gravity off:swap taghelmet to tagleft:finish:dialog";
/*
Notes:
addAttr -ln Testing -at enum -enumName "Hello:World:Just:Testing";
setAttr -keyable true pSphere1.Testing;
addAttr -e -enumName "Hello:World:Just:Testing:NewEntry:" ".Testing";
addAttr -q -enumName ".Testing";
The controls:
Need a create note track button.
Need a way to select note track nodes.
Need a way to delete note tracks
Need a drop down list to select a note track value and key it.
Need a drop down list to key the second note value, depending on the first value.
Global Proc list
DeleteNoteTrack
ChangeSelectedNoteTrack
AddToSecondNoteTrackList
CreateNoteTrackNode
CreateCODNoteTrackWindow
CreateNoteTrackDropDowns
GetNoteTrackList
NoteTrack
*/
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: RenameSecondNoteTrack
//
// This proc renames the Secondary note track name
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc RenameMainNoteTrack(string $NoteTrackNode)
{
print "\n\n";
print $NoteTrackNode;
// Get the old list of attributes
string $OldList = `addAttr -q -enumName ($NoteTrackNode + ".MainNote")`;
// get the attribute in the main list to change
int $OldValue = `getAttr ($NoteTrackNode + ".MainNote")`;
// Get the string to change it to
string $ChangeTo = `textField -q -text TF_AddNoteTrack`;
// Check it's not blank
if (`size $ChangeTo` < 1)
{
return;
}
print "\n\n";
print $OldList;
print "\n\n";
print $OldValue;
print "\n\n";
print $ChangeTo;
string $Tokenize[];
// Tokenize the list into an array
tokenize $OldList ":" $Tokenize;
// Change the list
$Tokenize[$OldValue] = $ChangeTo;
print "\n\n";
print $Tokenize;
// Rebuild the list string
string $NewList;
string $Each;
for ($Each in $Tokenize )
{
$NewList = $NewList + ( $Each + ":");
}
print "\n\n";
print $NewList;
// Put the new list back into the attribute in the notetrack
addAttr -e -enumName $NewList ($NoteTrackNode + ".MainNote");
// Rebuild the window
select -r $NoteTrackNode;
NoteTrack;
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: DeleteNoteTrack
//
// This proc deletes the selected NoteTrack
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc DeleteNoteTrack()
{
// Need to add a "Are you sure?" message box here
string $Result = `confirmDialog -title "Confirm Delete" -message "Delete Note Track?" -button "Yes" -button "No" -defaultButton "No" -cancelButton "No" -dismissString "No"`;
if ($Result == "Yes")
{
// get the selected note track from the drop down
string $Selected = `optionMenu -q -v OM_SelectTrackNote`;
// We don't need to check for nothing selected, because the delete button used to get to this function only appears when there is somthing to delete
delete $Selected;
NoteTrack;
} // End if ($Result == "Yes")
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: ChangeSelectedNoteTrack
//
// This proc is called when the note track list changes. It selects the new track and runs the window again
// to update the selected note track
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc ChangeSelectedNoteTrack()
{
string $Selected = `optionMenu -q -v OM_SelectTrackNote`;
print "\n\n";
print $Selected;
select -r $Selected;
NoteTrack;
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: AddToMainNoteTrackList
//
// This proc adds a extra option to the seconadary note track menu.
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc AddToMainNoteTrackList ( string $NoteTrackNode)
{
print "\n\nAdd to Note Track : ";
print $NoteTrackNode;
// Get a list of the Main note tracks.
string $MainNoteTrackList = `addAttr -q -enumName ($NoteTrackNode + ".MainNote")`;
print "\n\nStart list is ";
print $MainNoteTrackList;
// Get the iteam to add.
string $AddMe = `textField -q -text TF_AddNoteTrack`;
print "\n\nAdding ";
print $AddMe;
addAttr -e -enumName ( $MainNoteTrackList + ":" + $AddMe) ($NoteTrackNode + ".MainNote");
// Rebuild the window from scratch.
select -r $NoteTrackNode;
NoteTrack;
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: CreateNoteTrackNode
//
// This proc creates a note track node
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc CreateNoteTrackNode()
{
global string $NoteTracksMainList;
string $NoteTrack[] = `spaceLocator -p 0 0 0`;
$NoteTrack[0] = `rename $NoteTrack[0] "NoteTrack"`;
// Hide all the translation, rotation, scale and visibility from the channelbox
setAttr -keyable false ($NoteTrack[0] + ".tx");
setAttr -keyable false ($NoteTrack[0] + ".ty");
setAttr -keyable false ($NoteTrack[0] + ".tz");
setAttr -keyable false ($NoteTrack[0] + ".rx");
setAttr -keyable false ($NoteTrack[0] + ".ry");
setAttr -keyable false ($NoteTrack[0] + ".rz");
setAttr -keyable false ($NoteTrack[0] + ".sx");
setAttr -keyable false ($NoteTrack[0] + ".sy");
setAttr -keyable false ($NoteTrack[0] + ".sz");
setAttr -keyable false ($NoteTrack[0] + ".v");
// Add the 2 note track attributes
addAttr -ln MainNote -at enum -enumName $NoteTracksMainList $NoteTrack[0] ;
setAttr -keyable true ($NoteTrack[0] + ".MainNote");
// Select the new note track and run the window again so it's updated in the selected Note track
select -r $NoteTrack[0];
NoteTrack;
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: CreateCODNoteTrackWindow
//
// This proc creates the note track window.
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc CreateCODNoteTrackWindow( string $win )
{
global string $NoteTracksMainList;
// define the window;
window
-title "COD Note Track Window"
$win;
//create a columnLayout for the top level layout
columnLayout -columnAttach "both" 5 -rowSpacing 10 -columnWidth 325 NoteTrackTopColumnLayout;
frameLayout -w 150 -label "Note Tracks" -borderStyle "etchedIn" -collapsable true -collapse false -p NoteTrackTopColumnLayout NoteTrackFrameLayout;
columnLayout -rs 4 -p NoteTrackFrameLayout NoteTrackMainColumnLayout;
columnLayout -p NoteTrackMainColumnLayout;
// Create button
button -w 300 -l "Create Note Track node" -c "CreateNoteTrackNode;NoteTrack";
// Get a list of the noteTracks in the scene
string $NoteTrackList[] = `GetNoteTrackList`;
// List selected to see if a note track was selected. If so, make it the active one in the drop down list.
string $Sel[] = `ls -sl -type transform "*NoteTrack*" "*:*NoteTrack*"`;
string $SelNote;
if (`size $Sel` > 0)
{
$SelNote = $Sel[0];
}
else $SelNote = $NoteTrackList[0];
// Create the drop down list for the present note track, if one exists.
if (`size $NoteTrackList` > 0)
{
CreateNoteTrackDropDowns $SelNote $NoteTrackList;
textField -w 120 -tx "Null" TF_AddNoteTrack;
button -l "Add" -c ("AddToMainNoteTrackList " + $SelNote);
button -l "Rename" -c ("RenameMainNoteTrack " + $SelNote) ;
}
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: CreateNoteTrackDropDowns
//
// This proc creates the note track drop down menus and connects them to the notetrack node passed in.
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc CreateNoteTrackDropDowns ( string $NoteTrackNode, string $NoteTrackNodeList[])
{
// Main Note Track drop down
global string $NoteTracksMainList;
string $LocalNoteTrackMainList = `addAttr -q -enumName ($NoteTrackNode + ".MainNote")`;
string $LocalMainNoteTrackListArry[];
tokenize $LocalNoteTrackMainList ":" $LocalMainNoteTrackListArry;
frameLayout -w 150 -label "Note Track" -borderStyle "etchedIn" -collapsable true -collapse false -p NoteTrackTopColumnLayout NoteTrackAttributesFrameLayout;
columnLayout -rs 4 -p NoteTrackAttributesFrameLayout NoteTrackAttributesMainColumnLayout;
rowColumnLayout -numberOfColumns 3 -columnWidth 1 220 -columnWidth 2 40 -columnWidth 3 30 -p NoteTrackAttributesMainColumnLayout;
// Change note track list menu
optionMenu -w 280 -label "Selected Note Track :" -cc "ChangeSelectedNoteTrack" OM_SelectTrackNote ;
string $Each;
for ($Each in $NoteTrackNodeList)
{
menuItem -label $Each;
}
button -l "Select" -c "ChangeSelectedNoteTrack";
button -l "Del" -c "DeleteNoteTrack";
print "\n\nThe note track node is:";
print $NoteTrackNode;
print "\n\n";
optionMenu -e -v $NoteTrackNode OM_SelectTrackNote;
separator -w 300;
separator -w 300;
separator -w 300;
separator -w 300;
rowColumnLayout -nc 2 -cw 1 250 -cw 2 50 -p NoteTrackAttributesMainColumnLayout;
string $MenuListMain[];
tokenize $NoteTracksMainList ":" $MenuListMain;
optionMenu -w 290 -label "Main NoteTrack :" OM_MainTrackNote ;
string $Each;
int $Data = 0; // To use the connectControl function, the menu iteams need a data value
for ($Each in $LocalMainNoteTrackListArry)
{
menuItem -label $Each -data $Data ; // To use the connectControl function, the menu iteams need a data value
$Data = $Data +1;
}
// Connect the control to the notetrack node attribute
connectControl OM_MainTrackNote ($NoteTrackNode + ".MainNote");
button -l "Key" -c ("setKeyframe "+$NoteTrackNode + ".MainNote") ;
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: GetNoteTrackList
//
// This proc returns a list of all the note track nodes in the scene.
// These are found by looking for all nodes that start "NoteTrack"
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc string[] GetNoteTrackList()
{
string $Tracks[] = {"hello","world"};
string $Tracks[] = `ls -type transform "*NoteTrack*" "*:*NoteTrack*"`;
print $Tracks;
print "Where is this??";
return $Tracks;
}
//-------------------------------------------------------------------------------------------------------------------------------------//
// PROC: NoteTrack
//
// This is the main entry point
//
//-------------------------------------------------------------------------------------------------------------------------------------//
global proc NoteTrack()
{
// Create a window
string $win = "CODNoteTrackWindow";
// check and see if the window exists. if it does, then delete it.
if (`window -exists $win`)
deleteUI $win;
// create the window
CreateCODNoteTrackWindow $win;
// show the window
showWindow $win;
}