feat: add ghost piece
This commit is contained in:
@@ -93,6 +93,7 @@ class Piece(Entity):
|
|||||||
self.piece_set_sound = mixer.Channel(2)
|
self.piece_set_sound = mixer.Channel(2)
|
||||||
self.previous_points = None
|
self.previous_points = None
|
||||||
self.previous_center = None
|
self.previous_center = None
|
||||||
|
self.ghost_points = [] # TODO change name
|
||||||
|
|
||||||
# Gravity
|
# Gravity
|
||||||
self.gravity_time = ConfigurationManager.get("engine", "piece-gravity-time")
|
self.gravity_time = ConfigurationManager.get("engine", "piece-gravity-time")
|
||||||
@@ -119,10 +120,16 @@ class Piece(Entity):
|
|||||||
self.applying_set = self._apply_set(elapsed_time, game)
|
self.applying_set = self._apply_set(elapsed_time, game)
|
||||||
self.applying_gravity = not self.applying_set
|
self.applying_gravity = not self.applying_set
|
||||||
|
|
||||||
def draw(self, surface: pygame.Surface) -> None:
|
def draw(self, surface: pygame.Surface, well: Well, stack: "Stack") -> None:
|
||||||
|
tile_size = ConfigurationManager.get("engine", "tile-size")
|
||||||
|
|
||||||
|
# ghost piece
|
||||||
|
for square in self._get_ghost_points(well, stack):
|
||||||
|
pygame.draw.polygon(surface, pygame.Color("#FFFFFF"), square, max(tile_size // 6, 1)) # TDOD change white to yaml
|
||||||
|
|
||||||
super().draw(surface)
|
super().draw(surface)
|
||||||
|
|
||||||
tile_size = ConfigurationManager.get("engine", "tile-size")
|
# inner border piece
|
||||||
for square in self.points:
|
for square in self.points:
|
||||||
if self.inner_border_color:
|
if self.inner_border_color:
|
||||||
vertex_one = (square[0][0] + (tile_size // 10), square[0][1] + (tile_size // 10))
|
vertex_one = (square[0][0] + (tile_size // 10), square[0][1] + (tile_size // 10))
|
||||||
@@ -130,6 +137,7 @@ class Piece(Entity):
|
|||||||
vertex_three = (square[2][0] - (tile_size // 10), square[2][1] - (tile_size // 10))
|
vertex_three = (square[2][0] - (tile_size // 10), square[2][1] - (tile_size // 10))
|
||||||
vertex_four = (square[3][0] + (tile_size // 10), square[3][1] - (tile_size // 10))
|
vertex_four = (square[3][0] + (tile_size // 10), square[3][1] - (tile_size // 10))
|
||||||
new_square = (vertex_one, vertex_two, vertex_three, vertex_four)
|
new_square = (vertex_one, vertex_two, vertex_three, vertex_four)
|
||||||
|
|
||||||
pygame.draw.polygon(surface, pygame.Color(self.inner_border_color), new_square, max(tile_size // 6, 1))
|
pygame.draw.polygon(surface, pygame.Color(self.inner_border_color), new_square, max(tile_size // 6, 1))
|
||||||
|
|
||||||
def move(self, vector: Tuple) -> None:
|
def move(self, vector: Tuple) -> None:
|
||||||
@@ -178,6 +186,17 @@ class Piece(Entity):
|
|||||||
|
|
||||||
return mimic_points
|
return mimic_points
|
||||||
|
|
||||||
|
# TODO re work functuon
|
||||||
|
def _mimic_move_p(self, vector: Tuple, points: Tuple) -> List:
|
||||||
|
mimic_points = copy.deepcopy(points)
|
||||||
|
|
||||||
|
for square in mimic_points:
|
||||||
|
for vertex in square:
|
||||||
|
vertex[0] += vector[0]
|
||||||
|
vertex[1] += vector[1]
|
||||||
|
|
||||||
|
return mimic_points
|
||||||
|
|
||||||
def _play_piece_set_sound(self) -> None:
|
def _play_piece_set_sound(self) -> None:
|
||||||
piece_set_sound_file = ConfigurationManager.get("sound", "piece-set")
|
piece_set_sound_file = ConfigurationManager.get("sound", "piece-set")
|
||||||
self.piece_set_sound.play(mixer.Sound(piece_set_sound_file))
|
self.piece_set_sound.play(mixer.Sound(piece_set_sound_file))
|
||||||
@@ -232,9 +251,18 @@ class Piece(Entity):
|
|||||||
def _entity_is_below(self, entity: Entity) -> bool:
|
def _entity_is_below(self, entity: Entity) -> bool:
|
||||||
tile_size = ConfigurationManager.get("engine", "tile-size")
|
tile_size = ConfigurationManager.get("engine", "tile-size")
|
||||||
mimic_points = self._mimic_move((0, tile_size))
|
mimic_points = self._mimic_move((0, tile_size))
|
||||||
|
|
||||||
return entity and entity._collide(mimic_points)
|
return entity and entity._collide(mimic_points)
|
||||||
|
|
||||||
|
# TODO rework function
|
||||||
|
def _get_ghost_points(self, well: Well, stack: "Stack") -> List:
|
||||||
|
tile_size = ConfigurationManager.get("engine", "tile-size")
|
||||||
|
prior_points = []
|
||||||
|
current_points = self.points
|
||||||
|
while not well._collide(current_points) and not stack._collide(current_points):
|
||||||
|
prior_points = current_points
|
||||||
|
current_points = self._mimic_move_p((0, tile_size), current_points)
|
||||||
|
return prior_points
|
||||||
|
|
||||||
# shape attributes
|
# shape attributes
|
||||||
I_SHAPE = (((0, 0), (1, 0), (1, 1), (0, 1)), ((1, 0), (2, 0), (2, 1), (1, 1)), ((2, 0), (3, 0), (3, 1), (2, 1)), ((3, 0), (4, 0), (4, 1), (3, 1)), (2, 0))
|
I_SHAPE = (((0, 0), (1, 0), (1, 1), (0, 1)), ((1, 0), (2, 0), (2, 1), (1, 1)), ((2, 0), (3, 0), (3, 1), (2, 1)), ((3, 0), (4, 0), (4, 1), (3, 1)), (2, 0))
|
||||||
J_SHAPE = (((0, 0), (1, 0), (1, 1), (0, 1)), ((1, 0), (2, 0), (2, 1), (1, 1)), ((2, 0), (3, 0), (3, 1), (2, 1)), ((2, 1), (3, 1), (3, 2), (2, 2)), (1.5, 0.5))
|
J_SHAPE = (((0, 0), (1, 0), (1, 1), (0, 1)), ((1, 0), (2, 0), (2, 1), (1, 1)), ((2, 0), (3, 0), (3, 1), (2, 1)), ((2, 1), (3, 1), (3, 2), (2, 2)), (1.5, 0.5))
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ class Game:
|
|||||||
if self.stack:
|
if self.stack:
|
||||||
self.stack.draw(self.screen)
|
self.stack.draw(self.screen)
|
||||||
if self.current_piece:
|
if self.current_piece:
|
||||||
self.current_piece.draw(self.screen)
|
self.current_piece.draw(self.screen, self.well, self.stack)
|
||||||
|
|
||||||
#TextGenerator.draw("12345678901234567890123456789012345678901234567890", (0, 0), self.screen)
|
#TextGenerator.draw("12345678901234567890123456789012345678901234567890", (0, 0), self.screen)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user