コード例 #1
0
ファイル: scrollbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def set_params(self, scrpos_noscale, scrsize_noscale):
        minsize = cw.s(4)
        hwidth = self.width - cw.s(8)
        self.scrsize_noscale = max(cw.SIZE_AREA[1], scrsize_noscale)
        self.scrpos_noscale = min(self.scrsize_noscale - cw.SIZE_AREA[1],
                                  max(0, scrpos_noscale))
        if not self.visible:
            return

        l = float(cw.SIZE_AREA[1]) / self.scrsize_noscale
        scrpos = cw.s(self.scrpos_noscale) * l
        scrsize = min(cw.s(self.scrsize_noscale), self.rect.height) * l
        if scrsize < minsize:
            posper = scrpos / float(self.rect.height - scrsize)
            scrsize = minsize
            sizen = cw.s(cw.SIZE_AREA[1]) - scrsize
            scrpos = sizen * posper

        scrpos = int(round(scrpos))
        scrsize = int(round(scrsize))

        self.image.fill((0, 0, 0, 128),
                        rect=pygame.Rect(hwidth, 0, self.width - hwidth,
                                         self.rect.height))
        if 0 < scrsize:
            rect = pygame.Rect(hwidth, scrpos, self.width - hwidth, scrsize)
            self.image.fill((255, 255, 255, 224), rect)
コード例 #2
0
    def update_scale(self):
        for anime in self._iter_animes(self.animations):
            anime.load_cell()

        # 他セルの位置とサイズを参照するものは全て読み込んだ後にここで再計算する
        for anime in self.refs:
            if not isinstance(anime.pos_noscale[0], int):
                a = anime.pos_noscale[0][len("Ref:"):]
                anime.pos_noscale = (self.animation_table[a].pos_noscale[0],
                                     anime.pos_noscale[1])
            if not isinstance(anime.pos_noscale[1], int):
                a = anime.pos_noscale[1][len("Ref:"):]
                anime.pos_noscale = (anime.pos_noscale[0],
                                     self.animation_table[a].pos_noscale[1])
            if not isinstance(anime.size_noscale[0], int):
                a = anime.size_noscale[0][len("Ref:"):]
                anime.size_noscale = (self.animation_table[a].size_noscale[0],
                                      anime.size_noscale[1])
            if not isinstance(anime.size_noscale[1], int):
                a = anime.size_noscale[1][len("Ref:"):]
                anime.size_noscale = (anime.size_noscale[0],
                                      self.animation_table[a].size_noscale[1])

        del self.refs[:]

        self.rect = pygame.Rect(cw.s(self.pos_noscale),
                                cw.s(self.size_noscale))
        self.image = pygame.Surface(self.rect.size).convert()
        for anime in self._iter_animes(self.animations):
            anime.update_scale()
コード例 #3
0
ファイル: scrollbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def update_scale(self):
     self.width = cw.s(8)
     self.image = pygame.Surface(
         (self.width, cw.s(cw.SIZE_AREA[1]))).convert_alpha()
     self.rect = self.image.get_rect()
     self.rect.topleft = cw.s(cw.SIZE_AREA[0]) - self.width, cw.s(0)
     self.image.fill((0, 0, 0, 0),
                     rect=pygame.Rect(0, 0, self.rect.width,
                                      self.rect.height))
     self.set_params(self.scrpos_noscale, self.scrsize_noscale)
コード例 #4
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def set_backcolor(self, color):
     self._color = color
     rect = self.panelimg.get_rect()
     size = rect.size
     rect.topleft = cw.s((1, 1))
     rect.size = (size[0] - cw.s(2), size[1] - cw.s(2))
     self.panelimg.fill(color, rect)
     if self.icon:
         self.panelimg.blit(self.icon, cw.s((3, 3)))
     _draw_edge(self.panelimg)
コード例 #5
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def _init_image(self):
     self.image = pygame.Surface(cw.s((633, 33))).convert()
     #ステータスバー スケーリング時
     subimg = cw.cwpy.rsrc.get_statusbtnbmp(2, 0)
     self.maskmode = not self.showbuttons and cw.cwpy.is_statusbarmask()
     if self.maskmode:
         subimg.fill((74, 74, 74), special_flags=pygame.locals.BLEND_RGB_SUB)
     self.image.fill((240, 240, 240))
     self.image.blit(subimg, cw.s((0, 0)))
     self.rect = self.image.get_rect()
     self.rect.topleft = -1,cw.s(420)
コード例 #6
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def get_scaledimage(self, image):
        """imageの横幅が大きすぎる場合は
        パネル内に収まるようにリサイズして返す。
        """
        wmax = self.panelimg.get_width() - cw.s(5) - cw.s(5)
        if self.icon:
            wmax = wmax - self.icon.get_width() - cw.s(3)

        rect = image.get_rect()
        if wmax < rect.width:
            rect.width = wmax
            image = cw.image.smoothscale(image.convert_alpha(), rect.size,
                                         smoothing=cw.cwpy.setting.fontsmoothing_statusbar)
        return image
コード例 #7
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def clear_image(self):
     if not self.rect.width:
         return False
     rect = self.rect
     self.image = pygame.Surface(cw.s((0, 0))).convert()
     self.rect = pygame.Rect(0, 0, 0, 0)
     cw.cwpy.draw(clip=rect)
     return True
コード例 #8
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def set_desc(self, desc):
     self.desc = desc
     if self._desc:
         cw.cwpy.sbargrp.remove(self._desc)
         rect = self._desc.rect
         self._desc = None
         self._desc = Desc(self, u"", self.desc, u"", arrowpos=cw.s(3)+self.icon.get_width()//2)
         cw.cwpy.sbargrp.add(self._desc, layer=LAYER_DESC)
         cw.cwpy.draw(clip=self._desc.rect)
コード例 #9
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def __init__(self, parent, pos):
     image = cw.s(cw.cwpy.rsrc.pygamedebugs["EVT_GET_CAST_noscale"])
     name = cw.cwpy.msgs["show_fcards"]
     desc = cw.cwpy.msgs["desc_show_friend_card"]
     StatusBarButton.__init__(self, parent, name, pos, 1, icon=image,
                              is_pushed=cw.cwpy.setting.show_fcardsinbattle, desc=desc,
                              hotkey=u"F6")
     self.is_showing = cw.cwpy.is_playingscenario
     self.selectable_on_event = False
コード例 #10
0
    def __init__(self, bgscr, speed):
        Transition.__init__(self, bgscr, speed)
        self.variation = (11 - self.speed) * 15
        self.sec_w_noscale = 10
        self.sec_h_noscale = 10
        self.sec_w = cw.s(self.sec_w_noscale)
        self.sec_h = cw.s(self.sec_h_noscale)

        self.rect_sec = pygame.Rect(0, 0, self.sec_w, self.sec_h)
        self.poslist = []

        for x in xrange(cw.s(cw.SIZE_GAME[0]) / self.sec_w + 1):
            for y in xrange(cw.s(cw.SIZE_GAME[1]) / self.sec_h + 1):
                self.poslist.append((x * self.sec_w, y * self.sec_h))

        self.poslist = cw.cwpy.dice.shuffle(self.poslist)
        self.image = self.image.convert_alpha()
        self.changecolor = (255, 255, 255, 0)
コード例 #11
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def __init__(self, parent, color, pos, size=None, icon=None, desc=u""):
     self.parent = parent
     if size is None:
         size = cw.s((120, 22))
     base.MouseHandlerSprite.__init__(self)
     # panelimg
     self._color = color
     self._create_paneimg(pos, size, icon)
     self.desc = desc
     self._desc = None
コード例 #12
0
 def __init__(self, bgscr, speed):
     """背景変更時のトランジション用スプライト。
     image: 変更前の背景。
     speed: トランジション効果時のウェイト。
     """
     base.CWPySprite.__init__(self)
     self.image = bgscr
     self.rect = self.image.get_rect()
     self.rect.topleft = cw.s((0, 0))
     self.status = "hidden"
     self.frame = 0
     self.speed = speed
コード例 #13
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def update_image(self):
     if cw.cwpy.setting.show_btndesc and self.handling and self.desc and not cw.cwpy.is_showingdlg():
         if not self._desc:
             self._desc = Desc(self, u"", self.desc, u"", arrowpos=cw.s(3)+self.icon.get_width()//2)
             cw.cwpy.sbargrp.add(self._desc, layer=LAYER_DESC)
             cw.cwpy.draw(clip=self._desc.rect)
     else:
         if self._desc:
             cw.cwpy.sbargrp.remove(self._desc)
             cw.cwpy.draw(clip=self._desc.rect)
             self._desc = None
             cw.cwpy.has_inputevent = True
コード例 #14
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def __init__(self):
     base.CWPySprite.__init__(self)
     self.image = pygame.Surface(cw.s((632, 33))).convert()
     self.yadomoney = None
     self.partymoney = None
     self.autostart = None
     self.debugger = None
     self.backlog = None
     self.scaling = None
     self.settings = None
     self.infocards = None
     self.friendcards = None
     self.rect = self.image.get_rect()
     self.rect.topleft = cw.s((0, 420))
     self.showbuttons = False
     self.maskmode = None
     self.loading = False
     self.volumebar = VolumeBar()
     cw.cwpy.sbargrp.add(self.volumebar, layer=LAYER_VOLUME_BAR)
     self._init_image()
     # spritegroupに追加
     cw.cwpy.sbargrp.add(self, layer=LAYER_BASE)
コード例 #15
0
    def update_scale(self):
        if self.image_noscale.get_width():
            w, h = self.image_noscale.get_size()
            scr_scale = self.image_noscale.scr_scale if hasattr(
                self.image_noscale, "scr_scale") else 1
            w //= scr_scale
            h //= scr_scale
            size = (w, h)
            if size <> self.size_noscale:
                size = cw.s(self.size_noscale)
                if cw.cwpy.setting.smoothscale_bg and self.imgpath:
                    self._image = cw.image.smoothscale(self.image_noscale,
                                                       size)
                else:
                    self._image = pygame.transform.scale(
                        self.image_noscale, size)
            else:
                self._image = cw.s(self.image_noscale)
        else:
            self._image = self.image_noscale

        self.update_image()
コード例 #16
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def update_image(self):
        StatusBarPanel.update_image(self)

        s = self.currency % (self.text)
        font = cw.cwpy.rsrc.fonts["sbarpanel"]
        image = font.render(s, cw.cwpy.setting.fontsmoothing_statusbar, (255, 255, 255))
        image = self.get_scaledimage(image)

        rect = image.get_rect()
        rect.left = self.rect.w - (rect.w + cw.s(5))
        rect.top = (self.rect.h - rect.h) / 2

        self.image = self.panelimg.copy()
        self.image.blit(image, rect.topleft)
コード例 #17
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def __init__(self, parent, pos, size=None, text="", nmax=0, nmin=100, current=0):
        base.CWPySprite.__init__(self)
        if size is None:
            size = cw.s((300, 22))
        self.text = text
        self.max = nmax
        self.min = nmin
        self.current = current
        self._last_params = None
        self.rect = pygame.Rect(pos, size)
        self.rect.top = parent.rect.top + pos[1]
        self.rect.left = parent.rect.left + pos[0]
        self.update(None)

        # spritegroupに追加
        cw.cwpy.sbargrp.add(self, layer=LAYER_STATUS_PROGRESS)
コード例 #18
0
    def update_transition(self, scr):
        p_frame = self.get_frame()
        self.frame = p_frame

        w = (p_frame * self.variation) / 5

        if not self.rect_blinds.w == w:
            self.rect_blinds.size = (w, cw.SIZE_GAME[1])

            for x, y in self.poslist:
                self.rect_blinds.topleft = (x - w, y)
                self.image.fill(self.changecolor, cw.s(self.rect_blinds))

            if w >= self.w_blinds:
                self.frame = 0
                self.status = "hidden"
コード例 #19
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
def _draw_edge(image):
    def put(x, y):
        rect = pygame.Rect((x, y), (1, 1))
        image.fill((0, 0, 0), rect)
        image.fill((0, 0, 0, 192), rect, special_flags=pygame.locals.BLEND_RGBA_SUB)
    def put_inside(x, y):
        rect = pygame.Rect((x, y), (1, 1))
        image.fill((192, 192, 192), rect, special_flags=pygame.locals.BLEND_RGB_MULT)
    w, h = image.get_size()

    put(0, 0)
    put(w-1, 0)
    put(0, h-1)
    put(w-1, h-1)

    put_inside(cw.s(1), cw.s(1))
    put_inside(w-1-cw.s(1), cw.s(1))
    put_inside(cw.s(1), h-1-cw.s(1))
    put_inside(w-1-cw.s(1), h-1-cw.s(1))
コード例 #20
0
def get_transition((name, speed)):
    """現在表示中の背景を元にしたトランジションスプライトを返す。
    transitiontype: トランジション効果の種類名と速度のタプル。
    """
    if name == "Default":
        name = cw.cwpy.setting.transition

    if not isinstance(speed, int):
        speed = cw.cwpy.setting.transitionspeed

    if not speed == 0 and not name == "None":
        cls = globals().get(name, None)

        if cls:
            image = pygame.Surface(cw.s(cw.SIZE_AREA)).convert()
            cw.sprite.background.layered_draw_ex(cw.cwpy.cardgrp, image)
            for sprite in cw.cwpy.topgrp.get_sprites_from_layer("jpytemporal"):
                image.blit(sprite.image, sprite.rect.topleft)
            return cls(image, speed)

    return None
コード例 #21
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def layered_draw_ex(self, layered_updates, surface, draw_desc):
        rects = []
        srect = surface.get_rect()
        clip = surface.get_clip()
        if clip:
            srect = clip

        sprites = layered_updates.sprites()
        h = cw.SIZE_GAME[1]-cw.SIZE_AREA[1]
        sbarclip = cw.s(pygame.Rect(0, cw.SIZE_AREA[1], cw.SIZE_GAME[0], h))
        for sprite in sprites:
            if srect.colliderect(sprite.rect):
                if isinstance(sprite, (VolumeBar, Desc)):
                    if not draw_desc:
                        continue
                    surface.set_clip(srect.clip(sprite.rect))
                else:
                    surface.set_clip(srect.clip(sprite.rect).clip(sbarclip))
                rect = surface.blit(sprite.image, sprite.rect)
                rects.append(rect)
        surface.set_clip(clip)
        return rects
コード例 #22
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def _create_paneimg(self, pos, icon):
        # ボタン画像
        self.btnimg = {}

        # ボタンアイコン・ラベル
        if icon:
            self.icon = icon
        else:
            font = cw.cwpy.rsrc.fonts["sbarbtn"]
            self.icon = font.render(self.name, cw.cwpy.setting.fontsmoothing_statusbar, (0, 0, 0))

        if not self.enabled:
            self.icon = cw.imageretouch.to_disabledsurface(self.icon)

        # image
        self.image = self.get_unselectedimage()
        self.noimg = pygame.Surface(cw.s((0, 0))).convert()
        # rect
        self.rect = self.image.get_rect()
        self.rect.top = self.parent.rect.top + pos[1]
        self.rect.left = self.parent.rect.left + pos[0]

        # spritegroupに追加
        cw.cwpy.sbargrp.add(self, layer=LAYER_STATUS_ITEM)
コード例 #23
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def _create_paneimg(self, pos, size, icon):
        self.icon = icon
        self.panelimg = pygame.Surface(size).convert_alpha()
        self.panelimg.fill((0, 0, 0))
        rect = self.panelimg.get_rect()
        rect.topleft = cw.s((1, 1))
        rect.size = (size[0] - cw.s(2), size[1] - cw.s(2))
        self.panelimg.fill(self._color, rect)
        _draw_edge(self.panelimg)

        if self.icon:
            self.panelimg.blit(self.icon, cw.s((3, 3)))
            self.handling_rect = pygame.Rect(cw.s(3), cw.s(3), self.icon.get_width(), self.icon.get_height())

        # image
        self.image = self.panelimg.copy()
        self.noimg = pygame.Surface(cw.s((0, 0))).convert()
        # rect
        self.rect = self.image.get_rect()
        self.rect.top = self.parent.rect.top + pos[1]
        self.rect.left = self.parent.rect.left + pos[0]
        # spritegroupに追加
        cw.cwpy.sbargrp.add(self, layer=LAYER_STATUS_ITEM)
コード例 #24
0
def to_negative_for_card(image, framewidth=0):
    """色反転したpygame.Surfaceを返す。
    カード画像用なので外枠nピクセルは色反転しない。
    image: pygame.Surface
    framewidth: 外枠の幅。現在は1.50に合わせて外枠無し(0)
    """
    w, h = image.get_size()

    if w < cw.s(1 + framewidth * 2) or h < cw.s(1 + framewidth * 2):
        return image.copy()

    rect = pygame.Rect(cw.s((framewidth, framewidth)),
                       (w - cw.s(framewidth * 2), h - cw.s(framewidth * 2)))
    outimage = image.copy()

    if image.get_flags() & SRCALPHA:
        outimage.fill((255, 255, 255), rect, BLEND_RGB_ADD)
    else:
        outimage.fill((255, 255, 255), rect)

    outimage.blit(image.subsurface(rect), cw.s((framewidth, framewidth)), None,
                  BLEND_RGB_SUB)
    return outimage
コード例 #25
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def update_scale(self):
        if self.volume == cw.cwpy.setting.vol_master and self.upscr == cw.UP_SCR and self.rect.width:
            return
        self.volume = cw.cwpy.setting.vol_master
        self.upscr = cw.UP_SCR

        padw = 8
        padw2 = 2
        padh = 5
        barh = 200

        font = cw.cwpy.rsrc.fonts["sbarprogress"]
        tsize = font.size(u"100%")
        tsize2 = font.size(u"音量")
        tw = max(tsize[0], tsize2[0])
        self.rect = pygame.Rect(cw.s(560), cw.s(60), tw+cw.s(padw2)*2, cw.s(barh)+cw.s(1)*2+cw.s(padh)*4+tsize[1]*2)
        self.image = pygame.Surface(self.rect.size).convert_alpha()
        self.image.fill((0, 0, 0, 128))
        self.image.fill((0, 0, 0, 192), pygame.Rect(cw.s(padw), cw.s(padh)*2+tsize[1], self.rect.width-cw.s(padw)*2, cw.s(barh)+cw.s(2)))
        n = cw.s(barh - int(cw.cwpy.setting.vol_master * barh))
        self.image.fill((0, 128, 128, 192), pygame.Rect(cw.s(padw)+cw.s(1), cw.s(padh)*2+tsize[1]+cw.s(1)+n, self.rect.width-cw.s(padw)*2-cw.s(2), cw.s(barh)-n))

        subimg = font.render("%s%%" % (int(cw.cwpy.setting.vol_master * 100)), True, (255, 255, 255))
        self.image.blit(subimg, ((self.rect.width-tsize[0])/2+tsize[0]-subimg.get_width(), cw.s(padh)*2+tsize[1]+cw.s(barh)+cw.s(padh)))
        subimg = font.render(u"音量", True, (255, 255, 255))
        self.image.blit(subimg, ((self.rect.width-tsize2[0])/2, cw.s(padh)))

        cw.cwpy.draw(clip=self.rect)
コード例 #26
0
    def update_image(self):
        """
        現在のフレームに応じてイメージを更新する。
        パーツが出現中の時間でなければ、イメージをクリアする。
        """
        frame = self.parent.frame - self.startframe - self.spawn
        if frame < 0 or self.duration <= frame or not self._image.get_width():
            self.clear_image()
            return

        if self.animation_frame:
            if 1 < self.repeat_count:
                aframe = self.animation_frame + self.repeat_interval
            else:
                aframe = self.animation_frame
            repeat = frame // aframe
            if 1 < self.repeat_count and self.repeat_count <= repeat:
                self.clear_image()
                return

            if 1 < self.repeat_count:
                frame = frame % aframe
                if self.animation_frame <= frame:
                    self.clear_image()
                    return
        else:
            frame = 0

        pos = cw.s(self.pos_noscale)
        size = cw.s(self.size_noscale)

        if self.animation_type == "Spawn":
            # アニメーション無しで出現
            self.image = self._image
            self.rect = pygame.Rect(pos, size)

        elif self.animation_type in ("FadeIn", "FadeOut"):
            # フェードインしながら出現・フェードアウトしながら消滅
            self.rect = pygame.Rect(pos, size)
            alpha = min(255, (frame * 255) // self.animation_frame)
            if self.animation_type == "FadeOut":
                alpha = 255 - alpha

            if not self._has_alpha and 255 < alpha:
                alpha = None

            if self._has_alpha:
                self.image = self._image.copy()
                self.image.fill((255, 255, 255, alpha),
                                special_flags=pygame.locals.BLEND_RGBA_MULT)
            else:
                self.image = self._image
                if self.image.get_alpha() <> alpha:
                    self.image.set_alpha(alpha)

        elif self.animation_type == "Rotate":
            # カードのように回転
            width = size[0]
            size = (size[0] * self.dealing_scales[frame] // 100, size[1])
            pos = (pos[0] + (width - size[0]) // 2, pos[1])
            self.rect = pygame.Rect(pos, size)
            if self._image.get_size() == size:
                self.image = self._image
            else:
                self.image = cw.image.smoothscale(self._image, size)

        else:
            raise Exception("Invalid AnimationType: %s" %
                            (self.animation_type))
コード例 #27
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def update_image(self):
        self._last_params = (self.text, self.max, self.min, self.current)

        image = pygame.Surface(self.rect.size).convert_alpha()
        image.fill((0, 0, 0))
        w, h = self.rect.size
        rect = pygame.Rect(cw.s(1), cw.s(1), w-cw.s(2), h-cw.s(2))
        image.fill((255, 255, 255), rect)
        w = self.rect.width - cw.s(2)

        font = cw.cwpy.rsrc.fonts["sbarprogress"]
        subimg = font.render(self.text, cw.cwpy.setting.fontsmoothing_statusbar, (0, 0, 0))
        if w-cw.s(4) < subimg.get_width():
            subimg = cw.image.smoothscale(subimg.convert_alpha(), (w-cw.s(4), subimg.get_height()),
                                          smoothing=cw.cwpy.setting.fontsmoothing_statusbar)
        x = (image.get_width() - subimg.get_width()) / 2
        y = (image.get_height() - subimg.get_height()) / 2

        g = w / float(self.max - self.min)
        curw = int(self.current * g) + cw.s(1)
        rect = (cw.s(1), cw.s(1), curw, self.rect.height-cw.s(2))
        image.fill((0, 0, 128), rect)

        curw = curw - (x-cw.s(1))
        rect = (cw.s(0), cw.s(0), min(curw, subimg.get_width()), subimg.get_height())
        subimg.fill((255, 255, 255, 0), rect, special_flags=pygame.locals.BLEND_RGBA_ADD)

        image.blit(subimg, (x, y))
        _draw_edge(image)
        self.image = image
コード例 #28
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def __init__(self, parent, name, desc, hotkey, arrowpos=None):
        base.CWPySprite.__init__(self)
        self.parent = parent
        self.name = name
        self.desc = desc
        self.hotkey = hotkey
        if self.name and self.hotkey:
            title = u"%s(%s)" % (self.name, self.hotkey)

        font = cw.cwpy.rsrc.fonts["sbardesc"]
        tfont = cw.cwpy.rsrc.fonts["sbardesctitle"]
        h = font.get_height()

        # 必要サイズを計算
        lines = self.desc.splitlines()
        spx = cw.s(8)
        spy = cw.s(4)
        tw, th = cw.s(1), spy*2
        # 表題
        if self.name and self.hotkey:
            th += cw.s(3)  # 表題と本文の間
            fw, fh = tfont.size(title)
            tw = max(tw, fw + spx*2)
            th += h
        # 本文
        for line in lines:
            fw, fh = font.size(line)
            tw = max(tw, fw + spx*2)
            th += h

        # 解説画像を作成
        arroww = cw.s(8)
        arrowh = cw.s(12)
        self.image = pygame.Surface((tw, th+arrowh)).convert_alpha()
        color = (255, 255, 200)
        self.image.fill(color)
        self.image.fill((0, 0, 0, 255), (cw.s(0), th, tw, arrowh), special_flags=pygame.locals.BLEND_RGBA_SUB)
        linecolor = (0, 0, 0)
        cw.setting.Resource.draw_frame(self.image, pygame.Rect(cw.s(0), cw.s(0), tw, th), linecolor)
        self.rect = self.image.get_rect()
        x, y = spx, spy
        if self.name and self.hotkey:
            # 表題
            subimg = tfont.render(title, True, linecolor)
            self.image.blit(subimg, (x, y))
            y += tfont.get_height() + cw.s(1)
            pygame.draw.line(self.image, linecolor, (x, y), (x+tw-spx*2, y), cw.s(1))
            y += cw.s(2)
        # 本文
        for line in lines:
            subimg = font.render(line, True, linecolor)
            self.image.blit(subimg, (x, y))
            y += h

        # ボタンに合わせて位置を調節
        if arrowpos is None:
            self.rect.center = self.parent.rect.center
        else:
            self.rect.left = self.parent.rect.left+arrowpos - self.rect.width//2
        _px, py = self.parent.rect.topleft
        self.rect.top = py - th - cw.s(5)

        # 画面内に収める
        if self.rect.left < cw.s(2):
            self.rect.left = cw.s(2)
        gw = cw.s(cw.SIZE_GAME[0])
        if gw <= self.rect.left + self.rect.width:
            self.rect.left = gw - cw.s(2) - self.rect.width

        # ボタンを指す部分
        if arrowpos is None:
            x = self.parent.rect.center[0]-self.rect.left
        else:
            x = self.parent.rect.left+arrowpos
            x -= self.rect.left
        y = th-1
        pl = [(x-arroww/2, y), (x, y+arrowh), (x+arroww/2, y)]
        pygame.draw.polygon(self.image, color, pl)
        pygame.draw.aalines(self.image, linecolor, False, pl)

        self.image.fill((255, 255, 255, 224), special_flags=pygame.locals.BLEND_RGBA_MULT)
コード例 #29
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
    def change(self, showbuttons=True, encounter=False, cancelbtn=False):
        self.clear()
        in_camp = cw.cwpy.areaid in (cw.AREA_CAMP, cw.AREA_TRADE3)
        if showbuttons and (pygame.event.peek(pygame.locals.USEREVENT) or cw.cwpy.expanding) and not in_camp:
            showbuttons = False

        self.showbuttons = showbuttons
        maskmode = not self.showbuttons and cw.cwpy.is_statusbarmask()

        if self.maskmode <> maskmode:
            self.maskmode = maskmode
            subimg = cw.cwpy.rsrc.get_statusbtnbmp(2, 0)
            if maskmode:
                subimg.fill((74, 74, 74), special_flags=pygame.locals.BLEND_RGB_SUB)
            self.image.fill((240, 240, 240))
            self.image.blit(subimg, cw.s((0, 0)))


        if cw.cwpy.expanding:
            ExpandView(self, cw.s((10, 6)))

        showbuttons &= not cw.cwpy.is_showingbacklog() and not cw.cwpy.sdata.in_f9

        left = cw.s(606)
        rmargin = cw.s(0)
        self._create_settings((left, cw.s(2)))

        #PyLite:画面拡大ボタン
        if cw.cwpy.setting.display_scalebutton:
            left -= cw.s(26)
            rmargin += cw.s(24)
            self._create_scaling((left, cw.s(2)))

        if cw.cwpy.setting.display_logbutton and cw.cwpy.setting.backlogmax:
        #if cw.cwpy.setting.backlogmax:
            left -= cw.s(26)
            rmargin += cw.s(24)
            self._create_backlog((left, cw.s(2)))

        if cw.cwpy.is_debugmode():
            left -= cw.s(26)
            rmargin += cw.s(24)
            self._create_debugger((left, cw.s(2)))

        if encounter:
            EncounterPanel(self, (cw.s(474) - rmargin, cw.s(6)))
        elif (cw.cwpy.is_curtained() and cw.cwpy.areaid <> cw.AREA_CAMP) or cw.cwpy.selectedheader:
            if cw.cwpy.status == "Yado":
                if cancelbtn or cw.cwpy.areaid == -3:
                    CancelButton(self, cw.s((255, 6)))
                elif not cw.cwpy.expanding:
                    self._create_yadomoney(cw.s((10, 6)))
                    if cw.cwpy.ydata.party:
                        self._create_partymoney((cw.s(474) - rmargin, cw.s(6)))
            else:
                if cancelbtn or (showbuttons and cw.cwpy.areaid <> -5):#TODO:Lite:面倒なので妥協
                    CancelButton(self, cw.s((255, 6)))
                elif cw.cwpy.status == "Scenario":
                    self._create_partymoney((cw.s(474) - rmargin, cw.s(6)))
                elif cw.cwpy.is_battlestatus():
                    RoundCounterPanel(self, (cw.s(474) - rmargin, cw.s(6)))
        elif cw.cwpy.status == "Yado":
            if not cw.cwpy.expanding:
                self._create_yadomoney(cw.s((10, 6)))
            if cw.cwpy.ydata.party:
                self._create_partymoney((cw.s(474) - rmargin, cw.s(6)))
        elif cw.cwpy.status == "Scenario":
            if showbuttons:
                lmargin = 10
                CampButton(self, cw.s((lmargin, 6)))
                lmargin += 123
                TableButton(self, cw.s((lmargin, 6)))
                lmargin += 123
            self._create_partymoney((cw.s(474) - rmargin, cw.s(6)))
            rmargin += cw.s(34)
            if cw.cwpy.setting.display_noticeinfo and cw.cwpy.is_playingscenario() and cw.cwpy.sdata.has_infocards():
                self._create_infocards((cw.s(474) - rmargin, cw.s(2)))
        elif cw.cwpy.is_battlestatus():
            if cw.cwpy.setting.show_roundautostartbutton:
                self._create_autostart(cw.s((5, 2)))
                left = cw.s(36)
            else:
                left = cw.s(10)
            if showbuttons:
                btn = ActionButton(self, (left, cw.s((6))))
                if self.autostart:
                    self.autostart.actionbtn = btn
                if cw.cwpy.battle.possible_runaway:
                    RunAwayButton(self, (cw.s(123) + left, cw.s((6))))
            RoundCounterPanel(self, (cw.s(474) - rmargin, cw.s(6)))
            rmargin += cw.s(34)
            if showbuttons and cw.cwpy.is_debugmode() and\
                    cw.cwpy.battle.is_ready() and cw.cwpy.get_fcards():
                self._create_friendcards((cw.s(474) - rmargin, cw.s(3)))

        if self.infocards and not cw.cwpy.is_playingscenario():
            self.infocards.notice = False

        if showbuttons:
            self.loading = False

        if not cw.cwpy.sdata or not cw.cwpy.sdata.in_f9:
            # デバッガのツールが使用可能かどうかを更新
            cw.cwpy.event.refresh_tools()
コード例 #30
0
ファイル: statusbar.py プロジェクト: ankkks/CardWirthPy-Lite
 def __init__(self):
     base.CWPySprite.__init__(self)
     self.image = pygame.Surface(cw.s((0, 0))).convert()
     self.rect = pygame.Rect(0, 0, 0, 0)
     self.volume = cw.cwpy.setting.vol_master
     self.upscr = cw.UP_SCR