Example #1
0
 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__
Example #2
0
    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
Example #3
0
 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__