90 lines
2.4 KiB
Python
90 lines
2.4 KiB
Python
from tools.dusk.defs import ENTITY_TYPE_NULL, ENTITY_TYPE_NPC, CHUNK_WIDTH, CHUNK_HEIGHT, CHUNK_DEPTH, TILE_WIDTH, TILE_HEIGHT, TILE_DEPTH
|
|
from tools.editor.map.vertexbuffer import VertexBuffer
|
|
|
|
class Entity:
|
|
def __init__(self, chunk, localX=0, localY=0, localZ=0):
|
|
self.type = ENTITY_TYPE_NPC
|
|
self.name = "Unititled"
|
|
self.localX = localX % CHUNK_WIDTH
|
|
self.localY = localY % CHUNK_HEIGHT
|
|
self.localZ = localZ % CHUNK_DEPTH
|
|
|
|
self.chunk = chunk
|
|
self.vertexBuffer = VertexBuffer()
|
|
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)
|
|
self.name = obj.get('name', "Untitled")
|
|
pass
|
|
|
|
def save(self, obj):
|
|
obj['type'] = self.type
|
|
obj['name'] = self.name
|
|
obj['x'] = self.localX
|
|
obj['y'] = self.localY
|
|
obj['z'] = self.localZ
|
|
pass
|
|
|
|
def setType(self, entityType):
|
|
if self.type == entityType:
|
|
return
|
|
self.type = entityType
|
|
self.chunk.dirty = True
|
|
self.chunk.map.onEntityData.invoke()
|
|
|
|
def setName(self, name):
|
|
if self.name == name:
|
|
return
|
|
self.name = name
|
|
self.chunk.dirty = True
|
|
self.chunk.map.onEntityData.invoke()
|
|
|
|
def draw(self):
|
|
self.vertexBuffer.clear()
|
|
|
|
startX = (self.chunk.x * CHUNK_WIDTH + self.localX) * TILE_WIDTH
|
|
startY = (self.chunk.y * CHUNK_HEIGHT + self.localY) * TILE_HEIGHT
|
|
startZ = (self.chunk.z * CHUNK_DEPTH + self.localZ) * TILE_DEPTH
|
|
w = TILE_WIDTH
|
|
h = TILE_HEIGHT
|
|
d = TILE_DEPTH
|
|
|
|
# Center
|
|
startX -= w / 2
|
|
startY -= h / 2
|
|
startZ -= d / 2
|
|
|
|
# Offset upwards a little
|
|
startZ += 1
|
|
|
|
# Buffer simple quad at current position (need 6 positions)
|
|
self.vertexBuffer.vertices = [
|
|
startX, startY, startZ,
|
|
startX + w, startY, startZ,
|
|
startX + w, startY + h, startZ,
|
|
startX, startY, startZ,
|
|
startX + w, startY + h, startZ,
|
|
startX, startY + h, startZ,
|
|
]
|
|
self.vertexBuffer.colors = [
|
|
1.0, 0.0, 1.0, 1.0,
|
|
1.0, 0.0, 1.0, 1.0,
|
|
1.0, 0.0, 1.0, 1.0,
|
|
1.0, 0.0, 1.0, 1.0,
|
|
1.0, 0.0, 1.0, 1.0,
|
|
1.0, 0.0, 1.0, 1.0,
|
|
]
|
|
self.vertexBuffer.uvs = [
|
|
0.0, 0.0,
|
|
1.0, 0.0,
|
|
1.0, 1.0,
|
|
0.0, 0.0,
|
|
1.0, 1.0,
|
|
0.0, 1.0,
|
|
]
|
|
self.vertexBuffer.buildData()
|
|
self.vertexBuffer.draw() |