83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QHBoxLayout, QMessageBox
|
|
from dusk.defs 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 |