mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-29 06:32:40 -06:00
147 lines
4.7 KiB
Python
147 lines
4.7 KiB
Python
|
import copy
|
||
|
import ObjectGlobals as OG
|
||
|
|
||
|
class ObjectGen:
|
||
|
""" Base class for obj definitions """
|
||
|
def __init__(self, name=''):
|
||
|
self.name = name
|
||
|
|
||
|
class ObjectBase(ObjectGen):
|
||
|
""" Base class for obj definitions """
|
||
|
def __init__(self, name='', createFunction = None, model = None, models= [], anims = [], animNames = [], animDict = {}, properties={},
|
||
|
movable = True, actor = False, named=False, updateModelFunction = None, orderedProperties=[], propertiesMask={}):
|
||
|
ObjectGen.__init__(self, name)
|
||
|
self.createFunction = createFunction
|
||
|
self.model = model
|
||
|
self.models = models[:]
|
||
|
self.anims = anims[:]
|
||
|
self.animNames = animNames[:]
|
||
|
self.animDict = copy.deepcopy(animDict)
|
||
|
self.properties = copy.deepcopy(properties)
|
||
|
self.movable = movable
|
||
|
self.actor = actor
|
||
|
self.named = named
|
||
|
self.updateModelFunction = updateModelFunction
|
||
|
# to maintain order of properties in UI
|
||
|
self.orderedProperties = orderedProperties[:]
|
||
|
# to show/hide properties per editor mode
|
||
|
self.propertiesMask = copy.deepcopy(propertiesMask)
|
||
|
|
||
|
class ObjectCurve(ObjectBase):
|
||
|
def __init__(self, *args, **kw):
|
||
|
ObjectBase.__init__(self, *args, **kw)
|
||
|
self.properties['Degree'] =[OG.PROP_UI_COMBO, # UI type
|
||
|
OG.PROP_INT, # data type
|
||
|
('base.le.objectMgr.updateCurve', {'val':OG.ARG_VAL, 'obj':OG.ARG_OBJ}), # update function
|
||
|
3, # default value
|
||
|
[2, 3, 4]] # value range
|
||
|
|
||
|
class ObjectPaletteBase:
|
||
|
"""
|
||
|
Base class for objectPalette
|
||
|
|
||
|
You should write your own ObjectPalette class inheriting this.
|
||
|
Refer ObjectPalette.py for example.
|
||
|
"""
|
||
|
|
||
|
def __init__(self):
|
||
|
self.rootName = '_root'
|
||
|
self.data = {}
|
||
|
self.dataStruct = {}
|
||
|
self.dataKeys = []
|
||
|
self.populateSystemObjs()
|
||
|
#self.populate()
|
||
|
|
||
|
def insertItem(self, item, parentName):
|
||
|
"""
|
||
|
You can insert item to obj palette tree.
|
||
|
|
||
|
'item' is the object to be inserted, it can be either a group or obj.
|
||
|
'parentName' is the name of parent under where this item will be inserted.
|
||
|
"""
|
||
|
if type(self.data) != dict:
|
||
|
return None
|
||
|
|
||
|
if parentName is None:
|
||
|
parentName = self.rootName
|
||
|
|
||
|
self.dataStruct[item.name] = parentName
|
||
|
self.data[item.name] = item
|
||
|
self.dataKeys.append(item.name)
|
||
|
|
||
|
def add(self, item, parentName = None):
|
||
|
if type(item) == str:
|
||
|
self.insertItem(ObjectGen(name = item), parentName)
|
||
|
else:
|
||
|
self.insertItem(item, parentName)
|
||
|
|
||
|
def addHidden(self, item):
|
||
|
if hasattr(item, 'name'):
|
||
|
self.data[item.name] = item
|
||
|
|
||
|
def deleteStruct(self, name, deleteItems):
|
||
|
try:
|
||
|
item = self.data.pop(name)
|
||
|
for key in self.dataStruct.keys():
|
||
|
if self.dataStruct[key] == name:
|
||
|
node = self.deleteStruct(key, deleteItems)
|
||
|
if node is not None:
|
||
|
deleteItems[key] = node
|
||
|
return item
|
||
|
except:
|
||
|
return None
|
||
|
return None
|
||
|
|
||
|
def delete(self, name):
|
||
|
try:
|
||
|
deleteItems = {}
|
||
|
node = self.deleteStruct(name, deleteItems)
|
||
|
if node is not None:
|
||
|
deleteItems[name] = node
|
||
|
for key in deleteItems.keys():
|
||
|
item = self.dataStruct.pop(key)
|
||
|
except:
|
||
|
return
|
||
|
return
|
||
|
|
||
|
def findItem(self, name):
|
||
|
try:
|
||
|
item = self.data[name]
|
||
|
except:
|
||
|
return None
|
||
|
return item
|
||
|
|
||
|
def findChildren(self, name):
|
||
|
result = []
|
||
|
for key in self.dataKeys:
|
||
|
if self.dataStruct[key] == name:
|
||
|
result.append(key)
|
||
|
|
||
|
return result
|
||
|
|
||
|
def rename(self, oldName, newName):
|
||
|
#import pdb;set_trace()
|
||
|
if oldName == newName:
|
||
|
return False
|
||
|
if newName == "":
|
||
|
return False
|
||
|
try:
|
||
|
for key in self.dataStruct.keys():
|
||
|
if self.dataStruct[key] == oldName:
|
||
|
self.dataStruct[key] = newName
|
||
|
|
||
|
self.dataStruct[newName] = self.dataStruct.pop(oldName)
|
||
|
item = self.data.pop(oldName)
|
||
|
item.name = newName
|
||
|
self.data[newName] = item
|
||
|
except:
|
||
|
return False
|
||
|
return True
|
||
|
|
||
|
def populateSystemObjs(self):
|
||
|
self.addHidden(ObjectCurve(name='__Curve__'))
|
||
|
|
||
|
def populate(self):
|
||
|
# You should implement this in subclass
|
||
|
raise NotImplementedError('populate() must be implemented in ObjectPalette.py')
|