Mercurial > sypikslang
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 |