annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
1 # -*- test-case-name: gamelib.tests.test_schematics -*-
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
2
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3 from gamelib import research
45
1e8f7e694f0c Refactor missions and sciences a bit to reduce duplication.
Jeremy Thurgood <firxen@gmail.com>
parents: 34
diff changeset
4 from gamelib.game_base import Science
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6
49
373c57ab4140 Product -> Schematic.
Jeremy Thurgood <firxen@gmail.com>
parents: 45
diff changeset
7 # Kinds of schematic.
32
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
8 HAND_WEAPON = 'hand weapon'
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
9 VEHICLE = 'vehicle'
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
10 DOOMSDAY_DEVICE = 'doomsday device'
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
11 PATHOGEN = 'pathogen'
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
12
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
13
49
373c57ab4140 Product -> Schematic.
Jeremy Thurgood <firxen@gmail.com>
parents: 45
diff changeset
14 class Schematic(Science):
54
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
15 # For all Schematics
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
16 SCIENCE_TYPE = 'schematic'
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
17
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
18 # Acquisition
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
19 STARTING_PRODUCT = False
6
826b44731323 Start of basic lab implementation.
Jeremy Thurgood <firxen@gmail.com>
parents: 3
diff changeset
20 ACQUISITION_CHANCE = 0.8
54
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
21 CATEGORIES = ()
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
22
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
23 # Costs
17
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
24 UPGRADE_REQUIREMENT = 1
54
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
25 COST = None
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
26
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
27 # Power and reliability
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
28 PROTOTYPE_RELIABILITY = 0.4
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
29 PRODUCTION_RELIABILITY = 0.8
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
30 BASE_POWER = None
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
31 POWER_INCREMENT = None
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32
17
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
33 def can_spend(self, lab):
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
34 extra = self.UPGRADE_REQUIREMENT * self.points + 1
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
35 return lab.meet_requirements(self, extra)
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
36
34
20ed2843adec More categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 32
diff changeset
37 def is_a(self, category):
20ed2843adec More categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 32
diff changeset
38 return category in self.CATEGORIES
20ed2843adec More categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 32
diff changeset
39
54
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
40 def reliability(self):
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
41 if self.points:
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
42 exp = 1 + 0.5 * (self.points - 1)
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
43 return 1.0 - ((1.0 - self.PRODUCTION_RELIABILITY) ** exp)
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
44 return self.PROTOTYPE_RELIABILITY
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
45
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
46 def power(self):
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
47 power = self.BASE_POWER
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
48 if None not in (power, self.POWER_INCREMENT):
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
49 power += self.POWER_INCREMENT * self.points
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
50 return power
168cfac9a445 Power and reliability.
Jeremy Thurgood <firxen@gmail.com>
parents: 49
diff changeset
51
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
52
49
373c57ab4140 Product -> Schematic.
Jeremy Thurgood <firxen@gmail.com>
parents: 45
diff changeset
53 class MachineGun(Schematic):
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
54 NAME = "Machine gun"
15
8865ba0c9c38 Add cost to products
Neil Muller <drnlmuller@gmail.com>
parents: 14
diff changeset
55 COST = 100
32
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
56 CATEGORIES = (HAND_WEAPON,)
17
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
57 STARTING_PRODUCT = True
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
58
20
718d1ec382f7 Deserialise lab data.
Jeremy Thurgood <firxen@gmail.com>
parents: 17
diff changeset
59 def __init__(self, points=0):
17
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
60 self.points = 1
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
61
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
62 def spend_point(self):
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
63 raise NotImplementedError()
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
64
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
65 def can_spend(self, lab):
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
66 return False
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
67
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
68
49
373c57ab4140 Product -> Schematic.
Jeremy Thurgood <firxen@gmail.com>
parents: 45
diff changeset
69 class LightningGun(Schematic):
17
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
70 NAME = "Lightning gun"
32
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
71 COST = 300
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
72 CATEGORIES = (HAND_WEAPON,)
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
73 PREREQUISITES = (
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
74 (research.Tesla, 1),
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
75 )
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
76
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
77
49
373c57ab4140 Product -> Schematic.
Jeremy Thurgood <firxen@gmail.com>
parents: 45
diff changeset
78 class TeslaTank(Schematic):
17
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
79 NAME = "Tesla tank"
32
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
80 COST = 1000
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
81 CATEGORIES = (VEHICLE,)
17
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
82 PREREQUISITES = (
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
83 (research.Tesla, 3),
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
84 )
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
85
10d3db1f1e08 Set up initial research and rework breakthroughs.
Jeremy Thurgood <firxen@gmail.com>
parents: 15
diff changeset
86
49
373c57ab4140 Product -> Schematic.
Jeremy Thurgood <firxen@gmail.com>
parents: 45
diff changeset
87 class DoomsdayVirus(Schematic):
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
88 NAME = "Doomsday virus"
32
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
89 COST = 100000
00aff02bc6fc Product categories.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
90 CATEGORIES = (DOOMSDAY_DEVICE, PATHOGEN)
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
91 PREREQUISITES = (
14
9d61abb3cfaf Better subclass handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 6
diff changeset
92 (research.Biogenetics, 5),
3
6ab4f1ab9eab Very basics of research and products.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
93 )