Mercurial > parpg-source
changeset 155:f017f8cac2c2
Statistics are being saved and loaded.
author | KarstenBock@gmx.net |
---|---|
date | Sat, 05 Nov 2011 16:04:59 +0100 |
parents | 4dc7951c3bfc |
children | 0655f2f0f3cd |
files | charactercreationcontroller.py components/character_statistics.py gamemodel.py |
diffstat | 3 files changed, 58 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/charactercreationcontroller.py Sat Nov 05 14:53:12 2011 +0100 +++ b/charactercreationcontroller.py Sat Nov 05 16:04:59 2011 +0100 @@ -16,15 +16,12 @@ screen.""" from parpg import vfs -import characterstatistics as char_stats from controllerbase import ControllerBase from gamescenecontroller import GameSceneController from gamesceneview import GameSceneView from parpg.world import World from parpg.entities import General - -DEFAULT_STAT_VALUE = 50 - +from parpg.components import character_statistics def getStatCost(offset): """Gets and returns the cost to increase stat based on the offset""" @@ -98,28 +95,26 @@ self.char_data.characterstats.picture = ( self.PICTURES[self.GENDERS[0]][0] ) - for primary_stat in self.model.primary_stats: - long_name = primary_stat.long_name - self.char_data.characterstats.primary_stats[long_name] = ( - char_stats.PrimaryStatisticValue( - primary_stat, self.char_data.characterstats, - DEFAULT_STAT_VALUE) - ) - for secondary_stat in self.model.secondary_stats: - name = secondary_stat.name - self.char_data.characterstats.secondary_stats[name] = ( - char_stats.SecondaryStatisticValue(secondary_stat, - self.char_data. - characterstats) - ) + self.model.create_stats(self.char_data) self.char_data.container.max_bulk = self.MAX_BULK self.char_data.container.children = inventory - self._stat_points = 200 - - + self._stat_points = 200 + + def update_agent(self): + """Updates the player agent data in the model""" + agent_data = ( + self.model.agents[self.model.ALL_AGENTS_KEY]["PlayerCharacter"] + ) + agent_data["Statistics"] = ( + character_statistics.get_stat_values( + self.char_data.characterstats + )["primary"] + ) + def startNewGame(self): """Create the new character and start a new game. @return: None""" + self.update_agent() view = GameSceneView(self.engine, self.model) controller = GameSceneController(self.engine, view, self.model, self.application)
--- a/components/character_statistics.py Sat Nov 05 14:53:12 2011 +0100 +++ b/components/character_statistics.py Sat Nov 05 16:04:59 2011 +0100 @@ -38,4 +38,12 @@ for stat in stats.primary_stats: if stat.statistic_type.short_name == name: return stat - return None \ No newline at end of file + return None + +def get_stat_values(char_stats): + stats = {"primary":{}, "secondary":{}} + for name, stat in char_stats.primary_stats.iteritems(): + stats["primary"][name] = stat.value + for name, stat in char_stats.secondary_stats.iteritems(): + stats["secondary"][name] = stat.value + return stats \ No newline at end of file
--- a/gamemodel.py Sat Nov 05 14:53:12 2011 +0100 +++ b/gamemodel.py Sat Nov 05 16:04:59 2011 +0100 @@ -33,7 +33,8 @@ from parpg.entities import createEntity from parpg import behaviours from parpg import components -from parpg.components import fifeagent, container, equip +from parpg.components import fifeagent, container, equip, character_statistics +import characterstatistics as char_stats try: import xml.etree.cElementTree as ElementTree @@ -53,6 +54,7 @@ ALL_AGENTS_KEY = "All" MAX_ID_NUMBER = 1000 GENERIC_ITEM_GFX = "generic_item" + DEFAULT_STAT_VALUE = 50 def __init__(self, engine, settings): """Initialize the instance. @@ -107,6 +109,22 @@ self.primary_stats = [] self.secondary_stats = [] + def create_stats(self, entity): + for primary_stat in self.primary_stats: + long_name = primary_stat.long_name + entity.characterstats.primary_stats[long_name] = ( + char_stats.PrimaryStatisticValue( + primary_stat, entity.characterstats, + self.DEFAULT_STAT_VALUE) + ) + for secondary_stat in self.secondary_stats: + name = secondary_stat.name + entity.characterstats.secondary_stats[name] = ( + char_stats.SecondaryStatisticValue(secondary_stat, + entity.characterstats + ) + ) + def checkAttributes(self, attributes, template): """Checks for attributes that where not given in the map file and fills them with values from the object database @@ -434,12 +452,16 @@ if (entity_data.has_key("containable") and not entity_data["containable"].has_key("item_type") ): - entity_data["containable"]["item_type"] = template - - + entity_data["containable"]["item_type"] = template + obj = self.createMapObject(self.active_map.agent_layer, entity_data, inst_id, world) + if agent.has_key("Statistics"): + self.create_stats(obj) + for name, val in agent["Statistics"].iteritems(): + obj.characterstats.primary_stats[name].value = val + if agent.has_key("Inventory"): inv = agent["Inventory"] self.createInventoryItems(inv, obj, world) @@ -749,6 +771,12 @@ if all_agents.has_key(identifier): agent_data["Map"] = map_id agent_data["Rotation"] = inst.getRotation() + elif name == "characterstats": + agent_data["Statistics"] = ( + character_statistics.get_stat_values( + entity.characterstats + )["primary"] + ) elif name == "container" and hasattr(comp_vals, "children"): inventory_data = {} @@ -774,8 +802,7 @@ equipable.entity.general.identifier } agent_data["Equipment"] = equip_data - agent_data["Entity"] = entity_data - + agent_data["Entity"] = entity_data def getAgentImportFiles(self): """Searches the agents directory for import files """