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)