Added feature for importing toontown dna

This commit is contained in:
Gyedo Jeon 2010-03-12 05:11:03 +00:00
parent ae157e1b89
commit 47f4e39de8
4 changed files with 76 additions and 47 deletions

View File

@ -30,6 +30,7 @@ class LevelEditorBase(DirectObject):
self.fileMgr = FileMgr(self)
self.actionMgr = ActionMgr()
self.NPParent = render
# define your own config file in inherited class
self.settingsFile = None
@ -262,6 +263,7 @@ class LevelEditorBase(DirectObject):
return
base.direct.deselectAll()
self.ui.reset()
self.objectMgr.reset()
self.actionMgr.reset()
self.ui.perspView.camera.setPos(-19, -19, 19)

View File

@ -84,6 +84,7 @@ class PandaTextDropTarget(wx.TextDropTarget):
self.editor.actionMgr.push(action)
np.remove()
action()
iRay.collisionNodePath.removeNode()
del iRay
ID_NEW = 101
@ -361,11 +362,13 @@ class LevelEditorUIBase(WxAppShell):
self.wxApp.ProcessIdle()
if task != None: return task.cont
def onNew(self, evt=None):
self.editor.reset()
def reset(self):
self.sceneGraphUI.reset()
self.layerEditorUI.reset()
def onNew(self, evt=None):
self.editor.reset()
def onOpen(self, evt=None):
dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.py", wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:

View File

@ -2,14 +2,14 @@
Defines ObjectMgr
"""
import os, time, wx
import os, time, wx, types
from direct.task import Task
from direct.actor.Actor import Actor
from pandac.PandaModules import *
from ActionMgr import *
import ObjectGlobals as OG
from ObjectPaletteBase import ObjectGen
class ObjectMgr:
""" ObjectMgr will create, manage, update objects in the scene """
@ -64,10 +64,10 @@ class ObjectMgr:
self.lastUidMod = 0
return newUid
def addNewObject(self, typeName, uid = None, model = None, parent=None, anim = None, fSelectObject=True):
def addNewObject(self, typeName, uid = None, model = None, parent=None, anim = None, fSelectObject=True, nodePath=None):
""" function to add new obj to the scene """
if parent is None:
parent = render
parent = self.editor.NPParent
if self.editor:
objDef = self.editor.objectPalette.findItem(typeName)
@ -79,20 +79,23 @@ class ObjectMgr:
objDef = base.protoPalette.findItem(typeName)
newobj = None
if objDef and type(objDef) != dict:
if nodePath is None:
if objDef.createFunction:
funcName = objDef.createFunction[OG.FUNC_NAME]
funcArgs = objDef.createFunction[OG.FUNC_ARGS]
if type(funcName) == types.StringType:
if funcName.startswith('.'):
# when it's using default objectHandler
if self.editor:
func = Functor(eval("base.le.objectHandler%s"%funcName))
func = Functor(eval("self.editor.objectHandler%s"%funcName))
else: # when loaded outside of LE
func = Functor(eval("base.objectHandler%s"%funcName))
else:
# when it's not using default objectHandler, whole name of the handling obj
# should be included in function name
func = Functor(eval(funcName))
else:
func = funcName
# create new obj using function and keyword arguments defined in ObjectPalette
newobj = func(**funcArgs)
elif objDef.actor:
@ -110,7 +113,10 @@ class ObjectMgr:
newobj = loader.loadModel(model)
except:
newobj = loader.loadModel(Filename.fromOsSpecific(model).getFullpath())
else:
newobj = hidden.attachNewNode(objDef.name)
else:
newobj = nodePath
i = 0
for i in range(len(objDef.anims)):
animFile = objDef.anims[i]
@ -499,16 +505,20 @@ class ObjectMgr:
kwargs[key] = funcArgs[key]
undoKwargs[key] = funcArgs[key]
if type(funcName) == types.StringType:
if funcName.startswith('.'):
if self.editor:
func = Functor(eval("base.le.objectHandler%s"%funcName), **kwargs)
undoFunc = Functor(eval("base.le.objectHandler%s"%funcName), **undoKwargs)
func = Functor(eval("self.editor.objectHandler%s"%funcName), **kwargs)
undoFunc = Functor(eval("self.editor.objectHandler%s"%funcName), **undoKwargs)
else: # when loaded outside of LE
func = Functor(eval("base.objectHandler%s"%funcName), **kwargs)
undoFunc = Functor(eval("base.objectHandler%s"%funcName), **undoKwargs)
else:
func = Functor(eval(funcName), **kwargs)
undoFunc = Functor(eval(funcName), **undoKwargs)
else:
func = Functor(funcName, **kwargs)
undoFunc = Functor(funcName, **undoKwargs)
# finally call update function
#func(**kwargs)

View File

@ -125,7 +125,10 @@ class SceneGraphUIBase(wx.Panel):
else:
parent = self.traverse(self.root, parentObj[OG.OBJ_UID])
namestr = "%s_%s"%(obj[OG.OBJ_DEF].name, obj[OG.OBJ_UID])
name = NodePath(item).getName()
if not name:
name = ' '
namestr = "%s_%s_%s"%(obj[OG.OBJ_DEF].name, name, obj[OG.OBJ_UID])
newItem = self.tree.AppendItem(parent, namestr)
self.tree.SetItemPyData(newItem, obj[OG.OBJ_UID])
@ -257,6 +260,17 @@ class SceneGraphUIBase(wx.Panel):
if not self.tree.IsSelected(item):
self.tree.SelectItem(item)
def changeLabel(self, itemId, newName):
item = self.traverse(self.root, itemId)
if item:
obj = self.editor.objectMgr.findObjectById(itemId)
if obj is None:
return
obj[OG.OBJ_NP].setName(newName)
namestr = "%s_%s_%s"%(obj[OG.OBJ_DEF].name, newName, obj[OG.OBJ_UID])
self.tree.SetItemText(item, namestr)
def deSelect(self, itemId):
item = self.traverse(self.root, itemId)
if item is not None: