魔法のメモ

CG N GAME BLOG

Python_18.RED_サンプル

f:id:heroroom:20210721183958p:plain

# -*- coding: utf-8 -*-
import engine.cmds as cmds
import engine.wpf as wpf

class VFX:



#ウィンドウ
    def makeWindow(self):
        self.win = wpf.createElement('Window')
        self.win.Width = 390
        self.win.Height = 600
        self.win.Title = 'VFX'
        self.win.Background = 'Gray'
        self.grid = wpf.createElement('Grid', self.win)
        self.stackPanel = wpf.createElement('StackPanel', self.grid)



#ラベルB│AssetBrowser
    def makeLabelB(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = 'AssetBrowser'


#ボタンA│AssetBrowser:EFD
    def onBtnA(self, sender, arg):
        print "AssetBrowser:EFDを選択しました。"
        if cmds.isKeyDown( 'ControlKey' ):
            print 'Control Down'
        else:
            assetA = cmds.findAsset( 'assets:/VFX/EffectEditor/EFD_Character/__folder.folder.json' )
            cmds.setActiveAsset( assetA )
            assetA = cmds.getActiveAsset();
            print assetA 
    def makeButtonA(self):
        self.button = wpf.createElement('Button', self.stackPanel)
        self.button.Content = '☆AssetBrowser:EFD'
        self.button.Click += self.onBtnA



#ボタンB│AssetBrowser:MasterScene
    def onBtnB(self, sender, arg):
        print "AssetBrowser:MasterSceneを選択しました。"
        if cmds.isKeyDown( 'ControlKey' ):
            print 'Control Down'
        else:
            assetB = cmds.findAsset( 'assets:/AppSystem/Scene/Authoring/Master.scn.json' )
            cmds.setActiveAsset( assetB )
            assetB = cmds.getActiveAsset();
            print assetB 
    def makeButtonB(self):
        self.button = wpf.createElement('Button', self.stackPanel)
        self.button.Content = '☆AssetBrowser:MasterScene'
        self.button.Click += self.onBtnB



#ボタンC│AssetBrowser:Loc11
    def onBtnC(self, sender, arg):
        print "AssetBrowser:Loc11を選択しました。"
        if cmds.isKeyDown( 'ControlKey' ):
            print 'Control Down'
        else:
            assetC = cmds.findAsset( 'assets:/Develop/Scene/Location/loc11/DevelopLoc11/DevelopLoc11.scn.json' )
            cmds.setActiveAsset( assetC )
            assetC = cmds.getActiveAsset();
            print assetC 
    def makeButtonC(self):
        self.button = wpf.createElement('Button', self.stackPanel)
        self.button.Content = '☆AssetBrowser:Loc11'
        self.button.Click += self.onBtnC



#ボタンF│AssetBrowser:Loc03
    def onBtnF(self, sender, arg):
        print "AssetBrowser:Loc03を選択しました。"
        if cmds.isKeyDown( 'ControlKey' ):
            print 'Control Down'
        else:
            assetF = cmds.findAsset( 'assets:/Develop/Scene/Location/loc03/DevelopLoc03/DevelopLoc03.scn.json' )
            cmds.setActiveAsset( assetF )
            assetF = cmds.getActiveAsset();
            print assetF 
    def makeButtonF(self):
        self.button = wpf.createElement('Button', self.stackPanel)
        self.button.Content = '☆AssetBrowser:Loc03'
        self.button.Click += self.onBtnF
        #self.textBlockmakeButtonF = wpf.createElement('TextBlock', self.stackPanel)




#ラベルC│その他
    def makeLabelC(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = '\nその他'


#ボタンD│Switch:EffectIconWidget
    def onBtnD(self, sender, arg):
        print "EffectIconWidgetのオン/オフ切り換え"
        if cmds.isKeyDown( 'ControlKey' ):
            print 'Control Down'
        else:
           # EffectIconWidgetのon/offを切り替えます
           list = cmds.getMainViewWidgets()
           for widget in list:
               if widget.Name == 'EffectIconWidget':
                   widget.Enable = not(widget.Enable);
                   cmds.trySync(widget);
               # end if
           # end for 
    def makeButtonD(self):
        self.button = wpf.createElement('Button', self.stackPanel)
        self.button.Content = 'Switch:EffectIconWidget'
        self.button.Click += self.onBtnD



#ボタンH│VerifyResource
    def onBtnH(self, sender, arg):
        print "AssetBrowser:Assetsを選択しました。"
        if cmds.isKeyDown( 'ControlKey' ):
            print 'Control Down'
        else:
            #AssetBrowser:Assetsを選択
            findAssetFolder = cmds.findAssetFolder( 'assets:/' )
            cmds.setActiveAssetFolder( findAssetFolder )
            #VerifyResource
            getActiveAssetFolder = cmds.getActiveAssetFolder()
            goodAssetList = cmds.getChildAssets( getActiveAssetFolder )
            badAssetList = cmds.verifyAsset( goodAssetList )
            print ( 'goodAssetList' )
            print goodassetList
            print ( 'badAssetList' )
            print badAssetList      
    def makeButtonH(self):
        self.button = wpf.createElement('Button', self.stackPanel)
        self.button.Content = 'VerifyResource'
        self.button.Click += self.onBtnH
        #self.textBlockmakeButtonH = wpf.createElement('TextBlock', self.stackPanel)



#ラベルD│EFD作成ツール
    def makeLabelD(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = '\nEFD作成ツール\nEFD名 設定↓'




#コンボボックスA│ch,cs,sm,st,tb,wpから選択
    def makeComboBoxA(self):
        self.ComboBoxA = wpf.createElement('ComboBox', self.stackPanel)
        self.ComboBoxA.ItemsSource = ['ch', 'cs', 'sm', 'st', 'tb', 'wp']
        self.ComboBoxA.SelectionChanged += self. onSelectionChanged
        #self.makeResultUI()
        self.ComboBoxA.SelectedIndex = 0
    def makeResultUI(self):
        self.textBlockmakeComboBoxA = wpf.createElement('TextBlock', self.stackPanel)
#コンボボックスA│押された時
    def onSelectionChanged(self, sender, e):
        self.selectedIndex = sender.SelectedIndex
        self.selectedValue = sender.SelectedValue
        self.updateText()
        
    def updateText(self):
        self.textBlockmakeComboBoxA.Text = '' + str(self.selectedValue) + ''
        
    def isEnabled(self, sender, e):
        if self.checkBox.IsChecked == True:
            self.ComboBoxA.IsEnabled = True
        else:
            self.ComboBoxA.IsEnabled = False



#テキストボックスA│大項目│ID│'0100_004_01'
    def makeTextBoxA(self):
        self.textBoxA = wpf.createElement('TextBox', self.stackPanel)
        self.textBoxA.Text=  '0100'
        self.textBoxA.ToolTip = 'ID'
        # Keyが押された時のEventを追加
        self.textBoxA.KeyDown += self.onKeyDownA
        # Focusが外れた時のEventを追加
        self.textBoxA.LostFocus += self.onLostFocusA
#ラベルA                                  ※未使用かも
    def makeTextBlockA(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = '↓入力後にEnterキー'
        
        self.textBlock = wpf.createElement('TextBlock', self.stackPanel)
#テキストボックスA│押された時
    def onKeyDownA(self, sender, e):
        # Enterが押された時のみ
        if str(e.Key) == 'Return':
            self.textBlock.Text = sender.Text
    def onLostFocusA(self, sender, e):
        self.textBlock.Text = self.textBox.Text




#テキストボックスB│中項目'Berk(_attack1)'
    def makeTextBoxB(self):
        self.textBoxB = wpf.createElement('TextBox', self.stackPanel)
        self.textBoxB.Text=  'Berserker'
        self.textBoxB.ToolTip = '中項目 Berk(_attack1)など詳細を機材'
        # Keyが押された時のEventを追加
        self.textBoxB.KeyDown += self.onKeyDownB
        # Focusが外れた時のEventを追加
        self.textBoxB.LostFocus += self.onLostFocusB
#ラベルB
    def makeTextBlockB(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = '↓入力後にEnterキー'
        
        self.textBlock = wpf.createElement('TextBlock', self.stackPanel)
#テキストボックスB│押された時
    def onKeyDownB(self, sender, e):
        # Enterが押された時のみ
        if str(e.Key) == 'Return':
            self.textBlock.Text = sender.Text
    def onLostFocusB(self, sender, e):
        self.textBlock.Text = self.textBox.Text
        
        



#テキストボックスC│小項目'00'
    def makeTextBoxC(self):
        self.textBoxC = wpf.createElement('TextBox', self.stackPanel)
        self.textBoxC.Text=  '00'
        self.textBoxC.ToolTip = '小項目'
        # Keyが押された時のEventを追加
        self.textBoxC.KeyDown += self.onKeyDownC
        # Focusが外れた時のEventを追加
        self.textBoxC.LostFocus += self.onLostFocusC
#ラベルC
    def makeTextBlockC(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = '↓入力後にEnterキー'
        
        self.textBlock = wpf.createElement('TextBlock', self.stackPanel)
#テキストボックスC│押された時
    def onKeyDownC(self, sender, e):
        # Enterが押された時のみ
        if str(e.Key) == 'Return':
            self.textBlock.Text = sender.Text
    def onLostFocusC(self, sender, e):
        self.textBlock.Text = self.textBox.Text

#ラベルF│エイリアス
    def makeLabelF(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = 'エイリアス名 設定↓'


#コンボボックスB│PL,EM,NPC,汎用,イベント,プロップ,背景から選択
    def makeComboBoxB(self):
        self.ComboBoxB = wpf.createElement('ComboBox', self.stackPanel)
        self.ComboBoxB.ItemsSource = ['PL', 'EM', 'NPC', '汎用', 'イベント', 'プロップ', '背景']
        self.ComboBoxB.SelectionChanged += self. onSelectionChanged
        #self.makeResultUI()
        self.ComboBoxB.SelectedIndex = 0
    def makeResultUI(self):
        self.textBlockmakeComboBoxB = wpf.createElement('TextBlock', self.stackPanel)
#コンボボックスB│押された時
    def onSelectionChanged(self, sender, e):
        self.selectedIndex = sender.SelectedIndex
        self.selectedValue = sender.SelectedValue
        self.updateText()
        
    def updateText(self):
        self.textBlockmakeComboBoxB.Text = '' + str(self.selectedValue) + ''
        
    def isEnabled(self, sender, e):
        if self.checkBox.IsChecked == True:
            self.ComboBoxB.IsEnabled = True
        else:
            self.ComboBoxB.IsEnabled = False


#テキストボックスD│大項目│'神など固有名詞を入力'
    def makeTextBoxD(self):
        self.textBoxD = wpf.createElement('TextBox', self.stackPanel)
        self.textBoxD.Text=  '侍'
        self.textBoxD.ToolTip = '神など固有名詞を入力'
        # Keyが押された時のEventを追加
        self.textBoxD.KeyDown += self.onKeyDownD
        # Focusが外れた時のEventを追加
        self.textBoxD.LostFocus += self.onLostFocusD
#ラベルD                                 
    def makeTextBlockD(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = '↓入力後にEnterキー'
        
        self.textBlock = wpf.createElement('TextBlock', self.stackPanel)
#テキストボックスD│押された時
    def onKeyDownD(self, sender, e):
        # Enterが押された時のみ
        if str(e.Key) == 'Return':
            self.textBlock.Text = sender.Text
    def onLostFocusD(self, sender, e):
        self.textBlock.Text = self.textBox.Text



#テキストボックスE│中項目│'常駐、Attack0、≪PS1.2≫など詳細を入力'
    def makeTextBoxE(self):
        self.textBoxE = wpf.createElement('TextBox', self.stackPanel)
        self.textBoxE.Text=  '常駐 ≪PS1.2≫'
        self.textBoxE.ToolTip = '常駐、Attack0、≪PS1.2≫など詳細を入力'
        # Keyが押された時のEventを追加
        self.textBoxE.KeyDown += self.onKeyDownE
        # Focusが外れた時のEventを追加
        self.textBoxE.LostFocus += self.onLostFocusE
#ラベルE                                 
    def makeTextBlockD(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = '↓入力後にEnterキー'
        
        self.textBlock = wpf.createElement('TextBlock', self.stackPanel)
#テキストボックスE│押された時
    def onKeyDownE(self, sender, e):
        # Enterが押された時のみ
        if str(e.Key) == 'Return':
            self.textBlock.Text = sender.Text
    def onLostFocusE(self, sender, e):
        self.textBlock.Text = self.textBox.Text



#ラベルE│作成されるEFDの名前
    def makeLabelE(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = ('\n例:'+'EFD_0016_'+self.ComboBoxA.SelectedItem+'_'+self.textBoxA.Text+'_'+self.textBoxB.Text+'_'+self.textBoxC.Text)



#ラベルG│作成されるEFDの名前
    def makeLabelG(self):
        self.comment =  wpf.createElement('TextBlock', self.stackPanel)
        self.comment.Text = ('例:'+'【'+self.ComboBoxB.SelectedItem+'】'+'〈侍〉'+'常駐 ≪PS1.2≫\n※選択中のアセットフォルダにEFDが作成されます。')




#ボタンG│Create:EFD
    def onBtnG(self, sender, arg):
        print "EFDを作成しました。"
        if cmds.isKeyDown( 'ControlKey' ):
            print 'Control Down'
        else:
            getActiveAssetFolder =cmds.getActiveAssetFolder()
            #asset =cmds.createAsset('assets:/VFX/', 'EFD_0016_'+self.ComboBoxA.SelectedItem+'29_004_00'+'_'+'Berk'+'_'+'attack1'+'_'+'00', 'EffectAsset');
            #選択したフォルダにEFDを作成
            asset =cmds.createAsset(getActiveAssetFolder, 'EFD_0016_'+self.ComboBoxA.SelectedItem+'_'+self.textBoxA.Text+'_'+self.textBoxB.Text+'_'+self.textBoxC.Text, 'EffectAsset');
            asset.Alias ='【'+self.ComboBoxB.SelectedItem+'】'+'〈'+self.textBoxD.Text+'〉'+self.textBoxE.Text
            cmds.openAsset(asset);
            
            node = cmds.addEffectNode(asset, 'Emitter', 'SampleEmitter');
            cmds.addEffectItem(node, 'TypeBillboard3D');
            cmds.addEffectItem(node, 'UVSequence');
            cmds.addEffectItem(node, 'Velocity3D');
            cmds.addEffectItem(node, 'RotateAnim');
            cmds.addEffectItem(node, 'ScaleAnim');
            cmds.addEffectItem(node, 'Distortion');
            cmds.addEffectItem(node, 'Blink');
            cmds.addEffectItem(node, 'Noise');
            cmds.addEffectItem(node, 'PtBehavior');
            cmds.addEffectItem(node, 'ShaderSettings');
            
            node = cmds.getEffectNode(asset, 'Root');
            node.Name + ' : ' + str(node.NodeType);
            cmds.addEffectItem(node, 'UnitCulling');
            cmds.addEffectItem(node, 'EmitterPriority');

            cmds.saveAsset(asset);
            print 'Sample:asset'
            
            cmds.label( asset );
    def makeButtonG(self):
        self.button = wpf.createElement('Button', self.stackPanel)
        self.button.Content = '※Create:EFD※'
        self.button.Click += self.onBtnG
        
 
 


    def __init__(self):
        self.makeWindow()
        
        #ラベルB│AssetBrowser
        self.makeLabelB()
        #ボタンA│AssetBrowser:EFD
        self.makeButtonA()
        #ボタンB│AssetBrowser:MasterScene
        self.makeButtonB()
        #ボタンC│AssetBrowser:Loc11
        self.makeButtonC()
        #ボタンF│AssetBrowser:Loc03
        self.makeButtonF()
        
        #ラベルC│その他
        self.makeLabelC()
        #ボタンD│Switch:EffectIconWidget
        self.makeButtonD()
        #ボタンH│VerifyResource
        self.makeButtonH()
        
        #ラベルD│EFD作成ツール
        self.makeLabelD()
        #コンボボックスA│ch,cs,sm,st,tb,wpから選択
        self.makeComboBoxA()
        #テキストボックスA│大項目│ID│'0100_004_01'
        self.makeTextBoxA()
        #テキストボックスB│中項目'Berk(_attack1)'
        self.makeTextBoxB()
        #テキストボックスC│小項目'00'
        self.makeTextBoxC()
        #ラベルF│エイリアス
        self.makeLabelF()
        #コンボボックスB│PL,EM,NPC,汎用,イベント,プロップ,背景から選択
        self.makeComboBoxB()
        #テキストボックスD│大項目│'神など固有名詞を入力'
        self.makeTextBoxD()
        #テキストボックスE│中項目│'常駐、Attack0、≪PS1.2≫など詳細を入力'
        self.makeTextBoxE()
        #ラベルE│作成されるEFDの名前
        self.makeLabelE()
        #ラベルG│作成されるEFDの名前
        self.makeLabelG()
        #self.makeTextBlockA()
        #ボタンG│Create:EFD
        self.makeButtonG()
        
        

        self.win.Show()

VFX()