2019-03-20 11:20:10 +01:00
|
|
|
import pygame
|
2019-03-25 16:00:01 +01:00
|
|
|
from sprites.cell import Cell, CELL_SIZE
|
2019-03-25 17:47:04 +01:00
|
|
|
from sprites.house import House
|
2019-03-26 23:13:34 +01:00
|
|
|
from sprites.landfill import Landfill
|
2019-03-25 16:00:01 +01:00
|
|
|
from config import PLAY_HEIGHT, PLAY_WIDTH
|
2019-03-21 01:25:19 +01:00
|
|
|
|
2019-03-26 23:13:34 +01:00
|
|
|
GC_CAPACITY = 10
|
|
|
|
|
2019-03-20 11:20:10 +01:00
|
|
|
class Garbage_collector(Cell):
|
2019-03-25 16:03:25 +01:00
|
|
|
|
2019-03-26 23:13:34 +01:00
|
|
|
def __init__(self, x, y):
|
2019-03-21 01:25:19 +01:00
|
|
|
Cell.__init__(self, x, y)
|
|
|
|
self.image = pygame.image.load("images/garbage_collector.png")
|
|
|
|
self.move_options = {
|
2019-03-25 16:00:01 +01:00
|
|
|
"up": lambda forbidden: ('y', self.y - 1) if (self.x, self.y - 1) not in forbidden and self.y - 1 >= 0 else ('y', self.y),
|
|
|
|
"down": lambda forbidden: ('y', self.y + 1) if (self.x, self.y + 1) not in forbidden and self.y + 1 < PLAY_HEIGHT // CELL_SIZE else ('y', self.y),
|
|
|
|
"left": lambda forbidden: ('x', self.x - 1) if (self.x - 1, self.y) not in forbidden and self.x - 1 >= 0 else ('x', self.x),
|
|
|
|
"right": lambda forbidden: ('x', self.x + 1) if (self.x + 1, self.y) not in forbidden and self.x + 1 < PLAY_WIDTH // CELL_SIZE else ('x', self.x)
|
2019-03-21 01:25:19 +01:00
|
|
|
}
|
2019-03-25 16:03:25 +01:00
|
|
|
self.trash_space_taken = {
|
|
|
|
"plastic": 0,
|
|
|
|
"glass": 0,
|
|
|
|
"metal": 0
|
|
|
|
}
|
|
|
|
self.trash_collected = 0
|
2019-03-20 11:20:10 +01:00
|
|
|
|
2019-03-21 01:25:19 +01:00
|
|
|
def move(self, direction, forbidden):
|
|
|
|
(destination, value) = self.move_options[direction](forbidden)
|
|
|
|
if(destination is 'x'):
|
|
|
|
self.x = value
|
|
|
|
elif(destination is 'y'):
|
|
|
|
self.y = value
|
|
|
|
self.update()
|
2019-03-25 17:47:04 +01:00
|
|
|
|
2019-03-25 17:41:24 +01:00
|
|
|
def collect_trash(self, house):
|
2019-03-26 23:13:34 +01:00
|
|
|
global GC_CAPACITY
|
2019-03-25 17:41:24 +01:00
|
|
|
rubbish = house.get_rubbish_data()
|
2019-03-26 23:13:34 +01:00
|
|
|
to_collect = [0,0,0]
|
2019-03-25 17:41:24 +01:00
|
|
|
to_collect = rubbish
|
|
|
|
|
2019-03-26 21:26:20 +01:00
|
|
|
dic = {
|
|
|
|
0: "plastic",
|
|
|
|
1: "glass",
|
|
|
|
2: "metal"
|
|
|
|
}
|
2019-03-25 17:41:24 +01:00
|
|
|
|
2019-03-26 23:13:34 +01:00
|
|
|
for i in range(0,3):
|
2019-03-25 17:41:24 +01:00
|
|
|
|
2019-03-26 23:13:34 +01:00
|
|
|
if(rubbish[i] > GC_CAPACITY - self.trash_space_taken.get(dic[i])):
|
|
|
|
to_collect[i] = GC_CAPACITY - self.trash_space_taken.get(dic[i])
|
2019-03-26 21:26:20 +01:00
|
|
|
self.trash_space_taken[dic[i]] += to_collect[i]
|
|
|
|
self.trash_collected += to_collect[i]
|
2019-03-26 23:13:34 +01:00
|
|
|
print("GARBAGE COLLECTOR>> Took "+str(to_collect[i])+" "+dic[i])
|
2019-03-26 21:26:20 +01:00
|
|
|
|
2019-03-25 17:41:24 +01:00
|
|
|
house.give_away_rubbish(to_collect[0], to_collect[1], to_collect[2])
|
2019-03-25 16:03:25 +01:00
|
|
|
|
2019-03-26 23:13:34 +01:00
|
|
|
def throw_trash(self, landfill):
|
|
|
|
landfill_type = landfill.get_type()
|
|
|
|
print("GARBAGE COLLECTOR>> REMOVED "+landfill_type)
|
|
|
|
self.trash_space_taken[landfill_type] = 0
|
|
|
|
|
|
|
|
def select_object(self, interactables):
|
|
|
|
print("### INTERACTION ###")
|
|
|
|
for item in interactables:
|
|
|
|
if(type(item)==House):
|
|
|
|
item_x, item_y = item.get_coordinates()
|
|
|
|
if((abs(self.x - item_x)==1 and abs(self.y - item_y)==0) or (abs(self.x - item_x)==0 and abs(self.y - item_y)==1)):
|
|
|
|
self.collect_trash(item)
|
|
|
|
elif(type(item)==Landfill):
|
|
|
|
item_x, item_y = item.get_coordinates()
|
|
|
|
if((abs(self.x - item_x)==1 and abs(self.y - item_y)==0) or (abs(self.x - item_x)==0 and abs(self.y - item_y)==1)):
|
|
|
|
self.throw_trash(item)
|
|
|
|
|
2019-03-25 16:03:25 +01:00
|
|
|
def get_collect_data(self):
|
|
|
|
return self.trash_collected
|
|
|
|
|
|
|
|
def get_space_data(self):
|
|
|
|
return self.trash_space_taken
|