diff --git a/direct/src/leveleditor/FileMgr.py b/direct/src/leveleditor/FileMgr.py index b89e38d3bf..8e85db69e1 100755 --- a/direct/src/leveleditor/FileMgr.py +++ b/direct/src/leveleditor/FileMgr.py @@ -45,12 +45,6 @@ class FileMgr: moduleName = moduleName[:-3] file, pathname, description = imp.find_module(moduleName, [dirname]) try: - if self.editor is None: # when loaded outside of LE - base.objectPalette = ObjectPalette() - base.protoPalette = ProtoPalette() - base.objectHandler = ObjectHandler(None) - base.objectMgr = ObjectMgr(None) - module = imp.load_module(moduleName, file, pathname, description) except: print 'failed to load %s'%fileName diff --git a/direct/src/leveleditor/LevelLoader.py b/direct/src/leveleditor/LevelLoader.py new file mode 100755 index 0000000000..77824aaa37 --- /dev/null +++ b/direct/src/leveleditor/LevelLoader.py @@ -0,0 +1,32 @@ +""" +This is just a sample code. + +LevelLoader should be rewritten +to be game specific. + +You need to define which ObjectMgr, ObjectHandler, +ObjectPalette, ProtoPalette would be used by importing section. +Then declare them in initLoader function. +You also need to define defaultPath in initLoader function, too. +""" + +import os + +from direct.leveleditor.LevelLoaderBase import LevelLoaderBase +from direct.leveleditor.ObjectMgr import ObjectMgr +from direct.leveleditor.ProtoPalette import ProtoPalette +from direct.leveleditor import ObjectGlobals as OG +from ObjectHandler import ObjectHandler +from ObjectPalette import ObjectPalette + +class LevelLoader(LevelLoaderBase): + def __init__(self): + LevelLoaderBase.__init__(self) + + def initLoader(self): + self.defaultPath = os.path.dirname(__file__) + base.objectPalette = ObjectPalette() + base.protoPalette = ProtoPalette() + base.objectHandler = ObjectHandler(None) + base.objectMgr = ObjectMgr(None) + diff --git a/direct/src/leveleditor/LevelLoaderBase.py b/direct/src/leveleditor/LevelLoaderBase.py new file mode 100755 index 0000000000..6ec8f736c8 --- /dev/null +++ b/direct/src/leveleditor/LevelLoaderBase.py @@ -0,0 +1,37 @@ +import imp + +class LevelLoaderBase: + """ + Base calss for LevelLoader + + which you will use to load level editor data in your game. + Refer LevelLoader.py for example. + """ + def __init__(self): + self.defaultPath = None # this should be set in your LevelLoader.py + self.initLoader() + + def initLoader(self): + # You should implement this in subclass + raise NotImplementedError('populate() must be implemented in your LevelLoader.py') + + def cleanUp(self): + # When you don't need to load any more data, you can call clean up + del base.objectPalette + del base.protoPalette + del base.objectHandler + del base.objectMgr + + def loadFromFile(self, fileName, filePath=None): + if filePath is None: + filePath = self.defaultPath + + if fileName.endswith('.py'): + fileName = fileName[:-3] + file, pathname, description = imp.find_module(fileName, [filePath]) + try: + module = imp.load_module(fileName, file, pathname, description) + return True + except: + print 'failed to load %s'%fileName + return None