root/src/state.py @ 133

Revision 133, 4.8 KB (checked in by jelinson, 2 years ago)

corrected all paths

Line 
1'''
2Created on Feb 18, 2012
3
4@author: TechTrek
5'''
6
7from globals import *
8from spec import *
9from buildables import *
10from window import *
11from fileio import *
12
13class State():
14   
15    def __init__(self,newSpec):
16        self.specs = newSpec
17        self.currentBuildings = []
18        self.currentResearch = [0,0,0]
19       
20    def copy(self):
21        specCopy = self.specs.copy()
22        return State(specCopy)
23   
24    def checkThresh(self,building):
25        stats = building.getStats()
26        thresholds = building.getThreshold()
27        if stats.initSpecs.getMoney() <= self.specs.getMoney():
28            if stats.initSpecs.getMaterial() <= self.specs.getMaterial():
29                if thresholds[0] <= self.currentResearch[0] and \
30                thresholds[1] <= self.currentResearch[1] and \
31                thresholds[2] <= self.currentResearch[2]:
32                    return True
33        return False
34   
35    # ONE DOES NOT SIMPLY ADD A BUILDING!!!
36    def addBuilding(self,building):
37        if isinstance(building, str) and DEBUG:
38            print "Fuck"
39        self.currentBuildings.append(building)
40        self.updateOnetime(building)
41        if DEBUG:
42            print "Added:", building, " Current buildings: ", self.currentBuildings
43   
44   
45    def research(self,researchType,amount):
46        change = Spec(amount,0,0,0,0)
47        self.specs -= change
48        self.currentResearch[researchType] += amount
49       
50    def getBuildings(self):
51        return self.currentBuildings
52
53
54    def updateOnetime(self,building):
55        self.specs -= building.getStats().getInit()
56       
57    def returnUpdateStats(self):   
58        spec = Spec(-50,0,0,0,0)
59        for building in self.currentBuildings:
60            spec -= building.getStats().getCont()
61        return spec
62   
63    def updateCont(self,change):
64        self.specs -= change
65   
66    def getMoney(self):
67        return self.specs.getMoney()
68
69    def displayStats(self):
70        stats = self.specs.getAllStats()
71       
72        statBars = Window('',600,480)
73        statBars.setDefaultResponse(Response('windows',[],False,True))
74        buildIcon = WindowEntry(Response('windows',[],False,False))
75        buildIcon.addRectangle(Rectangle((0,0),STAT_W,STAT_H,GRAY))
76        statBars.addEntry(buildIcon)
77       
78        i = 0
79        for (name, value, color) in stats:
80            buildIcon = WindowEntry(Response('stats',[],False,False, name))
81            buildArt = pygame.image.load(os.path.abspath(iconDir + os.sep + name + '.png'))
82            buildIcon.addImage(Image((30+STAT_SHIFT*i,240),STAT_ICON_SIZE,STAT_ICON_SIZE,buildArt))
83            # This is a bad way to fix the collisions, but it works
84            # buildIcon.addRectangle(Rectangle((30+STAT_SHIFT*i,240),STAT_ICON_SIZE,STAT_ICON_SIZE,GRAY))
85            buildIcon.addRectangle(Rectangle((40+STAT_SHIFT*i,25),20,205,FAKEBLACK))
86            if value > 200:
87                value = 200
88            buildIcon.addRectangle(Rectangle((40+STAT_SHIFT*i,230 - value),20,value,color))
89            statBars.addEntry(buildIcon)
90            i += 1
91        return statBars
92
93    def displayDetailedStat(self, statID):
94        stat = Window('',600, 480)
95        stat.setDefaultResponse(Response('windows',[], True, True))
96        details = WindowEntry(Response('windows',[], True, True))
97        details.addRectangle(Rectangle((40,50), STAT_W-80, 70, MAUVE))
98        statDescription = statID.capitalize() + ": " + str(self.specs.stringToValue(statID)) + " - "
99        # this text should be dynamic
100        statDescription = statDescription + "To improve this stat, try researching in something intelligent."
101        details.addText(Text((40,50), statDescription, 32, WHITE, STAT_W-80))
102       
103        stat.addEntry(details)
104        return stat
105   
106    def checkLoseConditions(self):
107        # [alert pollution, alert food, end poll, end food]
108        warnings = [False,False,False,False]
109        if self.specs.getPollution() > 150:
110            warnings[0] = True
111        if self.specs.getSpace() < 30:
112            warnings[1] = True
113        if self.specs.getPollution() > 200:
114            warnings[2] = True
115        if self.specs.getSpace() < 0:
116            warnings[3] = True
117        return warnings
118   
119    def checkWinConditions(self):
120        if buildingLUT['spaceship'] in self.currentBuildings:
121            print "I win the game"
122            return True
123        return False
124   
125    def __repr__(self):
126        output = ""
127        output += "Buildings: "
128        for i in self.currentBuildings:
129            output += i.name + ", "
130        output += "\n Specs: "
131       
132        for i in self.specs.getAllStats():
133            statString = i[0] + ': ' + str(i[1]) + ', '
134            output += statString
135        return output
Note: See TracBrowser for help on using the browser.