示例#1
0
	def createScene(self, mapname):
		mapfilename = os.path.join("maps", mapname + ".xml")
		
		if self._map:
			self.destroyScene()
										
		if self._loader.isLoadable(mapfilename):
			self._map = self._loader.load(mapfilename)
			
		self._mapname = mapname

		if os.path.isfile(os.path.join("saves", mapname + "_save.xml")):
			objectfile = os.path.join("saves", mapname + "_save.xml")
		else:
			objectfile = os.path.join("maps", mapname + "_objects.xml")

		modelfile = self._gamecontroller.settings.get("RPG", "AllObjectFile", "maps/allobjects.xml")
		questfile = self._gamecontroller.settings.get("RPG", "QuestFile", "maps/quests.xml")
		
		self._objectsettings = SimpleXMLSerializer(objectfile)
		self._modelsettings = SimpleXMLSerializer(modelfile)

		for cam in self._map.getCameras():
			self._cameras[cam.getId()] = cam
		
		self._cameras[self._maincameraname].setZoom(self._gamecontroller.settings.get("RPG", "DefaultZoom", 1.0))

		self._actorlayer = self._map.getLayer(self._gamecontroller.settings.get("RPG", "ActorLayer", "actor_layer"))
		self._itemlayer = self._map.getLayer(self._gamecontroller.settings.get("RPG", "ItemLayer", "item_layer"))
		
		self.loadObjects(mapfilename)
		
		#finally load the player
		self.createPlayerObject()
示例#2
0
	def __init__(self, settings_file, settings_template_file):
		self._module_settings = {}
		self._module_settings_template = {}
		self._settings_file = settings_file
		self._settings_template_file = settings_template_file
		self._settings_serializer = SimpleXMLSerializer()
		self._settings_serializer.load(settings_file)
		self._settings_template_serializer = SimpleXMLSerializer()
		self._settings_template_serializer.load(settings_template_file)
		if not hasattr (self._settings_template_serializer, 'getModuleName'):
			# Renamed after 0.3.5: https://github.com/fifengine/fifengine/issues/819.
			new_api = self._settings_template_serializer.getModuleNameList
			self._settings_template_serializer.getModuleName = new_api
		self.upgrade_settings()
示例#3
0
    def deserialize(self, valuedict=None):
        questfile = self._gamecontroller.settings.get("RPG", "QuestFile",
                                                      "maps/quests.xml")

        self._questsettings = SimpleXMLSerializer(questfile)

        for identifier in self._questsettings.get("QuestGivers", "list", []):
            for quest in self._questsettings.get(identifier, "questlist", []):
                questdict = self._questsettings.get(identifier, quest, {})
                if questdict['type'] == "RETURN_ITEM":
                    questobj = ReturnItemQuest(identifier, quest,
                                               questdict['name'],
                                               questdict['desc'])
                    for ritem in self._questsettings.get(
                            quest + "_items", "itemlist", []):
                        itemdict = self._questsettings.get(
                            quest + "_items", ritem, {})
                        if itemdict["name"] == "GOLD_COINS":
                            questobj.addRequiredGold(int(itemdict['value']))
                        else:
                            questobj.addRequiredItem(ritem)
                else:
                    questobj = Quest(identifier, quest, questdict['name'],
                                     questdict['desc'])

                if questdict.has_key("quest_incomplete_dialog"):
                    questobj._incomplete_dialog = questdict[
                        'quest_incomplete_dialog']

                if questdict.has_key("quest_complete_dialog"):
                    questobj._complete_dialog = questdict[
                        'quest_complete_dialog']

                self._gamecontroller.questmanager.addQuest(questobj)
示例#4
0
	def serialize(self):
		filename = os.path.join("saves", self._mapname + "_save.xml")
		playerfilename = os.path.join("saves", "player_save.xml")
		map_settings = SimpleXMLSerializer(filename)
		player_settings = SimpleXMLSerializer(playerfilename)
		
		objectlist = []
		
		for obj in list(self._objectlist.values()):
			ovals = obj.serialize()
			map_settings.set("objects", obj.id, ovals)
			objectlist.append(obj.id)
			
		map_settings.set("objects", "objectlist", objectlist)
		
		pvals = self._player.serialize()
		player_settings.set("player", "player", pvals)
		
		map_settings.save()
		player_settings.save()
示例#5
0
	def createPlayerObject(self):
		"""
		@todo: once we have all art assets this should be able to load one of 3 player models
		"""
		modeldict = self._modelsettings.get("models", "Player", {})
	
		print('loading: %s' % modeldict["file"])
		self._loader.loadImportFile(modeldict["file"])
		self._player = Player(self._gamecontroller, self.actorlayer, "warrior")
		
		playerfilename = os.path.join("saves", "player_save.xml")
		
		if os.path.isfile(playerfilename):
			player_settings = SimpleXMLSerializer(playerfilename)
			pvals = player_settings.get("player", "player", {})
			self._player.deserialize(pvals)
示例#6
0
    def _setup_settings(self, check_file_version=True):
        # NOTE: SimpleXMLSerializer can't handle relative paths, it fails silently
        # (although the doc states otherwise) - thus translate paths to absolute ones
        _template_config_file = os.path.join(os.getcwd(),
                                             PATHS.CONFIG_TEMPLATE_FILE)
        template_config_parser = SimpleXMLSerializer(_template_config_file)
        template_settings_version = template_config_parser.get(
            "meta", "SettingsVersion")
        self._default_hotkeys = template_config_parser.getAllSettings(
            KEY_MODULE)

        _user_config_file = os.path.join(os.getcwd(), PATHS.USER_CONFIG_FILE)
        if check_file_version and os.path.exists(_user_config_file):
            # check if user settings file is the current one
            user_config_parser = SimpleXMLSerializer(_user_config_file)
            user_settings_version = user_config_parser.get(
                "meta", "SettingsVersion", -1)

            if template_settings_version > user_settings_version:  # we have to update the file
                print 'Discovered old settings file, auto-upgrading: %s -> %s' % \
                      (user_settings_version, template_settings_version)
                # create settings so we have a list of all settings
                self._setup_settings(check_file_version=False)

                # save settings here
                entries = []

                # need safe default value
                default_value = object()

                def update_value(modulename, entryname):
                    # retrieve values from loaded settings file
                    try:
                        value = self._setting.get(modulename, entryname,
                                                  default_value)
                    except UnicodeEncodeError:  # this can happen when unicode data is saved as str
                        value = "default"
                    if value is not default_value:
                        entries.append((modulename, entryname, value))

                # collect values from known settings and unreferenced settings
                for modulename, module in self._setting.entries.iteritems():
                    for entryname in module.iterkeys():
                        update_value(modulename, entryname)
                for modulename, entry_list in self.UNREFERENCED_SETTINGS.iteritems(
                ):
                    for entryname in entry_list:
                        update_value(modulename, entryname)

                # patch old values
                if user_settings_version <= 10:
                    old_entries = entries
                    entries = []
                    for i in old_entries:
                        if i[0] == UH_MODULE and i[1] == "Language":
                            entries.append(
                                (i[0], i[1], LANGUAGENAMES.get_by_value(i[2])))
                        else:
                            entries.append(i)

                # write actual new file
                shutil.copy(PATHS.CONFIG_TEMPLATE_FILE, PATHS.USER_CONFIG_FILE)
                user_config_parser = SimpleXMLSerializer(_user_config_file)
                for modulename, entryname, value in entries:
                    user_config_parser.set(modulename, entryname, value)
                user_config_parser.save()

        self._setting = SettingsDialog(
            app_name=UH_MODULE,
            settings_file=PATHS.USER_CONFIG_FILE,
            settings_gui_xml="settings.xml",
            changes_gui_xml="requirerestart.xml",
            default_settings_file=PATHS.CONFIG_TEMPLATE_FILE)

        self._setting_handler.add_settings()
示例#7
0
	def __init__(self, app_name="", settings_file="", default_settings_file= "settings-dist.xml", copy_dist=True, serializer=None):
		r"""
		Initializes the Setting object.

		@param app_name: The applications name.  If this parameter is provided
		alone it will try to read the settings file from the users home directory.
		In windows this will be	something like:	C:\Documents and Settings\user\Application Data\fife
		@type app_name: C{string}
		@param settings_file: The name of the settings file.  If this parameter is
		provided it will look for the setting file as you specify it, first looking
		in the working directory.  It will NOT look in the users home directory.
		@type settings_file: C{string}
		@param default_settings_file: The name of the default settings file.  If the settings_file
		does not exist this file will be copied into the place of the settings_file.  This file
		must exist in the root directory of your project!
		@type default_settings_file: C{string}
		@param copy_dist: Copies the default settings file to the settings_file location.  If
		this is False it will create a new empty setting file.
		@param serializer: Overrides the default XML serializer
		@type serializer: C{SimpleSerializer}

		"""
		self._app_name = app_name
		self._settings_file = settings_file
		self._default_settings_file = default_settings_file

		# Holds SettingEntries
		self._entries = {}

		if self._settings_file == "":
			self._settings_file = "settings.xml"
			self._appdata = getUserDataDirectory("fife", self._app_name)
		else:
			self._appdata = os.path.dirname(self._settings_file)
			self._settings_file = os.path.basename(self._settings_file)

		if not os.path.exists(os.path.join(self._appdata, self._settings_file)):
			if os.path.exists(self._default_settings_file) and copy_dist:
				shutil.copyfile(self._default_settings_file, os.path.join(self._appdata, self._settings_file))

		# valid values possible for the engineSettings
		self._validSetting = {}
		self._validSetting['FIFE'] = {
			'FullScreen':[True,False], 'RefreshRate':[0,200], 'Display':[0,9], 'VSync':[True,False], 'PychanDebug':[True,False]
			, 'ProfilingOn':[True,False], 'SDLRemoveFakeAlpha':[True,False], 'GLCompressImages':[False,True], 'GLUseFramebuffer':[False,True], 'GLUseNPOT':[False,True],
			'GLUseMipmapping':[False,True], 'GLTextureFiltering':['None', 'Bilinear', 'Trilinear', 'Anisotropic'], 'GLUseMonochrome':[False,True],
			'GLUseDepthBuffer':[False,True], 'GLAlphaTestValue':[0.0,1.0],
			'RenderBackend':['OpenGL', 'SDL'],
			'ScreenResolution':['640x480', '800x600', '1024x600', '1024x768', '1280x768',
								'1280x800', '1280x960', '1280x1024', '1366x768', '1440x900',
								'1600x900', '1600x1200', '1680x1050', '1920x1080', '1920x1200'],
			'BitsPerPixel':[0,16,24,32],
			'InitialVolume':[0.0,10.0], 'WindowTitle':"", 'WindowIcon':"", 'Font':"",
			'FontGlyphs':"", 'DefaultFontSize':"", 'Lighting':[0,1],
			'ColorKeyEnabled':[True,False], 'ColorKey':['a','b','c'], 'VideoDriver':"", 'RenderDriver':"",
			'PlaySounds':[True,False], 'LogToFile':[True,False],
			'LogToPrompt':[True,False], 'LogLevelFilter':[0,1,2,3],
			'LogModules':['all', 'controller','script','video','audio','loaders','vfs','pool','view','model','metamodel','event_channel','xml'],
			'FrameLimitEnabled':[True,False], 'FrameLimit':[0], 'MouseSensitivity':[0.0], 'MouseAcceleration':[True,False],
			'NativeImageCursor':[True,False], 'JoystickSupport':[True, False]
			}

		glyphDft = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?-+/():;%&amp;`'*#=[]\\\""

		# we at this point assume default values are final values for engineSettings
		self._defaultSetting = {}
		self._defaultSetting['FIFE'] = {
			'FullScreen':False, 'RefreshRate':60, 'Display':0, 'VSync':False, 'PychanDebug':False,
			'ProfilingOn':False, 'SDLRemoveFakeAlpha':False, 'GLCompressImages':False, 'GLUseFramebuffer':True, 'GLUseNPOT':True,
			'GLUseMipmapping':False, 'GLTextureFiltering':'None', 'GLUseMonochrome':False, 'GLUseDepthBuffer':False, 'GLAlphaTestValue':0.3,
			'RenderBackend':'OpenGL', 'ScreenResolution':"1024x768", 'BitsPerPixel':0,
			'InitialVolume':5.0, 'WindowTitle':"", 'WindowIcon':"", 'Font':"",
			'FontGlyphs':glyphDft, 'DefaultFontSize':12, 'Lighting':0,
			'ColorKeyEnabled':False, 'ColorKey':[255,0,255], 'VideoDriver':"", 'RenderDriver':"",
			'PlaySounds':True, 'LogToFile':False,
			'LogToPrompt':False,'LogLevelFilter':0,
			'LogModules':['controller','script'],
			'FrameLimitEnabled':False, 'FrameLimit':60,
			'MouseSensitivity':0.0,
			'MouseAcceleration':False,
			'NativeImageCursor':False,
                        'JoystickSupport':False
			}

		# has the settings file been read
		self._readSettingsCompleted = {}

		# the global dictionary from which we will read after self._readSettingsCompleted is True
		self._settingsFromFile = {}

		# the logger needed to write in log file. It will be initialized in this file when self.getSettings()
		# method is called by logger
		self._logger = None

		#default settings
		self._resolutions = self._validSetting['FIFE']['ScreenResolution']
		self._renderbackends = self._validSetting['FIFE']['RenderBackend']
		self._lightingmodels = self._validSetting['FIFE']['Lighting']

		#Used to stylize the options gui
		self._gui_style = "default"

		#Initialize the serializer
		if serializer:
			self._serializer = serializer
		else:
			self._serializer = SimpleXMLSerializer()

		self.initSerializer()

		# if there's no FIFE module assume the settings file is broken
		# and replace with default settings file
		if "FIFE" not in self._serializer.getModuleNameList():
			self.setDefaults()

		# Get all modules and initialize reading of them from xml file as false
		self._allModules = self._serializer.getModuleNameList()
		# print("All Module Names:",self._allModules)
		for module in self._allModules:
			self._readSettingsCompleted[module] = False

		self._initDefaultSettingEntries()