Mercurial > rinkhals
view gamelib/gameboard.py @ 36:5569430fd82e
Display cleanup and rationalisation.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Mon, 31 Aug 2009 12:55:00 +0000 |
parents | 8f6c6a54a099 |
children | 497b53b69280 |
line wrap: on
line source
import pygame from pygame.locals import MOUSEBUTTONDOWN from pgu import gui import data import tiles # FIXME: These should probably be proper events of some kind. SELL_CHICKEN = None SELL_EGG = None BUY_FENCE = 2 BUY_HENHOUSE = 3 class ToolBar(gui.Table): def __init__(self, gameboard, **params): gui.Table.__init__(self, **params) self.gameboard = gameboard self.add_tool_button("Sell chicken", SELL_CHICKEN) self.add_tool_button("Sell egg", SELL_EGG) self.add_tool_button("Buy fence", BUY_FENCE) self.add_tool_button("Buy henhouse", BUY_HENHOUSE) def add_tool_button(self, text, tool): button = gui.Button(text) button.connect(gui.CLICK, lambda: self.gameboard.set_selected_tool(tool)) self.tr() self.add(button) class VidWidget(gui.Widget): def __init__(self, gameboard, vid, **params): gui.Widget.__init__(self, **params) self.gameboard = gameboard self.vid = vid self.width = params.get('width', 0) self.height = params.get('height', 0) def paint(self, surface): self.vid.paint(surface) def update(self, surface): return self.vid.update(surface) def resize(self, width=0, height=0): if width is not None: self.width = width if height is not None: self.height = height return self.width, self.height def event(self, e): if e.type == MOUSEBUTTONDOWN: self.gameboard.use_tool(e) class GameBoard(object): TILE_DIMENSIONS = (20, 20) TOOLBAR_WIDTH = 140 def __init__(self): self.tv = tiles.FarmVid() self.tv.tga_load_tiles(data.filepath('tiles.tga'), self.TILE_DIMENSIONS) self.tv.png_folder_load_tiles(data.filepath('tiles')) self.tv.tga_load_level(data.filepath('level1.tga')) self.selected_tool = None self.chickens = [] self.foxes = [] self.create_disp() def create_disp(self): width, height = pygame.display.get_surface().get_size() tbl = gui.Table() tbl.tr() tbl.td(ToolBar(self), width=self.TOOLBAR_WIDTH) tbl.td(VidWidget(self, self.tv, width=width-self.TOOLBAR_WIDTH, height=height)) self.disp = gui.App() self.disp.init(tbl) def paint(self, screen): self.disp.paint(screen) def update(self, screen): return self.disp.update(screen) def loop(self): self.tv.loop() def set_selected_tool(self, tool): self.selected_tool = tool def use_tool(self, e): if self.selected_tool is None: return pos = self.tv.screen_to_tile(e.pos) self.tv.set(pos, self.selected_tool) def event(self, e): self.disp.event(e) def clear_foxes(self): for fox in self.foxes: self.tv.sprites.remove(fox) self.foxes = [] # Remove all the foxes def move_foxes(self): for fox in self.foxes: fox.move(self) def add_chicken(self, chicken): self.chickens.append(chicken) self.tv.sprites.append(chicken) def add_fox(self, fox): self.foxes.append(fox) self.tv.sprites.append(fox) def remove_fox(self, fox): if fox in self.foxes: self.foxes.remove(fox) self.tv.sprites.remove(fox) def remove_chicken(self, chick): if chick in self.chickens: self.chickens.remove(chick) self.tv.sprites.remove(chick)