corrections corners bugs, clean tree structure and start entrance
This commit is contained in:
@@ -1,36 +1,64 @@
|
||||
import random as rd
|
||||
from utils.Enums import COLLUMN_STYLE
|
||||
from utils.functions import *
|
||||
from utils.Enums import COLLUMN_STYLE,DIRECTION,INTER_FLOOR_BORDER
|
||||
from gdpc import Editor, Block, geometry, Transform
|
||||
from buildings.geometry.Vertice import Vertice
|
||||
from buildings.geometry.Point import Point
|
||||
from buildings.elements.Window import Window
|
||||
from buildings.elements.Balcony import Balcony
|
||||
|
||||
class Facade:
|
||||
def __init__(self, rdata, vertices : list[Vertice], is_inner_or_outer : COLLUMN_STYLE):
|
||||
def __init__(self, rdata, vertices : list[Vertice], collumn_style : COLLUMN_STYLE):
|
||||
self.rdata = rdata
|
||||
self.vertices = vertices
|
||||
self.is_inner_or_outer = is_inner_or_outer
|
||||
self.collumn_style = collumn_style
|
||||
self.height, self.length = self.get_dimentions()
|
||||
self.padding = 0
|
||||
self.window = self.get_window()
|
||||
self.has_balcony = self.has_balcony()
|
||||
self.balcony = self.get_balcony()
|
||||
self.has_inter_floor = self.has_inter_floor()
|
||||
self.has_inter_floor, self.inter_floor_border_style = self.has_inter_floor()
|
||||
self.editor, self.materials = None,None
|
||||
|
||||
def build(self, editor : Editor, materials : list[str]):
|
||||
self.editor = editor
|
||||
self.materials = materials
|
||||
points = sum([[vertice.point1, vertice.point2] for vertice in self.vertices], [])
|
||||
|
||||
for vertice in self.vertices:
|
||||
flip=(vertice.facing == DIRECTION.WEST or vertice.facing == DIRECTION.SOUTH, False, False)
|
||||
vertice.fill(editor, materials[0], self.height, xpadding = self.padding, zpadding = self.padding)
|
||||
with editor.pushTransform(Transform(vertice.point1.position,rotation = vertice.facing.value)):
|
||||
with editor.pushTransform(Transform(vertice.point1.position,rotation = vertice.facing.value, flip = flip)):
|
||||
self.window.build(editor, materials)
|
||||
self.build_inter_floor()
|
||||
if self.has_inter_floor: self.build_inter_floor()
|
||||
if self.has_balcony: self.balcony.build(editor, materials)
|
||||
self.correct_corners(points,vertice)
|
||||
|
||||
def correct_corners(self,points : list[Point], v : Vertice):
|
||||
if self.padding == 0:
|
||||
if self.window.border_radius != 0 and self.window.width == self.length:
|
||||
if v.point1 in points:
|
||||
self.editor.placeBlock((0,self.window.ypadding,0), Block(self.materials[8]))
|
||||
self.editor.placeBlock((0,self.window.ypadding+self.window.height,0), Block(self.materials[8], {"type": "top"}))
|
||||
if v.point2 in points:
|
||||
self.editor.placeBlock((self.length-1,self.window.ypadding,0), Block(self.materials[8]))
|
||||
self.editor.placeBlock((self.length-1,self.window.ypadding+self.window.height,0), Block(self.materials[8], {"type": "top"}))
|
||||
|
||||
if self.has_inter_floor:
|
||||
material = Block("air")
|
||||
if self.inter_floor_border_style == INTER_FLOOR_BORDER.SLAB:
|
||||
material = Block(self.materials[8], {"type": "top"})
|
||||
elif self.inter_floor_border_style == INTER_FLOOR_BORDER.STAIRS:
|
||||
material = Block(self.materials[4], {"facing": "south", "half": "top"})
|
||||
|
||||
if v.point1 in points:
|
||||
self.editor.placeBlock((-1,self.height,-1), material)
|
||||
if v.point2 in points:
|
||||
self.editor.placeBlock((self.length,self.height,-1), material)
|
||||
|
||||
|
||||
def get_window(self) -> Window:
|
||||
if self.is_inner_or_outer == COLLUMN_STYLE.OUTER or self.is_inner_or_outer == COLLUMN_STYLE.BOTH:
|
||||
if self.collumn_style.value >= 2: # collumn_style >= 2 = outer collumns
|
||||
self.padding = 1
|
||||
|
||||
max_width = self.length-2*self.padding
|
||||
@@ -41,19 +69,17 @@ class Facade:
|
||||
def get_balcony(self) -> Balcony|None:
|
||||
if not self.has_balcony: return None
|
||||
max_width = self.length-2*self.padding
|
||||
return Balcony(self.rdata["balcony"], max_width, self.window)
|
||||
return Balcony(self.rdata["balcony"], max_width, self.window, self.collumn_style)
|
||||
|
||||
def build_inter_floor(self):
|
||||
if self.has_inter_floor:
|
||||
geometry.placeCuboid(self.editor,(0,self.height,0),(self.length-1,self.height,0),Block(self.materials[0]))
|
||||
geometry.placeCuboid(self.editor,(0,self.height,-1),(self.length-1,self.height,-1),Block(self.materials[4], {"facing": "south", "half": "top"}))
|
||||
geometry.placeCuboid(self.editor,(self.padding,self.height,0),(self.length-1-self.padding,self.height,0),Block(self.materials[0]))
|
||||
geometry.placeCuboid(self.editor,(self.padding,self.height,-1),(self.length-1-self.padding,self.height,-1),Block(self.materials[4], {"facing": "south", "half": "top"}))
|
||||
|
||||
def has_balcony(self) -> bool:
|
||||
return True
|
||||
return self.rdata["balcony"]["proba"] >= rd.random()
|
||||
|
||||
def has_inter_floor(self) -> bool:
|
||||
return self.rdata["inter_floor"] >= rd.random()
|
||||
return (self.rdata["inter_floor"]["proba"] >= rd.random(), select_random(self.rdata["inter_floor"]["border_style"], INTER_FLOOR_BORDER))
|
||||
|
||||
def get_dimentions(self) -> tuple[int]:
|
||||
return ( self.vertices[0].get_height(), len(self.vertices[0]))
|
||||
|
||||
Reference in New Issue
Block a user