Verteiltesystheme/Code/UI/Field.py

102 lines
2.7 KiB
Python

from Code.Communication.Direction import Direction
from Code.Config import GeneralConfig, SquareConfig
from Code.UI import Square
from Code.UI.Shape import Shape
from Code.UI.Shapes import Shapes
from Code.UI.Square import Square
class Field:
def __init__(self):
self.width = GeneralConfig.fields_amount_x + 2
self.height = GeneralConfig.fields_amount_y + 2
self.field_shift = -10
self.shapes = Shapes()
self.squares = self._creat_squares()
def get_square_on_click_pos(self, mousclick_pos):
index_x = 0
index_y = 0
for line in self.squares:
index_y += 1
index_x = 0
for square in line:
index_x += 1
if square.rect.collidepoint(mousclick_pos):
return (index_y, index_x)
def create_shape(self, shape: Shape, start_square_pos):
self.squares = self.shapes.create_shape(start_square_pos,self.squares, shape)
def _creat_squares(self):
squares = [
[Square(x_pos=j * SquareConfig.width + self.field_shift, y_pos=i * SquareConfig.height + self.field_shift)
for i in range(self.height)] for
j in range(self.width)]
return squares
def update_squares(self, squares):
self.squares = squares
def draw_squares(self, window):
for x in self.squares:
for y in x:
y.draw(window)
def get_edges(self) -> dict:
return {Direction.LEFT: self.get_left_edge(), Direction.RIGHT: self.get_right_edge(),
Direction.TOP: self.get_top(), Direction.BOTTOM: self.get_bottom_edge()}
def get_edge(self, edg_pos: Direction) -> list:
return self.get_edges()[edg_pos]
def get_top(self):
top_squares = []
for y in self.squares:
top_squares.append(y[1].active)
return top_squares
def get_bottom_edge(self):
right_squares = []
for y in self.squares:
right_squares.append(y[len(y) - 2].active)
return right_squares
def get_left_edge(self):
left_squares = []
for x in self.squares[1]:
left_squares.append(x.active)
return left_squares
def get_right_edge(self):
right_squares = []
for x in self.squares[len(self.squares[0]) - 2]:
right_squares.append(x.active)
return right_squares
def fill_ghost_edge(self, value: list):
edge_fn = {Direction.LEFT: self.fill_left_ghost_edge, Direction.RIGHT: self.fill_right_ghost_edge,
Direction.TOP: self.fill_top_ghost_edge, Direction.BOTTOM: self.fill_bottom_ghost_edge}
edge_fn(value)
def fill_right_ghost_edge(self, value: list):
# if len(value)== self.square.
for i in range(len(value)):
self.squares[len(self.squares[0]) - 1][i].active = value[i]
def fill_left_ghost_edge(self, value: list):
for i in range(len(value)):
self.squares[0][i].active = value[i]
def fill_top_ghost_edge(self, value):
pass
def fill_bottom_ghost_edge(self, value):
pass