Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Saludame.activity/kid_window.py
diff options
context:
space:
mode:
Diffstat (limited to 'Saludame.activity/kid_window.py')
-rw-r--r--Saludame.activity/kid_window.py139
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