from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QHBoxLayout, QMessageBox from editortool.map.map import map from dusk.defs import defs CHUNK_WIDTH = int(defs.get('CHUNK_WIDTH')) CHUNK_HEIGHT = int(defs.get('CHUNK_HEIGHT')) CHUNK_DEPTH = int(defs.get('CHUNK_DEPTH')) class MapInfoPanel(QWidget): def __init__(self, parent=None): super().__init__(parent) layout = QVBoxLayout() map_info_label = QLabel("Map Information") layout.addWidget(map_info_label) map_title_label = QLabel("Map Title") self.map_title_input = QLineEdit() layout.addWidget(map_title_label) layout.addWidget(self.map_title_input) tilePositionLabel = QLabel("Tile Position") layout.addWidget(tilePositionLabel) tilePositionRow = QHBoxLayout() self.tileXInput = QLineEdit() self.tileXInput.setPlaceholderText("X") tilePositionRow.addWidget(self.tileXInput) self.tileYInput = QLineEdit() self.tileYInput.setPlaceholderText("Y") tilePositionRow.addWidget(self.tileYInput) self.tileZInput = QLineEdit() self.tileZInput.setPlaceholderText("Z") tilePositionRow.addWidget(self.tileZInput) self.tileGo = QPushButton("Go") tilePositionRow.addWidget(self.tileGo) layout.addLayout(tilePositionRow) self.chunkPosLabel = QLabel("Chunk Position: 0, 0, 0") layout.addWidget(self.chunkPosLabel) self.chunkLabel = QLabel("Chunk: 0, 0, 0") layout.addWidget(self.chunkLabel) layout.addStretch() self.setLayout(layout) self.tileGo.clicked.connect(self.goToPosition) self.tileXInput.returnPressed.connect(self.goToPosition) self.tileYInput.returnPressed.connect(self.goToPosition) self.tileZInput.returnPressed.connect(self.goToPosition) self.updatePositionLabels(map.position) map.addPositionListener(self.updatePositionLabels) def goToPosition(self): try: x = int(self.tileXInput.text()) y = int(self.tileYInput.text()) z = int(self.tileZInput.text()) map.moveTo(x, y, z) except ValueError: QMessageBox.warning(self, "Invalid Input", "Please enter valid integer coordinates.") def updatePositionLabels(self, pos): self.tileXInput.setText(str(pos[0])) self.tileYInput.setText(str(pos[1])) self.tileZInput.setText(str(pos[2])) self.chunkPosLabel.setText(f"Chunk Position: {pos[0] % CHUNK_WIDTH}, {pos[1] % CHUNK_HEIGHT}, {pos[2] % CHUNK_DEPTH}") self.chunkLabel.setText(f"Chunk: {pos[0] // CHUNK_WIDTH}, {pos[1] // CHUNK_HEIGHT}, {pos[2] // CHUNK_DEPTH}")