from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QHBoxLayout, QMessageBox from editortool.map.mapdefs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH class MapInfoPanel(QWidget): def __init__(self, parent): super().__init__(parent) self.parent = parent # Components layout = QVBoxLayout() mapTitleLabel = QLabel("Map Title") self.mapTitleInput = QLineEdit() layout.addWidget(mapTitleLabel) layout.addWidget(self.mapTitleInput) 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() layout.addWidget(self.chunkPosLabel) self.chunkLabel = QLabel() layout.addWidget(self.chunkLabel) layout.addStretch() self.setLayout(layout) # Events 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.parent.map.onPositionChange.sub(self.updatePositionLabels) self.parent.map.onMapData.sub(self.onMapData) self.mapTitleInput.textChanged.connect(self.onMapNameChange) # Initial label setting self.updatePositionLabels(self.parent.map.position) def goToPosition(self): try: x = int(self.tileXInput.text()) y = int(self.tileYInput.text()) z = int(self.tileZInput.text()) self.parent.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])) chunkTileX = pos[0] % CHUNK_WIDTH chunkTileY = pos[1] % CHUNK_HEIGHT chunkTileZ = pos[2] % CHUNK_DEPTH chunkTileIndex = chunkTileX + chunkTileY * CHUNK_WIDTH + chunkTileZ * CHUNK_WIDTH * CHUNK_HEIGHT self.chunkPosLabel.setText(f"Chunk Position: {chunkTileX}, {chunkTileY}, {chunkTileZ} ({chunkTileIndex})") chunkX = pos[0] // CHUNK_WIDTH chunkY = pos[1] // CHUNK_HEIGHT chunkZ = pos[2] // CHUNK_DEPTH self.chunkLabel.setText(f"Chunk: {chunkX}, {chunkY}, {chunkZ}") def onMapData(self, data): self.updatePositionLabels(self.parent.map.position) self.mapTitleInput.setText(data.get("mapName", "")) def onMapNameChange(self, text): self.parent.map.data['mapName'] = text