Beispiel #1
0
 def __init__(self, font, text_list, midtop, **kwargs):
     """
     Arguments are a font object; a list of strings to make labels from;
     and the midtop point of the topmost label.  A number of keyword
     arguments are accepted to further customize the appearance.
     See ZIPPER_DEFAULTS for the accepted keywords.
     """
     self.process_kwargs("ZipperBlock", ZIPPER_DEFAULTS, kwargs)
     self.stop_x, y = midtop
     self.labels, self.rollers = self.make_labels_rolls(font, text_list, y)
     top = self.labels[0].rect.top
     fade_rect = pg.Rect(300, top, 800, prepare.RENDER_SIZE[1] - top)
     self.fader = Fadeout(fade_rect, prepare.BACKGROUND_BASE)
     self.state = "Zipping"
     self.done = False
Beispiel #2
0
 def __init__(self, font, text_list, midtop, **kwargs):
     """
     Arguments are a font object; a list of strings to make labels from;
     and the midtop point of the topmost label.  A number of keyword
     arguments are accepted to further customize the appearance.
     See ZIPPER_DEFAULTS for the accepted keywords.
     """
     self.process_kwargs("ZipperBlock", ZIPPER_DEFAULTS, kwargs)
     self.stop_x, y = midtop
     self.labels, self.rollers = self.make_labels_rolls(font, text_list, y)
     top = self.labels[0].rect.top
     fade_rect = pg.Rect(300, top, 800, prepare.RENDER_SIZE[1]-top)
     self.fader = Fadeout(fade_rect, prepare.BACKGROUND_BASE)
     self.state = "Zipping"
     self.done = False
Beispiel #3
0
class ZipperBlock(tools._KwargMixin):
    """
    A block of up to five label+rollers that scroll across the screen
    in alternating directions. Used for the credits screen.
    """
    def __init__(self, font, text_list, midtop, **kwargs):
        """
        Arguments are a font object; a list of strings to make labels from;
        and the midtop point of the topmost label.  A number of keyword
        arguments are accepted to further customize the appearance.
        See ZIPPER_DEFAULTS for the accepted keywords.
        """
        self.process_kwargs("ZipperBlock", ZIPPER_DEFAULTS, kwargs)
        self.stop_x, y = midtop
        self.labels, self.rollers = self.make_labels_rolls(font, text_list, y)
        top = self.labels[0].rect.top
        fade_rect = pg.Rect(300, top, 800, prepare.RENDER_SIZE[1]-top)
        self.fader = Fadeout(fade_rect, prepare.BACKGROUND_BASE)
        self.state = "Zipping"
        self.done = False

    def make_labels_rolls(self, font, text_list, y):
        """
        Create each text label and a corresponding roller.  Arguments are
        a font object; a list of strings to make labels from; and the y
        coordinate that the top label starts from.
        """
        labels = []
        rollers = pg.sprite.Group()
        for i, text in enumerate(text_list):
            if not i%2:
                pos = (-self.off, y)
                roll = Roller(pos, random.choice(COLORS), "right", self.speed)
                r = roll.rect
                label = Label(font, self.font_size, text, "goldenrod3",
                              {"midright": (r.left-self.chip_space,r.centery)})
                label.speed = self.speed
            else:
                pos = (SCREEN_WIDTH+self.off, y)
                roll = Roller(pos, random.choice(COLORS), "left", self.speed)
                r = roll.rect
                label = Label(font, self.font_size, text, "goldenrod3",
                              {"midleft": (r.right+self.chip_space,r.centery)})
                label.speed = -self.speed
            label.true_centerx = label.rect.centerx
            label.moving = True
            labels.append(label)
            rollers.add(roll)
            y += self.vert_space
        return labels, rollers

    def update_label(self, label, dt):
        """
        Update the position of a label and set label.moving to False if the
        label passes the center of the screen.
        """
        centerx = label.rect.centerx
        frame_speed = self.speed*dt
        if label.moving:
            label.true_centerx += label.speed*dt
            label.rect.centerx = label.true_centerx
        if self.stop_x-frame_speed < centerx < self.stop_x+frame_speed:
            if label.moving:
                label.rect.centerx = self.stop_x
                label.moving = False

    def update(self, dt):
        """
        Update rollers and labels.  Once the state changes to "Fading", update
        the fader.
        """
        self.rollers.update(dt)
        if self.state == "Zipping":
            for label in self.labels:
                self.update_label(label, dt)
            if not any(label.moving for label in self.labels):
                self.state = "Fading"
        elif self.state == "Fading":
            self.fader.update(dt)
            if self.fader.done:
                self.done = True

    def draw(self, surface):
        """
        Draw all labels; the fader if ready; and any rollers to the target
        surface.
        """
        for label in self.labels:
            label.draw(surface)
        if self.state == "Fading":
            self.fader.draw(surface)
        self.rollers.draw(surface)
Beispiel #4
0
class ZipperBlock(tools._KwargMixin):
    """
    A block of up to five label+rollers that scroll across the screen
    in alternating directions. Used for the credits screen.
    """
    def __init__(self, font, text_list, midtop, **kwargs):
        """
        Arguments are a font object; a list of strings to make labels from;
        and the midtop point of the topmost label.  A number of keyword
        arguments are accepted to further customize the appearance.
        See ZIPPER_DEFAULTS for the accepted keywords.
        """
        self.process_kwargs("ZipperBlock", ZIPPER_DEFAULTS, kwargs)
        self.stop_x, y = midtop
        self.labels, self.rollers = self.make_labels_rolls(font, text_list, y)
        top = self.labels[0].rect.top
        fade_rect = pg.Rect(300, top, 800, prepare.RENDER_SIZE[1] - top)
        self.fader = Fadeout(fade_rect, prepare.BACKGROUND_BASE)
        self.state = "Zipping"
        self.done = False

    def make_labels_rolls(self, font, text_list, y):
        """
        Create each text label and a corresponding roller.  Arguments are
        a font object; a list of strings to make labels from; and the y
        coordinate that the top label starts from.
        """
        labels = []
        rollers = pg.sprite.Group()
        for i, text in enumerate(text_list):
            if not i % 2:
                pos = (-self.off, y)
                roll = Roller(pos, random.choice(COLORS), "right", self.speed)
                r = roll.rect
                label = Label(
                    font, self.font_size, text, "goldenrod3",
                    {"midright": (r.left - self.chip_space, r.centery)})
                label.speed = self.speed
            else:
                pos = (SCREEN_WIDTH + self.off, y)
                roll = Roller(pos, random.choice(COLORS), "left", self.speed)
                r = roll.rect
                label = Label(
                    font, self.font_size, text, "goldenrod3",
                    {"midleft": (r.right + self.chip_space, r.centery)})
                label.speed = -self.speed
            label.true_centerx = label.rect.centerx
            label.moving = True
            labels.append(label)
            rollers.add(roll)
            y += self.vert_space
        return labels, rollers

    def update_label(self, label, dt):
        """
        Update the position of a label and set label.moving to False if the
        label passes the center of the screen.
        """
        centerx = label.rect.centerx
        frame_speed = self.speed * dt
        if label.moving:
            label.true_centerx += label.speed * dt
            label.rect.centerx = label.true_centerx
        if self.stop_x - frame_speed < centerx < self.stop_x + frame_speed:
            if label.moving:
                label.rect.centerx = self.stop_x
                label.moving = False

    def update(self, dt):
        """
        Update rollers and labels.  Once the state changes to "Fading", update
        the fader.
        """
        self.rollers.update(dt)
        if self.state == "Zipping":
            for label in self.labels:
                self.update_label(label, dt)
            if not any(label.moving for label in self.labels):
                self.state = "Fading"
        elif self.state == "Fading":
            self.fader.update(dt)
            if self.fader.done:
                self.done = True

    def draw(self, surface):
        """
        Draw all labels; the fader if ready; and any rollers to the target
        surface.
        """
        for label in self.labels:
            label.draw(surface)
        if self.state == "Fading":
            self.fader.draw(surface)
        self.rollers.draw(surface)