diff options
Diffstat (limited to 'src/sliceitoff/field/field.py')
-rw-r--r-- | src/sliceitoff/field/field.py | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/sliceitoff/field/field.py b/src/sliceitoff/field/field.py index 979590e..5881ed9 100644 --- a/src/sliceitoff/field/field.py +++ b/src/sliceitoff/field/field.py @@ -1,5 +1,9 @@ +import os + import pygame -from display import Scaling +from display import Scaling, INTERNAL_WIDTH, INTERNAL_HEIGHT + +DEBUG = os.getenv("DEBUG") class FieldSprite(pygame.sprite.Sprite): def __init__(self, area: tuple ): @@ -14,11 +18,17 @@ class FieldSprite(pygame.sprite.Sprite): class Field(): + initial_area = (400_000, 280_000) + def __init__(self): self.sprites = pygame.sprite.Group() - self.sprites.add(FieldSprite( (0, 0, 400_000, 280_000) )) + self.sprites.add(FieldSprite( (0, 0, *__class__.initial_area) )) + self.area_full = __class__.initial_area[0] * __class__.initial_area[1] + self.area_current = self.area_full + self.percentage = 100 def coordinates_inside_area(self, area, x, y) -> bool: + """ Test if coordinates are inside area """ if x < area[0]: return False if y < area[1]: @@ -28,8 +38,21 @@ class Field(): if y >= area[1]+area[3]: return False return True + + def update_area(self): + """ calculates remaining area and remaining percentage """ + self.area_current = sum( s.area[2]*s.area[3] for s in self.sprites ) + self.percentage = 100 * self.area_current // self.area_full + if DEBUG: + print( + f"FIELD: {self.area_full}/{self.area_current}, " + f"{self.percentage}") - def slice(self, pos: tuple, direction: bool, thickness: int) -> pygame.Rect: + def slice( + self, + pos: tuple, + direction: bool, + thickness: int) -> pygame.Rect: """ Slice one area into two areas """ # Find the overlapping area @@ -55,6 +78,7 @@ class Field(): self.sprites.add(FieldSprite( (x1, ay, x2-x1, ah) )) if x4 > x3: self.sprites.add(FieldSprite( (x3, ay, x4-x3, ah) )) + self.update_area() return Scaling.area_to_rect((x2, ay, x3-x2, ah)) y1 = ay y2 = pos[1] - thickness @@ -65,6 +89,7 @@ class Field(): self.sprites.add(FieldSprite( (ax, y1, aw, y2-y1) )) if y4 > y3: self.sprites.add(FieldSprite( (ax, y3, aw, y4-y3) )) + self.update_area() return Scaling.area_to_rect((ax, y2, aw, y3-y2)) def update(self, dt): |