comparison gamelib/schematics.py @ 54:168cfac9a445

Power and reliability.
author Jeremy Thurgood <firxen@gmail.com>
date Mon, 07 May 2012 22:43:54 +0200
parents 373c57ab4140
children 52913ba12988
comparison
equal deleted inserted replaced
53:655a6912e0ae 54:168cfac9a445
1 # -*- test-case-name: gamelib.tests.test_schematics -*-
2
1 from gamelib import research 3 from gamelib import research
2 from gamelib.game_base import Science 4 from gamelib.game_base import Science
3 5
4 6
5 # Kinds of schematic. 7 # Kinds of schematic.
8 DOOMSDAY_DEVICE = 'doomsday device' 10 DOOMSDAY_DEVICE = 'doomsday device'
9 PATHOGEN = 'pathogen' 11 PATHOGEN = 'pathogen'
10 12
11 13
12 class Schematic(Science): 14 class Schematic(Science):
15 # For all Schematics
16 SCIENCE_TYPE = 'schematic'
17
18 # Acquisition
19 STARTING_PRODUCT = False
13 ACQUISITION_CHANCE = 0.8 20 ACQUISITION_CHANCE = 0.8
21 CATEGORIES = ()
22
23 # Costs
24 UPGRADE_REQUIREMENT = 1
14 COST = None 25 COST = None
15 UPGRADE_REQUIREMENT = 1 26
16 STARTING_PRODUCT = False 27 # Power and reliability
17 SCIENCE_TYPE = 'schematic' 28 PROTOTYPE_RELIABILITY = 0.4
18 CATEGORIES = () 29 PRODUCTION_RELIABILITY = 0.8
30 BASE_POWER = None
31 POWER_INCREMENT = None
19 32
20 def can_spend(self, lab): 33 def can_spend(self, lab):
21 extra = self.UPGRADE_REQUIREMENT * self.points + 1 34 extra = self.UPGRADE_REQUIREMENT * self.points + 1
22 return lab.meet_requirements(self, extra) 35 return lab.meet_requirements(self, extra)
23 36
24 def is_a(self, category): 37 def is_a(self, category):
25 return category in self.CATEGORIES 38 return category in self.CATEGORIES
39
40 def reliability(self):
41 if self.points:
42 exp = 1 + 0.5 * (self.points - 1)
43 return 1.0 - ((1.0 - self.PRODUCTION_RELIABILITY) ** exp)
44 return self.PROTOTYPE_RELIABILITY
45
46 def power(self):
47 power = self.BASE_POWER
48 if None not in (power, self.POWER_INCREMENT):
49 power += self.POWER_INCREMENT * self.points
50 return power
26 51
27 52
28 class MachineGun(Schematic): 53 class MachineGun(Schematic):
29 NAME = "Machine gun" 54 NAME = "Machine gun"
30 COST = 100 55 COST = 100