corrections corners bugs, clean tree structure and start entrance
This commit is contained in:
@@ -1,14 +1,17 @@
|
||||
class Point:
|
||||
def __init__(self, x : int = None, y : int = None, z : int = None, p : tuple[int] = None):
|
||||
def __init__(self, x : int = 0, y : int = 0, z : int = 0, p : tuple[int] = None):
|
||||
if p != None: x,y,z = p
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.z = z
|
||||
self.position = (x,y,z)
|
||||
|
||||
def set_position(self, x : int = None, y : int = None, z : int = None, p : tuple[int] = None):
|
||||
def set_position(self, x : int = 0, y : int = 0, z : int = 0, p : tuple[int] = None):
|
||||
if p != None: x,y,z = p
|
||||
self.x = x if x != None else self.x
|
||||
self.y = y if y != None else self.y
|
||||
self.z = z if z != None else self.z
|
||||
self.position = (self.x,self.y,self.z)
|
||||
self.position = (self.x,self.y,self.z)
|
||||
|
||||
def __repr__(self):
|
||||
return f"Point({self.position})"
|
||||
@@ -1,5 +1,5 @@
|
||||
from utils.Enums import DIRECTION
|
||||
from gdpc import Editor, Block, geometry
|
||||
from gdpc import Editor, Block, geometry, Transform
|
||||
from buildings.geometry.Tile import Tile
|
||||
from buildings.geometry.Point import Point
|
||||
from buildings.geometry.Rectangle import Rectangle
|
||||
@@ -11,10 +11,11 @@ class Polygon:
|
||||
self.shape = []
|
||||
self.vertices = []
|
||||
|
||||
def fill_polygon(self, editor : Editor, material : str, y : int, y2 : int = None):
|
||||
if y2 == None: y2 = y
|
||||
def fill(self, editor : Editor, material : str, y : int = 0, y2 : int = None):
|
||||
if y2 == None: y2 = 0
|
||||
for rect in self.shape:
|
||||
rect.fill(editor, material, y, y2)
|
||||
with editor.pushTransform(Transform((0,y,0))):
|
||||
rect.fill(editor, material, y2)
|
||||
|
||||
def fill_vertice(self, editor : Editor, material : str, y : int, y2 : int = None):
|
||||
if y2 == None: y2 = y
|
||||
@@ -66,7 +67,7 @@ class Polygon:
|
||||
|
||||
if len(remaining_vertices) == 0: self.vertices.append(current)
|
||||
|
||||
def set_vertices_and_neighbors(self, tiles : list[Tile], vertices : list[Vertice]):
|
||||
def set_vertices_and_neighbors(self, tiles : list[Tile], vertices : list[Vertice], height : int):
|
||||
for tile in tiles:
|
||||
targets = tile.get_neighbors_coords()
|
||||
for vertice_num,target in enumerate(targets):
|
||||
@@ -74,7 +75,7 @@ class Polygon:
|
||||
if not has_neighbor:
|
||||
vertice = tile.get_vertice(vertice_num)
|
||||
vertices.append(vertice)
|
||||
tile.set_vertice(DIRECTION(vertice_num), vertice)
|
||||
tile.set_vertice(DIRECTION(vertice_num), vertice, height)
|
||||
else :
|
||||
tile.set_neighbor(vertice_num, has_neighbor)
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ class Rectangle:
|
||||
return (self.point1.position, self.point2.position)
|
||||
|
||||
def get_height(self):
|
||||
return self.point2.y - self.point1.y + 1
|
||||
return self.point2.y - self.point1.y
|
||||
|
||||
def fill(self,editor : Editor, material : str, y : int = None, xpadding : int = 0, zpadding : int = 0):
|
||||
if self.point2.x - self.point1.x < 2*xpadding: xpadding = 0
|
||||
@@ -18,3 +18,6 @@ class Rectangle:
|
||||
if y is None: y = self.point2.y
|
||||
|
||||
geometry.placeCuboid(editor, (self.point1.x+xpadding, 0, self.point1.z+zpadding), (self.point2.x-xpadding, y, self.point2.z-zpadding), Block(material))
|
||||
|
||||
def __repr__(self):
|
||||
return f"{type(self).__name__}\n1 : {str(self.point1)},\n2 : {str(self.point2)}"
|
||||
@@ -32,9 +32,9 @@ class Tile:
|
||||
|
||||
def get_neighbors_coords(self):
|
||||
return [Point(x = self.pos.x, z = self.pos.z - self.size), # north
|
||||
Point(x = self.pos.x - self.size, z = self.pos.z), # west
|
||||
Point(x = self.pos.x + self.size, z = self.pos.z), # east
|
||||
Point(x = self.pos.x, z = self.pos.z + self.size), # south
|
||||
Point(x = self.pos.x + self.size, z = self.pos.z)] # east
|
||||
Point(x = self.pos.x - self.size, z = self.pos.z)] # west
|
||||
|
||||
|
||||
def get_neighbor(self, direction) -> Point:
|
||||
@@ -80,8 +80,9 @@ class Tile:
|
||||
case DIRECTION.SOUTH :
|
||||
return self.south_vertice
|
||||
|
||||
def set_vertice(self, direction : DIRECTION, vertice : Vertice):
|
||||
def set_vertice(self, direction : DIRECTION, vertice : Vertice, height : int):
|
||||
self.has_vertice = True
|
||||
vertice.point2.y = height
|
||||
match(direction):
|
||||
case DIRECTION.WEST :
|
||||
self.west_vertice = vertice
|
||||
|
||||
@@ -18,4 +18,7 @@ class Vertice(Rectangle):
|
||||
|
||||
def __len__(self):
|
||||
return self.point2.x - self.point1.x + self.point2.z - self.point1.z + 1
|
||||
|
||||
def __repr__(self):
|
||||
return super().__repr__() + f"\nFacing : {self.facing} \n\n"
|
||||
|
||||
Reference in New Issue
Block a user