Ent saving and loading
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user