improved color indication of orders, added penalty points

This commit is contained in:
Vadzim Valchkovich 2023-06-15 18:18:25 +02:00
parent f8b64076e2
commit 4f97da84bf
5 changed files with 40 additions and 8 deletions

View File

@ -25,6 +25,8 @@
> **F** - _show or hide fringes_ > **F** - _show or hide fringes_
> **P** - _penalty time_
> **SPACE** - _pause or continue_ > **SPACE** - _pause or continue_
## TODO ## TODO

View File

@ -123,10 +123,13 @@ class Engine:
if self.waiter.on(o.position): if self.waiter.on(o.position):
o.action(self.waiter, self.action_clock) o.action(self.waiter, self.action_clock)
if self.waiter.on(self.kitchen.position): self.kitchen.action(self.waiter, self.action_clock)
self.kitchen.action(self.waiter, self.action_clock)
# STEP 6. Wait # STEP 6. Update kitchen state
self.kitchen.updateMark()
# STEP 7. Wait
time.sleep(self.action_duration) time.sleep(self.action_duration)

View File

@ -22,3 +22,6 @@ class UserController:
print(colored("Paused", "red")) print(colored("Paused", "red"))
else: else:
print(colored("Continued", "green")) print(colored("Continued", "green"))
elif event.key == pygame.K_p:
print(colored("Penalty time: 100", "red"))
engine.clock_increment(100)

View File

@ -1,5 +1,6 @@
from src.obj.Object import Object from src.obj.Object import Object
from src.obj.Table import Table from src.obj.Table import Table
from src.obj.Mark import Mark
class Kitchen(Object): class Kitchen(Object):
@ -7,22 +8,44 @@ class Kitchen(Object):
super().__init__("kitchen", position, orientation, square_size, screen_size, store) super().__init__("kitchen", position, orientation, square_size, screen_size, store)
self.cooking: list(Table) = [] self.cooking: list(Table) = []
self.done: list(Table) = [] self.done: list(Table) = []
self.mark = None
def updateMark(self):
if self.done:
self.setMark("dish_done")
elif self.cooking:
self.setMark("dish_cooking")
else:
self.unsetMark()
def setMark(self, mark_type):
self.mark = Mark(self, mark_type)
def unsetMark(self):
self.mark = None
def blit(self, screen):
super().blit(screen)
if self.mark:
self.mark.blit(screen)
def action(self, waiter, current_time): def action(self, waiter, current_time):
self.cook_dishes(current_time) self.cook_dishes(current_time)
waiter.combine_orders(current_time, self) if waiter.on(self.position):
waiter.recharge() waiter.combine_orders(current_time, self)
waiter.recharge()
def cook_dishes(self, current_time): def cook_dishes(self, current_time):
for table in self.cooking: for table in self.cooking:
if table.dish_is_ready(current_time): if table.dish_is_ready(current_time):
self.done.append(table) self.done.append(table)
table.setMark("dish_done")
for table in self.done: for table in self.done:
if table in self.cooking: if table in self.cooking:
self.cooking.remove(table) self.cooking.remove(table)
self.updateMark()
def take_order(self, order): def take_order(self, order):
order.start_cooking() order.start_cooking()
order.setMark("dish_cooking") order.setMark("dish_cooking")

View File

@ -43,7 +43,7 @@ class Table(Object):
self.change_role(new_role, current_time) self.change_role(new_role, current_time)
if self.agent_role == "wait": if self.agent_role == "wait":
self.cooking_time = random.randint(0, 1000) self.cooking_time = random.randint(0, 500)
def dish_is_ready(self, current_time): def dish_is_ready(self, current_time):
return current_time - self.waiting_time > self.cooking_time return current_time - self.waiting_time > self.cooking_time
@ -80,10 +80,11 @@ class Table(Object):
def start_cooking(self): def start_cooking(self):
if self.agent_role == "wait": if self.agent_role == "wait":
self.cooking_time = random.randint(0, 1000) self.cooking_time = random.randint(0, 500)
def set_done(self, current_time): def set_done(self, current_time):
if self.agent_role == "wait": if self.agent_role == "wait":
self.setMark("dish_done")
self.change_role("done", current_time) self.change_role("done", current_time)
def is_order(self): def is_order(self):