Path: blob/master/src/animationwindow.py
254 views
from animpreviewwindow import Ui_animation_view1from PyQt5.QtWidgets import QWidget2from PyQt5.QtCore import QTimer3import engine.spritesheetutils as spritesheetutils4from utils import imghashes56class AnimationView(QWidget):7def __init__(self, *args, **kwargs):8super().__init__(*args, **kwargs)9self.ui = Ui_animation_view()10self.ui.setupUi(self)1112self.ui.play_anim_button.clicked.connect(self.play_animation)13self.ui.animation_display_area.setText("Click 'Play Animation' to start the animation preview")14self.ui.animation_display_area.setStyleSheet("background-color:#696969;")1516self.animframes = []17self.anim_names = {}18self.frameindex = 019self.animstarted = False20self.timer = QTimer()21self.timer.timeout.connect(self.set_next_frame)2223def parse_and_load_frames(self, frames):24for f in frames:25if f.data.pose_name in self.anim_names:26self.anim_names[f.data.pose_name].append(f)27else:28self.anim_names[f.data.pose_name] = [ f ]29self.ui.pose_combobox.addItems(list(self.anim_names.keys()))3031def play_animation(self):32if self.animstarted:33self.timer.stop()34self.animstarted = False35self.ui.play_anim_button.setText("Play Animation")36else:37self.animstarted = True38framerate = self.ui.framerate_adjust.value()39animname = self.ui.pose_combobox.currentText()40self.animframes = self.anim_names[animname]41self.frameindex = 042print(f"Playing {animname} at {framerate}fps with nframes:{len(self.animframes)}")43self.ui.play_anim_button.setText("Stop Animation")44self.timer.start(int(1000/framerate))4546def set_next_frame(self):47curframe = self.animframes[self.frameindex]48curframeimg = imghashes.get(curframe.data.img_hash)49truframe_pixmap = spritesheetutils.get_true_frame(50curframeimg,51curframe.data.framex if curframe.data.framex is not None else 0,52curframe.data.framey if curframe.data.framey is not None else 0,53curframe.data.framew if curframe.data.framew is not None else curframeimg.width,54curframe.data.frameh if curframe.data.frameh is not None else curframeimg.height,55).toqpixmap()56self.ui.animation_display_area.setPixmap(truframe_pixmap)57self.frameindex = (self.frameindex + 1) % len(self.animframes)5859def closeEvent(self, a0):60self.timer.stop()61self.animstarted = False62self.ui.animation_display_area.clear()63self.ui.pose_combobox.clear()64self.animframes.clear()65self.anim_names.clear()66self.frameindex = 067return super().closeEvent(a0)686970