diff options
Diffstat (limited to 'Saludame.activity/kid_window.py')
-rw-r--r-- | Saludame.activity/kid_window.py | 139 |
1 files changed, 67 insertions, 72 deletions
diff --git a/Saludame.activity/kid_window.py b/Saludame.activity/kid_window.py index 578d187..fe6a6ed 100644 --- a/Saludame.activity/kid_window.py +++ b/Saludame.activity/kid_window.py @@ -19,10 +19,8 @@ class KidWindow(gui.Window): self.mood = "normal" self.kid = animation.Kid(rect, self.kid_rect, 1, windows_controller, game_man, self.mood) + self.add_child(self.kid) - self.add_window(self.kid) - self.kid.set_bg_image(self.bg_image.subsurface(self.kid_rect)) - self.balloon = None ### Events ### @@ -38,10 +36,15 @@ class KidWindow(gui.Window): self.last_repaint = False ##### Environment ##### - def set_environment(self, environment): - self.set_bg_image(pygame.image.load(environment.background_path).convert()) - self.kid.set_bg_image(self.bg_image.subsurface(self.kid_rect)) - self.repaint = True + def set_environment(self, environment, time): + image = pygame.image.load(environment.background_path).convert(24) + if time == "night": + _filter = pygame.Surface(image.get_size()) + _filter.fill((30, 30, 100)) + _filter.set_alpha(50) + image.blit(_filter, (0,0)) + self.set_bg_image(image.convert()) + self.set_dirty_background() ##### Clothes ##### def update_clothes(self): @@ -64,7 +67,7 @@ class KidWindow(gui.Window): ##### Events ##### def add_social_event(self, event): self.social_event = event - self.external_character = ExternalCharacter(self.rect, pygame.Rect(700, 170, 1, 1), 1, self.windows_controller, event) + self.external_character = ExternalCharacter(self.rect, (30, 609), 1, self.windows_controller, event) self.add_window(self.external_character) def remove_social_event(self): @@ -72,33 +75,24 @@ class KidWindow(gui.Window): if self.external_character: self.remove_window(self.external_character) self.external_character = None + self.set_dirty_background() ##### Kid ballon ##### def show_kid_balloon(self, message, time_span): - self.balloon = MessageBalloon(self.rect, pygame.Rect(80, 80, 1, 1), 1, self.windows_controller) + self.balloon = MessageBalloon(self.rect, pygame.Rect(580, 80, 1, 1), 1, self.windows_controller, 'A') self.balloon.set_text(message) self.balloon.set_time_span(time_span) self.add_window(self.balloon) def remove_kid_balloon(self): - self.windows.remove(self.balloon) + if self.balloon: + self.remove_window(self.balloon) self.balloon = None - def draw(self, screen, frames): + def update(self, frames): - changes = [] - - if self.last_repaint: - self.repaint = True - self.last_repaint = False - - # If the menu is showing repaint the whole window - if self.menu.show: - self.last_repaint = True - self.repaint = True + gui.Window.update(self, frames) - changes += gui.Window.draw(self, screen, frames) - if self.balloon: if not self.balloon.visible: self.remove_kid_balloon() @@ -106,59 +100,58 @@ class KidWindow(gui.Window): if self.external_character: if not self.external_character.visible: self.remove_social_event() - - return changes - + + class ExternalCharacter(gui.Window): - def __init__(self, container, rect, frame_rate, windows_controller, event): - - self.character = pygame.image.load(event.person_path).convert() - rect.size = self.character.get_size() + + def __init__(self, container, left_bottom, frame_rate, windows_controller, event): + + rect = pygame.Rect((0,0), (300, 559)) + rect.bottomleft = left_bottom gui.Window.__init__(self, container, rect, frame_rate, windows_controller, "external_character") - self.set_bg_image(self.character) - - self.visible = True self.time_span = event.message_time_span + + character = gui.Image(self.rect, pygame.Rect((13, 179), (273, 380)), 1, event.person_path) + character.keep_dirty = True + self.add_child(character) - self.message_balloon = MessageBalloon(self.container, pygame.Rect(580, 80, 1, 1), 1, self.windows_controller) - self.message_balloon.set_text(event.person_message) - self.message_balloon.set_time_span(self.time_span) # same time_span as character - - self.bg1 = (self.windows_controller.screen.subsurface(self.rect).copy()) - self.bg2 = (self.windows_controller.screen.subsurface(self.message_balloon.rect).copy()) - + message_balloon = MessageBalloon(self.rect, pygame.Rect(0, 0, 1, 1), 1, self.windows_controller, 'B') + message_balloon.set_text(event.person_message) + self.add_window(message_balloon) + # Override handle_mouse_down def handle_mouse_down(self, (x, y)): - self.visible = False + self.hide() + return True - def draw(self, screen, frames): - if not self.time_span: - self.visible = False - if self.visible: - changes = [] - self.time_span -= 1 - self.repaint = True - changes += gui.Window.draw(self, screen, frames) - changes += self.message_balloon.draw(screen, frames) - return changes - else: - screen.blit(self.bg1, self.rect) - screen.blit(self.bg2, self.message_balloon.rect) + def update(self, frames): + self.time_span -= 1 + if self.time_span == 0: + self.hide() self.dispose() - return [self.rect, self.message_balloon.rect] + if self.visible: + # This shouldn't be neccesary but it's not working without it. + self.set_dirty_background() # Always draws it because it collides with the character rectangle + class MessageBalloon(gui.Window): - def __init__(self, container, rect, frame_rate, windows_controller): + def __init__(self, container, rect, frame_rate, windows_controller, b_type): - background = pygame.image.load("assets/events/balloon.png").convert() - rect.size = background.get_size() + self.b_type = b_type - gui.Window.__init__(self, container, rect, frame_rate, windows_controller, "balloon") + if b_type == 'A': + # Thinking balloon + background = pygame.image.load("assets/events/balloon.png").convert() + else: + # Saying balloon + background = pygame.image.load("assets/events/balloonB.png").convert() + + rect.size = background.get_size() - self.bg = (self.windows_controller.screen.subsurface(self.rect).copy()) + gui.Window.__init__(self, container, rect, frame_rate, windows_controller, "balloon") self.set_bg_image(background) self.text = None @@ -168,23 +161,25 @@ class MessageBalloon(gui.Window): # Override handle_mouse_down def handle_mouse_down(self, (x, y)): - self.visible = False + self.hide() + return True def set_text(self, text): - self.text = gui.TextBlock(self.rect, 35, 40, 1, text, 18, pygame.Color("black")) + if self.b_type == 'A': + self.text = gui.TextBlock(self.rect, 135, 40, 1, text, 18, pygame.Color("black")) + else: + self.text = gui.TextBlock(self.rect, 40, 40, 1, text, 18, pygame.Color("black")) + self.text.keep_dirty = True self.add_child(self.text) def set_time_span(self, time_span): self.time_span = time_span - def draw(self, screen, frames): - if not self.time_span: - self.visible = False - if self.visible: - self.time_span -= 1 - self.repaint = True - return gui.Window.draw(self, screen, frames) - else: - screen.blit(self.bg, self.rect) + def update(self, frames): + if self.time_span == 0: + self.hide() self.dispose() - return [self.rect] + + if self.visible: + self.set_dirty_background() # Always draws it because it collides with the character rectangle +
\ No newline at end of file |