コード例 #1
0
class Dialogscene(BaseDialog):
    def __init__(self,
                 text_list,
                 text_source,
                 map,
                 w,
                 h,
                 info,
                 size=200,
                 callback=None,
                 **kwargs):

        super().__init__(text_list, text_source)
        self.map = map
        self.w, self.h = w, h
        self.size = size
        self.callback = callback
        self.kwargs = kwargs
        self.info = info  # dict of persons that stands for V or E

        # add background

        self.background = Sprite(map.scene, position=(w // 2, h // 2))
        text_background = ColorLayer(0, 0, 200, 255, w, h // 3)
        self.add(self.background)
        self.add(text_background)

        # add img
        self.left = Sprite('ring.png', position=(w // 6, h // 2), opacity=0)
        self.right = Sprite('ring.png',
                            position=(w * 5 // 6, h // 2),
                            opacity=0)
        self.add(self.left)
        self.add(self.right)

        # add label
        self.label = Text(text=' ', position=(w // 6, h // 3), font_size=24)
        self.add(self.label)

        # add text
        self.text = Text(text=' ', position=(w // 2, h // 6), font_size=30)
        self.add(self.text)

    def excute(self):
        item = self.textsource[self.textlist[self.i]]
        super().excute()
        if 'Branch' in item.keys():
            self.add(Branch(self.map, item['Branch'], self.callback))
            director.window.remove_handlers(self)
        else:
            if item['Type'] is 'S':
                if item['Text'] is not None:
                    self.text.element.text = item['Text']
                if item['Left'] is not None:
                    if item['Left'] is 'V':
                        item['Left'] = self.info['V'].pic
                    self.changeleft(item['Left'])
                if item['Right'] is not None:
                    if item['Right'] is 'V':
                        item['Right'] = self.info['V'].pic
                    self.changeright(item['Right'])
                if item['Direction'] == 0:
                    self.label.position = (self.w // 6, self.h // 3)
                else:
                    self.label.position = (self.w * 5 // 6, self.h // 3)
                if item['Tag'] is not None:
                    if item['Tag'] is 'V':
                        self.label.element.text = self.info['V'].name
                    else:
                        self.label.element.text = item['Tag']
                else:
                    self.label.element.text = ''
            elif item['Type'] is 'N':
                if item['Text'] is not None:
                    self.text.element.text = item['Text']
                if item['Left'] is not None:
                    if item['Left'] is 'V':
                        item['Left'] = self.info['V'].pic
                    self.changeleft(item['Left'])
                if item['Right'] is not None:
                    if item['Right'] is 'V':
                        item['Right'] = self.info['V'].pic
                    self.changeright(item['Right'])
            else:
                self.source_error(item['Type'])

    def changeleft(self, source):
        self.left.kill()
        if type(source) is str:
            self.left = Sprite(source, position=(self.w // 6, self.h // 2))
            self.left.scale_x, self.left.scale_y = \
                480 / self.left.width, 640 / self.left.height
        else:
            self.left = Layer()
            pos1, pos2 = (300, self.h // 2), (640, self.h // 2)
            spr1, spr2 = Sprite(source[0],
                                position=pos1), Sprite(source[1],
                                                       position=pos2)
            spr1.scale_x, spr1.scale_y = 480 / spr1.width, 640 / spr1.height
            spr2.scale_x, spr2.scale_y = 480 / spr2.width, 640 / spr2.height
            self.left.add(spr1)
            self.left.add(spr2)
        self.add(self.left)

    def changeright(self, source):
        self.right.kill()
        if type(source) is str:
            self.right = Sprite(source,
                                position=(self.w * 5 // 6, self.h // 2))
            self.right.scale_x, self.right.scale_y = \
                480 / self.right.width, 640 / self.right.height
        else:
            self.right = Layer()
            pos1, pos2 = (self.w - 640, self.h // 2), (self.w - 300,
                                                       self.h // 2)
            spr1, spr2 = Sprite(source[0],
                                position=pos1), Sprite(source[1],
                                                       position=pos2)
            spr1.scale_x, spr1.scale_y = 480 / spr1.width, 640 / spr1.height
            spr2.scale_x, spr2.scale_y = 480 / spr2.width, 640 / spr2.height
            self.right.add(spr1)
            self.right.add(spr2)
        self.add(self.right)

    def exit(self):
        director.pop()
        if self.callback:
            self.callback.__call__(**self.kwargs)