Browse Source

Added feature for importing toontown dna

Gyedo Jeon 16 năm trước cách đây
mục cha
commit
47f4e39de8

+ 2 - 0
direct/src/leveleditor/LevelEditorBase.py

@@ -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)

+ 5 - 2
direct/src/leveleditor/LevelEditorUIBase.py

@@ -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):
-        self.editor.reset()
+    def reset(self):
         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:

+ 54 - 44
direct/src/leveleditor/ObjectMgr.py

@@ -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:
-                funcName = objDef.createFunction[OG.FUNC_NAME]
-                funcArgs = objDef.createFunction[OG.FUNC_ARGS]
-                if funcName.startswith('.'):
-                    # when it's using default objectHandler
-                    if self.editor:
-                        func = Functor(eval("base.le.objectHandler%s"%funcName))
-                    else: # when loaded outside of LE
-                        func = Functor(eval("base.objectHandler%s"%funcName))                        
+            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("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
-                    # should be included in function name
-                    func = Functor(eval(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())
-
+                    newobj = hidden.attachNewNode(objDef.name)
+            else:
+                newobj = nodePath
             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 self.editor:
-                    func = Functor(eval("base.le.objectHandler%s"%funcName), **kwargs)
-                    undoFunc = Functor(eval("base.le.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)                    
+            if type(funcName) == types.StringType:
+                if funcName.startswith('.'):
+                    if self.editor:
+                        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:
             else:
-                func = Functor(eval(funcName), **kwargs)
-                undoFunc = Functor(eval(funcName), **undoKwargs)
+                func = Functor(funcName, **kwargs)
+                undoFunc = Functor(funcName, **undoKwargs)
                 
                 
             # finally call update function
             # finally call update function
             #func(**kwargs)
             #func(**kwargs)

+ 15 - 1
direct/src/leveleditor/SceneGraphUIBase.py

@@ -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: