def save_sprite(self): """Save this object as a class in the project's object folder""" if save_object(self): if not self.gname: self.gname = self.__class__.__name__
def _create_object_code(self, storageDict, indentLevel, exporter): if _DEBUG: print "*******************enter scene save" storage_name = storageDict['storage_name'] if storage_name == 'Scene' or storage_name == 'Scene': raise ValueError(''.join(["Can't over-write ", storage_name," base class."])) if not storageDict['as_class']: raise ValueError("Scenes can only be stored as classes.") # start with basic export base_code = exporter.create_object_code(self, storageDict, indentLevel, True) baseIndent = _INDENT * indentLevel custom_code_list = [] # custom code # # groups # if self._groups: # custom_code_list += [baseIndent, _INDENT, 'groups = ', # str(self._groups.keys()), # '\n'] # enter function if self.nodes: # create ordered list of nodes nodes = self.get_ordered_nodes() nodes.reverse() # store them from bottom-most to top-most # store archetypes at top of file archetypes = False for node in nodes: if not node.archetype: continue if not archetypes: custom_code_list += [baseIndent, _INDENT*2, '# Archetypes\n'] archetypes = True # this node is a class archetype, figure out a save name if node.gname: savename = make_valid_attr_name(node.gname) node.gname = savename else: # no gname, so find an available filename tryname = base_tryname = 'MyObjectClass' savename = '' suffix = 1 while not savename: path = os.path.join('objects', ''.join([tryname,'.py'])) try: file(path) except: savename = tryname else: suffix+=1 tryname = ''.join([base_tryname, str(suffix)]) node.gname = savename archetype_exporter = save_object( node, savename) if not archetype_exporter or \ archetype_exporter.errorfilename: error = ''.join(["Scene code export failed...", "unable to save archetype:", savename, node]) warnings.warn(error) return time.sleep(0.1) module = __import__('.'.join(['objects',savename]), fromlist=[savename]) reload(module) newclass = getattr(module,savename) node.__class__ = newclass nodeStorageDict = exporter.get_custom_storageDict(node) nodeStorageDict['name'] =''.join([savename,'_archetype']) nodeStorageDict['as_class'] = False # export as object node_code = exporter.create_object_code(node, nodeStorageDict, indentLevel + 2, False) custom_code_list+=[node_code,'\n'] # store instances instances = False for node in nodes: if node.archetype: continue if not instances: custom_code_list += [baseIndent, _INDENT*2, '# Sprites\n'] instances = True else: custom_code_list +=['\n',] nodeStorageDict = exporter.get_custom_storageDict(node) nodeStorageDict['as_class'] = False # export as object node_code = exporter.create_object_code(node, nodeStorageDict, indentLevel + 2, False) custom_code_list += [node_code] #spacing before custom code if custom_code_list: custom_code_list = ['\n']+custom_code_list #add layers line layers = get_scene_layers() if layers != ["Background"]: layercode = ''.join([baseIndent, _INDENT,'layers = ', str(layers), '\n']) base_code_lines = base_code.splitlines() base_code = '\n'.join([base_code_lines[0]] + [layercode] +\ base_code_lines[1:])+'\n' # remove pass in base code if we have custom code if base_code.endswith('pass\n') and custom_code_list: # clean up pass case (for looks) base_code = '\n'.join(base_code.splitlines()[0:-1]) code = ''.join([base_code] + custom_code_list) if _DEBUG: print "*******************exit scene save" return code
def save_sprite(self): """Save this object as a class in the project's object folder""" if save_object( self): if not self.gname: self.gname = self.__class__.__name__