Exemple #1
0
from engine import Engine
from cursor import Cursor

if __name__ == "__main__":
    engine = Engine()

    engine.add_object(Cursor())

    engine.run()
class Application(QMainWindow):
    def __init__(self, caption, w, h, available_objects, precision):
        super().__init__()
        self.caption = caption
        self.w = w
        self.h = h
        self.keyboard = {
            'A': False,
            'D': False,
            'W': False,
            'S': False,
            'SHIFT': False,
            'SPACE': False
        }
        self.avaliable = available_objects
        self.precision = precision

        self.setFixedSize(w, h)
        self.setWindowTitle(caption)

        self.cam = Cam((0, 50, 0))
        self.engine = Engine(self.cam)
        self.pointer = Pointer()

        self.canvas = Canvas(self, w * 0.75, h, 0, 0, 'rgba(100,100,100,100%)',
                             self.engine)
        self.selector = ObjectSelector(w / 4, h / 3, 'Select figure to Create',
                                       self, 'rgba(50,50,50,100%)',
                                       self.avaliable)
        self.move_window = MoveWindow(self, w / 3, h / 3, 'Move object',
                                      -10000, 10000, 2, 0.0)
        self.scale_window = ScaleWindow(self, w / 3, h / 3, 'Scale object',
                                        0.01, 10, 2, 1.0)
        self.rotate_window = RotateWindow(self, w / 3, h / 3, 'Rotate object',
                                          0, 360, 2, 0.0)
        self.objects = SideBar(self, w * 0.25, h, w * 0.75, 0,
                               'rgba(50,50,50,100%)')

        main_menu = self.menuBar()
        camera_menu = main_menu.addMenu('Camera')

        reset_camera = QAction('Reset', camera_menu)
        reset_camera.setStatusTip('Reset camera position and mode')
        reset_camera.triggered.connect(self.reset_camera)
        self.switch_camera = QAction('Mode: Free flight', camera_menu)
        self.switch_camera.setStatusTip('Switching camera mode...')
        self.switch_camera.triggered.connect(self.switch_camera_mode)

        camera_menu.addAction(self.switch_camera)
        camera_menu.addAction(reset_camera)

        self.timer = QBasicTimer()
        self.frames = 60
        self.dt = int(100 / self.frames)
        self.timer.start(self.dt, self)
        self.show()

    def keyPressEvent(self, event):
        key = event.key()
        if self.canvas.hasFocus():
            if key == Qt.Key_A:
                self.keyboard['A'] = True
            elif key == Qt.Key_D:
                self.keyboard['D'] = True
            elif key == Qt.Key_W:
                self.keyboard['W'] = True
            elif key == Qt.Key_S:
                self.keyboard['S'] = True
            elif key == Qt.Key_Space:
                self.keyboard['SPACE'] = True
            elif key == Qt.Key_Shift:
                self.keyboard['SHIFT'] = True

    def keyReleaseEvent(self, event):
        key = event.key()
        if key == Qt.Key_A:
            self.keyboard['A'] = False
        elif key == Qt.Key_D:
            self.keyboard['D'] = False
        elif key == Qt.Key_W:
            self.keyboard['W'] = False
        elif key == Qt.Key_S:
            self.keyboard['S'] = False
        elif key == Qt.Key_Space:
            self.keyboard['SPACE'] = False
        elif key == Qt.Key_Shift:
            self.keyboard['SHIFT'] = False

    def timerEvent(self, event):
        dx, dy = self.pointer.get_movement()
        self.cam.update_rotation(dx, dy)
        self.cam.update_position(self.dt, self.keyboard)
        self.canvas.repaint()

    def add_object(self, obj):
        self.engine.add_object(obj)
        list_object = ListObject(obj.name, self.objects.list)
        self.objects.list.addItem(list_object)
        self.objects.list.clearSelection()
        self.objects.list.setCurrentItem(list_object)

    def delete_object(self, name):
        items = self.objects.list.findItems(name, Qt.MatchExactly)
        if len(items) > 0:
            row = self.objects.list.row(items[0])
            self.objects.list.takeItem(row)
        self.engine.delete_item(name)

    def switch_camera_mode(self):
        if self.cam.mode == 0:
            self.cam.mode = 1
            self.switch_camera.setText('Mode: Centered')
        else:
            self.cam.mode = 0
            self.switch_camera.setText('Mode: Free Flight')
        self.reset_camera()

    def reset_camera(self):
        self.cam.pos = [0, 50, 0]
        self.cam.rot = [0, 0, 0]