1 """A collection of slides and hotspots that together
2 represent an item within the game world."""
3 import pyzzle
4 from pyzzle.Slide import Slide
5 from pyzzle.Hotspot import Hotspot
6 from pyzzle.Panel import Panel
7 from pygame.sprite import Group
8 from pygame.rect import Rect
9 from RelativeRect import RelativeRect
10 from DB import Table,Row
11 import standard
14 """A collection of slides and hotspots that together
15 represent an item within the game world.
16
17 @warning: The Item class is still very early in design,
18 and I reserve the right to radically change as I see fit.
19 You have been warned.
20 """
21 __metaclass__=Table
22
23 inventory=Group()
24
25 @staticmethod
27 row=Row(cells)
28 gameSlide=Slide[row.gameslide] if row.gameslide else None
29 gameHotspot=Hotspot[row.gamehotspot] if row.gamehotspot else None
30 menuSlide=Slide[row.menuslide] if row.menuslide else None
31 closeupSlide=Slide[row.closeupslide] if row.closeupslide else None
32
33 item=Item(gameSlide, gameHotspot, row.takenfile,
34 menuSlide, closeupSlide, id=row.id, taken=row.taken)
35
36 return item
37 - def __init__(self,
38 gameSlide, gameHotspot, takenfile,
39 menuSlide, closeupSlide=None,
40 id=None, taken=False,
41 onTake=lambda item:None, onUse=lambda item:None):
42 if id: Item.rows[id]=self
43
44 self.menuSlide=menuSlide
45 if menuSlide:
46 self.menuHotspot=Hotspot(self.menuSlide, None, onClick=self.use,
47 cursor='grab.png', rectRel=RelativeRect((0,0,1,1)))
48 self.menuSlide.add(self.menuHotspot)
49
50
51 self.closeupSlide=closeupSlide
52 if self.closeupSlide:
53 self.closeupPanel=Panel()
54 self.closeupPanel._layer=11
55 self.closeupPanel.rect=pyzzle.screen.get_rect()
56 self.closeupHotspot=Hotspot(self.closeupSlide, None, onClick=self.exit,
57 cursor='fwd.png', layer=-1)
58 self.closeupHotspot.rect=pyzzle.screen.get_rect()
59 self.closeupSlide.parent=self.closeupPanel
60 self.closeupSlide._getRect()
61
62
63 self.gameSlide=gameSlide
64 if type(gameHotspot) == Hotspot:
65 self.gameHotspot=gameHotspot
66 else:
67 self.gameHotspot=Hotspot(self.gameSlide, None, rectRel=gameHotspot)
68 self.gameHotspot.cursor='grab.png'
69 self.gameHotspot.onClick=self.take
70 self.gameHotspot.parent=self.gameSlide
71 self.takenfile=takenfile
72
73 self.taken=taken
74 if taken and self.menuSlide:
75 self.inventory.add(self.menuSlide)
76 elif gameSlide:
77 gameSlide.add(self.gameHotspot)
78
79 self.onUse=onUse
80 self.onTake=onTake
82 if self.gameSlide and self.takenfile:
83 self.gameSlide.remove(self.gameHotspot)
84 self.gameSlide.file = self.takenfile
85 if self.menuSlide:
86 self.inventory.add(self.menuSlide)
87 self.taken=True
88 self.onTake(self)
89 - def take(self, *param):
90 self.add()
91 if self.closeupSlide:
92 self.use()
93 - def exit(self, *param):
94 if self.menuSlide:
95 self.inventory.add(self.menuSlide)
96 self.closeupPanel.empty()
97 pyzzle.scrollUp(oldslide=self.closeupPanel, newslide=None, delay=.1)
98 - def use(self, *param):
99 self.onUse(self)
100 if self.closeupSlide:
101 self.drop()
102 self.closeupPanel.add(self.closeupSlide)
103 self.closeupPanel.add(self.closeupHotspot)
104 pyzzle.scrollDown(oldslide=None, newslide=self.closeupPanel, delay=.1)
108