from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QListWidget, QHBoxLayout, QPushButton, QLineEdit from PyQt5.QtCore import Qt from dusk.entity import Entity class EntityPanel(QWidget): def __init__(self, parent): super().__init__(parent) self.parent = parent layout = QVBoxLayout(self) self.setLayout(layout) # Top panel placeholder topWidget = QLabel("Entity Editor (top)") layout.addWidget(topWidget) # Name input nameLayout = QHBoxLayout() nameLabel = QLabel("Name:") self.nameInput = QLineEdit() nameLayout.addWidget(nameLabel) nameLayout.addWidget(self.nameInput) layout.addLayout(nameLayout) # Entity list and buttons self.entityList = QListWidget() self.entityList.addItems(["Entity 1", "Entity 2", "Entity 3"]) layout.addWidget(self.entityList, stretch=1) btnLayout = QHBoxLayout() self.btnAdd = QPushButton("Add") self.btnRemove = QPushButton("Remove") btnLayout.addWidget(self.btnAdd) btnLayout.addWidget(self.btnRemove) layout.addLayout(btnLayout) # Events self.btnAdd.clicked.connect(self.onAddEntity) self.btnRemove.clicked.connect(self.onRemoveEntity) self.parent.map.onEntityData.sub(self.onEntityData) self.entityList.itemClicked.connect(self.onEntityClicked) self.entityList.itemDoubleClicked.connect(self.onEntityDoubleClicked) # Call once to populate self.onEntityData() self.onEntityUnselect() def onEntityUnselect(self): self.nameInput.setText("") def onEntityDoubleClicked(self, item): print(f"Double clicked: {item.text()}") def onEntityClicked(self, item): print(f"Clicked: {item.text()}") def onAddEntity(self): chunk = self.parent.map.getChunkAtWorldPos(*self.parent.map.position) if chunk is None: return chunk.addEntity() def onRemoveEntity(self): pass def onEntityData(self): self.onEntityUnselect() self.entityList.clear() for chunk in self.parent.map.chunks.values(): for entity_id, entity in chunk.entities.items(): self.entityList.addItem(f"Entity {entity_id}")