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

View File

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

View File

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

View File

@ -125,7 +125,10 @@ class SceneGraphUIBase(wx.Panel):
else: else:
parent = self.traverse(self.root, parentObj[OG.OBJ_UID]) 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) newItem = self.tree.AppendItem(parent, namestr)
self.tree.SetItemPyData(newItem, obj[OG.OBJ_UID]) self.tree.SetItemPyData(newItem, obj[OG.OBJ_UID])
@ -257,6 +260,17 @@ class SceneGraphUIBase(wx.Panel):
if not self.tree.IsSelected(item): if not self.tree.IsSelected(item):
self.tree.SelectItem(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): def deSelect(self, itemId):
item = self.traverse(self.root, itemId) item = self.traverse(self.root, itemId)
if item is not None: if item is not None: