Ent saving and loading
This commit is contained in:
@@ -1 +1 @@
|
|||||||
{"shapes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
|
{"shapes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "entities": [{"type": 2, "x": 3, "y": 6, "z": 1}]}
|
||||||
@@ -22,9 +22,6 @@ class Chunk:
|
|||||||
self.tiles = {}
|
self.tiles = {}
|
||||||
self.vertexBuffer = VertexBuffer()
|
self.vertexBuffer = VertexBuffer()
|
||||||
|
|
||||||
# TEST
|
|
||||||
self.addEntity()
|
|
||||||
|
|
||||||
tileIndex = 0
|
tileIndex = 0
|
||||||
for tz in range(CHUNK_DEPTH):
|
for tz in range(CHUNK_DEPTH):
|
||||||
for ty in range(CHUNK_HEIGHT):
|
for ty in range(CHUNK_HEIGHT):
|
||||||
@@ -57,9 +54,18 @@ class Chunk:
|
|||||||
for tile in self.tiles.values():
|
for tile in self.tiles.values():
|
||||||
tile.load(data)
|
tile.load(data)
|
||||||
|
|
||||||
|
# For each entity.
|
||||||
|
self.entities = {}
|
||||||
|
if 'entities' in data:
|
||||||
|
for id, entData in enumerate(data['entities']):
|
||||||
|
ent = Entity(self)
|
||||||
|
ent.load(entData)
|
||||||
|
self.entities[id] = ent
|
||||||
|
|
||||||
self.tileUpdateVertices()
|
self.tileUpdateVertices()
|
||||||
self.dirty = False
|
self.dirty = False
|
||||||
self.onChunkData.invoke(self)
|
self.onChunkData.invoke(self)
|
||||||
|
self.map.onEntityData.invoke()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise RuntimeError(f"Failed to load chunk file: {e}")
|
raise RuntimeError(f"Failed to load chunk file: {e}")
|
||||||
|
|
||||||
@@ -68,12 +74,18 @@ class Chunk:
|
|||||||
return
|
return
|
||||||
|
|
||||||
dataOut = {
|
dataOut = {
|
||||||
'shapes': []
|
'shapes': [],
|
||||||
|
'entities': []
|
||||||
}
|
}
|
||||||
|
|
||||||
for tile in self.tiles.values():
|
for tile in self.tiles.values():
|
||||||
dataOut['shapes'].append(tile.shape)
|
dataOut['shapes'].append(tile.shape)
|
||||||
|
|
||||||
|
for ent in self.entities.values():
|
||||||
|
entData = {}
|
||||||
|
ent.save(entData)
|
||||||
|
dataOut['entities'].append(entData)
|
||||||
|
|
||||||
fname = self.getFilename()
|
fname = self.getFilename()
|
||||||
if not fname:
|
if not fname:
|
||||||
raise ValueError("No filename specified for saving chunk.")
|
raise ValueError("No filename specified for saving chunk.")
|
||||||
@@ -107,10 +119,11 @@ class Chunk:
|
|||||||
def draw(self):
|
def draw(self):
|
||||||
self.vertexBuffer.draw()
|
self.vertexBuffer.draw()
|
||||||
|
|
||||||
def addEntity(self):
|
def addEntity(self, localX=0, localY=0, localZ=0):
|
||||||
ent = Entity()
|
ent = Entity(self, localX, localY, localZ)
|
||||||
self.entities[len(self.entities)] = ent
|
self.entities[len(self.entities)] = ent
|
||||||
self.map.onEntityData.invoke()
|
self.map.onEntityData.invoke()
|
||||||
|
self.dirty = True
|
||||||
return ent
|
return ent
|
||||||
|
|
||||||
def removeEntity(self, entity):
|
def removeEntity(self, entity):
|
||||||
@@ -118,5 +131,6 @@ class Chunk:
|
|||||||
if val == entity:
|
if val == entity:
|
||||||
del self.entities[key]
|
del self.entities[key]
|
||||||
self.map.onEntityData.invoke()
|
self.map.onEntityData.invoke()
|
||||||
|
self.dirty = True
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
@@ -1,9 +1,25 @@
|
|||||||
from dusk.defs import ENTITY_TYPE_NULL, ENTITY_TYPE_NPC
|
from dusk.defs import ENTITY_TYPE_NULL, ENTITY_TYPE_NPC
|
||||||
|
|
||||||
class Entity:
|
class Entity:
|
||||||
def __init__(self):
|
def __init__(self, chunk, localX=0, localY=0, localZ=0):
|
||||||
self.type = ENTITY_TYPE_NPC
|
self.type = ENTITY_TYPE_NPC
|
||||||
self.localX = 0
|
self.name = "Unititled"
|
||||||
self.localY = 8
|
self.localX = localX
|
||||||
self.localZ = 1
|
self.localY = localY
|
||||||
|
self.localZ = localZ
|
||||||
|
self.chunk = chunk
|
||||||
|
pass
|
||||||
|
|
||||||
|
def load(self, obj):
|
||||||
|
self.type = obj.get('type', ENTITY_TYPE_NULL)
|
||||||
|
self.localX = obj.get('x', 0)
|
||||||
|
self.localY = obj.get('y', 0)
|
||||||
|
self.localZ = obj.get('z', 0)
|
||||||
|
pass
|
||||||
|
|
||||||
|
def save(self, obj):
|
||||||
|
obj['type'] = self.type
|
||||||
|
obj['x'] = self.localX
|
||||||
|
obj['y'] = self.localY
|
||||||
|
obj['z'] = self.localZ
|
||||||
pass
|
pass
|
||||||
@@ -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 PyQt5.QtCore import Qt
|
||||||
from dusk.entity import Entity
|
from dusk.entity import Entity
|
||||||
|
from dusk.defs import CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH
|
||||||
|
|
||||||
class EntityPanel(QWidget):
|
class EntityPanel(QWidget):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
@@ -23,7 +24,7 @@ class EntityPanel(QWidget):
|
|||||||
|
|
||||||
# Entity list and buttons
|
# Entity list and buttons
|
||||||
self.entityList = QListWidget()
|
self.entityList = QListWidget()
|
||||||
self.entityList.addItems(["Entity 1", "Entity 2", "Entity 3"])
|
self.entityList.addItems([])
|
||||||
layout.addWidget(self.entityList, stretch=1)
|
layout.addWidget(self.entityList, stretch=1)
|
||||||
|
|
||||||
btnLayout = QHBoxLayout()
|
btnLayout = QHBoxLayout()
|
||||||
@@ -37,6 +38,7 @@ class EntityPanel(QWidget):
|
|||||||
self.btnAdd.clicked.connect(self.onAddEntity)
|
self.btnAdd.clicked.connect(self.onAddEntity)
|
||||||
self.btnRemove.clicked.connect(self.onRemoveEntity)
|
self.btnRemove.clicked.connect(self.onRemoveEntity)
|
||||||
self.parent.map.onEntityData.sub(self.onEntityData)
|
self.parent.map.onEntityData.sub(self.onEntityData)
|
||||||
|
self.parent.map.onPositionChange.sub(self.onPositionChange)
|
||||||
self.entityList.itemClicked.connect(self.onEntityClicked)
|
self.entityList.itemClicked.connect(self.onEntityClicked)
|
||||||
self.entityList.itemDoubleClicked.connect(self.onEntityDoubleClicked)
|
self.entityList.itemDoubleClicked.connect(self.onEntityDoubleClicked)
|
||||||
|
|
||||||
@@ -46,18 +48,32 @@ class EntityPanel(QWidget):
|
|||||||
|
|
||||||
def onEntityUnselect(self):
|
def onEntityUnselect(self):
|
||||||
self.nameInput.setText("")
|
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):
|
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):
|
def onEntityClicked(self, item):
|
||||||
print(f"Clicked: {item.text()}")
|
pass
|
||||||
|
|
||||||
def onAddEntity(self):
|
def onAddEntity(self):
|
||||||
chunk = self.parent.map.getChunkAtWorldPos(*self.parent.map.position)
|
chunk = self.parent.map.getChunkAtWorldPos(*self.parent.map.position)
|
||||||
if chunk is None:
|
if chunk is None:
|
||||||
return
|
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):
|
def onRemoveEntity(self):
|
||||||
pass
|
pass
|
||||||
@@ -66,5 +82,30 @@ class EntityPanel(QWidget):
|
|||||||
self.onEntityUnselect()
|
self.onEntityUnselect()
|
||||||
self.entityList.clear()
|
self.entityList.clear()
|
||||||
for chunk in self.parent.map.chunks.values():
|
for chunk in self.parent.map.chunks.values():
|
||||||
for entity_id, entity in chunk.entities.items():
|
for id, entity in chunk.entities.items():
|
||||||
self.entityList.addItem(f"Entity {entity_id}")
|
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