start door placement
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import random as rd
|
||||
from utils.Enums import DIRECTION
|
||||
from buildings.geometry.Vertice import Vertice
|
||||
|
||||
class Entrance:
|
||||
def __init__(self, rdata, vertices : list[Vertice], direction : DIRECTION):
|
||||
self.vertices = vertices
|
||||
self.direction = direction
|
||||
self.rdata = rdata
|
||||
self.is_centered = self.is_centered()
|
||||
self.door_vertices = self.get_door_vertices()
|
||||
|
||||
def is_centered(self) -> bool:
|
||||
return rd.random() <= self.rdata["centered"]
|
||||
|
||||
def get_door_vertices(self) -> Vertice:
|
||||
oriented_vertices = self.get_oriented_vertices()
|
||||
|
||||
def get_oriented_vertices(self) -> list[Vertice]:
|
||||
# get the most off-centered vertices that are in the same direction as self.direction
|
||||
same_direction_vertices = sorted([v for v in self.vertices if v.direction == self.direction],
|
||||
lambda v: v.point1.z if self.direction.value % 2 == 0 else v.point1.x, # if direction is north or south, sort by x, else sort by z
|
||||
reverse = self.direction == DIRECTION.NORTH or self.direction == DIRECTION.WEST) # if direction is north or west, sort in reverse
|
||||
extremum = same_direction_vertices[0]
|
||||
return [v for v in same_direction_vertices if
|
||||
(v.poin1.x == extremum.point1.x and self.direction.value % 2 == 0) or
|
||||
(v.point1.z == extremum.point1.z and self.direction.value % 2 == 1)]
|
||||
|
||||
Reference in New Issue
Block a user