import interface from g import g from random import randint class DCall(object): def __init__(self, func, args): self.func = func self.args = args def __call__(self, *a2): self.func(*self.args) class MyEventHandler(interface.IEventHandler): def load(self): self.accept_keys = self.accept_keys = { g.prefs['key_toggle_character_sheet']: g.character_sheet.retract, g.prefs['key_toggle_inventory']: g.inventory_sheet.retract, # g.prefs['key_scroll_left']: DCall(g.level.scroll,(-64,0)), g.prefs['key_scroll_right']: DCall(g.level.scroll,(64,0)), g.prefs['key_scroll_up']: DCall(g.level.scroll,(0,-64)), g.prefs['key_scroll_down']: DCall(g.level.scroll,(0,64)), } def raw_event(self, event): if event.type == pygame.QUIT: g.done = True def accept_key(self, uni, key, mods): if key in self.accept_keys: return True def handle_key(self, uni, key, mods): self.accept_keys[key](mods) class DragSpawn(interface.button.ITextButton): #drop_destination = True def handle_unclick(self, lx, ly): self.start_drag(g.resources.get("Image", self.p.get("thing"))) #def accept_drop(self, item, x, y): # if not self.rect.collidepoint(x,y): return False # print "Accepted this:", item # return True #def handle_drop(self, item): # print "this was dropped:", item class XLockedMoveButton(interface.button.IButton): def handle_click(self, lx, ly): if self.archon.p.get('movable', False): if self.archon.mouse_follow_y: self.archon.mouse_follow_y = None else: x, y = pygame.mouse.get_pos() x = self.archon.rect.x-x y = self.archon.rect.y-y self.archon.mouse_follow_y = x,y class PainButton(interface.button.IButton): def handle_click(self, lx, ly): g.character_sheet.hp_bar.set_value(randint(0,100)) class MoveButton(interface.button.IButton): def handle_click(self, lx, ly): if self.archon.p.get('movable', False): if self.archon.mouse_follow: self.archon.mouse_follow = None else: x, y = pygame.mouse.get_pos() x = self.archon.rect.x-x y = self.archon.rect.y-y self.archon.mouse_follow = x,y #class ChatWindow(interface.window.IWindow): # pass class InventoryWindow(interface.window.IWindow): #class DropButton(interface.button.ITextButton): # pass def load(self): self.encumbrance_bar = interface.bar.IHealthBar(self, w=1, h=11, y=0.5, x=0.5, maximum=100, color=(60,50,60)) self.encumbrance_bar.set_value(10) interface.text.ILabel(self, x=1.5, y=0.5,w=5,text="Encumbrance") g.inventory_sheet = self def retract(self, mods): if self.rect.x != -775: self.go_to(-775, self.rect.y, 20) else: self.go_to(0, self.rect.y, 20) def handle_click(self, lx, ly): if lx < self.p.w*16 - 10: return self.retract(None) class ActionWindow(interface.window.IWindow): def load(self): # This is NOT satisfactory; we need a real widget to show chat text. self.chat = interface.text.ITextBox(self,x=0.5,y=0.5,w=30,h=4) self.typechat = interface.text.ITextBox(self,x=0.5,y=4.5,w=30,h=1) g.action_sheet = self def retract(self, mods): if self.rect.x != -775: self.go_to(-775, self.rect.y, 20) else: self.go_to(0, self.rect.y, 20) class MainCharsheetWindow(interface.window.IWindow): def load(self): #XLockedMoveButton(self, x=1, y=1) # Health Points self.hp_bar = interface.bar.IHealthBar(self, w=1, h=6, y=0.5, x=8.5, maximum=100, color=(70,50,50)) self.hp_bar.set_value(100) interface.text.ILabel(self, x=7.4, y=0.6, w=2,text="HP") # Stamina Points self.sp_bar = interface.bar.IHealthBar(self, w=1, h=6, y=6.5, x=8.5, maximum=100, color=(50,60,70)) self.sp_bar.set_value(100) interface.text.ILabel(self, x=7.5, y=6.6, w=2,text="SP") # Time Bar self.time_bar = interface.bar.IHealthBar(self, w=1, h=6, y=12.5, x=8.5, maximum=100, color=(60,60,50)) self.time_bar.set_value(100) interface.text.ILabel(self, x=7.0, y=12.6, w=3,text="Time") DragSpawn(self, w=2, h=2, x=5, y=2,text="Smite", thing="Hammer") PainButton(self, w=2, h=2, x=5,y=7,text="Pain") g.character_sheet = self #self.accept_keys = {g.prefs['key_toggle_character_sheet']:self.retract} def handle_click(self, lx, ly): if lx < self.p.w*16 - 10: return self.retract(None) def retract(self, mods): if self.rect.x != -135: self.go_to(-135, self.rect.y, 15) else: self.go_to(0, self.rect.y, 15) def setup(): mcs = MainCharsheetWindow(None, w=10,h=19,movable=True,name='main',theme="TunnelHack") mcs.set_target(-135,0) inw = InventoryWindow(None,w=50,h=12,movable=True,name='inventory',theme="TunnelHack") inw.set_target(-775,304) atn = ActionWindow(None,w=50,h=6,movable=False,name='action',theme="TunnelHack") atn.set_target(0,504) #mcs.rect.x = -16 # does it look better like this to you? -bcs return [mcs, inw, atn] def configurations(): return {'default': [('main', -16, 0)]}