This commit is contained in:
Eclairsombre
2024-06-15 00:31:00 +02:00
parent 6cd1bab14f
commit b90a0128b2

180
House.py
View File

@@ -23,6 +23,8 @@ class House:
self.direction = direction
self.entranceWall = None
def createHouseSkeleton(self):
self.delete()
@@ -242,27 +244,33 @@ class House:
print(width, depth, n)
if width < depth:
if n==1:
if n>1:
for k in range(n-1):
for i in range(-1, depth+1):
for y in range(-1, width//2+1):
self.editor.placeBlock((x + i, self.coordinates_max[1]+k, z+y+k+3), Block("blackstone"))
self.editor.placeBlock((x + i, self.coordinates_max[1]+k, z+depth-y-4-k), Block("blackstone"))
if width%2 == 0:
for i in range(-1, depth+1):
self.editor.placeBlock((x+width//2+1, self.coordinates_max[1]+n-1, z+i), Block("blackstone"))
for i in range(-1,depth+1):
self.editor.placeBlock((x+width//2, self.coordinates_max[1], z+i), Block("blackstone"))
else:
for k in range(n):
for i in range(-1, width+1):
for y in range(-1, depth//2+1):
self.editor.placeBlock((x + i, self.coordinates_max[1]+k, z+y+k+2), Block("blackstone"))
self.editor.placeBlock((x + i, self.coordinates_max[1]+k, z+depth-y-3-k), Block("blackstone"))
self.editor.placeBlock((x+width//2, self.coordinates_max[1]+n-1, z+i), Block("blackstone"))
else:
if n==1:
for i in range(-1,width+1):
self.editor.placeBlock((x+i, self.coordinates_max[1], z+depth//2), Block("blackstone"))
else:
if n>1:
for k in range(n-1):
for i in range(-1, width+1):
for y in range(-1, depth//2+1):
self.editor.placeBlock((x + i, self.coordinates_max[1]+k, z+y+k+2), Block("blackstone"))
self.editor.placeBlock((x + i, self.coordinates_max[1]+k, z+depth-y-3-k), Block("blackstone"))
if depth%2 == 0:
for i in range(-1, width+1):
self.editor.placeBlock((x+i, self.coordinates_max[1]+n-1, z+depth//2+1), Block("blackstone"))
for i in range(-1,width+1):
self.editor.placeBlock((x+i, self.coordinates_max[1]+n-1, z+depth//2), Block("blackstone"))
print('-----------------------------------')
for i in range(-1, width+1):
@@ -528,10 +536,113 @@ class House:
self.editor.placeBlock((x + i, self.coordinates_min[1] +4*y, z + j), Block("quartz_block"))
self.grid3d[ x_plan3d+i, 4*y, z_plan3d+j] = True
def getNonAdjacentWalls(self):
main_rect = self.skeleton[0]
x_main, z_main, width_main, depth_main, height_main = main_rect
non_adjacent_walls = []
for k in range(1, len(self.skeleton)):
x, z, width, depth, height = self.skeleton[k]
walls = [(x, z, x + width - 1, z), (x, z, x, z + depth - 1), (x, z + depth - 1, x + width - 1, z + depth - 1), (x + width - 1, z, x + width - 1, z + depth - 1)]
for wall in walls:
x1, z1, x2, z2 = wall
if not ((x_main <= x1 <= x_main + width_main or x_main <= x2 <= x_main + width_main) and (z_main - 1 == z1 or z_main + depth_main + 1 == z1)) and not ((z_main <= z1 <= z_main + depth_main or z_main <= z2 <= z_main + depth_main) and (x_main - 1 == x1 or x_main + width_main + 1 == x1)):
non_adjacent_walls.append((x1, z1, x2, z2))
print(non_adjacent_walls)
return non_adjacent_walls
def getAllExterneWalls(self):
walls = []
adjacent_walls = self.getAdjacentWalls()
for k in range(0, len(self.skeleton)):
x, z, width, depth, height = self.skeleton[k]
if k == 0:
x -= 1
z -= 1
width += 2
depth += 2
walls.append((x, z, x + width - 1, z))
walls.append((x, z, x, z + depth - 1))
walls.append((x, z + depth - 1, x + width - 1, z + depth - 1))
walls.append((x + width - 1, z, x + width - 1, z + depth - 1))
walls_to_keep = []
for wall in walls:
remove_wall = False
for adj_wall in adjacent_walls:
if self.isInsideWall(wall, adj_wall):
remove_wall = True
break
if not remove_wall:
walls_to_keep.append(wall)
return walls_to_keep
def isInsideWall(self, big_wall, small_wall):
x1, z1, x2, z2 = big_wall
x3, z3, x4, z4 = small_wall
if x1 == x2 == x3 == x4:
return x1 == x3 and z1 <= z3 and z4 <= z2
elif z1 == z2 == z3 == z4:
return z1 == z3 and x1 <= x3 and x4 <= x2
def placeWindowOnWall(self,wall,axis, is_x):
for l in range(self.nbEtage):
if axis%2==0:
if axis == 4:
if is_x:
self.editor.placeBlock((wall[0]+2, self.coordinates_min[1] + 2+l*4, wall[1]), Block("glass_pane"))
self.editor.placeBlock((wall[0]+3, self.coordinates_min[1] + 2+l*4, wall[1]), Block("glass_pane"))
else:
self.editor.placeBlock((wall[0], self.coordinates_min[1] + 2+l*4, wall[1]+3), Block("glass_pane"))
self.editor.placeBlock((wall[0], self.coordinates_min[1] + 2+l*4, wall[1]+2), Block("glass_pane"))
else:
for i in range(0, math.ceil(axis/4)):
if is_x:
self.editor.placeBlock((wall[0]+1+i*4, self.coordinates_min[1] + 2+l*4, wall[1]), Block("glass_pane"))
self.editor.placeBlock((wall[0]+2+i*4, self.coordinates_min[1] + 2+l*4, wall[1]), Block("glass_pane"))
else:
self.editor.placeBlock((wall[0], self.coordinates_min[1] + 2+l*4, wall[1]+1+i*4), Block("glass_pane"))
self.editor.placeBlock((wall[0], self.coordinates_min[1] + 2+l*4, wall[1]+2+i*4), Block("glass_pane"))
else:
if axis<=5:
for i in range(0, axis):
if is_x:
self.editor.placeBlock((wall[0]+1+i, self.coordinates_min[1] + 2+l*4, wall[1]), Block("glass_pane"))
else:
self.editor.placeBlock((wall[0], self.coordinates_min[1] + 2+l*4, wall[1]+1+i), Block("glass_pane"))
else:
for i in range(0, math.ceil(axis/2)):
if is_x:
self.editor.placeBlock((wall[0]+i*2+1, self.coordinates_min[1] + 2+l*4, wall[1]), Block("glass_pane"))
else:
self.editor.placeBlock((wall[0], self.coordinates_min[1] + 2+l*4, wall[1]+i*2+1), Block("glass_pane"))
def placeWindow(self):
pass
walls = self.getAllExterneWalls()
for wall in walls:
x1, z1, x2, z2 = wall
x = abs(x2-x1) -1
z = abs(z2-z1) -1
if x1 == x2:
self.placeWindowOnWall(wall, z, False)
elif z1 == z2:
self.placeWindowOnWall(wall, x, True)
def placeStairs(self):
pass
@@ -553,9 +664,11 @@ class House:
else:
return []
if wall != self.skeleton[0]:
if closest_wall != self.skeleton[0]:
wall = (wall[0]+1, wall[1]+1, wall[2]-2, wall[3]-2)
else:
wall = (wall[0], wall[1], wall[2]-1, wall[3]-1)
return wall
@@ -563,21 +676,40 @@ class House:
def placeEntrance(self):
wall = self.WallFacingDirection()
self.entranceWall = wall
match self.direction:
case "N":
if (wall[2] - wall[0]) % 2 != 0:
self.editor.placeBlock(((wall[0] + wall[2]) // 2 +1, self.coordinates_min[1]+1, wall[1]-1), Block("air"))
self.editor.placeBlock(((wall[0] + wall[2]) // 2 +1, self.coordinates_min[1]+2, wall[1]-1), Block("air"))
print((wall[0] + wall[2]) // 2, self.coordinates_min[1]+1, wall[1])
print((wall[0] + wall[2]) // 2 +1, self.coordinates_min[1]+1, wall[1]-1)
self.editor.placeBlock(((wall[0] + wall[2]) // 2, self.coordinates_min[1]+1, wall[1]-1), Block("air"))
self.editor.placeBlock(((wall[0] + wall[2]) // 2, self.coordinates_min[1]+2, wall[1]-1), Block("air"))
print((wall[0] + wall[2]) // 2, self.coordinates_min[1]+1, wall[1]+1)
print((wall[0] + wall[2]) // 2, self.coordinates_min[1]+1, wall[1]-1)
case "S":
pass
if (wall[2] - wall[0]) % 2 != 0:
self.editor.placeBlock(((wall[0] + wall[2]) // 2 +1, self.coordinates_min[1]+1, wall[3]+1), Block("air"))
self.editor.placeBlock(((wall[0] + wall[2]) // 2 +1, self.coordinates_min[1]+2, wall[3]+1), Block("air"))
print((wall[0] + wall[2]) // 2 +1, self.coordinates_min[1]+1, wall[3]+1)
self.editor.placeBlock(((wall[0] + wall[2]) // 2, self.coordinates_min[1]+1, wall[3]+1), Block("air"))
self.editor.placeBlock(((wall[0] + wall[2]) // 2, self.coordinates_min[1]+2, wall[3]+1), Block("air"))
print((wall[0] + wall[2]) // 2, self.coordinates_min[1]+1, wall[3]+1)
case "E":
pass
if (wall[3] - wall[1]) % 2 != 0:
self.editor.placeBlock((wall[2]+1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2 +1), Block("air"))
self.editor.placeBlock((wall[2]+1, self.coordinates_min[1]+2, (wall[1] + wall[3]) // 2 +1), Block("air"))
print(wall[2]+1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2 +1)
self.editor.placeBlock((wall[2]+1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2), Block("air"))
self.editor.placeBlock((wall[2]+1, self.coordinates_min[1]+2, (wall[1] + wall[3]) // 2), Block("air"))
print(wall[2]+1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2)
case "W":
pass
if (wall[3] - wall[1]) % 2 != 0:
self.editor.placeBlock((wall[0]-1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2 +1), Block("air"))
self.editor.placeBlock((wall[0]-1, self.coordinates_min[1]+2, (wall[1] + wall[3]) // 2 +1), Block("air"))
print(wall[0]-1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2 +1)
self.editor.placeBlock((wall[0]-1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2), Block("air"))
self.editor.placeBlock((wall[0]-1, self.coordinates_min[1]+2, (wall[1] + wall[3]) // 2), Block("air"))
print(wall[0]-1, self.coordinates_min[1]+1, (wall[1] + wall[3]) // 2)
case _:
pass
@@ -599,8 +731,10 @@ if __name__ == "__main__":
house.placeDoor()
house.placeRoof()
house.putCelling()
house.placeWindow()
house.placeEntrance()
new_coordinates_min =(coordinates_max[0] + 10, coordinates_min[1], coordinates_min[2])
new_coordinates_max = (coordinates_max[0] + 10 +24, coordinates_max[1], coordinates_max[2])
coordinates_min = new_coordinates_min