Ent saving and loading
Some checks failed
Build Dusk / build-linux (push) Failing after 49s
Build Dusk / build-psp (push) Failing after 59s

This commit is contained in:
2025-11-22 11:20:07 -06:00
parent 6f33522c1c
commit 03218ce20f
4 changed files with 89 additions and 18 deletions

View File

@@ -1,6 +1,7 @@
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QListWidget, QHBoxLayout, QPushButton, QLineEdit
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QListWidget, QHBoxLayout, QPushButton, QLineEdit, QListWidgetItem
from PyQt5.QtCore import Qt
from dusk.entity import Entity
from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH
class EntityPanel(QWidget):
def __init__(self, parent):
@@ -23,7 +24,7 @@ class EntityPanel(QWidget):
# Entity list and buttons
self.entityList = QListWidget()
self.entityList.addItems(["Entity 1", "Entity 2", "Entity 3"])
self.entityList.addItems([])
layout.addWidget(self.entityList, stretch=1)
btnLayout = QHBoxLayout()
@@ -37,6 +38,7 @@ class EntityPanel(QWidget):
self.btnAdd.clicked.connect(self.onAddEntity)
self.btnRemove.clicked.connect(self.onRemoveEntity)
self.parent.map.onEntityData.sub(self.onEntityData)
self.parent.map.onPositionChange.sub(self.onPositionChange)
self.entityList.itemClicked.connect(self.onEntityClicked)
self.entityList.itemDoubleClicked.connect(self.onEntityDoubleClicked)
@@ -46,18 +48,32 @@ class EntityPanel(QWidget):
def onEntityUnselect(self):
self.nameInput.setText("")
self.entityList.setCurrentItem(None)
def onEntitySelect(self, entity):
self.nameInput.setText(entity.name)
self.entityList.setCurrentItem(entity.item)
def onEntityDoubleClicked(self, item):
print(f"Double clicked: {item.text()}")
entity = item.data(Qt.UserRole)
chunk = entity.chunk
worldX = chunk.x + entity.localX
worldY = chunk.y + entity.localY
worldZ = chunk.z + entity.localZ
self.parent.map.moveTo(worldX, worldY, worldZ)
def onEntityClicked(self, item):
print(f"Clicked: {item.text()}")
pass
def onAddEntity(self):
chunk = self.parent.map.getChunkAtWorldPos(*self.parent.map.position)
if chunk is None:
return
chunk.addEntity()
ent = chunk.addEntity(
self.parent.map.position[0] - chunk.x,
self.parent.map.position[1] - chunk.y,
self.parent.map.position[2] - chunk.z
)
def onRemoveEntity(self):
pass
@@ -66,5 +82,30 @@ class EntityPanel(QWidget):
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}")
for id, entity in chunk.entities.items():
item = QListWidgetItem(entity.name)
item.setData(Qt.UserRole, entity) # Store the entity object
entity.item = item
self.entityList.addItem(item)
# Select if there is something at current position
self.onPositionChange(self.parent.map.position)
def onPositionChange(self, position):
self.onEntityUnselect()
# Get Entity at..
chunk = self.parent.map.getChunkAtWorldPos(*position)
if chunk is None:
return
localX = position[0] - chunk.x
localY = position[1] - chunk.y
localZ = position[2] - chunk.z
for ent in chunk.entities.values():
if ent.localX != localX or ent.localY != localY or ent.localZ != localZ:
continue
self.onEntitySelect(ent)
self.entityList.setCurrentItem(ent.item)
break