Mercurial > parpg-source
view gamestate.py @ 1:4912a6f97c52
Various improvements to the build process including support for self-contained builds.
* Note that despite all of these changes PARPG still does not run because asset paths are not standardized,
* Modified the SCons script so that by default running `scons` with no arguments creates a self-contained "build" under a build subdirectory to make in-source testing easier. To install PARPG, use `scons install` instead.
* Got rid of the binary launcher and replaced it with a shell script for unix and a batch script for Windows (batch script is untested). The binary turned out to be too much trouble to maintain.
* Modified the parpg.settings module and parpg.main entry script so that PARPG searches through several default search paths for configuration file(s). PARPG thus no longer crashes if it can't find a configuration file in any particular search path, but will crash it if can't find any configuration files.
* Paths supplied to parpg.main are now appended as search paths for the configuration file(s).
* Changed the default configuration file name to "parpg.cfg" to simplify searches.
* Created the site_scons directory tree where SCons extensions and tools should be placed.
* Created a new SCons builder, CopyRecurse, which can copy only certain files and folders from a directory tree using filters (files and folders that start with a leading dot "." e.g. ".svn" are ignored by default).
* Added the CPython SCons tool (stands for Compile-Python - I didn't name it!), which provides the InstallPython builder for pre-compiling python sources before they are installed. However, it is currently broken and only installs the python sources.
author | M. George Hansen <technopolitica@gmail.com> |
---|---|
date | Tue, 31 May 2011 02:46:20 -0700 |
parents | 7a89ea5404b1 |
children | 98f26f7636d8 |
line wrap: on
line source
# This file is part of PARPG. # PARPG is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # PARPG is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with PARPG. If not, see <http://www.gnu.org/licenses/>. from parpg.quest_engine import QuestEngine class GameState(object): """This class holds the current state of the game.""" def __init__(self, quests_dir = None): self.player_character = None self.quest_engine = QuestEngine(quests_dir) self.quest_engine.readQuests() self.objects = {} self.object_ids = {} self.current_map_name = None self.maps = {} def addObject(self, map_id, game_object): """Adds an object to the objects and object_ids dictionaries. @param map_id: ID of the map the object is on. If the object is in a container this has to be None @param object: object to be added @type object: GameObject @type map_id: str or None """ object_id = game_object.ID if not self.object_ids.has_key(object_id): if map_id: self.objects[map_id][object_id] = game_object self.object_ids[object_id] = map_id def deleteObject(self, object_id): """Removes an object from the dictionaries @param object_id: ID of the object @type object_id: str """ if self.hasObject(object_id): map_id = self.getMapOfObject(object_id) if map_id: inst = self.maps[map_id].agent_layer.getInstance(object_id) self.maps[map_id].agent_layer.deleteInstance(inst) del self.objects[map_id][object_id] del self.object_ids[object_id] def getObjectsFromMap(self, map_id): """Gets all objects that are currently on the given map. @type map: String @param map: The map name. @returns: The list of objects on this map. Or an empty list""" if map_id in self.objects: return [i for i in self.objects[map_id].values() \ if map_id in self.objects] return {} def hasObject(self, object_id): """Check if an object with the given id is present @param object_id: ID of the object @type object_id: str @return: True if there is an object False if not """ return self.object_ids.has_key(object_id) def getMapOfObject(self, object_id): """Returns the map the object is on. @param object_id: ID of the object @type object_id: str @return: Name of the map the object is on. If there is no such object or the object is in a container None is returned """ if self.object_ids.has_key(object_id): return self.object_ids[object_id] return None def getObjectById(self, obj_id, map_id = None): """Gets an object by its object id and map id @type obj_id: String @param obj_id: The id of the object. @type map_id: String @param map_id: It id of the map containing the object. @returns: The object or None.""" if not map_id: map_id = self.getMapOfObject(obj_id) if not map_id in self.objects: self.objects[map_id] = {} if obj_id in self.objects[map_id]: return self.objects[map_id][obj_id] def clearObjects(self): """Delete all objects from the state """ self.objects = {} self.object_ids = {} def getStateForSaving(self): """Prepares state for saving @type state: dictionary @param state: State of the object """ ret_dict = {} ret_dict["CurrentMap"] = self.current_map_name ret_dict["Quests"] = self.quest_engine.getStateForSaving() return ret_dict def restoreFromState(self, state): """Restores the state""" self.current_map_name = state["CurrentMap"] self.quest_engine.readQuests() self.quest_engine.restoreFromState(state["Quests"])