diff options
author | Viljami Ilola <+@hix.fi> | 2024-03-16 20:30:32 +0200 |
---|---|---|
committer | Viljami Ilola <+@hix.fi> | 2024-03-16 20:30:32 +0200 |
commit | 3959cfd0c0cab47f863ea5672350ad280b4b7773 (patch) | |
tree | 1aff8e0cad45be393802774b4c011468c8cfc161 /src/sliceitoff/field/field.py | |
parent | 6a9f8ab2b47ab9dd19b7ae0e507c16bb919de975 (diff) |
field remove
Diffstat (limited to 'src/sliceitoff/field/field.py')
-rw-r--r-- | src/sliceitoff/field/field.py | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/src/sliceitoff/field/field.py b/src/sliceitoff/field/field.py index 13b5c6a..c0c482d 100644 --- a/src/sliceitoff/field/field.py +++ b/src/sliceitoff/field/field.py @@ -2,18 +2,24 @@ import pygame from display import Scaling class FieldSprite(pygame.sprite.Sprite): - def __init__(self, rect: pygame.Rect): + def __init__(self, area: tuple ): super().__init__() - self.rect = rect + self.area = area + self.update() + + def update(self): + self.rect = Scaling.area_to_rect(self.area) self.image = pygame.Surface(self.rect.size) self.image.fill("green") + class Field(): def __init__(self): self.sprites = pygame.sprite.Group() - self.updated = True - self.areas = [(0,0,40_000,28_000)] +# self.updated = True + self.sprites.add(FieldSprite( (0, 0, 40_000, 28_000) )) +# self.areas = [(0,0,40_000,28_000)] def coordinates_inside_area(self, area, x, y) -> bool: if x < area[0]: @@ -26,21 +32,23 @@ class Field(): return False return True - def slice(self, pos: tuple, direction: bool, thickness: int) -> bool: + def slice(self, pos: tuple, direction: bool, thickness: int) -> pygame.Rect: """ Slice one area into two areas """ # Find the overlapping area - for area in self.areas: - if self.coordinates_inside_area(area, pos[0], pos[1]): + for field in self.sprites: + if self.coordinates_inside_area(field.area, pos[0], pos[1]): break else: - return False + return None # remove current area - self.areas.remove(area) - ax, ay, aw, ah = area + ax, ay, aw, ah = field.area + field.remove(self.sprites) # create new areas if there is any space +# self.updated = True + if direction: x1 = ax x2 = pos[0] - thickness @@ -48,31 +56,31 @@ class Field(): x4 = ax + aw if x2 > x1: - self.areas.append( (x1, ay, x2-x1, ah) ) + self.sprites.add(FieldSprite( (x1, ay, x2-x1, ah) )) if x4 > x3: - self.areas.append( (x3, ay, x4-x3, ah) ) - else: - y1 = ay - y2 = pos[1] - thickness - y3 = pos[1] + thickness - y4 = ay + ah - - if y2 > y1: - self.areas.append( (ax, y1, aw, y2-y1) ) - if y4 > y3: - self.areas.append( (ax, y3, aw, y4-y3) ) - self.updated = True - return True + self.sprites.add(FieldSprite( (x3, ay, x4-x3, ah) )) + return Scaling.area_to_rect((x2, ay, x3-x2, ah)) + y1 = ay + y2 = pos[1] - thickness + y3 = pos[1] + thickness + y4 = ay + ah + + if y2 > y1: + self.sprites.add(FieldSprite( (ax, y1, aw, y2-y1) )) + if y4 > y3: + self.sprites.add(FieldSprite( (ax, y3, aw, y4-y3) )) + return Scaling.area_to_rect((ax, y2, aw, y3-y2)) def __update_sprites(self): - self.sprites.empty() - for area in self.areas: - self.sprites.add(FieldSprite(Scaling.area_to_rect(area))) - self.updated = False + """""" +# self.sprites.empty() +# for area in self.areas: +# self.sprites.add(FieldSprite(Scaling.area_to_rect(area))) +# self.updated = False def get_sprites(self) -> pygame.sprite.Group: - if self.updated: - self.__update_sprites() +# if self.updated: +# self.__update_sprites() return self.sprites def __del__(self): |