-
Notifications
You must be signed in to change notification settings - Fork 0
/
building.py
104 lines (82 loc) · 3.09 KB
/
building.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import pygame
from map.tile import Tile
from rendering.effects import create_shadow
class BuildingPreview:
def __init__(self, asset: pygame.Surface) -> None:
self.image = asset
# Here you are calling the tint_image function with a color parameter to get tinted images
self.tinted_image_green = self.tint_image((0, 255, 0, 128))
self.tinted_image_red = self.tint_image((255, 0, 0, 128))
def tint_image(self, color: tuple[int, int, int, int]) -> pygame.Surface:
"""Tints the building image with the given color."""
tinted_image = self.image.copy()
tinted_image.fill(color, special_flags=pygame.BLEND_RGBA_MULT)
return tinted_image
class Building:
type = "Building"
"""Represents a building in the game."""
def __init__(self, name, width, height, image, income, citizens) -> None:
self.name = name
self.width = width
self.height = height
self.x = None
self.y = None
self.image = image
self.income = income
self.citizens = citizens
self.type = "Building"
def __str__(self):
return self.name
def draw(self, surface, camera_offset_x, camera_offset_y) -> None:
# Generate shadow for the building
shadow, shadow_offset = create_shadow(self.image)
# Draw the shadow considering the camera offset
surface.blit(
shadow,
(
(self.x * Tile.size + shadow_offset[0]) - camera_offset_x,
(self.y * Tile.size + shadow_offset[1]) - camera_offset_y,
),
)
# Draw the building considering the camera offset
surface.blit(self.image, ((self.x * Tile.size) - camera_offset_x, (self.y * Tile.size) - camera_offset_y))
class House(Building):
income = -20
citizens = 4
cost = 500
name = "Simple Hut"
def __init__(self, asset, x=None, y=None) -> None:
super().__init__(name=self.name, width=3, height=3, image=asset, income=self.income, citizens=self.citizens)
self.x = x
self.y = y
self.income = -10
self.citizens = 4
class Road:
cost = 50
type = "Road"
def __init__(self, x=None, y=None, asset=None) -> None:
self.x = x
self.y = y
self.width = 1
self.height = 1
self.image = asset
def __str__(self) -> str:
return self.type
def draw(self, surface, camera_offset_x, camera_offset_y) -> None:
x = self.x * Tile.size - camera_offset_x
y = self.y * Tile.size - camera_offset_y
color = (61, 34, 1) if self.image is None else self.image
pygame.draw.rect(surface, color, (x, y, Tile.size, Tile.size))
class Church(Building):
cost = 1000
income = 100
name = "Church"
def __init__(
self,
asset,
x=None,
y=None,
) -> None:
super().__init__(name=self.name, width=4, height=4, image=asset, income=self.income, citizens=0)
self.x = x
self.y = y