269 lines
9.2 KiB
Plaintext
Executable File
269 lines
9.2 KiB
Plaintext
Executable File
FileIn "StatedAnim.ms"
|
|
CSharp.CompileToMemory #(RsConfigGetWildWestDir() + "script/3dsMax/VFX/StatedAnim.cs")
|
|
|
|
if( StatedAnimUI != Undefined ) then StatedAnimUI.Close()
|
|
/*---------------------------------------------------
|
|
UI Definition
|
|
*/---------------------------------------------------
|
|
StatedAnimUI = WPF.ReadXamlFile (RsConfigGetWildWestDir() + "script/3dsMax/UI/StatedAnimTool.xaml")
|
|
StatedAnimUI_Combo_Selected = WPF.GetElement StatedAnimUI "Combo_Selected"
|
|
StatedAnimUI_Button_Create = WPF.GetElement StatedAnimUI "Button_Create"
|
|
StatedAnimUI_Label_Count = WPF.GetElement StatedAnimUI "Label_Count"
|
|
StatedAnimUI_Progress_Create = WPF.GetElement StatedAnimUI "Progress_Create"
|
|
StatedAnimUI_Label_Progress_Status = WPF.GetElement StatedAnimUI "Label_Progress_Status"
|
|
StatedAnimUI_Label_EstimatedTime = WPF.GetElement StatedAnimUI "Label_EstimatedTime"
|
|
StatedAnimUI_Combo_SelectedStatedAnim = WPF.GetElement StatedAnimUI "Combo_SelectedStatedAnim"
|
|
StatedAnimUI_ListBox_GroupMembers = WPF.GetElement StatedAnimUI "ListBox_GroupMembers"
|
|
StatedAnimUI_Button_Add_State = WPF.GetElement StatedAnimUI "Button_Add_State"
|
|
StatedAnimUI_Button_Remove_State = WPF.GetElement StatedAnimUI "Button_Remove_State"
|
|
StatedAnimUI_Combo_Add_State_Type = WPF.GetElement StatedAnimUI "Combo_Add_State_Type"
|
|
StatedAnimUI_Button_Create_Proxy = WPF.GetElement StatedAnimUI "Button_Create_Proxy"
|
|
|
|
StatedAnimUI.Show()
|
|
|
|
--Register the window with max
|
|
WindowInterOp = DotNetObject "System.Windows.Interop.WindowInteropHelper" StatedAnimUI
|
|
MaxHandle = Windows.GetMAXHWND()
|
|
IntPtr = DotNetObject "System.IntPtr" MaxHandle
|
|
WindowInterOp.Owner = IntPtr
|
|
|
|
NETTimespan = DotNetClass "System.Timespan"
|
|
StatedAnimObjectList = DotNetObject "StatedAnim.StatedAnimObjectList"
|
|
|
|
/*---------------------------------------------------
|
|
Event handlers
|
|
*/---------------------------------------------------
|
|
fn PopulateValidSelectionSets =
|
|
(
|
|
ValidSelectionSetArray = StatedAnimCore.GetValidSelectionSetArray()
|
|
StatedAnimUI_Combo_Selected.Items.Clear()
|
|
for SelectionSet in ValidSelectionSetArray do
|
|
(
|
|
StatedAnimUI_Combo_Selected.Items.Add SelectionSet.Name
|
|
)
|
|
)
|
|
|
|
fn PopulateValidStatedAnimGroups =
|
|
(
|
|
StatedAnimGroupArray = StatedAnimCore.GetGroupArray()
|
|
|
|
StatedAnimUI_Combo_SelectedStatedAnim.Items.Clear()
|
|
|
|
for StatedAnimGroup in StatedAnimGroupArray do
|
|
StatedAnimUI_Combo_SelectedStatedAnim.Items.Add(StatedAnimGroup)
|
|
)
|
|
|
|
fn SSetSelectionChanged =
|
|
(
|
|
if(StatedAnimUI_Combo_Selected.Items.Count > 0) then
|
|
(
|
|
TargetSelectionSetName = StatedAnimUI_Combo_Selected.SelectedItem
|
|
TargetObjectArray = StatedAnimCore.GetTargetObjectArray TargetSelectionSetName
|
|
StatedAnimUI_Label_Count.Content = TargetObjectArray.Count
|
|
EstimatedTime = NETTimespan.FromMilliseconds( TargetObjectArray.Count * 430 )
|
|
StatedAnimUI_Label_EstimatedTime.Content = EstimatedTime.ToString @"mm\:ss"
|
|
StatedAnimUI_Button_Create.IsEnabled = True
|
|
StatedAnimUI_Progress_Create.Value = 0
|
|
StatedAnimUI_Label_Progress_Status.Content = ""
|
|
)
|
|
else
|
|
(
|
|
StatedAnimUI_Label_EstimatedTime.Content = "N/A"
|
|
StatedAnimUI_Label_Count.Content = "N/A"
|
|
StatedAnimUI_Button_Create.IsEnabled = False
|
|
StatedAnimUI_Progress_Create.Value = 0
|
|
StatedAnimUI_Label_Progress_Status.Content = ""
|
|
)
|
|
)
|
|
|
|
fn SelectedStatedAnimChanged =
|
|
(
|
|
StatedAnimObjectList.Clear()
|
|
SelectedGroupName = StatedAnimUI_Combo_SelectedStatedAnim.SelectedItem
|
|
GroupObjectArray = StatedAnimCore.GetGroupObjectArray SelectedGroupName
|
|
|
|
if GroupObjectArray.Count > 0 then
|
|
(
|
|
StatedAnimUI_ListBox_GroupMembers.Visibility = (DotNetClass "System.Windows.Visibility").Visible
|
|
|
|
for GroupObject in GroupObjectArray do
|
|
(
|
|
State = StatedAnimCore.GetState GroupObject
|
|
NewStatedAnimObject = DotNetObject "StatedAnim.StatedAnimObject" GroupObject.Name State GroupObject.Handle
|
|
StatedAnimObjectList.AddRegister( NewStatedAnimObject )
|
|
)
|
|
--StatedAnimObjectList.SortObjects()
|
|
StatedAnimUI_ListBox_GroupMembers.ItemsSource = StatedAnimObjectList
|
|
StatedAnimUI_Button_Add_State.IsEnabled = True
|
|
StatedAnimUI_Button_Remove_State.IsEnabled = True
|
|
StatedAnimUI_Button_Create_Proxy.IsEnabled = True
|
|
)
|
|
else
|
|
(
|
|
StatedAnimUI_ListBox_GroupMembers.Visibility = (DotNetClass "System.Windows.Visibility").Collapsed
|
|
StatedAnimUI_Button_Add_State.IsEnabled = False
|
|
StatedAnimUI_Button_Remove_State.IsEnabled = False
|
|
StatedAnimUI_Button_Create_Proxy.IsEnabled = False
|
|
)
|
|
|
|
)
|
|
|
|
fn ChangeState s e =
|
|
(
|
|
TargetNode = MaxOps.GetNodeByHandle s.NodeHandle
|
|
StatedAnimCore.SetState TargetNode s.State
|
|
)
|
|
|
|
fn ChangeGroup s e =
|
|
(
|
|
if( e.NewItems != Undefined ) then
|
|
(
|
|
for i = 1 to e.NewItems.Count do
|
|
(
|
|
NewItem = e.NewItems.Item(i-1)
|
|
|
|
TargetNode = MaxOps.GetNodeByHandle NewItem.NodeHandle
|
|
StatedAnimCore.SetState TargetNode NewItem.State
|
|
|
|
TargetGroup = StatedAnimUI_Combo_SelectedStatedAnim.SelectedItem
|
|
StatedAnimCore.SetGroup TargetNode TargetGroup
|
|
)
|
|
)
|
|
|
|
if( e.OldItems != Undefined ) then
|
|
(
|
|
for i = 1 to e.OldItems.Count do
|
|
(
|
|
OldItem = e.OldItems.Item(i-1)
|
|
|
|
TargetNode = MaxOps.GetNodeByHandle OldItem.NodeHandle
|
|
StatedAnimCore.SetState TargetNode "None"
|
|
StatedAnimCore.SetGroup TargetNode "DEFAULT"
|
|
)
|
|
)
|
|
)
|
|
|
|
fn PostProgress ProgressValue StatusString =
|
|
(
|
|
StatedAnimUI_Progress_Create.Value = ProgressValue
|
|
StatedAnimUI_Label_Progress_Status.Content = StatusString
|
|
DisplayTempPrompt StatusString 1000
|
|
ProgressUpdate ProgressValue
|
|
)
|
|
|
|
fn CreateStatedAnim =
|
|
(
|
|
if not( QueryBox "This operation will leave nothing in your scene except an exportable stated anim. It is advisable to save any changes to your WIP scene first. Continue?" ) then ( return() )
|
|
|
|
ProgressStart "Starting...."
|
|
ProgressEnd()
|
|
|
|
TargetSelectionSetName = StatedAnimUI_Combo_Selected.SelectedItem
|
|
StatedAnimCore.CreateStatedAnim SelectionSets[TargetSelectionSetName] PostProgress
|
|
)
|
|
|
|
fn IsValidForPick Obj =
|
|
(
|
|
if( StatedAnimObjectList.HandleExists Obj.Handle ) then return false
|
|
|
|
if( Obj.Parent != Undefined ) then return false
|
|
|
|
case ( ClassOf Obj ) of
|
|
(
|
|
Editable_Poly: return True
|
|
Editable_Mesh: return True
|
|
PolyMeshObject: return True
|
|
)
|
|
|
|
return false
|
|
)
|
|
fn AddStateClicked =
|
|
(
|
|
TypeToAdd = StatedAnimUI_Combo_Add_State_Type.SelectedValue
|
|
ObjectsToAdd = Undefined
|
|
State = "Animation"
|
|
|
|
case TypeToAdd of
|
|
(
|
|
"Animation":
|
|
(
|
|
ObjectsToAdd = SelectByName Title:"Add animation objects..." Filter:IsValidForPick ShowHidden:True
|
|
State = "Animation"
|
|
)
|
|
"IMAP Start":
|
|
(
|
|
IMAPName = StatedAnimUI_Combo_SelectedStatedAnim.SelectedItem + "_START"
|
|
IMAPGroupName = StatedAnimUI_Combo_SelectedStatedAnim.SelectedItem + "_IMAP_START"
|
|
ObjectsToAdd = #( StatedAnimIPLDummy Name:IMAPGroupName IMAPName:IMAPName)
|
|
State = "Start"
|
|
)
|
|
"IMAP End":
|
|
(
|
|
IMAPName = StatedAnimUI_Combo_SelectedStatedAnim.SelectedItem + "_END"
|
|
IMAPGroupName = StatedAnimUI_Combo_SelectedStatedAnim.SelectedItem + "_IMAP_END"
|
|
ObjectsToAdd = #( StatedAnimIPLDummy Name:IMAPGroupName IMAPName:IMAPName )
|
|
State = "End"
|
|
)
|
|
"Mesh Start":
|
|
(
|
|
ObjectsToAdd = SelectByName Title:"Add mesh start states..." Filter:IsValidForPick ShowHidden:True
|
|
State = "Start"
|
|
)
|
|
"Mesh End":
|
|
(
|
|
ObjectsToAdd = SelectByName Title:"Add mesh start states..." Filter:IsValidForPick ShowHidden:True
|
|
State = "End"
|
|
)
|
|
)
|
|
|
|
if( ObjectsToAdd != Undefined) then
|
|
(
|
|
for Obj in ObjectsToAdd do
|
|
(
|
|
NewStatedAnimObject = DotNetObject "StatedAnim.StatedAnimObject" Obj.Name State Obj.Handle
|
|
StatedAnimObjectList.AddRegister( NewStatedAnimObject )
|
|
)
|
|
)
|
|
|
|
)
|
|
fn RemoveStateClicked =
|
|
(
|
|
ToRemove = StatedAnimUI_ListBox_GroupMembers.SelectedItem
|
|
|
|
if( ToRemove != Undefined ) then
|
|
(
|
|
StatedAnimObjectList.Remove ToRemove
|
|
)
|
|
)
|
|
fn ListDoubleClick =
|
|
(
|
|
Selected = StatedAnimUI_ListBox_GroupMembers.SelectedItem
|
|
if(Selected != Undefined) then
|
|
(
|
|
TargetNode = MaxOps.GetNodeByHandle Selected.NodeHandle
|
|
ClearSelection()
|
|
Select TargetNode
|
|
)
|
|
)
|
|
fn CreateProxy =
|
|
(
|
|
SelectedStatedAnim = StatedAnimUI_Combo_SelectedStatedAnim.SelectedItem
|
|
StatedAnimCore.CreateProxy SelectedStatedAnim
|
|
)
|
|
/*---------------------------------------------------
|
|
Register handlers
|
|
*/---------------------------------------------------
|
|
DotNet.AddEventHandler StatedAnimUI_Combo_SelectedStatedAnim "DropDownOpened" PopulateValidStatedAnimGroups
|
|
DotNet.AddEventHandler StatedAnimUI_Combo_SelectedStatedAnim "SelectionChanged" SelectedStatedAnimChanged
|
|
DotNet.AddEventHandler StatedAnimUI_Combo_Selected "DropDownOpened" PopulateValidSelectionSets
|
|
DotNet.AddEventHandler StatedAnimUI_Combo_Selected "SelectionChanged" SSetSelectionChanged
|
|
DotNet.AddEventHandler StatedAnimUI_Button_Create "Click" CreateStatedAnim
|
|
DotNet.AddEventHandler StatedAnimUI_Button_Add_State "Click" AddStateClicked
|
|
DotNet.AddEventHandler StatedAnimUI_Button_Remove_State "Click" RemoveStateClicked
|
|
DotNet.AddEventHandler StatedAnimUI_Button_Create_Proxy "Click" CreateProxy
|
|
DotNet.AddEventHandler StatedAnimUI_ListBox_GroupMembers "MouseDoubleClick" ListDoubleClick
|
|
DotNet.AddEventHandler StatedAnimObjectList "ContentChanged" ChangeState
|
|
DotNet.AddEventHandler StatedAnimObjectList "CollectionChanged" ChangeGroup
|
|
|
|
|