0
0
ProjektAI/kelner/src/managers/DrawableCollection.py
2020-04-06 18:27:11 +02:00

74 lines
2.8 KiB
Python

import random
from src.components.Table import Table, Status
from src.components.Waiter import Waiter
import pygame
#drawable objects manager
class DrawableCollection:
#const, minimal distance between objects
__MinDistance = 0
def __init__(self):
#collection that holds all drawable objects
self.__drawables = []
self.image = pygame.transform.scale((pygame.image.load('./images/Backgroud.png')),(1700,1100))
#adds drawable objects to the collection
def add(self, drawable):
self.__drawables.append(drawable)
#generates and sets random (x, y) and cheks if it's not occupied by other object
def generatePosition(self, drawable):
isPositionUnique = False
while not isPositionUnique:
x = random.randint(drawable.getMinX() + 1, drawable.getMaxX() - 1)
y = random.randint(drawable.getMinY() + 1, drawable.getMaxY() - 1)
isPositionUnique = True
for item in self.__drawables:
if abs(item.getX() - x) <= self.__MinDistance and abs(item.getY() - y) <= self.__MinDistance:
isPositionUnique = False
break
if isPositionUnique:
drawable.setX(x)
drawable.setY(y)
#draws all objects stored in collection
def draw(self, screen):
screen.blit(self.image, (0, 0))
for item in self.__drawables:
item.draw(screen)
#checks if position (x,y) is not occupied by other object
def isPositionAvailable(self, x, y):
isPositionAvailable = True
for item in self.__drawables:
if item.getX() == x and item.getY() == y:
isPositionAvailable = False
break
return isPositionAvailable
#gets all tables by status from collection
def getTables(self, status):
result = []
for item in self.__drawables:
if isinstance(item, Table) and item.isStatus(status):
result += [item]
return result
#gets all waiters from collection
def getWaites(self):
result = []
for item in self.__drawables:
if isinstance(item, Waiter):
result += [item]
return result
#waiter collects order from the nearest table
def collectOrders(self):
waiters = self.getWaites()
for waiter in waiters:
tables = self.getTables(Status.Ready)
for table in tables:
if (table.getX() == waiter.getX() and abs(table.getY() - waiter.getY()) == 1) or (table.getY() == waiter.getY() and abs(table.getX() - waiter.getX()) == 1):
table.setStatus(Status.Waiting)
waiter.addOrder(table)
table.delOrder()