Mercurial > parpg-source
diff charactercreationcontroller.py @ 113:c76f03c290f6
Removed imports of the old objects.
author | KarstenBock@gmx.net |
---|---|
date | Sat, 01 Oct 2011 14:39:27 +0200 |
parents | 7b31de1dc964 |
children | 8bb84164e6a2 |
line wrap: on
line diff
--- a/charactercreationcontroller.py Sat Oct 01 14:38:56 2011 +0200 +++ b/charactercreationcontroller.py Sat Oct 01 14:39:27 2011 +0200 @@ -21,7 +21,8 @@ from controllerbase import ControllerBase from gamescenecontroller import GameSceneController from gamesceneview import GameSceneView -from parpg.inventory import Inventory +from parpg.world import World +from parpg.entities import General DEFAULT_STAT_VALUE = 50 @@ -52,40 +53,8 @@ return 9 else: return 10 - -#TODO: Should be replaced with the real character class once its possible -class SimpleCharacter(object): - """This is a simple class that is used to store the data during the - character creation""" - - def __init__(self, name, gender, origin, age, picture, traits, - primary_stats, secondary_stats, inventory): - self.name = name - self.gender = gender - self.origin = origin - self.age = age - self.picture = picture - self.traits = traits - self.statistics = {} - for primary_stat in primary_stats: - short_name = primary_stat.short_name - self.statistics[short_name] = char_stats.PrimaryStatisticValue( - primary_stat, - self, - DEFAULT_STAT_VALUE) - long_name = primary_stat.long_name - self.statistics[long_name] = char_stats.PrimaryStatisticValue( - primary_stat, - self, - DEFAULT_STAT_VALUE) - for secondary_stat in secondary_stats: - name = secondary_stat.name - self.statistics[name] = char_stats.SecondaryStatisticValue( - secondary_stat, - self) - self.inventory = inventory -class CharacterCreationController(ControllerBase): +class CharacterCreationController(ControllerBase, World): """Controller defining the behaviour of the character creation screen.""" #TODO: Change to actual values @@ -96,6 +65,9 @@ GENDERS = ["Male", "Female",] PICTURES = {"Male": ["None",], "Female": ["None",],} TRAITS = {} + MAX_BULK = 100 + INV_SLOTS = 20 + def __init__(self, engine, view, model, application): """Construct a new L{CharacterCreationController} instance. @param engine: Rendering engine used to display the associated view. @@ -109,10 +81,10 @@ @type application: L{fife.extensions.basicapplication.ApplicationBase}""" ControllerBase.__init__(self, engine, view, model, application) + World.__init__(self) self.settings = self.model.settings self.view.start_new_game_callback = self.startNewGame self.view.cancel_new_game_callback = self.cancelNewGame - self.view.show() # FIXME M. George Hansen 2011-06-06: character stats scripts aren't # finished, unfortunately. # primary_stats_file = \ @@ -121,19 +93,35 @@ # secondary_stats_file = \ # vfs.VFS.open('character_scripts/secondary_stats.xml') # secondary_stats = XmlSerializer.deserialize(secondary_stats_file) + + def reset_character(self): primary_stats = [] secondary_stats = [] - self.char_data = SimpleCharacter( - "", - self.GENDERS[0], - self.ORIGINS.keys()[0], - 20, - self.PICTURES[self.GENDERS[0]][0], - [], - primary_stats, - secondary_stats, - Inventory() + inventory = [] + for x in xrange(self.INV_SLOTS): + inventory.append(None) + self.char_data = General(self, "PlayerCharacter") + self.char_data.description.view_name = "Player" + self.char_data.description.real_name = "Enter name here" + self.char_data.characterstats.gender = self.GENDERS[0] + self.char_data.characterstats.origin = self.ORIGINS.keys()[0] + self.char_data.characterstats.age = 20 + self.char_data.characterstats.picture = ( + self.PICTURES[self.GENDERS[0]][0] ) + for primary_stat in primary_stats: + short_name = primary_stat.short_name + self.char_data.characterstats.primary_stats[short_name] = ( + char_stats.PrimaryStatisticValue( + primary_stat, self, DEFAULT_STAT_VALUE) + ) + for secondary_stat in secondary_stats: + name = secondary_stat.name + self.char_data.characterstats.secondary_stats[name] = ( + char_stats.SecondaryStatisticValue(secondary_stat, self) + ) + self.char_data.container.max_bulk = self.MAX_BULK + self.char_data.container.children = inventory self._stat_points = 200 @@ -161,6 +149,10 @@ self.application.view = view self.application.manager.activate_mode(controller) + def on_activate(self): + self.reset_character() + self.view.show() + def on_deactivate(self): """Called when the controller is removed from the list. @return: None""" @@ -170,30 +162,30 @@ def name(self): """Returns the name of the character. @return: Name of the character""" - return self.char_data.name + return self.char_data.description.real_name @property def age(self): """Returns the age of the character. @return: Age of the character""" - return self.char_data.age + return self.char_data.characterstats.age @property def gender(self): """Returns the gender of the character. @return: Gender of the character""" - return self.char_data.gender + return self.char_data.characterstats.gender @property def origin(self): """Returns the origin of the character. @return: Origin of the character""" - return self.char_data.origin + return self.char_data.characterstats.origin @property def picture(self): """Returns the ID of the current picture of the character.""" - return self.char_data.picture + return self.char_data.characterstats.picture def getStatPoints(self): """Returns the remaining statistic points that can be distributed""" @@ -206,7 +198,8 @@ if self.canIncreaseStatistic(statistic): cost = self.getStatisticIncreaseCost(statistic) if cost <= self._stat_points: - self.char_data.statistics[statistic].value += 1 + (self.char_data.characterstats. + primary_stats[statistic].value) += 1 self._stat_points -= cost def getStatisticIncreaseCost(self, statistic): @@ -214,7 +207,8 @@ @param statistic: Name of the statistic to increase @type statistic: string @return cost to increase the statistic""" - cur_value = self.char_data.statistics[statistic].value + cur_value = (self.char_data.characterstats. + primary_stats[statistic].value) new_value = cur_value + 1 offset = new_value - DEFAULT_STAT_VALUE return getStatCost(offset) @@ -224,7 +218,7 @@ @param statistic: Name of the statistic to check @type statistic: string @return: True if the statistic can be increased, False if not.""" - stat = self.char_data.statistics[statistic].value + stat = self.char_data.characterstats.primary_stats[statistic].value return stat < stat.statistic_type.maximum def decreaseStatistic(self, statistic): @@ -233,7 +227,7 @@ @type statistic: string""" if self.canDecreaseStatistic(statistic): gain = self.getStatisticDecreaseGain(statistic) - self.char_data.statistics[statistic].value -= 1 + self.char_data.characterstats.primary_stats[statistic].value -= 1 self._stat_points += gain def getStatisticDecreaseGain(self, statistic): @@ -241,7 +235,8 @@ @param statistic: Name of the statistic to decrease @type statistic: string @return cost to decrease the statistic""" - cur_value = self.char_data.statistics[statistic].value + cur_value = (self.char_data.characterstats. + primary_stats[statistic].value) new_value = cur_value - 1 offset = new_value - DEFAULT_STAT_VALUE return getStatCost(offset) @@ -251,7 +246,7 @@ @param statistic: Name of the statistic to check @type statistic: string @return: True if the statistic can be decreased, False if not.""" - stat = self.char_data.statistics[statistic].value + stat = self.char_data.characterstats.primary_stats[statistic].value return stat > stat.statistic_type.minimum def getStatisticValue(self, statistic): @@ -259,12 +254,17 @@ @param statistic: Name of the primary or secondary statistic @type statistic: string @return: Value of the given statistic""" - return self.char_data.statistics[statistic] + if self.char_data.characterstats.primary_stats.has_key: + return self.char_data.characterstats.primary_stats[statistic] + else: + return self.char_data.characterstats.secondary_stats[statistic] def areAllStatisticsValid(self): """Checks if all statistics are inside the minimum/maximum values @return True if all statistics are valid False if not""" - for stat in self.char_data.statistics.items(): + all_stats = self.char_data.characterstats.primary_stats.items() + all_stats.extend(self.char_data.characterstats.secondary_stats.items()) + for stat in all_stats: if not (stat.value > stat.statistic_type.minumum and\ stat.value < stat.statistic_type.maximum): return False @@ -274,7 +274,7 @@ """Sets the name of the character to the given value. @param name: New name @type name: string""" - self.char_data.name = name + self.char_data.description.real_name = name def isNameValid(self, name): """Checks whether the name is valid. @@ -290,7 +290,7 @@ @param origin: New origin @type origin: string""" if self.isOriginValid(origin): - self.char_data.origin = origin + self.char_data.characterstats.origin = origin #TODO: Make changes according to origin def isOriginValid(self, origin): @@ -305,7 +305,7 @@ @param gender: New gender @param gender: string""" if self.isGenderValid(gender): - self.char_data.gender = gender + self.char_data.characterstats.gender = gender def isGenderValid(self, gender): """Checks whether the gender is valid. @@ -320,7 +320,7 @@ @type age: integer """ if self.isAgeValid(age): - self.char_data.age = age + self.char_data.characterstats.age = age def isAgeValid(self, age): """Checks whether the age is valid. @@ -334,7 +334,7 @@ @param picture: ID of the new picture @type picture: string""" if self.isPictureValid(picture): - self.char_data.picture = picture + self.char_data.characterstats.picture = picture def isPictureValid(self, picture): """Checks whether the picture is valid. @@ -349,26 +349,26 @@ @type trait: string""" if self.canAddAnotherTrait() and self.isTraitValid(trait)\ and not self.hasTrait(trait): - self.char_data.traits.append(trait) + self.char_data.characterstats.traits.append(trait) def canAddAnotherTrait(self): """Checks whether another trait can be added. @return: True if another trait can be added, False if not""" - return len(self.char_data.traits) < self.MAX_TRAITS + return len(self.char_data.characterstats.traits) < self.MAX_TRAITS def removeTrait(self, trait): """Remove trait from character. @param trait: ID of the trait to remove @type trait: string""" if self.hasTrait(trait): - self.char_data.traits.remove(trait) + self.char_data.characterstats.traits.remove(trait) def hasTrait(self, trait): """Checks whether the character has the trait. @param trait: ID of the trait to check @type trait: string @return: True if the character has the trait, False if not""" - return trait in self.char_data.traits + return trait in self.char_data.characterstats.traits def isTraitValid(self, trait): """Checks whether the trait is valid. @@ -380,9 +380,9 @@ def areCurrentTraitsValid(self): """Checks whether the characters traits are valid. @return: True if the traits are valid, False if not""" - if len(self.char_data.traits) > self.MAX_TRAITS: + if len(self.char_data.characterstats.traits) > self.MAX_TRAITS: return False - for trait in self.char_data.traits: + for trait in self.char_data.characterstats.traits: if not self.isTraitValid(trait): return False return True