Integrating latest 47acbe8
This commit is contained in:
@@ -0,0 +1,768 @@
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this
|
||||
* distribution (the "License"). All use of this software is governed by the License,
|
||||
* or, if provided, by the license below or the license accompanying this file. Do not
|
||||
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
// Shared UI parameters
|
||||
global int $g_heightPerRow = 29;
|
||||
global int $g_controlHeight = 22;
|
||||
global string $g_lastRow = "";
|
||||
|
||||
LumberyardAnimationManagerLoadDependencies();
|
||||
|
||||
//! Loads all scripts that the Animation Manager relies on.
|
||||
global proc LumberyardAnimationManagerLoadDependencies()
|
||||
{
|
||||
eval("source cryAnim.mel");
|
||||
eval("source LumberyardUtilities.mel");
|
||||
}
|
||||
|
||||
//! Creates the title row for the Animation Manager.
|
||||
/*!
|
||||
\note
|
||||
This will contain the column titles for all animation data. If you choose to customize animation data, and want to expose it to the
|
||||
Animation Manager, you will want to create a new column here as well as when you create the data.
|
||||
\sa LumberyardAnimationManagerCreateUIRow()
|
||||
*/
|
||||
proc LumberyardAnimationManagerCreateColumnTitles()
|
||||
{
|
||||
global int $g_controlHeight;
|
||||
setParent LUMBERYARDANIMATIONMANAGER_MAINLAYOUT;
|
||||
|
||||
rowLayout -numberOfColumns 3 -columnWidth3 35 805 35 -backgroundColor 0.26 0.26 0.26
|
||||
-columnAlign 1 "center" -columnAttach 1 "both" 0 - columnAlign 2 "center" -columnAttach 2 "both" 0
|
||||
-columnAlign 3 "center" -columnAttach 3 "both" 0;
|
||||
|
||||
// For <> button column
|
||||
text -height $g_controlHeight -label "";
|
||||
|
||||
// Main animation columns;
|
||||
rowLayout -numberOfColumns 6 -columnWidth6 35 35 150 150 150 250 -adjustableColumn 6 -backgroundColor 0.26 0.26 0.26
|
||||
-columnAlign 1 "center" -columnAttach 1 "both" 0 -columnAlign 2 "center" -columnAttach 2 "both" 0
|
||||
-columnAlign 3 "center" -columnAttach 3 "both" 0 -columnAlign 4 "center" -columnAttach 4 "both" 0
|
||||
-columnAlign 5 "center" -columnAttach 5 "both" 0 -columnAlign 6 "center" -columnAttach 6 "both" 0 LUMBERYARDTOOL_ANIMMANAGER_COLUMNTITLES;
|
||||
{
|
||||
text -height $g_controlHeight -label "Start";
|
||||
text -height $g_controlHeight -label "End";
|
||||
text -height $g_controlHeight -label "Name";
|
||||
text -height $g_controlHeight -label "Root Node";
|
||||
text -height $g_controlHeight -label "Animation Layers";
|
||||
text -height $g_controlHeight -label "Export Path";
|
||||
setParent ..;
|
||||
}
|
||||
|
||||
// For the +/X buttons
|
||||
text -height $g_controlHeight -label "";
|
||||
}
|
||||
|
||||
//! Resize the Animation Manager window.
|
||||
/*!
|
||||
\param $newExportListHeight The new height for the columnLayout containing the animation export data
|
||||
\param $newWindowListHeight The new height for the Animation Manager window
|
||||
*/
|
||||
global proc LumberyardAnimationManagerResize(int $newExportListHeight, int $newWindowHeight)
|
||||
{
|
||||
columnLayout -edit -height $newExportListHeight LUMBERYARDANIMATIONMANAGER_EXPORT_SCROLLLAYOUT;
|
||||
columnLayout -edit -height $newWindowHeight LUMBERYARDANIMATIONMANAGER_MAINLAYOUT;
|
||||
window -edit -height $newWindowHeight LUMBERYARDANIMATIONMANAGER_WINDOW;
|
||||
}
|
||||
|
||||
//! Change the height of the Animation Manager and export list by a fixed delta.
|
||||
/*!
|
||||
\param $heightDelta Offset to change height of elements by. Can be positive or negative.
|
||||
\note
|
||||
This is a utility function used to simplify the logic in several places where determining an offset is
|
||||
far less expensive than recalculating the desired height from scratch. It should be preferred over
|
||||
LumberyardAnimationManagerResize in such cases.
|
||||
\sa LumberyardAnimationManagerResize()
|
||||
*/
|
||||
proc LumberyardAnimationManagerChangeHeight(int $heightDelta)
|
||||
{
|
||||
int $exportListHeight = `columnLayout -query -height LUMBERYARDANIMATIONMANAGER_EXPORT_SCROLLLAYOUT`;
|
||||
int $windowHeight = `window -query -height LUMBERYARDANIMATIONMANAGER_WINDOW`;
|
||||
|
||||
$windowHeight = $windowHeight + $heightDelta;
|
||||
$exportListHeight = $exportListHeight + $heightDelta;
|
||||
|
||||
LumberyardAnimationManagerResize($exportListHeight, $windowHeight);
|
||||
}
|
||||
|
||||
//! Wrapper command used to remove the export data for an animation being managed by the Animation Manager.
|
||||
/*!
|
||||
/param $row The name of the row UI element corresponding to the export data to be removed.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerRemoveItem(string $row)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
LumberyardUtilitiesDeleteAnimationExport($managedNode);
|
||||
}
|
||||
|
||||
//! Open a file browser dialog and update the export path for an animation based on selection.
|
||||
/*!
|
||||
/param $row The name of the rowLayout UI element corresponding to the export data to be updated.
|
||||
/param $textField The name of the text field UI element corresponding to the export data to be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerFolderBrowser(string $row, string $textField)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
string $currentPath = `LumberyardUtilitiesGetAnimationExportPath $managedNode`;
|
||||
|
||||
if ($currentPath == "")
|
||||
{
|
||||
$currentPath = `file -query -sceneName`;
|
||||
$currentPath = `dirname $currentPath`;
|
||||
}
|
||||
|
||||
string $result[] = `LumberyardBrowseForPath $currentPath "Set Export Path"`;
|
||||
// We need to requery this in case this took focus from the name text box
|
||||
$managedNode = `rowLayout -query -annotation $row`;
|
||||
|
||||
if (size($result) == 1)
|
||||
{
|
||||
// Update the UI
|
||||
textField -edit -text $result[0] $textField;
|
||||
// Update the data
|
||||
LumberyardUtilitiesSetAnimationExportPath($managedNode, $result[0]);
|
||||
}
|
||||
}
|
||||
|
||||
//! Update the root joint of the export data and the UI based on current selection in Maya.
|
||||
/*!
|
||||
/param $row The name of the rowLayout UI element corresponding to the export data to be updated.
|
||||
/param $textField The name of the textField UI element corresponding to the export data to be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerGetRootJointFromSelection(string $row, string $textField)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
string $currentRootJoint = `LumberyardUtilitiesGetAnimationRootJoint $managedNode`;
|
||||
|
||||
$currentRootJoint = `GetRootJointForSelection $currentRootJoint`;
|
||||
|
||||
// Update the UI
|
||||
textField -edit -text $currentRootJoint $textField;
|
||||
// Update the data
|
||||
LumberyardUtilitiesSetAnimationRootJoint($managedNode, $currentRootJoint);
|
||||
}
|
||||
|
||||
//! Utility function to get the name of a UI control in the nested rowLayouts used in Animation Manager.
|
||||
/*!
|
||||
\param $row Root rowLayout corresponding to a single animation export.
|
||||
\param $indices The sequence of indices used to index into nested rowLayouts.
|
||||
\note If you are changing the layout in any way, be aware that calls to this function many need to be updated.
|
||||
\sa LumberyardAnimationManagerGetStartFrame(), LumberyardAnimationManagerGetEndFrame(), LumberyardAnimationManagerGetExportName(), LumberyardAnimationManagerGetRootJoint(), and LumberyardAnimationManagerGetExportPath()
|
||||
*/
|
||||
proc string LumberyardAnimationManagerGetRowControl(string $row, int $indices[])
|
||||
{
|
||||
string $control = $row;
|
||||
|
||||
if(size($indices) == 0)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
for($index in $indices)
|
||||
{
|
||||
if(!`rowLayout -query -exists $control`)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
string $children[] = `rowLayout -query -childArray $control`;
|
||||
if($index >= size($children))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
$control = $control + "|" + $children[$index];
|
||||
}
|
||||
|
||||
return $control;
|
||||
}
|
||||
|
||||
//! Get the value contained in the start frame intField in an animation export rowLayout.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element containing the intField to query
|
||||
*/
|
||||
global proc int LumberyardAnimationManagerGetStartFrame(string $row)
|
||||
{
|
||||
int $startFrame = -1;
|
||||
int $controlMapping[] = {1, 0};
|
||||
string $control = `LumberyardAnimationManagerGetRowControl $row $controlMapping`;
|
||||
if($control != "" && `intField -query -exists $control`)
|
||||
{
|
||||
$startFrame = `intField -query -value $control`;
|
||||
}
|
||||
return $startFrame;
|
||||
}
|
||||
|
||||
//! Get the value contained in the end frame intField in an animation export rowLayout.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element containing the intField to query
|
||||
*/
|
||||
global proc int LumberyardAnimationManagerGetEndFrame(string $row)
|
||||
{
|
||||
int $endFrame = -1;
|
||||
int $controlMapping[] = {1, 1};
|
||||
string $control = `LumberyardAnimationManagerGetRowControl $row $controlMapping`;
|
||||
if($control != "" && `intField -query -exists $control`)
|
||||
{
|
||||
$endFrame = `intField -query -value $control`;
|
||||
}
|
||||
return $endFrame;
|
||||
}
|
||||
|
||||
//! Get the value contained in the export name textField in an animation export rowLayout.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element containing the textField to query
|
||||
*/
|
||||
global proc string LumberyardAnimationManagerGetExportName(string $row)
|
||||
{
|
||||
string $exportName = "";
|
||||
int $controlMapping[] = {1, 2};
|
||||
string $control = `LumberyardAnimationManagerGetRowControl $row $controlMapping`;
|
||||
if($control != "" && `textField -query -exists $control`)
|
||||
{
|
||||
$exportName = `textField -query -text $control`;
|
||||
}
|
||||
return $exportName;
|
||||
}
|
||||
|
||||
//! Get the value contained in the root joint textField in an animation export rowLayout.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element containing the textField to query
|
||||
*/
|
||||
global proc string LumberyardAnimationManagerGetRootJoint(string $row)
|
||||
{
|
||||
string $rootJoint = "";
|
||||
int $controlMapping[] = {1, 3, 0};
|
||||
string $control = `LumberyardAnimationManagerGetRowControl $row $controlMapping`;
|
||||
if($control != "" && `textField -query -exists $control`)
|
||||
{
|
||||
$rootJoint = `textField -query -text $control`;
|
||||
}
|
||||
return $rootJoint;
|
||||
}
|
||||
|
||||
//! Get the value contained in the export path textField in an animation export rowLayout.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element containing the textField to query
|
||||
*/
|
||||
global proc string LumberyardAnimationManagerGetExportPath(string $row)
|
||||
{
|
||||
string $exportPath = "";
|
||||
int $controlMapping[] = {1, 5, 0};
|
||||
string $control = `LumberyardAnimationManagerGetRowControl $row $controlMapping`;
|
||||
if($control != "" && `textField -query -exists $control`)
|
||||
{
|
||||
$exportPath = `textField -query -text $control`;
|
||||
}
|
||||
return $exportPath;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Functions to transmit UI changes to the data backend
|
||||
|
||||
//! Transmit value contained in the start frame UI to the data backend.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element corresponding to the data to be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateStartFrame(string $row)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
int $startFrame = `LumberyardAnimationManagerGetStartFrame $row`;
|
||||
LumberyardUtilitiesSetAnimationStartFrame($managedNode, $startFrame);
|
||||
}
|
||||
|
||||
//! Transmit value contained in the end frame UI to the data backend.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element corresponding to the data to be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateEndFrame(string $row)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
int $endFrame = `LumberyardAnimationManagerGetEndFrame $row`;
|
||||
LumberyardUtilitiesSetAnimationEndFrame($managedNode, $endFrame);
|
||||
}
|
||||
|
||||
//! Transmit value contained in the export name UI to the data backend.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element corresponding to the data to be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateExportName(string $row)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
|
||||
string $newExportName = `LumberyardAnimationManagerGetExportName $row`;
|
||||
LumberyardUtilitiesSetAnimationExportName( $managedNode, $newExportName);
|
||||
}
|
||||
|
||||
//! Transmit value contained in the root joint UI to the data backend.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element corresponding to the data to be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateRootJoint(string $row)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
string $rootJoint = `LumberyardAnimationManagerGetRootJoint $row`;
|
||||
LumberyardUtilitiesSetAnimationRootJoint($managedNode, $rootJoint);
|
||||
}
|
||||
|
||||
//! Transmit value contained in the export path UI to the data backend.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element corresponding to the data to be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateExportPath(string $row)
|
||||
{
|
||||
string $exportPath = `LumberyardAnimationManagerGetExportPath $row`;
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
string $finalExportPath = `LumberyardUtilitiesSetAnimationExportPath $managedNode $exportPath`;
|
||||
if($exportPath != $finalExportPath)
|
||||
{
|
||||
int $controlMapping[] = {1, 5, 0};
|
||||
string $control = `LumberyardAnimationManagerGetRowControl $row $controlMapping`;
|
||||
textField -edit -text $finalExportPath $control;
|
||||
}
|
||||
}
|
||||
|
||||
//! Sets the animLayer selection in the data backend based on the current UI state.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element corresponding to the animation export data to update.
|
||||
\param $layerPullDown the frameLayout containing the UI data that will be transmitted.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateExportLayers(string $row, string $layerPullDown)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
string $children[] = `frameLayout -query -childArray $layerPullDown`;
|
||||
string $activeLayers[];
|
||||
|
||||
for($child in $children)
|
||||
{
|
||||
string $controls[] = `rowLayout -query -childArray $child`;
|
||||
int $checked = `checkBox -query -value $controls[0]`;
|
||||
if($checked)
|
||||
{
|
||||
string $layerName = `text -query -label $controls[1]`;
|
||||
$activeLayers[size($activeLayers)] = $layerName;
|
||||
}
|
||||
}
|
||||
|
||||
LumberyardUtilitiesSetAnimationExportLayers($managedNode, $activeLayers);
|
||||
LumberyardAnimationManagerSetLayerListTitle($row, $layerPullDown);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// UI Update calls for layout and default values
|
||||
|
||||
//! Identifies and stores the last export node rowLayout in the Animation Manager.
|
||||
/*!
|
||||
/note This stored value is used to poll for default values when creating new rows
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateLastRow()
|
||||
{
|
||||
global string $g_lastRow;
|
||||
|
||||
string $children[] = `columnLayout -query -childArray LUMBERYARDANIMATIONMANAGER_EXPORT_SCROLLLAYOUT`;
|
||||
|
||||
if (size($children) == 0)
|
||||
{
|
||||
$g_lastRow = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
$g_lastRow = $children[(size($children)) - 1];
|
||||
}
|
||||
}
|
||||
|
||||
//! Gets the default export path for newly added items in the Animation Manager.
|
||||
/*!
|
||||
\note
|
||||
The default path will be that of the last row in the Animation Manager. If there are no
|
||||
rows present in the Animation Manager, the path will default to the top level path for the engine
|
||||
installation. (i.e. the directory containing Bin64, Code, etc.)
|
||||
\todo
|
||||
Consider setting the default path based on the sys_game_folder in setup.cfg instead of the root
|
||||
engine path.
|
||||
*/
|
||||
proc string LumberyardAnimationManagerGetDefaultExportPath()
|
||||
{
|
||||
global string $g_lastRow;
|
||||
string $exportPath = "";
|
||||
|
||||
if($g_lastRow != "")
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $g_lastRow`;
|
||||
$exportPath = `LumberyardUtilitiesGetAnimationExportPath $managedNode`;
|
||||
}
|
||||
|
||||
// if this is the first time we create a row, start at the parent directory for the engine
|
||||
if ($exportPath == "")
|
||||
{
|
||||
$exportPath = eval("getenv \"LY_MAYA_PLUG_IN_PATH\"");
|
||||
// equivalent to ../../../
|
||||
for($i = 0; $i < 3; $i++)
|
||||
{
|
||||
$exportPath = `dirname $exportPath`;
|
||||
}
|
||||
$exportPath = `cryExportFixupPath $exportPath`;
|
||||
}
|
||||
|
||||
return $exportPath;
|
||||
}
|
||||
|
||||
//! Gets the default root joint for newly added items in the Animation Manager.
|
||||
/*!
|
||||
\note
|
||||
The default root joint will be that of the last row in the Animation Manager. If there are no
|
||||
rows present in the Animation Manager, the root joint will default to an empty string.
|
||||
\todo Consider using selection as default root joint if the first selected item is a joint.
|
||||
*/
|
||||
proc string LumberyardAnimationManagerGetDefaultRootJoint()
|
||||
{
|
||||
global string $g_lastRow;
|
||||
string $rootJoint = "";
|
||||
|
||||
if($g_lastRow != "")
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $g_lastRow`;
|
||||
$rootJoint = `LumberyardUtilitiesGetAnimationRootJoint $managedNode`;
|
||||
}
|
||||
|
||||
return $rootJoint;
|
||||
}
|
||||
|
||||
//! Calculates the correct UI heights based on the number of animation exports.
|
||||
/*!
|
||||
\note
|
||||
This is only called when first creating the Animation Manager. It is more expensive, and should only be used if you
|
||||
cannot calculate the size offset.
|
||||
\sa LumberyardAnimationManagerUpdateHeight()
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateHeight()
|
||||
{
|
||||
global int $g_heightPerRow;
|
||||
$childCount = `columnLayout -query -numberOfChildren LUMBERYARDANIMATIONMANAGER_EXPORT_SCROLLLAYOUT`;
|
||||
$newExportListHeight = ($childCount * $g_heightPerRow) + 1;
|
||||
// For the title and add rows
|
||||
$childCount = $childCount + 2;
|
||||
$newWindowHeight = ($childCount * $g_heightPerRow) + 2;
|
||||
LumberyardAnimationManagerResize $newExportListHeight $newWindowHeight;
|
||||
}
|
||||
|
||||
//! Get the selected animLayers for an animation export from the data backend.
|
||||
/*!
|
||||
\param $row The name of the rowLayout corresponding to the animation export to fetch the data for.
|
||||
*/
|
||||
proc string[] LumberyardAnimationManagerGetSelectedLayers(string $row)
|
||||
{
|
||||
string $managedNode = `rowLayout -query -annotation $row`;
|
||||
string $exportLayers[] = `LumberyardUtilitiesGetAnimationExportLayers $managedNode`;
|
||||
|
||||
return $exportLayers;
|
||||
}
|
||||
|
||||
//! Callback to keep the animLayer selections in the UI and data backend synchronized with Maya's animLayer state.
|
||||
/*!
|
||||
\note This callback occurs when an animLayer is renamed, moved, deleted, or added.
|
||||
\todo
|
||||
This currently forces a full UI redraw, which collapses any open animLayer frameLayouts. We should preserve expanded
|
||||
state for each row during UI rebuilds.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerUpdateLayers()
|
||||
{
|
||||
LumberyardUtilitiesUpdateAnimationLayers();
|
||||
LumberyardAnimationManagerReadExports();
|
||||
}
|
||||
|
||||
//! Updates the animLayer frameLayout title based on the number of animLayers selected for an animation export.
|
||||
/*!
|
||||
\param $row The name of the UI rowLayout corresponding to the animation export data to query.
|
||||
\param $layerPullDown The name of the UI frameLayout whose title should be updated.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerSetLayerListTitle(string $row, string $layerPullDown)
|
||||
{
|
||||
string $layers[];
|
||||
|
||||
$layers = `LumberyardAnimationManagerGetSelectedLayers $row`;
|
||||
int $count = size($layers);
|
||||
|
||||
string $newTitle = "Select Layers";
|
||||
if($count > 0)
|
||||
{
|
||||
$newTitle = "Selected "+$count;
|
||||
}
|
||||
|
||||
frameLayout -edit -label $newTitle $layerPullDown;
|
||||
}
|
||||
|
||||
//! Callback to fill the animLayer frameLayout when the user expands it.
|
||||
/*!
|
||||
\param $row The name of the rowLayout UI element corresponding to the animation export data to fetch.
|
||||
\param $layerPullDown The frameLayout UI element that will be populated.
|
||||
\note This will also handle adjusting UI heights to accommodate the number of animLayers displayed.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerExpandLayerList(string $row, string $layerPullDown)
|
||||
{
|
||||
global int $g_controlHeight;
|
||||
global int $g_heightPerRow;
|
||||
setParent $layerPullDown;
|
||||
|
||||
string $animLayers[] = `LumberyardUtilitiesGetAnimLayers`;
|
||||
int $layerCount = size($animLayers);
|
||||
// +1 to handle frameLayout title
|
||||
int $newHeight = $g_controlHeight * ($layerCount + 1);
|
||||
int $parentWidth = `frameLayout -query -width $layerPullDown`;
|
||||
if($layerCount == 0)
|
||||
{
|
||||
$newHeight = $g_controlHeight * 2;
|
||||
text -align "left" -label "<No Layers Found>" -width $parentWidth;
|
||||
}
|
||||
LumberyardAnimationManagerChangeHeight($newHeight - $g_controlHeight);
|
||||
frameLayout -edit -height $newHeight $layerPullDown;
|
||||
rowLayout -edit -height ($newHeight + $g_heightPerRow - $g_controlHeight) $row;
|
||||
|
||||
string $layers[] = `LumberyardAnimationManagerGetSelectedLayers $row`;
|
||||
|
||||
for($i = 0; $i < $layerCount; $i++)
|
||||
{
|
||||
int $enabled = ($animLayers[$i] != "BaseAnimation");
|
||||
int $value = `stringArrayContains $animLayers[$i] $layers`;
|
||||
rowLayout -height $g_controlHeight -width $parentWidth -numberOfColumns 2;
|
||||
checkBox -label "" -value $value -backgroundColor 0.5 0.5 0.5 -enable $enabled -enableBackground $enabled
|
||||
-changeCommand ("LumberyardAnimationManagerUpdateExportLayers " + $row + " " + $layerPullDown);
|
||||
text -align "left" -label $animLayers[$i] -width ($parentWidth - $g_controlHeight);
|
||||
setParent ..;
|
||||
}
|
||||
}
|
||||
|
||||
//! Callback used to adjust UI height when user collapses an animLayer frameLayout.
|
||||
/*
|
||||
\param $row The name of the rowLayout UI element whose animLayer pulldown is being collapsed
|
||||
\param $layerPullDown the name of the frameLayout UI element being collapsed
|
||||
*/
|
||||
global proc LumberyardAnimationManagerCollapseLayerList(string $row, string $layerPullDown)
|
||||
{
|
||||
global int $g_controlHeight;
|
||||
global int $g_heightPerRow;
|
||||
|
||||
int $currentRowHeight = `rowLayout -query -height $row`;
|
||||
int $heightDiff = $currentRowHeight - $g_heightPerRow;
|
||||
$heightDiff = 0 - $heightDiff;
|
||||
|
||||
string $children[] = `frameLayout -query -childArray $layerPullDown`;
|
||||
for($child in $children)
|
||||
{
|
||||
deleteUI $child;
|
||||
}
|
||||
|
||||
LumberyardAnimationManagerChangeHeight($heightDiff);
|
||||
rowLayout -edit -height $g_heightPerRow $row;
|
||||
frameLayout -edit -height $g_controlHeight $layerPullDown;
|
||||
}
|
||||
|
||||
//! Creates a new UI rowLayout in the Animation Manager corresponding to an animation export node.
|
||||
/*!
|
||||
\param $exportNode The name of the exportNode in the sceneName
|
||||
\note
|
||||
No guarantee is made about avoiding multiple rows referring to the same export node, so it is
|
||||
incumbent on the caller to ensure that this does not occur. The layout of the UI row is heavily
|
||||
integrated into several other UI components, so it will need to be updated if any new data is
|
||||
exposed to the Animation Manager. The row maintains a string reference to the name of the data
|
||||
node that it corresponds to in the annotation field. It is very important that these nodes are
|
||||
not renamed outside the tool flow, or the UI will not be able to fetch or manipulate data until
|
||||
a full UI rebuild.
|
||||
\sa LumberyardAnimationManagerCreateColumnTitles(), LumberyardAnimationManagerGetRowControl()
|
||||
*/
|
||||
global proc LumberyardAnimationManagerCreateUIRow(string $exportNode)
|
||||
{
|
||||
global int $g_controlHeight;
|
||||
global string $g_lastRow;
|
||||
global float $g_UIColor[];
|
||||
|
||||
if(!`LumberyardUtilitiesAnimationExportIsValid($exportNode)`)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int $startFrame = getAttr($exportNode+".startFrame");
|
||||
int $endFrame = getAttr($exportNode+".endFrame");
|
||||
string $exportName = getAttr($exportNode+".exportName");
|
||||
string $rootJoint = getAttr($exportNode+".rootJoint");
|
||||
string $exportPath = getAttr($exportNode+".exportPath");
|
||||
|
||||
setParent LUMBERYARDANIMATIONMANAGER_EXPORT_SCROLLLAYOUT;
|
||||
|
||||
$newRow = `rowLayout -numberOfColumns 3 -columnWidth3 35 805 35 -backgroundColor 0.26 0.26 0.26
|
||||
-columnAlign 1 "center" -columnAttach 1 "both" 0 -rowAttach 1 "top" 2
|
||||
-columnAlign 2 "center" -columnAttach 2 "both" 0 -rowAttach 2 "top" 0
|
||||
-columnAlign 3 "center" -columnAttach 3 "both" 0 -rowAttach 3 "top" 2 -annotation $exportNode`;
|
||||
|
||||
//Sets the start and end frame for an animation export to match the Maya timeline
|
||||
button -height $g_controlHeight -label "<>" -annotation "Sets the start and end frame for an animation export to match the Maya timeline." -backgroundColor $g_UIColor[0] $g_UIColor[1] $g_UIColor[2]
|
||||
-command ("LumberyardUtilitiesSnapAnimationToTimeline " + $exportNode);
|
||||
|
||||
// Main animation columns;
|
||||
rowLayout -numberOfColumns 6 -columnWidth6 35 35 150 150 150 350 -adjustableColumn 6 -backgroundColor 0.26 0.26 0.26
|
||||
-columnAlign 1 "center" -columnAttach 1 "both" 0 -rowAttach 1 "top" 0
|
||||
-columnAlign 2 "center" -columnAttach 2 "both" 0 -rowAttach 2 "top" 0
|
||||
-columnAlign 3 "center" -columnAttach 3 "both" 0 -rowAttach 3 "top" 0
|
||||
-columnAlign 4 "center" -columnAttach 4 "both" 0 -rowAttach 4 "top" 0
|
||||
-columnAlign 5 "center" -columnAttach 5 "both" 0 -rowAttach 5 "top" 3
|
||||
-columnAlign 6 "center" -columnAttach 6 "both" 0 -rowAttach 6 "top" 0;
|
||||
{
|
||||
// Start Frame
|
||||
string $startFrameControl = `intField -height $g_controlHeight -value $startFrame -backgroundColor 0 0 0 -changeCommand ("LumberyardAnimationManagerUpdateStartFrame " + $newRow)`;
|
||||
|
||||
// End Frame
|
||||
string $endFrameControl = `intField -height $g_controlHeight -value $endFrame -backgroundColor 0 0 0 -changeCommand ("LumberyardAnimationManagerUpdateEndFrame " + $newRow)`;
|
||||
|
||||
// Export Name
|
||||
string $exportNameControl = `textField -height $g_controlHeight -text $exportName -backgroundColor 0 0 0 -changeCommand ("LumberyardAnimationManagerUpdateExportName " + $newRow)`;
|
||||
|
||||
// Root Joint
|
||||
rowLayout -numberOfColumns 2 -columnWidth 128 $g_controlHeight -backgroundColor 0.26 0.26 0.26
|
||||
-columnAlign 1 "center" -columnAttach 1 "both" 0 -columnAlign 2 "center" -columnAttach 2 "both" 0;
|
||||
{
|
||||
string $rootJointControl = `textField -height $g_controlHeight -width 128 -text $rootJoint -backgroundColor 0 0 0 -changeCommand ("LumberyardAnimationManagerUpdateRootJoint " + $newRow)`;
|
||||
button -height $g_controlHeight -label "+" -backgroundColor $g_UIColor[0] $g_UIColor[1] $g_UIColor[2]
|
||||
-command ("LumberyardAnimationManagerGetRootJointFromSelection " + $newRow + " " + $rootJointControl);
|
||||
setParent ..;
|
||||
}
|
||||
|
||||
// Animation Layers
|
||||
$layerPullDown = `frameLayout -height $g_controlHeight -width 150 -collapsable true -collapse true`;
|
||||
frameLayout -edit -preExpandCommand ("LumberyardAnimationManagerExpandLayerList " + $newRow + " " + $layerPullDown) $layerPullDown;
|
||||
frameLayout -edit -preCollapseCommand ("LumberyardAnimationManagerCollapseLayerList " + $newRow + " " + $layerPullDown) $layerPullDown;
|
||||
LumberyardAnimationManagerSetLayerListTitle($newRow, $layerPullDown);
|
||||
setParent ..;
|
||||
|
||||
// Export Path
|
||||
rowLayout -numberOfColumns 2 -columnWidth 228 $g_controlHeight -backgroundColor 0.26 0.26 0.26
|
||||
-columnAlign 1 "center" -columnAttach 1 "both" 0 -columnAlign 2 "center" -columnAttach 2 "both" 0;
|
||||
{
|
||||
string $exportPathControl = `textField -height $g_controlHeight -width 248 -text $exportPath -backgroundColor 0 0 0 -changeCommand ("LumberyardAnimationManagerUpdateExportPath " + $newRow)`;
|
||||
iconTextButton -image "icons/lumberyard_folder_icon.png" -height $g_controlHeight -width 20 -backgroundColor $g_UIColor[0] $g_UIColor[1] $g_UIColor[2]
|
||||
-command ("LumberyardAnimationManagerFolderBrowser " + $newRow + " " + $exportPathControl);
|
||||
setParent ..;
|
||||
}
|
||||
setParent ..;
|
||||
}
|
||||
|
||||
button -height $g_controlHeight -label "X" -backgroundColor $g_UIColor[0] $g_UIColor[1] $g_UIColor[2]
|
||||
-command ("LumberyardAnimationManagerRemoveItem " + $newRow);
|
||||
$g_lastRow = $newRow;
|
||||
}
|
||||
|
||||
//! Creates all required elements when a new animation export is requested.
|
||||
/*!
|
||||
\note
|
||||
Determines the default values for a new node, creates it in the data backend,
|
||||
and generates the UI elements for it.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerAddNewItem()
|
||||
{
|
||||
int $startFrame = `playbackOptions -query -minTime`;
|
||||
int $endFrame = `playbackOptions -query -maxTime`;
|
||||
string $exportName = `LumberyardUtilitiesGetUniqueAnimationName ""`;
|
||||
string $rootJoint = `LumberyardAnimationManagerGetDefaultRootJoint`;
|
||||
string $exportPath = `LumberyardAnimationManagerGetDefaultExportPath`;
|
||||
string $exportLayers[] = `LumberyardUtilitiesGetAnimLayers`;
|
||||
|
||||
LumberyardUtilitiesCreateAnimationExport($startFrame, $endFrame, $exportName, $rootJoint, $exportPath, $exportLayers);
|
||||
|
||||
LumberyardUtilitiesUpdateAnimationUI();
|
||||
}
|
||||
|
||||
//! Creates the + button in the lower right of the Animation Manager which will generate new animation exports when clicked
|
||||
global proc LumberyardAnimationManagerCreateAddButton()
|
||||
{
|
||||
global int $g_controlHeight;
|
||||
global float $g_UIColor[];
|
||||
|
||||
if(`rowLayout -exists LUMBERYARDANIMATIONMANAGER_ADDITEM_ROW`)
|
||||
{
|
||||
deleteUI LUMBERYARDANIMATIONMANAGER_ADDITEM_ROW;
|
||||
}
|
||||
setParent LUMBERYARDANIMATIONMANAGER_MAINLAYOUT;
|
||||
|
||||
rowLayout -numberOfColumns 3 -columnWidth3 35 806 35 -backgroundColor 0.26 0.26 0.26
|
||||
-columnAlign 1 "center" -columnAttach 1 "both" 0 - columnAlign 2 "center" -columnAttach 2 "both" 0
|
||||
-columnAlign 3 "center" -columnAttach 3 "both" 0 LUMBERYARDANIMATIONMANAGER_ADDITEM_ROW;
|
||||
{
|
||||
text -height $g_controlHeight -label "";
|
||||
text -height $g_controlHeight -label "";
|
||||
button -height $g_controlHeight -backgroundColor $g_UIColor[0] $g_UIColor[1] $g_UIColor[2] -label "+" -command ("LumberyardAnimationManagerAddNewItem");
|
||||
}
|
||||
}
|
||||
|
||||
//! Rebuilds the animation export list in the Animation Manager based on the current state of the data backend
|
||||
/*!
|
||||
\todo
|
||||
Move the querying of children of LUMBERYARD_ANIMATIONEXPORT_GROUP to LumberyardUtilities for proper data/UI
|
||||
separation.
|
||||
*/
|
||||
global proc LumberyardAnimationManagerReadExports()
|
||||
{
|
||||
global string $g_lastRow;
|
||||
$g_lastRow = "";
|
||||
|
||||
string $children[] = `columnLayout -query -childArray LUMBERYARDANIMATIONMANAGER_EXPORT_SCROLLLAYOUT`;
|
||||
for ($child in $children)
|
||||
{
|
||||
deleteUI $child;
|
||||
}
|
||||
|
||||
if(!`objExists "LUMBERYARD_ANIMATIONEXPORT_GROUP"`)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string $exportNodes[] = `listRelatives -children "LUMBERYARD_ANIMATIONEXPORT_GROUP"`;
|
||||
|
||||
for($exportNode in $exportNodes)
|
||||
{
|
||||
LumberyardAnimationManagerCreateUIRow($exportNode);
|
||||
}
|
||||
|
||||
LumberyardAnimationManagerUpdateHeight();
|
||||
LumberyardAnimationManagerUpdateLastRow();
|
||||
}
|
||||
|
||||
//! Creates the Animation Manager window and calls the necessary functions to populate it.
|
||||
global proc LumberyardAnimationManagerCreateWindow()
|
||||
{
|
||||
if(!`window -exists LUMBERYARDANIMATIONMANAGER_WINDOW`)
|
||||
{
|
||||
if(`windowPref -exists LUMBERYARDANIMATIONMANAGER_WINDOW`)
|
||||
{
|
||||
windowPref -widthHeight 905 65
|
||||
-topLeftCorner `windowPref -query -topEdge LUMBERYARDANIMATIONMANAGER_WINDOW` `windowPref -query -leftEdge LUMBERYARDANIMATIONMANAGER_WINDOW` LUMBERYARDANIMATIONMANAGER_WINDOW;
|
||||
}
|
||||
//Picked 900 so that the Animation Manager UI is long enough to fit the information for a typical 1920 x 1080 monitor. For 4K, the user can stretch the UI.
|
||||
window -titleBar true -title "Lumberyard Animation Manager" -widthHeight 905 65
|
||||
-sizeable true -minimizeButton false -maximizeButton false LUMBERYARDANIMATIONMANAGER_WINDOW;
|
||||
|
||||
columnLayout -adjustableColumn true -height 65 -backgroundColor 0.26 0.26 0.26 LUMBERYARDANIMATIONMANAGER_MAINLAYOUT;
|
||||
{
|
||||
// Title Bar
|
||||
LumberyardAnimationManagerCreateColumnTitles();
|
||||
setParent LUMBERYARDANIMATIONMANAGER_MAINLAYOUT;
|
||||
columnLayout -height 1 -backgroundColor 0.26 0.26 0.26 LUMBERYARDANIMATIONMANAGER_EXPORT_SCROLLLAYOUT;
|
||||
setParent LUMBERYARDANIMATIONMANAGER_MAINLAYOUT;
|
||||
LumberyardAnimationManagerCreateAddButton();
|
||||
}
|
||||
}
|
||||
|
||||
scriptJob -event "NewSceneOpened" "LumberyardAnimationManagerReadExports" -parent "LUMBERYARDANIMATIONMANAGER_WINDOW";
|
||||
scriptJob -event "PostSceneRead" "LumberyardAnimationManagerReadExports" -parent "LUMBERYARDANIMATIONMANAGER_WINDOW";
|
||||
scriptJob -event "animLayerRebuild" "LumberyardAnimationManagerUpdateLayers" -parent "LUMBERYARDANIMATIONMANAGER_WINDOW";
|
||||
|
||||
LumberyardUtilitiesUpdateAnimationLayers();
|
||||
LumberyardAnimationManagerReadExports();
|
||||
|
||||
showWindow LUMBERYARDANIMATIONMANAGER_WINDOW;
|
||||
}
|
||||
Reference in New Issue
Block a user