mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-26 21:22:27 -06:00
159 lines
7.2 KiB
Python
159 lines
7.2 KiB
Python
|
"""
|
||
|
This is the GUI for the Curve Animation
|
||
|
"""
|
||
|
import os, wx, time
|
||
|
|
||
|
from direct.interval.IntervalGlobal import *
|
||
|
from direct.actor.Actor import *
|
||
|
from direct.showutil.Rope import Rope
|
||
|
import ObjectGlobals as OG
|
||
|
|
||
|
class CurveAnimUI(wx.Dialog):
|
||
|
"""
|
||
|
This is the Curve Animation Panel implementation.
|
||
|
"""
|
||
|
def __init__(self, parent, editor):
|
||
|
wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title="Curve Animation",
|
||
|
pos=wx.DefaultPosition, size=(430, 140))
|
||
|
|
||
|
self.editor = editor
|
||
|
self.nodePath = None
|
||
|
self.curve = None
|
||
|
|
||
|
self.mainPanel = wx.Panel(self, -1)
|
||
|
|
||
|
self.chooseNode = wx.StaticText( self.mainPanel, -1, "Choose NodePath:")
|
||
|
self.chooseNodeTxt = wx.TextCtrl( self.mainPanel, -1, "")
|
||
|
self.chooseNodeButton = wx.Button( self.mainPanel, -1, "Choose..")
|
||
|
|
||
|
self.chooseCurve = wx.StaticText( self.mainPanel, -1, "Choose attch Curve:")
|
||
|
self.chooseCurveTxt = wx.TextCtrl( self.mainPanel, -1, "")
|
||
|
self.chooseCurveButton = wx.Button( self.mainPanel, -1, "Choose..")
|
||
|
|
||
|
self.duritionTime = wx.StaticText( self.mainPanel, -1, "Durition(Frame):")
|
||
|
self.duritionTimeSpin = wx.SpinCtrl( self.mainPanel, -1, "",size = (70,25), min=24, max=10000)
|
||
|
|
||
|
self.createAnimButton = wx.Button( self.mainPanel, -1, "Creat")
|
||
|
self.saveAnimButton = wx.Button( self.mainPanel, -1, "Save Animation")
|
||
|
|
||
|
self.SetProperties()
|
||
|
self.DoLayout()
|
||
|
|
||
|
self.Bind(wx.EVT_BUTTON, self.OnChooseNode, self.chooseNodeButton)
|
||
|
self.Bind(wx.EVT_BUTTON, self.OnChooseCurve, self.chooseCurveButton)
|
||
|
self.Bind(wx.EVT_BUTTON, self.OnCreateAnim, self.createAnimButton)
|
||
|
self.Bind(wx.EVT_BUTTON, self.OnSaveAnim, self.saveAnimButton)
|
||
|
|
||
|
self.Bind(wx.EVT_CLOSE, self.OnExit)
|
||
|
|
||
|
def SetProperties(self):
|
||
|
self.duritionTimeSpin.SetValue(24)
|
||
|
self.chooseNodeTxt.SetMinSize((200,21))
|
||
|
self.chooseCurveTxt.SetMinSize((200,21))
|
||
|
self.saveAnimButton.SetToolTipString("Save the animation to the global animation control")
|
||
|
|
||
|
def DoLayout(self):
|
||
|
dialogSizer = wx.BoxSizer(wx.VERTICAL)
|
||
|
mainSizer = wx.FlexGridSizer(4, 3, 0, 0)
|
||
|
|
||
|
mainSizer.Add(self.chooseNode, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 10)
|
||
|
mainSizer.Add(self.chooseNodeTxt, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 5)
|
||
|
mainSizer.Add(self.chooseNodeButton, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 5)
|
||
|
|
||
|
mainSizer.Add(self.chooseCurve, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 10)
|
||
|
mainSizer.Add(self.chooseCurveTxt, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 5)
|
||
|
mainSizer.Add(self.chooseCurveButton, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 5)
|
||
|
|
||
|
mainSizer.Add(self.duritionTime, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 10)
|
||
|
mainSizer.Add(self.duritionTimeSpin, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 5)
|
||
|
mainSizer.Add(self.createAnimButton, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 5)
|
||
|
|
||
|
mainSizer.Add(self.saveAnimButton, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 5)
|
||
|
|
||
|
self.mainPanel.SetSizerAndFit(mainSizer)
|
||
|
|
||
|
dialogSizer.Add(self.mainPanel, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
|
||
|
|
||
|
self.SetSizer(dialogSizer)
|
||
|
self.Layout()
|
||
|
|
||
|
def OnChooseNode(self, evt):
|
||
|
if base.direct.selected.last == None or base.direct.selected.last.hasTag('Controller') or not base.direct.selected.last.hasTag('OBJRoot'):
|
||
|
dlg = wx.MessageDialog(None, 'Please select an object.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
else:
|
||
|
obj = self.editor.objectMgr.findObjectByNodePath(base.direct.selected.last)
|
||
|
if obj[OG.OBJ_DEF].name == '__Curve__':
|
||
|
dlg = wx.MessageDialog(None, 'Please select an object, not a curve.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
else:
|
||
|
self.nodePath = obj
|
||
|
self.chooseNodeTxt.SetValue(str(self.nodePath[OG.OBJ_UID]))
|
||
|
|
||
|
def OnChooseCurve(self, evt):
|
||
|
if base.direct.selected.last == None or base.direct.selected.last.hasTag('Controller') or not base.direct.selected.last.hasTag('OBJRoot'):
|
||
|
dlg = wx.MessageDialog(None, 'Please select a curve.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
else:
|
||
|
obj = self.editor.objectMgr.findObjectByNodePath(base.direct.selected.last)
|
||
|
if obj[OG.OBJ_DEF].name != '__Curve__':
|
||
|
dlg = wx.MessageDialog(None, 'Please select a curve, not an object.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
elif obj[OG.OBJ_DEF].name == '__Curve__':
|
||
|
self.curve = obj
|
||
|
self.chooseCurveTxt.SetValue(str(self.curve[OG.OBJ_UID]))
|
||
|
|
||
|
def OnCreateAnim(self, evt):
|
||
|
self.time = self.duritionTimeSpin.GetValue()
|
||
|
if self.nodePath == None or self.curve == None:
|
||
|
dlg = wx.MessageDialog(None, 'Please select an object and a curve first.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
else:
|
||
|
self.curveSequence = self.editor.animMgr.singleCurveAnimation(self.nodePath, self.curve, self.time)
|
||
|
self.curveSequence.start()
|
||
|
|
||
|
def OnSaveAnim(self,evt):
|
||
|
if not self.curveSequence:
|
||
|
dlg = wx.MessageDialog(None, 'Please create a animation first.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
else:
|
||
|
if self.editor.animMgr.curveAnimation == {}:
|
||
|
self.editor.animMgr.curveAnimation[(self.nodePath[OG.OBJ_UID],self.curve[OG.OBJ_UID])] = (self.nodePath[OG.OBJ_UID],self.curve[OG.OBJ_UID],self.time)
|
||
|
self.editor.updateStatusReadout('Sucessfully saved to global animation list')
|
||
|
return
|
||
|
|
||
|
hasKey = False
|
||
|
for key in self.editor.animMgr.curveAnimation.keys():
|
||
|
if key == (self.nodePath[OG.OBJ_UID],self.curve[OG.OBJ_UID]):
|
||
|
dlg = wx.MessageDialog(None, 'Already have the animation for this object attach to this curve.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
hasKey = True
|
||
|
return
|
||
|
elif self.nodePath[OG.OBJ_UID] == key[0]:
|
||
|
dlg = wx.MessageDialog(None, 'This object is already attached to a curve.', 'NOTICE', wx.OK )
|
||
|
dlg.ShowModal()
|
||
|
dlg.Destroy()
|
||
|
hasKey = True
|
||
|
return
|
||
|
|
||
|
if hasKey == False and self.editor.animMgr.curveAnimation != {}:
|
||
|
self.editor.animMgr.curveAnimation[(self.nodePath[OG.OBJ_UID],self.curve[OG.OBJ_UID])] = (self.nodePath[OG.OBJ_UID],self.curve[OG.OBJ_UID],self.time)
|
||
|
self.editor.updateStatusReadout('Sucessfully saved to global animation list')
|
||
|
|
||
|
def OnExit(self,evt):
|
||
|
self.Destroy()
|
||
|
self.editor.ui.curveAnimMenuItem.Check(False)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|