74 lines
2.8 KiB
Python
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() |