コード例 #1
0
    def __init__(self, position, texture, levelname, texture_fg):
        """
        Not much to do here.
        """
        self.position = position
        try:
            self.texture = os.path.join(CONFIG.system_path, "levels",
                                        levelname, texture)
            loaders.image(self.texture)
        except pygame.error:
            logging.debug("No texture found here: " + self.texture)
            try:
                self.texture = os.path.join(CONFIG.system_path, "levels",
                                            "common", texture)

            except pygame.error:
                logging.error("Can't load the texture: " + texture)

        if texture_fg:
            try:
                self.texture_fg = os.path.join(CONFIG.system_path, "levels",
                                               levelname, texture_fg)
                loaders.image(self.texture_fg)
            except pygame.error:
                logging.debug("No texture found here: " + self.texture_fg)
                try:
                    self.texture = os.path.join(CONFIG.system_path, "levels",
                                                "common", texture_fg)

                except pygame.error:
                    logging.error("Can't load the texture: " + texture_fg)
        else:
            self.texture_fg = None

        self.collide_rects = []
コード例 #2
0
    def load_main_frame(self):
        """ #FIXME get xapantu to document a little! :P
        """
        self.main_frame = loaders.image(os.path.join(CONFIG.system_path,
            "gui",
            CONFIG.general.THEME,
            "coverflow",
            "frame.png"),
            scale=self.center_size)[0]

        img = loaders.image(self.values[self.index][1])[0]

        #keep the image ratio
        if img.get_height() > img.get_width():
            self.center_image = (
                    self.main_frame.get_width() - self.sizex(25),
                    img.get_height() * (self.main_frame.get_width() -
                        self.sizex(25)) / img.get_width())
        else:
            self.center_image = (
                    img.get_width() * (
                        self.main_frame.get_height() - self.sizey(25))
                    / img.get_height(),
                self.main_frame.get_height()- self.sizey(25))

        self.center_image_indent = (
                self.main_frame.get_width()/2 - self.center_image[0]/2,
                self.main_frame.get_height()/2 - self.center_image[1]/2)
コード例 #3
0
    def update(self):
        self.background = loaders.image(
                os.path.join(
                    CONFIG.system_path, "gui",
                    CONFIG.general.THEME,"keyboard.png"),
                scale=(self.width, self.height))[0]

        self.background_hover = loaders.image(
                os.path.join(
                    CONFIG.system_path,
                    "gui",
                    CONFIG.general.THEME,
                    "keyboard_hover.png"),
                scale=(self.width, self.height))[0]

        text = loaders.text(self.letter, self.font)
        if text.get_width() > self.width:
            text = pygame.transform.smoothscale(
                    text, (
                        self.width,
                        self.width * text.get_height() / text.get_width()))

        posx = self.width/2 - text.get_width()/2
        posy = self.height/2 - text.get_height()/2
        self.surface = loaders.image_layer(self.background_hover,
                text, (posx, posy))
        self.surface_hover = loaders.image_layer(self.background,
                text, (posx, posy))
        self.screen = pygame.display.get_surface()
コード例 #4
0
    def __init__(self, node):
        self.last_update = 0
        self.current = 0
        sizex = int(node.attrib["sizex"]) * CONFIG.general.WIDTH/800
        sizey = int(node.attrib["sizey"]) * CONFIG.general.HEIGHT/600
        self.frame = []
        if "type" in node.attrib:
            self.x = int(node.attrib["x"]) * CONFIG.general.WIDTH/800
            self.y = int(node.attrib["y"]) * CONFIG.general.HEIGHT/600
            if node.attrib["type"] == "framebyframe":
                self.type = 1
                for frame in node.findall("frame"):
                    src = loaders.image(join(CONFIG.system_path,
                                                 frame.attrib["src"]),
                                            scale=(sizex, sizey))[0]

                    t = float(frame.attrib["time"])
                    self.frame.append((t, src))
        else:
            self.type = 0
            self.background = loaders.image(join(CONFIG.system_path,
                                                 node.attrib["src"]),
                                            scale=(sizex, sizey))[0]

            for frame in node.findall("frame"):
                x = int(frame.attrib["x"]) * CONFIG.general.WIDTH/800
                y = int(frame.attrib["y"]) * CONFIG.general.HEIGHT/600
                t = float(frame.attrib["time"])
                self.frame.append((t, (x, y)))
コード例 #5
0
    def __init__(self, node):
        self.last_update = 0
        self.current = 0
        sizex = int(node.attrib["sizex"]) * CONFIG.general.WIDTH / 800
        sizey = int(node.attrib["sizey"]) * CONFIG.general.HEIGHT / 600
        self.frame = []
        if "type" in node.attrib:
            self.x = int(node.attrib["x"]) * CONFIG.general.WIDTH / 800
            self.y = int(node.attrib["y"]) * CONFIG.general.HEIGHT / 600
            if node.attrib["type"] == "framebyframe":
                self.type = 1
                for frame in node.findall("frame"):
                    src = loaders.image(join(CONFIG.system_path,
                                             frame.attrib["src"]),
                                        scale=(sizex, sizey))[0]

                    t = float(frame.attrib["time"])
                    self.frame.append((t, src))
        else:
            self.type = 0
            self.background = loaders.image(join(CONFIG.system_path,
                                                 node.attrib["src"]),
                                            scale=(sizex, sizey))[0]

            for frame in node.findall("frame"):
                x = int(frame.attrib["x"]) * CONFIG.general.WIDTH / 800
                y = int(frame.attrib["y"]) * CONFIG.general.HEIGHT / 600
                t = float(frame.attrib["time"])
                self.frame.append((t, (x, y)))
コード例 #6
0
    def __init__(self, text):
        super(Slider, self).__init__()
        self.focusable = False
        self.text = text
        self.keyboard = False
        self.space = 0
        self.parentpos = (0, 0)
        self.extend = False
        self.value = 0
        self.orientation = False

        self.screen = pygame.display.get_surface()
        self.index = 0
        self.state = False
        self.height = optimize_size((250, 25))[1]
        self.width = (
                optimize_size((25, 25))[0] +
                optimize_size((25, 25))[0] +
                optimize_size((100, 25))[0])

        self.background = loaders.image(
                join(CONFIG.system_path, 'gui',
                    CONFIG.general.THEME, 'slider_background.png'),
                scale=(self.width, self.height))[0]

        self.center = loaders.image(
                join(CONFIG.system_path, 'gui',
                    CONFIG.general.THEME, 'slider_center.png'),
                scale=(self.height, self.height))[0]

        self.center_hover = loaders.image(
                join(CONFIG.system_path, 'gui',
                    CONFIG.general.THEME, 'slider_center_hover.png'),
                scale=(self.height, self.height))[0]
コード例 #7
0
    def __init__(self, text):
        super(Slider, self).__init__()
        self.focusable = False
        self.text = text
        self.keyboard = False
        self.space = 0
        self.parentpos = (0, 0)
        self.extend = False
        self.value = 0
        self.orientation = False

        self.screen = pygame.display.get_surface()
        self.index = 0
        self.state = False
        self.height = optimize_size((250, 25))[1]
        self.width = (optimize_size((25, 25))[0] + optimize_size(
            (25, 25))[0] + optimize_size((100, 25))[0])

        self.background = loaders.image(join(CONFIG.system_path, 'gui',
                                             CONFIG.general.THEME,
                                             'slider_background.png'),
                                        scale=(self.width, self.height))[0]

        self.center = loaders.image(join(CONFIG.system_path, 'gui',
                                         CONFIG.general.THEME,
                                         'slider_center.png'),
                                    scale=(self.height, self.height))[0]

        self.center_hover = loaders.image(join(CONFIG.system_path, 'gui',
                                               CONFIG.general.THEME,
                                               'slider_center_hover.png'),
                                          scale=(self.height, self.height))[0]
コード例 #8
0
    def draw_progress_bar_for_lives(self, player):
        """ heh, draw progress bar for lives of the player
        """
        self.screen.blit(
                loaders.image(
                    os.path.join(
                        CONFIG.system_path,
                        'misc',
                        'progress_bar_bg.png'),
                    scale=self.progress_bar_size)[0],
                (
                -0.5 * self.icon_space + player.num * self.icon_space,
                self.progress_bar_x))

        if (self.progress_bar_size[0] -
                self.progress_bar_size[0] * (player.percents * 0.1 + 0.01) > 0):
            self.screen.blit(
                    loaders.image(
                        os.path.join(
                            CONFIG.system_path,
                            'misc',
                            'progress_bar.png'),
                        scale=(self.progress_bar_size[0] -
                            self.progress_bar_size[0] * (
                                player.percents * 0.1 + 0.01),
                            self.progress_bar_size[1]))[0],
                    (
                    -0.5 * self.icon_space + player.num * self.icon_space,
                self.progress_bar_x))
コード例 #9
0
    def load_main_frame(self):
        """ #FIXME get xapantu to document a little! :P
        """
        self.main_frame = loaders.image(os.path.join(CONFIG.system_path, "gui",
                                                     CONFIG.general.THEME,
                                                     "coverflow", "frame.png"),
                                        scale=self.center_size)[0]

        img = loaders.image(self.values[self.index][1])[0]

        #keep the image ratio
        if img.get_height() > img.get_width():
            self.center_image = (
                self.main_frame.get_width() - self.sizex(25),
                img.get_height() *
                (self.main_frame.get_width() - self.sizex(25)) /
                img.get_width())
        else:
            self.center_image = (
                img.get_width() *
                (self.main_frame.get_height() - self.sizey(25)) /
                img.get_height(),
                self.main_frame.get_height() - self.sizey(25))

        self.center_image_indent = (self.main_frame.get_width() / 2 -
                                    self.center_image[0] / 2,
                                    self.main_frame.get_height() / 2 -
                                    self.center_image[1] / 2)
コード例 #10
0
class ImageButton(Image):
    def __init__(self, image, image_hover):
        # FIXME save the path to scale it later -> maybe it is bad for
        # performance?
        super(ImageButton, self).__init__(image)
        if self.properties.has_key("size_request"):
            del (self.properties["size_request"])
        self.path_hover = image_hover
        size = get_scale(loaders.image(CONFIG.system_path + os.sep + image)[0])

        self.set_size((size[0], size[1]))
        self.state = False

    def set_size(self, (w, h)):
        self.height = h
        self.width = w
        self.surface_static = loaders.image(CONFIG.system_path + os.sep +
                                            self.path,
                                            scale=(w, h))[0]

        self.surface_hover = loaders.image(CONFIG.system_path + os.sep +
                                           self.path_hover,
                                           scale=(w, h))[0]

        self.surface = self.surface_static
コード例 #11
0
    def __init__(self, values):
        super(Coverflow, self).__init__()
        self.values = values
        for value in self.values:
            #adding (false) size for the image, there will be updated later
            value.append((None, None))
            value.append(None)

        self.in_anim = False
        self.anim_state = ""
        self.advance = 0

        #compatibility with the others widget only
        self.state = False

        self.set_size((800, 230)) # FIXME hardcoded value
        self.center_size = (self.sizex(195), self.sizey(120))
        self.posy_center = self.sizey(60)
        self.foreground = loaders.image(
                os.path.join(CONFIG.system_path,
                    "gui",
                    CONFIG.general.THEME,
                    "coverflow",
                    "foreground.png"),
                scale=(CONFIG.general.WIDTH, CONFIG.general.HEIGHT))[0]

        self.frame = loaders.image(
                os.path.join(CONFIG.system_path,
                    "gui",
                    CONFIG.general.THEME,
                    "coverflow",
                    "frame.png"),
                scale=(self.sizex(137), self.sizey(86)))

        self.surface = pygame.surface.Surface((self.width, self.height))
        self.index = 0
        self.text = get_text_transparent(self.values[self.index][0])
        self.previous()
        self.load_main_frame()

        for value in self.values:
            size = loaders.image(value[1])[1]
            if size[3] > size[2]:
                value[2] = (
                        self.frame[1][2] - self.sizex(25),
                        size[3] * (
                            self.frame[1][2] - self.sizex(25)) / size[2])
            else:
                value[2] = (
                        size[2] * (
                            self.frame[1][3] - self.sizex(25)) / size[3],
                            self.frame[1][3] - self.sizey(25))

            value[3] = (self.frame[1][2] / 2 - value[2][0]/2,
                        self.frame[1][3] / 2 - value[2][1]/2)

        self.need_update = True
        self.screen = pygame.display.get_surface()
コード例 #12
0
    def draw(self, coords, zoom, surface, debug_params=dict()):
        """
        Draw the entity on the surface(i.e: the screen), applying coordinates
        offsets and zoom scaling as necessary, implementation depends on the
        definition of the global "SIZE", as a 2 elements list of in integers,
        containing respective height and width of the screen.

        coords is a tuple containing the current position of the camera, zoom is
        the current zoom of the camera.

        """
        # Draw a point on the map at the entity position.
        if not self.present:
            return

        if self.visible:
            if not self.reversed:
                place = (self.rect[0] - self.hardshape[0],
                         self.rect[1] - self.hardshape[1])
            else:
                place = (self.rect[0], self.rect[1] - self.hardshape[1])

            real_coords = (int(place[0] * zoom) + coords[0],
                           int(place[1] * zoom) + coords[1])

            self._draw_debug(real_coords, zoom, surface, debug_params)
            if self.entity_skin.animation.trails and self.old_pos:
                for i, (x, y) in enumerate(reversed(self.old_pos)):
                    img = self.entity_skin.animation.trails[len(self.old_pos) -
                                                            (i + 1)]

                    surface.blit(
                        loaders.image(img, reversed=self.reversed,
                                      zoom=zoom)[0],
                        (int(x * zoom) + coords[0] -
                         (not self.reversed and self.hardshape[0] or 0),
                         int(y * zoom) + coords[1] - self.hardshape[1]))

            skin_image = loaders.image(self.entity_skin.animation.image,
                                       reversed=self.reversed,
                                       lighten=self.lighten,
                                       zoom=zoom)

            surface.blit(skin_image[0], real_coords)

            if self.shield['on']:
                image = loaders.image(os.path.sep.join(
                    (CONFIG.system_path, 'misc', 'shield.png')),
                                      zoom=zoom * self.shield['power'] * 3)

                shield_coords = (
                    coords[0] +
                    int(self.rect[0] + self.entity_skin.shield_center[0] -
                        .5 * image[1][2]) * zoom, coords[1] +
                    int(self.rect[1] + self.entity_skin.shield_center[1] -
                        .5 * image[1][3]) * zoom)
                surface.blit(image[0], shield_coords)
コード例 #13
0
    def set_text(self, text):
        """ update the text surface
        """
        self.text = text
        self.surface_text = loaders.text(self.text, fonts['sans']['normal'])

        if self.dynamic_size[0]:
            if 'size_request' in self.properties:
                self.height = max(
                        self.properties['size_request'][1],
                        self.surface_text.get_height() + self.txtmargin * 2)
            else:
                self.height = (
                        self.surface_text.get_height() + self.txtmargin * 2)

        if self.dynamic_size[1]:
            if 'size_request' in self.properties:
                self.width = max(
                        self.properties['size_request'][0],
                        self.surface_text.get_width() + self.txtmargin * 2)

            else:
                self.width = self.surface_text.get_width() + self.txtmargin * 2

        if self.align == "center":
            self.indent = self.width / 2 - self.surface_text.get_width() / 2
        else:
            self.indent = 0

        self.horizontal_indent = (
                self.height / 2 - self.surface_text.get_height() / 2)

        try:
            if self.background_expand:
                self.background = loaders.image(
                    join(
                        CONFIG.system_path, self.background_path),
                    expand=(self.width, self.height, 10))[0]
            else:
                self.background = loaders.image(
                    join(
                        CONFIG.system_path, self.background_path),
                    scale=(self.width, self.height))[0]

            self.surface = loaders.image_layer(
                    self.background,
                    self.surface_text,
                    (self.txtmargin + self.indent, self.horizontal_indent))

        except AttributeError:
            self.surface = self.surface_text
        self.screen = pygame.display.get_surface()
コード例 #14
0
    def set_text(self, text):
        """ update the text surface
        """
        self.text = text
        self.surface_text = loaders.text(self.text, fonts['sans']['normal'])

        if self.dynamic_size[0]:
            if 'size_request' in self.properties:
                self.height = max(
                    self.properties['size_request'][1],
                    self.surface_text.get_height() + self.txtmargin * 2)
            else:
                self.height = (self.surface_text.get_height() +
                               self.txtmargin * 2)

        if self.dynamic_size[1]:
            if 'size_request' in self.properties:
                self.width = max(
                    self.properties['size_request'][0],
                    self.surface_text.get_width() + self.txtmargin * 2)

            else:
                self.width = self.surface_text.get_width() + self.txtmargin * 2

        if self.align == "center":
            self.indent = self.width / 2 - self.surface_text.get_width() / 2
        else:
            self.indent = 0

        self.horizontal_indent = (self.height / 2 -
                                  self.surface_text.get_height() / 2)

        try:
            if self.background_expand:
                self.background = loaders.image(join(CONFIG.system_path,
                                                     self.background_path),
                                                expand=(self.width,
                                                        self.height, 10))[0]
            else:
                self.background = loaders.image(join(CONFIG.system_path,
                                                     self.background_path),
                                                scale=(self.width,
                                                       self.height))[0]

            self.surface = loaders.image_layer(
                self.background, self.surface_text,
                (self.txtmargin + self.indent, self.horizontal_indent))

        except AttributeError:
            self.surface = self.surface_text
        self.screen = pygame.display.get_surface()
コード例 #15
0
    def __init__(self, values):
        super(Coverflow, self).__init__()
        self.values = values
        for value in self.values:
            #adding (false) size for the image, there will be updated later
            value.append((None, None))
            value.append(None)

        self.in_anim = False
        self.anim_state = ""
        self.advance = 0

        #compatibility with the others widget only
        self.state = False

        self.set_size((800, 230))  # FIXME hardcoded value
        self.center_size = (self.sizex(195), self.sizey(120))
        self.posy_center = self.sizey(60)
        self.foreground = loaders.image(os.path.join(CONFIG.system_path, "gui",
                                                     CONFIG.general.THEME,
                                                     "coverflow",
                                                     "foreground.png"),
                                        scale=(CONFIG.general.WIDTH,
                                               CONFIG.general.HEIGHT))[0]

        self.frame = loaders.image(os.path.join(CONFIG.system_path, "gui",
                                                CONFIG.general.THEME,
                                                "coverflow", "frame.png"),
                                   scale=(self.sizex(137), self.sizey(86)))

        self.surface = pygame.surface.Surface((self.width, self.height))
        self.index = 0
        self.text = get_text_transparent(self.values[self.index][0])
        self.previous()
        self.load_main_frame()

        for value in self.values:
            size = loaders.image(value[1])[1]
            if size[3] > size[2]:
                value[2] = (self.frame[1][2] - self.sizex(25), size[3] *
                            (self.frame[1][2] - self.sizex(25)) / size[2])
            else:
                value[2] = (size[2] * (self.frame[1][3] - self.sizex(25)) /
                            size[3], self.frame[1][3] - self.sizey(25))

            value[3] = (self.frame[1][2] / 2 - value[2][0] / 2,
                        self.frame[1][3] / 2 - value[2][1] / 2)

        self.need_update = True
        self.screen = pygame.display.get_surface()
コード例 #16
0
    def update(self, gametime, reverse=False, server=False):
        """
        update the state of the animation.
        """
        if self.playing:
            if (self.duration != 0
                    and gametime - self._start_time > self.duration/1000.0):
                self.playing = 0
                if self.repeat is not 0:
                    #FIXME: repeat will not reset properly
                    self.repeat = max(-1, self.repeat - 1)
                    self.start(gametime)
            else:
                frame = self.frame(gametime - self._start_time)
                self.image = frame.image
                self.trails = frame.trails

                if reverse:
                    self.agressivpoints = frame.agressivpoints_reverse
                    self.hardshape = frame.hardshape_reverse

                else:
                    self.agressivpoints = frame.agressivpoints
                    self.hardshape = frame.hardshape

            self.rect = loaders.image(self.image, nodisplay=server)[1]
コード例 #17
0
    def __init__(self, surface):
        self.screen = surface
        self.game = None
        self.screens = {}
        self.screen_history = []

        self.screens['main_screen'] = MainScreen('main_screen', self.screen)
        self.screens['configure'] = Configure('configure', self.screen)
        self.screens['about'] = About('about', self.screen)
        self.screens['resume'] = Resume('resume', self.screen)
        self.screens['sound'] = Audio('sound', self.screen)
        self.screens['display'] = Display('display', self.screen)
        self.screens['keyboard'] = Keyboard('keyboard', self.screen)
        self.screens['level'] = Level('level', self.screen)
        self.screens['characters'] = Characters('characters', self.screen)
        self.screens['network'] = NetworkScreen('network', self.screen)
        self.screens['network_join'] = NetworkJoinScreen(
                'network_join', self.screen)
        self.screens['network_game_conf_screen'] = NetworkGameConfScreen(
                'network_game_conf_screen', self.screen)

        self.current_screen = 'main_screen'
        self.skin = Skin()
        self.last_event = time.time()
        self.image = 0
        self.focus = None
        self.state = "menu"
        self.cursor = loaders.image(
                CONFIG.system_path + os.sep + 'cursor.png')[0]
        self.update_youhere()
コード例 #18
0
ファイル: gui.py プロジェクト: ntduffy/ultimate-smash-friends
    def __init__(self, surface):
        self.screen = surface
        self.game = None
        self.screens = {}
        self.screen_history = []

        self.screens['main_screen'] = MainScreen('main_screen', self.screen)
        self.screens['configure'] = Configure('configure', self.screen)
        self.screens['about'] = About('about', self.screen)
        self.screens['resume'] = Resume('resume', self.screen)
        self.screens['sound'] = Audio('sound', self.screen)
        self.screens['display'] = Display('display', self.screen)
        self.screens['keyboard'] = Keyboard('keyboard', self.screen)
        self.screens['level'] = Level('level', self.screen)
        self.screens['characters'] = Characters('characters', self.screen)
        self.screens['network'] = NetworkScreen('network', self.screen)
        self.screens['network_join'] = NetworkJoinScreen(
            'network_join', self.screen)
        self.screens['network_game_conf_screen'] = NetworkGameConfScreen(
            'network_game_conf_screen', self.screen)

        self.current_screen = 'main_screen'
        self.skin = Skin()
        self.last_event = time.time()
        self.image = 0
        self.focus = None
        self.state = "menu"
        self.cursor = loaders.image(CONFIG.system_path + os.sep +
                                    'cursor.png')[0]
        self.update_youhere()
コード例 #19
0
    def update(self, gametime, reverse=False, server=False):
        """
        update the state of the animation.
        """
        if self.playing:
            if (self.duration != 0
                    and gametime - self._start_time > self.duration / 1000.0):
                self.playing = 0
                if self.repeat is not 0:
                    #FIXME: repeat will not reset properly
                    self.repeat = max(-1, self.repeat - 1)
                    self.start(gametime)
            else:
                frame = self.frame(gametime - self._start_time)
                self.image = frame.image
                self.trails = frame.trails

                if reverse:
                    self.agressivpoints = frame.agressivpoints_reverse
                    self.hardshape = frame.hardshape_reverse

                else:
                    self.agressivpoints = frame.agressivpoints
                    self.hardshape = frame.hardshape

            self.rect = loaders.image(self.image, nodisplay=server)[1]
コード例 #20
0
    def __init__(self, image, gametime, hardshape, trails=None):
        """
        Load a frame from an image, the current gametime, the deplacement/s of
        the player in this frame, it's hardshape.

        """
        self.image = image
        self.trails = trails
        self.time = int(gametime)
        if type(hardshape) is str:
            self.hardshape = pygame.Rect([int(i) for i in hardshape.split(' ')])
        elif type(hardshape) is pygame.Rect:
            self.hardshape = hardshape
        else:
            logging.error('incorrect type for hardshape: ', hardshape)

        self.hardshape_reverse = (
            loaders.image(self.image)[1][2]
                - self.hardshape[0] - self.hardshape[2],
            self.hardshape[1],
            self.hardshape[2],
            self.hardshape[3])

        self.agressivpoints = []
        self.agressivpoints_reverse = []
コード例 #21
0
    def __init__(self, position, texture, levelname, texture_fg):
        """
        Not much to do here.
        """
        self.position = position
        try:
            self.texture = os.path.join(
                    CONFIG.system_path,
                    "levels",
                    levelname,
                    texture)
            loaders.image(self.texture)
        except pygame.error:
            logging.debug("No texture found here: " + self.texture)
            try:
                self.texture = os.path.join(
                        CONFIG.system_path,
                        "levels",
                        "common",
                        texture)

            except pygame.error:
                logging.error("Can't load the texture: " + texture)

        if texture_fg:
            try:
                self.texture_fg = os.path.join(
                        CONFIG.system_path,
                        "levels",
                        levelname,
                        texture_fg)
                loaders.image(self.texture_fg)
            except pygame.error:
                logging.debug("No texture found here: " + self.texture_fg)
                try:
                    self.texture = os.path.join(
                            CONFIG.system_path,
                            "levels",
                            "common",
                            texture_fg)

                except pygame.error:
                    logging.error("Can't load the texture: " + texture_fg)
        else:
            self.texture_fg = None

        self.collide_rects = []
コード例 #22
0
 def draw_player_lives(self, player):
     """ draw as much hearth as the player has lives on it's portrait
     """
     for i in range(player.lives):
         self.screen.blit(
             loaders.image(
                 os.path.join(CONFIG.system_path, 'misc', 'heart.png'))[0],
             (-0.5 * self.icon_space + player.num * self.icon_space + 32 +
              i * self.icon_space / 40, self.size[1] * .9 + 10))
コード例 #23
0
    def draw(self, surface, coords, zoom):
        '''
        Render the Decorum to a surface
        '''
        real_coords = (int(self.coords[0] * zoom) + coords[0],
                       int(self.coords[1] * zoom) + coords[1])

        surface.blit(
            loaders.image('data/' + self.texture, zoom=zoom)[0], real_coords)
コード例 #24
0
 def draw_debug_player_controls(self, num, controls):
     """ displays current key sequence of player, useful for debuging
     """
     for i, k in enumerate(controls.player_sequences[num]):
         self.screen.blit(
             loaders.image(
                 os.path.join(CONFIG.system_path, 'misc',
                              'key_' + k[0].lower() + '.png'))[0],
             (num * self.size[0] / 4 + i * 50, 0 + 100 * (num % 2)))
コード例 #25
0
    def setImage(self, path):
        """
        With this method, you can change the image.
        'CONFIG.system_path' will be added to 'path'
        """
        self.path = path

        self.surface = loaders.image(CONFIG.system_path + os.sep + self.path,
                                     scale=(self.width, self.height))[0]
コード例 #26
0
    def draw_foreground(self, surface, coords, zoom):
        ''' draw the decorations of the level that are before the player
        '''
        if self.foreground:
            surface.blit(loaders.image(self.foreground, zoom=zoom)[0], coords)

        for d in self.decorums:
            if d.depth >= 0:
                d.draw(surface, coords, zoom)
コード例 #27
0
 def draw_debug_player_controls(self, num, controls):
     """ displays current key sequence of player, useful for debuging
     """
     for i, k in enumerate(controls.player_sequences[num]):
         self.screen.blit(
                 loaders.image(
                     os.path.join(
                         CONFIG.system_path,
                         'misc', 'key_' + k[0].lower() + '.png'))[0],
                 (num * self.size[0] / 4 + i * 50, 0 + 100 * (num % 2)))
コード例 #28
0
    def draw(self, surface, coords=(0, 0), zoom=1):
        """
        Draw this moving bloc on the passed surface, taking account of zoom and
        placement of camera.

        """
        real_coords = (int(self.position[0] * zoom) + coords[0],
                       int(self.position[1] * zoom) + coords[1])

        surface.blit(loaders.image(self.texture, zoom=zoom)[0], real_coords)
コード例 #29
0
    def draw_foreground(self, surface, coords, zoom):
        ''' draw the decorations of the level that are before the player
        '''
        if self.foreground:
            surface.blit(
                    loaders.image(self.foreground, zoom=zoom)[0], coords)

        for d in self.decorums:
            if d.depth >= 0:
                d.draw(surface, coords, zoom)
コード例 #30
0
    def draw(self, surface, coords=(0, 0), zoom=1):
        """
        Draw this moving bloc on the passed surface, taking account of zoom and
        placement of camera.

        """
        real_coords = (int(self.position[0] * zoom) + coords[0],
                int(self.position[1] * zoom) + coords[1])

        surface.blit(loaders.image(self.texture, zoom=zoom)[0], real_coords)
コード例 #31
0
    def draw(self, surface, coords, zoom):
        '''
        Render the Decorum to a surface
        '''
        real_coords = (int(self.coords[0] * zoom) + coords[0],
                int(self.coords[1] * zoom) + coords[1])

        surface.blit(
                loaders.image('data/' + self.texture, zoom=zoom)[0],
                real_coords)
コード例 #32
0
    def draw(self):
        #clear the surface
        #draw the text
        x = self.parentpos[0] + self.x
        y = self.parentpos[1] + self.y
        mask = pygame.surface.Surface((self.width, self.height))
        mask.blit(
                self.surface_text,
                (100,
                    -(self.defil * (
                    self.surface_text.get_height() - self.height)/100)))

        mask.set_colorkey(pygame.color.Color("black"))
        self.screen.blit(mask, (x, y))
        del mask

        #the slider background
        self.screen.blit(loaders.image(join(CONFIG.system_path,
            "gui",
            CONFIG.general.THEME,
            "sliderh_background.png"),
            scale=(self.width_slider, self.height))[0],
            (x + self.pos_slider, y))

        #the slider center
        if self.hover:
            slider_center = "sliderh_center_hover.png"
        else:
            slider_center = "sliderh_center.png"

        self.screen.blit(self.slider.at(self.pos_slider, self.slider_y),
                          (x + self.pos_slider, y + self.slider_y))

        #foreground
        self.screen.blit(loaders.image(join(CONFIG.system_path,
            "gui",
            CONFIG.general.THEME,
            "paragraph_foreground.png"),
            scale=(self.width - self.width_slider*2, self.height))[0],
            (x, y))

        self.start_anim()
コード例 #33
0
    def __init__(self, image, image_hover):
        # FIXME save the path to scale it later -> maybe it is bad for
        # performance?
        super(ImageButton, self).__init__(image)
        if self.properties.has_key("size_request"):
            del (self.properties["size_request"])
        self.path_hover = image_hover
        size = get_scale(loaders.image(CONFIG.system_path + os.sep + image)[0])

        self.set_size((size[0], size[1]))
        self.state = False
コード例 #34
0
    def setImage(self, path):
        """
        With this method, you can change the image.
        'CONFIG.system_path' will be added to 'path'
        """
        self.path = path

        self.surface = loaders.image(
                    CONFIG.system_path+
                    os.sep+
                    self.path, scale=(self.width, self.height))[0]
コード例 #35
0
    def draw_after(self, surface, coords=(0, 0), zoom=1):
        """
        Draw this moving bloc foreground on the passed surface, taking account
        of zoom and placement of camera, if there is one.

        """
        if self.texture_fg:
            real_coords = (int(self.position[0] * zoom) + coords[0],
                    int(self.position[1] * zoom) + coords[1])

            surface.blit(loaders.image(self.texture_fg, zoom=zoom)[0], real_coords)
コード例 #36
0
    def draw_after(self, surface, coords=(0, 0), zoom=1):
        """
        Draw this moving bloc foreground on the passed surface, taking account
        of zoom and placement of camera, if there is one.

        """
        if self.texture_fg:
            real_coords = (int(self.position[0] * zoom) + coords[0],
                           int(self.position[1] * zoom) + coords[1])

            surface.blit(
                loaders.image(self.texture_fg, zoom=zoom)[0], real_coords)
コード例 #37
0
    def draw_background(self, surface, coords=(0, 0), zoom=1):
        ''' Draw the background image of the level on the surface
        '''
        surface.blit(
            loaders.image(self.background, scale=self.size)[0], (0, 0))

        for layer in self.layers:
            surface.blit(layer.get_image(), layer.get_pos())

        for decorum in self.decorums:
            if decorum.depth < 0:
                decorum.draw(surface, coords, zoom)
コード例 #38
0
    def draw_background(self, surface, coords=(0, 0), zoom=1):
        ''' Draw the background image of the level on the surface
        '''
        surface.blit(loaders.image(self.background,
                     scale=self.size)[0], (0, 0))

        for layer in self.layers:
            surface.blit(layer.get_image(), layer.get_pos())

        for decorum in self.decorums:
            if decorum.depth < 0:
                decorum.draw(surface, coords, zoom)
コード例 #39
0
    def __init__(self, image, image_hover):
        # FIXME save the path to scale it later -> maybe it is bad for
        # performance?
        super(ImageButton, self).__init__(image)
        if self.properties.has_key("size_request") : del(self.properties["size_request"])
        self.path_hover = image_hover
        size = get_scale(loaders.image(
                    CONFIG.system_path+
                    os.sep+
                    image)[0])

        self.set_size((size[0], size[1]))
        self.state = False
コード例 #40
0
    def draw(self):
        #clear the surface
        #draw the text
        x = self.parentpos[0] + self.x
        y = self.parentpos[1] + self.y
        mask = pygame.surface.Surface((self.width, self.height))
        mask.blit(
            self.surface_text,
            (100, -(self.defil *
                    (self.surface_text.get_height() - self.height) / 100)))

        mask.set_colorkey(pygame.color.Color("black"))
        self.screen.blit(mask, (x, y))
        del mask

        #the slider background
        self.screen.blit(
            loaders.image(join(CONFIG.system_path, "gui", CONFIG.general.THEME,
                               "sliderh_background.png"),
                          scale=(self.width_slider, self.height))[0],
            (x + self.pos_slider, y))

        #the slider center
        if self.hover:
            slider_center = "sliderh_center_hover.png"
        else:
            slider_center = "sliderh_center.png"

        self.screen.blit(self.slider.at(self.pos_slider, self.slider_y),
                         (x + self.pos_slider, y + self.slider_y))

        #foreground
        self.screen.blit(
            loaders.image(join(CONFIG.system_path, "gui", CONFIG.general.THEME,
                               "paragraph_foreground.png"),
                          scale=(self.width - self.width_slider * 2,
                                 self.height))[0], (x, y))

        self.start_anim()
コード例 #41
0
    def draw_portraits(self):
        """
        Draw player's portraits at bottom of the screen
        """
        #draw the background of the block where the lives are displayed
        hud_height = 75 * CONFIG.general.WIDTH / 800
        self.screen.blit(
            loaders.image(os.path.join(CONFIG.system_path, "misc", "hud.png"),
                          scale=(CONFIG.general.WIDTH, hud_height))[0],
            (0, CONFIG.general.HEIGHT))

        for player in self.players:
            self.draw_player_portrait(player)
コード例 #42
0
    def draw_main(self):
        """
        Draw the selected image, it is bigger than the other and in the center
        """
        x, y = (self.parentpos[0] + self.x, self.parentpos[1] + self.y)
        #main frame
        self.screen.blit(self.main_frame, (x + self.pos, y + self.posy_center))
        self.screen.blit(
            loaders.image(self.values[self.index][1],
                          scale=self.center_image)[0],
            (x + self.pos + self.center_image_indent[0],
             y + self.posy_center + self.center_image_indent[1]))

        self.pos += self.main_frame.get_width()
コード例 #43
0
    def __init__(self, frames, attribs, server=False):
        self.frames = frames
        self.image = frames[0].image
        self.rect = loaders.image(self.image, nodisplay=server)[1]
        self._start_time = 0
        self.playing = 0

        self.repeat = int('repeat' in attribs and attribs['repeat'])
        self.duration = int('duration' in attribs and attribs['duration'])
        self.hardshape = (('hardshape' in attribs) and pygame.Rect(
            [int(i) for i in attribs['hardshape'].split(' ')]) or 0)

        self.update(0, server=server)
        self.agressivpoints = []
コード例 #44
0
    def draw_main(self):
        """
        Draw the selected image, it is bigger than the other and in the center
        """
        x, y = (self.parentpos[0] + self.x, self.parentpos[1] + self.y)
        #main frame
        self.screen.blit(self.main_frame, (x + self.pos, y + self.posy_center))
        self.screen.blit(loaders.image(
            self.values[self.index][1],
            scale=self.center_image)[0], (
                x + self.pos + self.center_image_indent[0],
                y + self.posy_center  + self.center_image_indent[1]))

        self.pos += self.main_frame.get_width()
コード例 #45
0
    def draw_portraits(self):
        """
        Draw players' portraits at bottom of the screen
        """
        #draw the background of the block where the lives are displayed
        hud_height = 75 * CONFIG.general.WIDTH / 800
        self.screen.blit(loaders.image(os.path.join(
            CONFIG.system_path,
            "misc",
            "hud.png"),
            scale=(CONFIG.general.WIDTH, hud_height))[0],
            (0, CONFIG.general.HEIGHT))

        for player in self.players:
            self.draw_player_portrait(player)
コード例 #46
0
    def draw_right(self):
        """
        Draw three small image at right.
        """
        x, y = (self.parentpos[0] + self.x, self.parentpos[1] + self.y)
        for i in range(self.index - len(self.values) + 1,
                       self.index - len(self.values) + 4):

            self.screen.blit(self.frame[0], (x + self.pos, y + self.sizey(82)))
            self.screen.blit(
                loaders.image(self.values[i][1], scale=self.values[i][2])[0],
                (x + self.pos + self.values[i][3][0],
                 y + self.sizey(82) + self.values[i][3][1]))

            self.pos += self.frame[1][2]
コード例 #47
0
    def update(self):
        self.background = loaders.image(os.path.join(CONFIG.system_path, "gui",
                                                     CONFIG.general.THEME,
                                                     "keyboard.png"),
                                        scale=(self.width, self.height))[0]

        self.background_hover = loaders.image(
            os.path.join(CONFIG.system_path, "gui", CONFIG.general.THEME,
                         "keyboard_hover.png"),
            scale=(self.width, self.height))[0]

        text = loaders.text(self.letter, self.font)
        if text.get_width() > self.width:
            text = pygame.transform.smoothscale(
                text, (self.width,
                       self.width * text.get_height() / text.get_width()))

        posx = self.width / 2 - text.get_width() / 2
        posy = self.height / 2 - text.get_height() / 2
        self.surface = loaders.image_layer(self.background_hover, text,
                                           (posx, posy))
        self.surface_hover = loaders.image_layer(self.background, text,
                                                 (posx, posy))
        self.screen = pygame.display.get_surface()
コード例 #48
0
    def load_borders(self, attribs):
        ''' calculate actual size of the level, with level image size and
        borders
        '''
        #FIXME: should not depend on the initialisation of pygame
        self.rect = loaders.image(self.level)[1]

        if 'margins' in attribs:
            margins = [int(i) for i in attribs['margins'].split(',')]
            self.border = pygame.Rect(self.rect[0] - margins[0],
                                      self.rect[1] - margins[1],
                                      self.rect[2] + margins[0] + margins[2],
                                      self.rect[3] + margins[1] + margins[3])
        else:
            self.border = pygame.Rect(self.rect).inflate(
                self.rect[2] / 2, self.rect[3] / 2)
コード例 #49
0
    def __init__(self, frames, attribs, server=False):
        self.frames = frames
        self.image = frames[0].image
        self.rect = loaders.image(self.image, nodisplay=server)[1]
        self._start_time = 0
        self.playing = 0

        self.repeat = int('repeat' in attribs and attribs['repeat'])
        self.duration = int('duration' in attribs and attribs['duration'])
        self.hardshape = (
                ('hardshape' in attribs) and
                    pygame.Rect(
                        [int(i) for i in attribs['hardshape'].split(' ')]) or 0)

        self.update(0, server=server)
        self.agressivpoints = []
コード例 #50
0
 def draw_player_lives(self, player):
     """ draw as much hearts as the player has lives on its portrait
     """
     for i in range(player.lives):
         self.screen.blit(
                 loaders.image(
                     os.path.join(
                         CONFIG.system_path,
                         'misc',
                         'heart.png'))[0],
                 (
                     -0.5 * self.icon_space +
                         player.num * self.icon_space +
                         32 +
                         i * self.icon_space / 40,
                     self.size[1] * .9 + 10))
コード例 #51
0
    def load_borders(self, attribs):
        ''' calculate actual size of the level, with level image size and
        borders
        '''
        #FIXME: should not depend on the initialisation of pygame
        self.rect = loaders.image(self.level)[1]

        if 'margins' in attribs:
            margins = [int(i) for i in attribs['margins'].split(',')]
            self.border = pygame.Rect(
                self.rect[0] - margins[0],
                self.rect[1] - margins[1],
                self.rect[2] + margins[0] + margins[2],
                self.rect[3] + margins[1] + margins[3])
        else:
            self.border = pygame.Rect(self.rect).inflate(
                    self.rect[2] / 2, self.rect[3] / 2)
コード例 #52
0
    def draw_right(self):
        """
        Draw three small image at right.
        """
        x, y = (self.parentpos[0] + self.x, self.parentpos[1] + self.y)
        for i in range(
                self.index - len(self.values) + 1,
                self.index - len(self.values) + 4):

            self.screen.blit(self.frame[0], (x + self.pos, y + self.sizey(82)))
            self.screen.blit(loaders.image(
                self.values[i][1],
                scale=self.values[i][2])[0], (
                    x + self.pos + self.values[i][3][0],
                    y + self.sizey(82) + self.values[i][3][1]))

            self.pos += self.frame[1][2]
コード例 #53
0
    def draw_left(self):
        """
        Draw three small image at left.
        """
        x, y = (self.parentpos[0] + self.x, self.parentpos[1] + self.y)
        #at left now
        self.pos = (self.width / 2 - self.main_frame.get_width() / 2 -
                    self.frame[1][2] * 3 + self.advance)

        for i in range(self.index - 3, self.index):
            self.screen.blit(self.frame[0], (x + self.pos, y + self.sizey(82)))
            self.screen.blit(
                loaders.image(self.values[i][1], scale=self.values[i][2])[0],
                (x + self.pos + self.values[i][3][0],
                 y + self.sizey(82) + self.values[i][3][1]))

            self.pos += self.frame[1][2]
コード例 #54
0
    def __init__(self, path):
        super(Paragraph, self).__init__()
        self.defil = 0
        self.state = False
        self.slider_y = 0
        self.hover = False
        self.auto_scroll = True

        text = open(join(CONFIG.system_path, path), 'r').readlines()
        text_height = loaders.text("", fonts['mono']['normal']).get_height()

        #the slider (at left)
        self.width_slider = 34
        self.height_slider = 125
        self.pos_slider = self.width / 20 * 19

        #the main surface
        self.width = 500 #XXX hardcoded values
        self.height = 125 #XXX hardcoded values
        self.surface = pygame.surface.Surface((self.width, self.height))

        #create the surface whiwh will contain _all_ the text
        width = self.width - self.width_slider * 2
        if width < 0:
            width = 0
        self.surface_text = pygame.surface.Surface(
                (width, len(text) * text_height))

        #draw all the text into the surface
        for i, t in enumerate(text):
            self.surface_text.blit(
                    loaders.text(
                        t.replace('\n', ""),
                        fonts['mono']['normal']),
                    (0, text_height * i))

        self.slider = SubPixelSurface(loaders.image(
            join(
                CONFIG.system_path,
                "gui",
                CONFIG.general.THEME,
                "sliderh_center.png"),
            scale=(self.width_slider, self.height_slider))[0], x_level=4)
コード例 #55
0
    def draw_left(self):
        """
        Draw three small image at left.
        """
        x, y = (self.parentpos[0] + self.x, self.parentpos[1] + self.y)
        #at left now
        self.pos = (
                self.width/2
                - self.main_frame.get_width()/2
                - self.frame[1][2] * 3
                + self.advance)

        for i in range(self.index - 3, self.index):
            self.screen.blit(self.frame[0], (x + self.pos, y + self.sizey(82)))
            self.screen.blit(loaders.image(
                self.values[i][1],
                scale=self.values[i][2])[0], (
                    x + self.pos + self.values[i][3][0],
                    y + self.sizey(82) + self.values[i][3][1]))

            self.pos += self.frame[1][2]
コード例 #56
0
    def draw_player_portrait(self, player):
        """ draw, like... the player portrait? :D
        """
        self.screen.blit(
            loaders.image(player.entity_skin.image, scale=(30, 30))[0],
            (-0.5 * self.icon_space + player.num * self.icon_space,
             self.size[1] * .9))

        if loaders.get_gconfig().get("game", "displaylives") == "y":
            self.screen.blit(
                GAME_FONT.render(
                    str(player.percents * 10)[:3] + "%", True,
                    pygame.color.Color("red")),
                (-0.5 * self.icon_space + player.num * self.icon_space,
                 self.size[1] * .9))

        elif loaders.get_gconfig().get(
                "game", "display_progress_bar_for_lives") == "y":
            self.draw_progress_bar_for_lives(player)

        self.draw_player_lives(player)
コード例 #57
0
    def init_screen(self):
        """ various screen initialisations
        """
        size = (CONFIG.general.WIDTH, CONFIG.general.HEIGHT)
        if (CONFIG.general.WIDTH, CONFIG.general.HEIGHT) == (0, 0):
            if (800, 600) in pygame.display.list_modes():
                (CONFIG.general.WIDTH, CONFIG.general.HEIGHT) = (800, 600)

            else:
                #the old default value...
                (CONFIG.general.WIDTH, CONFIG.general.HEIGHT) = (800, 480)
            CONFIG.display.FULLSCREEN = False

        size = (CONFIG.general.WIDTH, CONFIG.general.HEIGHT)
        self.screen = pygame.display.set_mode(size)

        pygame.display.set_caption('Ultimate Smash Friends')
        icon = loaders.image(os.path.join(CONFIG.system_path, 'icon',
                                          'icon_50.png'))[0]
        pygame.display.set_icon(icon)
        if CONFIG.display.FULLSCREEN:
            pygame.display.toggle_fullscreen()
コード例 #58
0
    def draw_player_portrait(self, player):
        """ draw, like... the player portrait? :D
        """
        self.screen.blit(
                 loaders.image(player.entity_skin.image, scale=(30, 30))[0],
                    (
                    -0.5 * self.icon_space + player.num * self.icon_space,
                    self.size[1] * .9))

        if loaders.get_gconfig().get("game", "displaylives") == "y":
            self.screen.blit(
                     GAME_FONT.render(str(player.percents * 10)[:3] + "%",
                     True,
                     pygame.color.Color("red")),
                        (
                        -0.5 * self.icon_space + player.num * self.icon_space,
                        self.size[1] * .9))

        elif loaders.get_gconfig().get("game",
                "display_progress_bar_for_lives") == "y":
            self.draw_progress_bar_for_lives(player)

        self.draw_player_lives(player)