Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 4
0
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()