class HorizontalHUD: def __init__(self, window, batch, space, level, height, width): self.space = space self.level = level self.height = height self.width = width progress_text = "Progress: ..." self.progress_doc = Document(progress_text, width = width/2) objective_doc = Document(level.objective, width = width/2) left_frame = Frame(VerticalContainer([objective_doc, None, self.progress_doc]), is_expandable = True) self.left_container = VerticalContainer([left_frame]) victory_formula = level.victory_condition[0] info_frame = self.create_info_frame(victory_formula) self.info_container = VerticalContainer([info_frame]) container = HorizontalContainer([self.left_container, self.info_container]) self.manager = Manager(container, window=window, batch=batch, group=RenderingOrder.hud, anchor=ANCHOR_BOTTOM_LEFT, theme=theme, is_movable=False) self.window = window self.window.push_handlers(on_draw=self.on_draw) self.tick = 0 self.init_effects(space, level) def init_effects(self, space, level): pos = (self.left_container.x + self.left_container.width / 2, self.left_container.y + self.left_container.height / 2 - 50) self.victory = Effects.VictoryInventory(space, pos, "Victory Inventory", self.left_container.width, self.left_container.height + 100, level.victory_condition) def get_effects(self): return [self.victory] def update_info_text(self, formula): info_frame = self.create_info_frame(formula) for content in self.info_container.content: self.info_container.remove(content) self.info_container.add(info_frame) def create_info_frame(self, formula): cml = CachedCml.getMolecule(formula) info_text = pyglet.text.decode_html("<b>%s</b><br> %s" % ( cml.property.get("Name", "Undefined"), cml.property.get("Description", "No Description Available") )) info_doc = Document(info_text, height=self.height, width=self.width/2, is_fixed_size = True) info_frame = Frame(info_doc) return info_frame def on_draw(self): self.tick += 1 if self.tick > 30: return self.tick = 0 self.update_progress() def update_progress(self): progress_text = self.victory.progress_text() self.progress_doc.set_text("Progress: " + progress_text) def delete(self): self.window.remove_handlers(on_draw = self.on_draw) self.manager.delete()
class PostWindow(Manager): def __init__(self): g.postWindowOpened = True label1 = Label("Notifications", bold=True, color=g.loginFontColor) closeBtn = HighlightedButton("", on_release=self.delete, width=19, height=19, path='delete') self.postCont = [] #self.menes = [{"name":"Hitler","hp":100,"level":1,"power":50,"defense":40,"speed":60,"sprite":'americanbear'},{"name":"Stalin","hp":100,"level":1,"power":50,"defense":40,"speed":60,"sprite":'lorslara'},{"name":"Ebin","hp":100,"level":1,"power":50,"defense":40,"speed":60,"sprite":'squadlider'},{"name":"Mao","hp":100,"level":1,"power":50,"defense":40,"speed":60,"sprite":'mongolbear'},{"name":"Uusi mene","hp":100,"level":1,"power":50,"defense":40,"speed":60,"sprite":'mongol'},{"name":"Hintti","hp":50,"level":15,"power":60,"defense":50,"speed":70,'sprite':'uusimene'}] #self.selectedMene=self.menes[0]["name"] for c in g.mails: label = Label(c["s"], bold=True, color=g.guiNameColor, font_size=g.theme["font_size"] + 2) label1 = Label(c["t"][:16] + '...', color=g.whiteColor) deleteBtn = HighlightedButton("", on_release=self.deletemail, width=14, height=14, path='delete_alt', argument=c["id"]) openBtn = HighlightedButton("", on_release=self.openmail, width=20, height=21, path='mailopen', argument=c["id"]) self.postCont.append( VerticalContainer(content=[ HorizontalContainer(content=[openBtn, label, deleteBtn]), label1 ], align=HALIGN_LEFT)) self.vertCont = VerticalContainer(self.postCont, align=VALIGN_TOP) self.report = Document("", is_fixed_size=True, height=g.SCREEN_HEIGHT / 2, width=g.SCREEN_WIDTH / 5) self.scrollable = Scrollable(content=self.vertCont, height=g.SCREEN_HEIGHT / 2, width=g.SCREEN_WIDTH / 5) total = HorizontalContainer( content=[self.scrollable, self.report, closeBtn], align=VALIGN_TOP) Manager.__init__( self, Frame(total), window=g.screen, batch=g.guiBatch, is_movable=False, anchor=ANCHOR_LEFT, offset=(40, int(g.SCREEN_HEIGHT * g.WINDOW_POSY_RELATIVE)), theme=g.theme) if len(self.postCont) > 0: self.openmail(self.postCont[0]._content[0]._content[0].arg) #self.changeInfos(self.selectedMene) #print str(int(time.time()*1000-t1)),"TIMEEE" def delete(self, event): super(Manager, self).delete() g.postWindowOpened = False def deletemail(self, event): deleteMail(event) for c in self.postCont: if c._content[0]._content[0].arg == event: self.vertCont.remove(c) self.postCont.remove(c) for d in g.mails: if d["id"] == event: g.mails.remove(d) if len(self.postCont) > 0: self.openmail(self.postCont[0]._content[0]._content[0].arg) self.scrollable.reset_size() else: self.delete(None) g.gameEngine.graphics.normalUI.removeMail() def openmail(self, event): text = '' for c in g.mails: if c["id"] == event: text = c["t"] + '\n\nt. ' + c["s"] self.report.set_text(text)
class TestVerticalContainer(TestPygletGUI): """ This test case tests basic functionality of a vertical container. """ def setUp(self): super(TestVerticalContainer, self).setUp() self.container = VerticalContainer([Viewer(width=50, height=50), Viewer(width=50, height=50)]) self.manager = Manager(self.container, window=self.window, batch=self.batch, theme=self.theme) def _test_content_position(self): """ Tests the position of the two widgets within the container. """ # first widget y is the top y (container.y + container.height) minus its size (container.content[0].height) self.assertEqual(self.container.content[0].y, self.container.y + self.container.height - self.container.content[0].height) # second widget y is the top y (container.y + container.height - container.content[0].height) minus its size # (container.content[1].height) minus the padding (self.container.padding) self.assertEqual(self.container.content[1].y, self.container.y + self.container.height - self.container.content[0].height - self.container.content[1].height - self.container.padding) def test_top_down_draw(self): """ Tests that the container's size was set correctly and the positions of its content is correct. """ # manager size is correct self.assertEqual(self.container.width, 50) self.assertEqual(self.container.height, 100 + self.container.padding) # widget is centered in the window self.assertEqual(self.container.x, self.window.width // 2 - self.container.width // 2) self.assertEqual(self.container.y, self.window.height // 2 - self.container.height // 2) self._test_content_position() def test_bottom_up_draw(self): """ Tests that the manager's size is modified if we set a new size to the widget. """ self.container.content[0].width = 60 self.container.content[0].height = 60 self.container.content[0].parent.reset_size() # container width was set self.assertEqual(self.container.width, 60) # container height was set self.assertEqual(self.container.height, 110 + self.container.padding) # container was re-centered in the window self.assertEqual(self.container.x, self.window.width // 2 - self.container.width // 2) self.assertEqual(self.container.y, self.window.height // 2 - self.container.height // 2) self._test_content_position() def test_add_widget(self): self.container.add(Viewer(width=50, height=50)) self.assertEqual(self.manager.width, 50) self.assertEqual(self.manager.height, 150 + 2 * self.container.padding) self._test_content_position() def test_remove_widget(self): self.container.remove(self.container.content[0]) self.assertEqual(self.manager.width, 50) self.assertEqual(self.manager.height, 50 + self.container.padding) def tearDown(self): self.manager.delete() super(TestVerticalContainer, self).tearDown()
class HorizontalHUD: def __init__(self, window, batch, space, level, height, width): self.space = space self.level = level self.height = height self.width = width progress_text = "Progress: ..." self.progress_doc = Document(progress_text, width=width / 2) objective_doc = Document(level.objective, width=width / 2) left_frame = Frame(VerticalContainer( [objective_doc, None, self.progress_doc]), is_expandable=True) self.left_container = VerticalContainer([left_frame]) victory_formula = level.victory_condition[0] info_frame = self.create_info_frame(victory_formula) self.info_container = VerticalContainer([info_frame]) container = HorizontalContainer( [self.left_container, self.info_container]) self.manager = Manager(container, window=window, batch=batch, group=RenderingOrder.hud, anchor=ANCHOR_BOTTOM_LEFT, theme=theme, is_movable=False) self.window = window self.window.push_handlers(on_draw=self.on_draw) self.tick = 0 self.init_effects(space, level) def init_effects(self, space, level): pos = (self.left_container.x + self.left_container.width / 2, self.left_container.y + self.left_container.height / 2 - 50) self.victory = Effects.VictoryInventory( space, pos, "Victory Inventory", self.left_container.width, self.left_container.height + 100, level.victory_condition) def get_effects(self): return [self.victory] def update_info_text(self, formula): info_frame = self.create_info_frame(formula) for content in self.info_container.content: self.info_container.remove(content) self.info_container.add(info_frame) def create_info_frame(self, formula): cml = CachedCml.getMolecule(formula) info_text = pyglet.text.decode_html( "<b>%s</b><br> %s" % (cml.property.get("Name", "Undefined"), cml.property.get("Description", "No Description Available"))) info_doc = Document(info_text, height=self.height, width=self.width / 2, is_fixed_size=True) info_frame = Frame(info_doc) return info_frame def on_draw(self): self.tick += 1 if self.tick > 30: return self.tick = 0 self.update_progress() def update_progress(self): progress_text = self.victory.progress_text() self.progress_doc.set_text("Progress: " + progress_text) def delete(self): self.window.remove_handlers(on_draw=self.on_draw) self.manager.delete()