Files
gtav-src/tools_ng/wildwest/script/3dsMax/VFX/StatedAnimTool.ms
T
2025-09-29 00:52:08 +02:00

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