Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xSaludame.activity/actions.py4
-rwxr-xr-xSaludame.activity/actions_creator.py52
-rwxr-xr-xSaludame.activity/animation.py83
-rwxr-xr-xSaludame.activity/app_init.py110
-rwxr-xr-xSaludame.activity/assets/background/classroom_windy.png (renamed from Saludame.activity/assets/background/classroom_normal.png)bin173708 -> 173708 bytes
-rwxr-xr-xSaludame.activity/assets/background/country_windy.png (renamed from Saludame.activity/assets/background/country_normal.png)bin173824 -> 173824 bytes
-rw-r--r--Saludame.activity/assets/background/home_windy.png (renamed from Saludame.activity/assets/background/home_normal.png)bin81136 -> 81136 bytes
-rwxr-xr-xSaludame.activity/assets/background/schoolyard_windy.png (renamed from Saludame.activity/assets/background/schoolyard_normal.png)bin173275 -> 173275 bytes
-rwxr-xr-xSaludame.activity/assets/background/square_windy.png (renamed from Saludame.activity/assets/background/square_normal.png)bin173244 -> 173244 bytes
-rw-r--r--Saludame.activity/assets/characters/doctor.pngbin0 -> 4188 bytes
-rw-r--r--Saludame.activity/assets/characters/father.pngbin0 -> 3440 bytes
-rw-r--r--Saludame.activity/assets/characters/mother.pngbin0 -> 3232 bytes
-rw-r--r--Saludame.activity/assets/characters/teacher.pngbin8933 -> 6470 bytes
-rw-r--r--Saludame.activity/assets/events/balloon.pngbin7397 -> 7392 bytes
-rw-r--r--Saludame.activity/assets/events/balloonB.pngbin0 -> 5598 bytes
-rw-r--r--Saludame.activity/assets/events/go-back.pngbin585 -> 372 bytes
-rw-r--r--Saludame.activity/assets/events/go-next.pngbin548 -> 366 bytes
-rw-r--r--Saludame.activity/assets/events/weather/cold.png (renamed from Saludame.activity/assets/events/weather/cloudy.png)bin23192 -> 23192 bytes
-rw-r--r--Saludame.activity/assets/layout/icon_physica.pngbin1205 -> 906 bytes
-rwxr-xr-xSaludame.activity/assets/sound/blip.wavbin4102 -> 0 bytes
-rw-r--r--Saludame.activity/assets/sound/click.oggbin0 -> 4944 bytes
-rw-r--r--Saludame.activity/assets/sound/clothes_change.oggbin0 -> 10476 bytes
-rw-r--r--Saludame.activity/assets/sound/menu_back.oggbin0 -> 5404 bytes
-rw-r--r--Saludame.activity/assets/sound/open_bars.oggbin0 -> 5080 bytes
-rw-r--r--Saludame.activity/assets/sound/place_change.oggbin0 -> 3985 bytes
-rw-r--r--Saludame.activity/assets/sound/popup.oggbin0 -> 4945 bytes
-rw-r--r--Saludame.activity/assets/sound/time_change.oggbin0 -> 22220 bytes
-rwxr-xr-xSaludame.activity/challenges.py11
-rwxr-xr-xSaludame.activity/character.py12
-rwxr-xr-xSaludame.activity/character_creator.py92
-rwxr-xr-xSaludame.activity/customization.py17
-rwxr-xr-xSaludame.activity/game.py4
-rwxr-xr-xSaludame.activity/game_manager.py36
-rw-r--r--Saludame.activity/gui/utilities.py53
-rwxr-xr-xSaludame.activity/gui/widget.py64
-rwxr-xr-xSaludame.activity/gui/window.py202
-rwxr-xr-xSaludame.activity/gui/windows_controller.py2
-rw-r--r--Saludame.activity/kid_window.py139
-rw-r--r--Saludame.activity/locale/es/LC_MESSAGES/org.ceibaljam.Saludame.mobin6413 -> 6700 bytes
-rwxr-xr-xSaludame.activity/main_window.py33
-rwxr-xr-xSaludame.activity/menu.py74
-rw-r--r--Saludame.activity/panel_window.py64
-rw-r--r--Saludame.activity/po/Saludame.pot208
-rwxr-xr-xSaludame.activity/po/es.po300
-rw-r--r--Saludame.activity/saludame_windows_controller.py5
-rw-r--r--Saludame.activity/sound_manager.py10
-rwxr-xr-xSaludame.activity/status_bars.py90
-rwxr-xr-xSaludame.activity/status_bars_creator.py14
-rwxr-xr-xSaludame.activity/utilities.py2
49 files changed, 986 insertions, 695 deletions
diff --git a/Saludame.activity/actions.py b/Saludame.activity/actions.py
index 75d9f03..4772464 100755
--- a/Saludame.activity/actions.py
+++ b/Saludame.activity/actions.py
@@ -2,6 +2,7 @@
import status_bars
import events
+import pygame
class Action:
@@ -34,6 +35,9 @@ class Action:
self.sound_loop_times = sound_loop_times
def perform(self):
+ if self.sound_path:
+ pygame.mixer.Sound(self.sound_path).play()
+
if self.time_span == -1:
# Perpetual
self.effect.activate()
diff --git a/Saludame.activity/actions_creator.py b/Saludame.activity/actions_creator.py
index 56c8574..f6f7079 100755
--- a/Saludame.activity/actions_creator.py
+++ b/Saludame.activity/actions_creator.py
@@ -6,8 +6,12 @@ import os
BARS_DECREASE_RATE = -0.1
-#ANIMATIONS
+#SOUNDS
BLIP_PATH = os.path.normpath("assets/sound/blip.ogg")
+CHANGE_PLACE_PATH = os.path.normpath("assets/sound/place_change.ogg")
+CHANGE_CLOTHES_PATH = os.path.normpath("assets/sound/clothes_change.ogg")
+
+#ANIMATIONS
APPLE_PATH = os.path.normpath("assets/food/apple")
STEW_PATH = os.path.normpath("assets/food/stew")
CHEW_PATH = os.path.normpath("assets/kid/actions/eat")
@@ -127,53 +131,53 @@ actions_list = [
),
# Sports
- ("sport_football", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("sport_football", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("energy", 0.5), ("sports", 2.0), ("shower", -0.5), ("fun", 2.0)]), None, None, None
),
- ("sport_run", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("sport_run", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("energy", 0.5), ("sports", 2.0), ("shower", -0.5), ("fun", 2.0)]), None, None, None
),
- ("sport_hide_seek", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("sport_hide_seek", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("energy", 0.5), ("sports", 2.0), ("shower", -0.5), ("fun", 2.0)]), None, None, None
),
- ("sport_jump", 0.3, 8, 0, 0, JUMP_ROPE_PATH, 3, 1, None, 4, "sound_path",
+ ("sport_jump", 0.3, 8, 0, 0, JUMP_ROPE_PATH, 3, 1, None, 4, None,
effects.Effect(None, [("energy", 0.5), ("sports", 2.0), ("shower", -0.5), ("fun", 2.0)]), None, None, None
),
# Tiempo Libre
- ("sp_sleep", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("sp_sleep", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("energy", 1.0), ("relaxing", 2.0)]), None, None, None
),
- ("sp_talk", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("sp_talk", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("fun", 0.5)]), None, None, None
),
- ("sp_study", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("sp_study", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("energy", -0.5), ("responsability", 2.0)]), None, None, None
),
- ("sp_clean", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("sp_clean", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("energy", -0.5), ("responsability", 2.0)]), None, None, None
),
# Higiene
- ("shower", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("shower", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("shower", 5.0)]), None, None, None
),
- ("brush_teeth", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("brush_teeth", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("b_teeth", 0.5)]), None, None, None, 1, "un link"
),
- ("wash_hands", 0.3, 8, 0, 0, None, 3, 1, None, 4, "sound_path",
+ ("wash_hands", 0.3, 8, 0, 0, None, 3, 1, None, 4, None,
effects.Effect(None, [("w_hands", 3.0)]), None, None, None
),
- ("toilet", 0.3, 1.9, 0, 1, "assets/kid/actions/toilet", 3, 1, None, 4, "sound_path",
+ ("toilet", 0.3, 1.9, 0, 1, "assets/kid/actions/toilet", 3, 1, None, 4, None,
effects.Effect(None, [("toilet", 4.0)]), None, None, None, 1, "un link"
),
@@ -183,21 +187,21 @@ actions_list = [
### ACTIONS THAT SET CHARACTER LOCATION
-locations_ac_list = [("goto_schoolyard", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "schoolyard"), None, None, None),
- ("goto_country", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "country"), None, None, None),
- ("goto_classroom", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "classroom"), None, None, None),
- ("goto_square", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "square"), None, None, None),
- ("goto_living", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "home"), None, None, None),
- ("goto_bedroom", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "home"), None, None, None),
- ("goto_kitchen", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "home"), None, None, None),
- ("goto_bathroom", None, 1, None, None, None, None, None, None, None, None, effects.LocationEffect(None, "home"), None, None, None)
+locations_ac_list = [("goto_schoolyard", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "schoolyard"), None, None, None),
+ ("goto_country", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "country"), None, None, None),
+ ("goto_classroom", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "classroom"), None, None, None),
+ ("goto_square", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "square"), None, None, None),
+ ("goto_living", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "home"), None, None, None),
+ ("goto_bedroom", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "home"), None, None, None),
+ ("goto_kitchen", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "home"), None, None, None),
+ ("goto_bathroom", None, 1, None, None, None, None, None, None, None, CHANGE_PLACE_PATH, effects.LocationEffect(None, "home"), None, None, None)
]
### ACTIONS THAT SET CHARACTER CLOTHES
-clothes_ac_list = [("change_school_clothes", None, 1, None, None, None, None, None, None, None, None, effects.ClothesEffect(None, "school"), None, None, None),
- ("change_sunny_clothes", None, 1, None, None, None, None, None, None, None, None, effects.ClothesEffect(None, "sunny"), None, None, None),
- ("change_rainy_clothes", None, 1, None, None, None, None, None, None, None, None, effects.ClothesEffect(None, "rainy"), None, None, None),
+clothes_ac_list = [("change_school_clothes", None, 1, None, None, None, None, None, None, None, CHANGE_CLOTHES_PATH, effects.ClothesEffect(None, "school"), None, None, None),
+ ("change_sunny_clothes", None, 1, None, None, None, None, None, None, None, CHANGE_CLOTHES_PATH, effects.ClothesEffect(None, "sunny"), None, None, None),
+ ("change_rainy_clothes", None, 1, None, None, None, None, None, None, None, CHANGE_CLOTHES_PATH, effects.ClothesEffect(None, "rainy"), None, None, None),
]
class ActionsLoader:
diff --git a/Saludame.activity/animation.py b/Saludame.activity/animation.py
index c78fcb1..69f27ca 100755
--- a/Saludame.activity/animation.py
+++ b/Saludame.activity/animation.py
@@ -17,10 +17,10 @@ BLACK = pygame.Color("black")
BLUE = pygame.Color("blue")
WHITE = pygame.Color("white")
-class Kid(gui.Window):
+class Kid(gui.Widget):
def __init__(self, container, rect, frame_rate, windows_controller, game_man, mood):
- gui.Window.__init__(self, container, rect, frame_rate, windows_controller, "character_window")
+ gui.Widget.__init__(self, container, rect, frame_rate, windows_controller)
self.character = game_man.character
@@ -74,27 +74,41 @@ class Kid(gui.Window):
directory = "%s/%s/%s" % (self.mood.kid_animation_path, sex, clothes)
self.file_list = get_image_list(directory)
+
##### Draw #####
- def pre_draw(self, screen):
+ def update(self, frames):
filename = self.file_list[self.index]
self.sprite = load_animation(self.sprite, filename)
+ self.background = self.sprite.copy()
maps = self.character.mappings
self.change_color(COLORS_TO_MAP, maps["hair"] + maps["skin"] + maps["socks"] + maps["shoes"])
- screen.blit(self.bg_image, self.rect)
- screen.blit(self.sprite, self.rect)
-
self.index = (self.index + 1) % len(self.file_list)
- return [self.rect]
+ self.set_dirty()
+
+ ###### Draw #####
+ #def pre_draw(self, screen):
+ #filename = self.file_list[self.index]
+ #self.sprite = load_animation(self.sprite, filename)
+
+ #maps = self.character.mappings
+ #self.change_color(COLORS_TO_MAP, maps["hair"] + maps["skin"] + maps["socks"] + maps["shoes"])
+
+ ##screen.blit(self.bg_image, self.rect)
+ #screen.blit(self.sprite, self.rect)
+
+ #self.index = (self.index + 1) % len(self.file_list)
+
+ #return [self.rect]
##### Colors #####
def change_color(self, old, new):
index = 0
for old_color in old:
new_color = new[index]
- utilities.change_color(self.sprite, old_color, new_color)
+ utilities.change_color(self.background, old_color, new_color)
index += 1
@@ -114,60 +128,41 @@ class ActionAnimation(gui.Widget):
self.index = 0
- self.blip = pygame.mixer.Sound(sound_path)
-
- def draw(self, screen):
- file = self.file_list[self.index]
- self.sprite = pygame.image.load(file)
- rect = self.sprite.get_rect()
- rect.center = self.rect_absolute.center
-
- screen.fill(WHITE, rect)
- screen.blit(self.sprite, rect)
-
- self.index = (self.index + 1) % len(self.file_list)
- self.blip.play()
-
- return self.rect_absolute
+ def update(self, frames):
+ if frames % self.frame_rate == 0:
+ filename = self.file_list[self.index]
+ self.background = pygame.image.load(filename)
+ self.index = (self.index + 1) % len(self.file_list)
+ self.set_dirty()
-class FPS:
+class FPS(gui.Widget):
def __init__(self, container, rect, frame_rate, clock):
- self.register_id = ""
- self.buttons = []
- self.rect = rect
- self.frame_rate = frame_rate
+
+ gui.Widget.__init__(self, container, rect, frame_rate)
+
self.clock = clock
-
+
self.font = pygame.font.Font(None, 16)
- def draw(self, screen, frames):
- screen.fill(BLACK, self.rect)
+ def draw(self, screen):
+ screen.fill(BLACK, self.rect_absolute)
text = str(round(self.clock.get_fps()))
text_surf = self.font.render(text, False, (255, 255, 255))
- screen.blit(text_surf, self.rect)
- return [self.rect]
+ screen.blit(text_surf, self.rect_absolute)
+ return self.rect_absolute
def get_image_list(directory):
dirList = os.listdir(directory)
dirList.sort()
return [os.path.join(directory, fname) for fname in dirList if fname.endswith('.png') or fname.endswith('.diff.gz') or fname.endswith('.diff.zlib')]
-
+
+
import zlib
import imagepatch
def load_animation(last_image, new_filename):
if new_filename.endswith('.png'):
new = pygame.image.load(new_filename)
- #elif new_filename.endswith('.diff.gz'):
- #f = gzip.open(new_filename, 'r')
- #diff = f.read()
- #f.close()
-
- #new_buffer = imagepatch.patch(last_image.get_buffer().raw, diff)
-
- #new = last_image # both point to the same surface
- #new.get_buffer().write(new_buffer, 0) # Instead of using a copy modifies the same surface
-
elif new_filename.endswith('.diff.zlib'):
f = open(new_filename, 'r')
diff = zlib.decompress(f.read())
diff --git a/Saludame.activity/app_init.py b/Saludame.activity/app_init.py
index 96194e2..a613e47 100755
--- a/Saludame.activity/app_init.py
+++ b/Saludame.activity/app_init.py
@@ -31,14 +31,20 @@ class AppLoader:
#moods
self.moods_list = self.__load_moods()
+ # Environments
+ self.places = self.__load_places()
+ self.weathers = ["rainy", "sunny", "cold", "windy"]
+ self.environments_dictionary = self.__load_environments()
+ self.weather_effects = self.__load_weather_effects()
+
### game manager
- self.game_man = game_manager.GameManager(self.character, self.status_bars_controller, None, self.events_list, character_loader.get_places(), character_loader.get_environments_dictionary(), character_loader.get_weather_effects(), self.moods_list, windows_controller)
+ self.game_man = game_manager.GameManager(self.character, self.status_bars_controller, None, self.events_list, self.get_places(), self.weathers, self.get_environments_dictionary(), self.get_weather_effects(), self.moods_list, windows_controller)
actions_loader = actions_creator.ActionsLoader(self.bars_loader.get_bar_controller(), self.game_man)
self.actions_list = actions_loader.get_actions_list()
self.game_man.actions_list = self.actions_list
self.game_man.add_background_action("BARS_DEC") #acción de decrementar las barras
-
+
### menu
#self.menu = menu_creator.load_menu(self.character, (100, 100))
### visuals
@@ -65,6 +71,14 @@ class AppLoader:
def get_events(self):
return self.events_list
+ def get_environments_dictionary(self):
+ return self.environments_dictionary
+
+ def get_places(self):
+ return self.places
+
+ def get_weather_effects(self):
+ return self.weather_effects
def __load_events(self, bars_controller):
#Events constructor params:
@@ -105,15 +119,15 @@ class AppLoader:
probability = [("b_teeth", "indirect", 50.0, 70.0), ("dulces", "direct", 75.0, 30.0)]
#editar parametros:
- event = events.SocialEvent("caries.jpg", "assets/characters/teacher.png", "p_caries", _("Prevenir caries"), 5.0, 15, probability, u"Deberías lavarte los \ndientes", None, 100)
+ event = events.SocialEvent("caries.jpg", "assets/characters/mother.png", "p_caries", _("Prevenir caries"), 5.0, 15, probability, u"Deberías lavarte los \ndientes", None, 100)
_events.append(event)
probability = [("responsability", "indirect", 60.0, 70.0)]
- event = events.SocialEvent("unkown.png", "assets/characters/teacher.png", "study", _("Estudiar"), 5.0, 20, probability, u"¿Hiciste los deberes?", None, 100)
+ event = events.SocialEvent("unkown.png", "assets/characters/father.png", "study", _("Estudiar"), 5.0, 20, probability, u"¿Hiciste los deberes?", None, 100)
_events.append(event)
probability = [("responsability", "indirect", 70.0, 70.0)]
- event = events.SocialEvent("unkown.png", "assets/characters/teacher.png", "health_check", _("Control médico"), 5.0, 30, probability, u"¿Este año fuiste al doctor?", None, 100)
+ event = events.SocialEvent("unkown.png", "assets/characters/doctor.png", "health_check", _("Control médico"), 5.0, 30, probability, u"¿Este año fuiste al doctor?", None, 100)
_events.append(event)
return _events
@@ -149,3 +163,89 @@ class AppLoader:
return moods_list
+ def __load_weather_effects(self):
+ weather_effects = {
+ # (clothes_id, weather_id, boolean indoor outdoor) : list of tuples [(id_bar, rate)]
+ #school clothes
+ ("school", "sunny", True) : [("fun", 1.0)],
+ ("school", "sunny", False) : [("physica", 1.0)],
+ ("school", "rainy", True) : [("physica", 1.0)],
+ ("school", "rainy", False) : [("physica", 1.0)],
+ ("school", "windy", True) : [("physica", 1.0)],
+ ("school", "windy", False) : [("physica", 1.0)],
+ ("school", "cold", True) : [("physica", 1.0)],
+ ("school", "cold", False) : [("physica", 1.0)],
+ #sunny clothes
+ ("sunny", "sunny", True) : [("physica", 1.0)],
+ ("sunny", "sunny", False) : [("physica", 1.0)],
+ ("sunny", "rainy", True) : [("physica", 1.0)],
+ ("sunny", "rainy", False) : [("physica", 1.0)],
+ ("sunny", "windy", True) : [("physica", 1.0)],
+ ("sunny", "windy", False) : [("physica", 1.0)],
+ ("sunny", "cold", True) : [("physica", 1.0)],
+ ("sunny", "cold", False) : [("physica", 1.0)],
+ #rainy clothes
+ ("rainy", "sunny", True) : [("physica", 1.0)],
+ ("rainy", "sunny", False) : [("physica", 1.0)],
+ ("rainy", "rainy", True) : [("physica", 1.0)],
+ ("rainy", "rainy", False) : [("physica", 1.0)],
+ ("rainy", "windy", True) : [("physica", 1.0)],
+ ("rainy", "windy", False) : [("physica", 1.0)],
+ ("rainy", "cold", True) : [("physica", 1.0)],
+ ("rainy", "cold", False) : [("physica", 1.0)],
+ }
+ return weather_effects
+
+ def __load_places(self):
+ places = { #schoolyard
+ "schoolyard" : {"outdoor": True},
+ #square
+ "square" : {"outdoor": True},
+ #classroom
+ "classroom" : {"outdoor": False},
+ #home
+ "home": {"outdoor": False},
+ #country
+ "country": {"outdoor": True}
+ }
+ return places
+
+
+ def __load_environments(self):
+ environments = {#schoolyard
+ ("schoolyard", "sunny") : Environment("assets/background/schoolyard_sunny.png"),
+ ("schoolyard", "rainy") : Environment("assets/background/schoolyard_rainy.png"),
+ ("schoolyard", "windy") : Environment("assets/background/schoolyard_windy.png"),
+ ("schoolyard", "cold") : Environment("assets/background/schoolyard_cold.png"),
+ #square
+ ("square", "sunny") : Environment("assets/background/square_sunny.png"),
+ ("square", "rainy") : Environment("assets/background/square_rainy.png"),
+ ("square", "windy") : Environment("assets/background/square_windy.png"),
+ ("square", "cold") : Environment("assets/background/square_cold.png"),
+ #classroom
+ ("classroom", "sunny") : Environment("assets/background/classroom_sunny.png"),
+ ("classroom", "rainy") : Environment("assets/background/classroom_rainy.png"),
+ ("classroom", "windy") : Environment("assets/background/classroom_windy.png"),
+ ("classroom", "cold") : Environment("assets/background/classroom_cold.png"),
+ #home
+ ("home", "sunny") : Environment("assets/background/home_sunny.png"),
+ ("home", "rainy") : Environment("assets/background/home_rainy.png"),
+ ("home", "windy") : Environment("assets/background/home_windy.png"),
+ ("home", "cold") : Environment("assets/background/home_cold.png"),
+ #country
+ ("country", "sunny") : Environment("assets/background/country_sunny.png"),
+ ("country", "rainy") : Environment("assets/background/country_rainy.png"),
+ ("country", "windy") : Environment("assets/background/country_windy.png"),
+ ("country", "cold") : Environment("assets/background/country_cold.png"),
+ }
+
+ return environments
+
+class Environment:
+
+ def __init__(self, background_path):
+ self.background_path = background_path
+
+ def get_background_path(self):
+ return self.background_path
+ \ No newline at end of file
diff --git a/Saludame.activity/assets/background/classroom_normal.png b/Saludame.activity/assets/background/classroom_windy.png
index 6a048ce..6a048ce 100755
--- a/Saludame.activity/assets/background/classroom_normal.png
+++ b/Saludame.activity/assets/background/classroom_windy.png
Binary files differ
diff --git a/Saludame.activity/assets/background/country_normal.png b/Saludame.activity/assets/background/country_windy.png
index 17acc3f..17acc3f 100755
--- a/Saludame.activity/assets/background/country_normal.png
+++ b/Saludame.activity/assets/background/country_windy.png
Binary files differ
diff --git a/Saludame.activity/assets/background/home_normal.png b/Saludame.activity/assets/background/home_windy.png
index d105786..d105786 100644
--- a/Saludame.activity/assets/background/home_normal.png
+++ b/Saludame.activity/assets/background/home_windy.png
Binary files differ
diff --git a/Saludame.activity/assets/background/schoolyard_normal.png b/Saludame.activity/assets/background/schoolyard_windy.png
index 288c8bf..288c8bf 100755
--- a/Saludame.activity/assets/background/schoolyard_normal.png
+++ b/Saludame.activity/assets/background/schoolyard_windy.png
Binary files differ
diff --git a/Saludame.activity/assets/background/square_normal.png b/Saludame.activity/assets/background/square_windy.png
index f2a6c19..f2a6c19 100755
--- a/Saludame.activity/assets/background/square_normal.png
+++ b/Saludame.activity/assets/background/square_windy.png
Binary files differ
diff --git a/Saludame.activity/assets/characters/doctor.png b/Saludame.activity/assets/characters/doctor.png
new file mode 100644
index 0000000..97b46af
--- /dev/null
+++ b/Saludame.activity/assets/characters/doctor.png
Binary files differ
diff --git a/Saludame.activity/assets/characters/father.png b/Saludame.activity/assets/characters/father.png
new file mode 100644
index 0000000..2356b8e
--- /dev/null
+++ b/Saludame.activity/assets/characters/father.png
Binary files differ
diff --git a/Saludame.activity/assets/characters/mother.png b/Saludame.activity/assets/characters/mother.png
new file mode 100644
index 0000000..961cddc
--- /dev/null
+++ b/Saludame.activity/assets/characters/mother.png
Binary files differ
diff --git a/Saludame.activity/assets/characters/teacher.png b/Saludame.activity/assets/characters/teacher.png
index abac635..d84548b 100644
--- a/Saludame.activity/assets/characters/teacher.png
+++ b/Saludame.activity/assets/characters/teacher.png
Binary files differ
diff --git a/Saludame.activity/assets/events/balloon.png b/Saludame.activity/assets/events/balloon.png
index ebf2951..2225c4a 100644
--- a/Saludame.activity/assets/events/balloon.png
+++ b/Saludame.activity/assets/events/balloon.png
Binary files differ
diff --git a/Saludame.activity/assets/events/balloonB.png b/Saludame.activity/assets/events/balloonB.png
new file mode 100644
index 0000000..b5823d3
--- /dev/null
+++ b/Saludame.activity/assets/events/balloonB.png
Binary files differ
diff --git a/Saludame.activity/assets/events/go-back.png b/Saludame.activity/assets/events/go-back.png
index 194fd00..21c3248 100644
--- a/Saludame.activity/assets/events/go-back.png
+++ b/Saludame.activity/assets/events/go-back.png
Binary files differ
diff --git a/Saludame.activity/assets/events/go-next.png b/Saludame.activity/assets/events/go-next.png
index 857a196..1dd702c 100644
--- a/Saludame.activity/assets/events/go-next.png
+++ b/Saludame.activity/assets/events/go-next.png
Binary files differ
diff --git a/Saludame.activity/assets/events/weather/cloudy.png b/Saludame.activity/assets/events/weather/cold.png
index 733a719..733a719 100644
--- a/Saludame.activity/assets/events/weather/cloudy.png
+++ b/Saludame.activity/assets/events/weather/cold.png
Binary files differ
diff --git a/Saludame.activity/assets/layout/icon_physica.png b/Saludame.activity/assets/layout/icon_physica.png
index 0a361c5..7dbe0e5 100644
--- a/Saludame.activity/assets/layout/icon_physica.png
+++ b/Saludame.activity/assets/layout/icon_physica.png
Binary files differ
diff --git a/Saludame.activity/assets/sound/blip.wav b/Saludame.activity/assets/sound/blip.wav
deleted file mode 100755
index 587c32b..0000000
--- a/Saludame.activity/assets/sound/blip.wav
+++ /dev/null
Binary files differ
diff --git a/Saludame.activity/assets/sound/click.ogg b/Saludame.activity/assets/sound/click.ogg
new file mode 100644
index 0000000..0a98929
--- /dev/null
+++ b/Saludame.activity/assets/sound/click.ogg
Binary files differ
diff --git a/Saludame.activity/assets/sound/clothes_change.ogg b/Saludame.activity/assets/sound/clothes_change.ogg
new file mode 100644
index 0000000..79fbcac
--- /dev/null
+++ b/Saludame.activity/assets/sound/clothes_change.ogg
Binary files differ
diff --git a/Saludame.activity/assets/sound/menu_back.ogg b/Saludame.activity/assets/sound/menu_back.ogg
new file mode 100644
index 0000000..b452699
--- /dev/null
+++ b/Saludame.activity/assets/sound/menu_back.ogg
Binary files differ
diff --git a/Saludame.activity/assets/sound/open_bars.ogg b/Saludame.activity/assets/sound/open_bars.ogg
new file mode 100644
index 0000000..1845f88
--- /dev/null
+++ b/Saludame.activity/assets/sound/open_bars.ogg
Binary files differ
diff --git a/Saludame.activity/assets/sound/place_change.ogg b/Saludame.activity/assets/sound/place_change.ogg
new file mode 100644
index 0000000..cc2dc19
--- /dev/null
+++ b/Saludame.activity/assets/sound/place_change.ogg
Binary files differ
diff --git a/Saludame.activity/assets/sound/popup.ogg b/Saludame.activity/assets/sound/popup.ogg
new file mode 100644
index 0000000..56801ac
--- /dev/null
+++ b/Saludame.activity/assets/sound/popup.ogg
Binary files differ
diff --git a/Saludame.activity/assets/sound/time_change.ogg b/Saludame.activity/assets/sound/time_change.ogg
new file mode 100644
index 0000000..e4e4075
--- /dev/null
+++ b/Saludame.activity/assets/sound/time_change.ogg
Binary files differ
diff --git a/Saludame.activity/challenges.py b/Saludame.activity/challenges.py
index 85b31ef..308e1a7 100755
--- a/Saludame.activity/challenges.py
+++ b/Saludame.activity/challenges.py
@@ -77,8 +77,7 @@ class MultipleChoice(gui.Window):
y += 30
b = gui.TextButton(self.rect, pygame.Rect((x, y), (1, 1)), 1, ans, TEXT_FONT_SIZE, ANSWER_COLOR, self._cb_button_click_choice, self._cb_button_over_choice, self._cb_button_out_choice)
self.choices.append(b)
- self.buttons.append(b)
- self.add_child(b)
+ self.add_button(b)
def set_image(self, image):
if not isinstance(image, pygame.Surface):
@@ -122,13 +121,11 @@ class MultipleChoice(gui.Window):
def _cb_button_over_choice(self, button):
if not FIN_MC:
button.switch_color_text(MOUSE_OVER_COLOR)
- button.force_update()
self.s_over.play()
def _cb_button_out_choice(self, button):
if not FIN_MC:
button.switch_color_text(ANSWER_COLOR)
- button.force_update()
def _cb_button_click_close(self, button):
self.windows_controller.close_active_window()
@@ -140,9 +137,9 @@ class MultipleChoice(gui.Window):
Delete question and answers and repaint. Set FIN_MC false
"""
self.choices = []
- self.widgets = [self.btn_close] #, self.btn_view_answer]
- self.buttons = [self.btn_close] #, self.btn_view_answer]
- self.repaint = True
+ self.clear_childs()
+ self.add_button(self.btn_close)
+ self.set_dirty_background()
self.wait = 0
global FIN_MC
FIN_MC = False
diff --git a/Saludame.activity/character.py b/Saludame.activity/character.py
index 40f0e71..0f86f53 100755
--- a/Saludame.activity/character.py
+++ b/Saludame.activity/character.py
@@ -69,18 +69,6 @@ class Character:
self.clothes = 'school'
self.current_place = 'schoolyard'
self.mappings = DEFAULT_MAPPINGS.copy()
-
-class Environment:
-
- def __init__(self, background_path, background_music):
- self.background_path = background_path
- self.background_music = background_music
-
- def get_background_path(self):
- return self.background_path
-
- def get_background_music(self):
- return self.background_music
class Place:
diff --git a/Saludame.activity/character_creator.py b/Saludame.activity/character_creator.py
index 0fbad62..d1181e5 100755
--- a/Saludame.activity/character_creator.py
+++ b/Saludame.activity/character_creator.py
@@ -29,22 +29,10 @@ class CharacterLoader:
def __init__(self):
self.character = self.__load_character(SEX, NAME, LEVEL, SCORE, "school")
- self.environments_dictionary = self.__load_environments()
- self.places = self.__load_places()
- self.weather_effects = self.__load_weather_effects()
def get_character(self):
return self.character
-
- def get_environments_dictionary(self):
- return self.environments_dictionary
-
- def get_places(self):
- return self.places
-
- def get_weather_effects(self):
- return self.weather_effects
-
+
def __load_character(self, sex, name, level, score, clothes):
hair_color = [pygame.Color(color) for color in HAIR_COLOR]
skin_color = [pygame.Color(color) for color in SKIN_COLOR]
@@ -53,80 +41,4 @@ class CharacterLoader:
char = character.Character(sex, name, level, score, hair_color, socks_color, skin_color, shoes_color, clothes)
return char
-
- def __load_weather_effects(self):
- weather_effects = {
- # (clothes_id, weather_id, boolean indoor outdoor) : list of tuples [(id_bar, rate)]
- #school clothes
- ("school", "sunny", True) : [("fun", 1.0)],
- ("school", "sunny", False) : [("physica", 1.0)],
- ("school", "rainy", True) : [("physica", 1.0)],
- ("school", "rainy", False) : [("physica", 1.0)],
- ("school", "normal", True) : [("physica", 1.0)],
- ("school", "normal", False) : [("physica", 1.0)],
- ("school", "cold", True) : [("physica", 1.0)],
- ("school", "cold", False) : [("physica", 1.0)],
- #sunny clothes
- ("sunny", "sunny", True) : [("physica", 1.0)],
- ("sunny", "sunny", False) : [("physica", 1.0)],
- ("sunny", "rainy", True) : [("physica", 1.0)],
- ("sunny", "rainy", False) : [("physica", 1.0)],
- ("sunny", "normal", True) : [("physica", 1.0)],
- ("sunny", "normal", False) : [("physica", 1.0)],
- ("sunny", "cold", True) : [("physica", 1.0)],
- ("sunny", "cold", False) : [("physica", 1.0)],
- #rainy clothes
- ("rainy", "sunny", True) : [("physica", 1.0)],
- ("rainy", "sunny", False) : [("physica", 1.0)],
- ("rainy", "rainy", True) : [("physica", 1.0)],
- ("rainy", "rainy", False) : [("physica", 1.0)],
- ("rainy", "normal", True) : [("physica", 1.0)],
- ("rainy", "normal", False) : [("physica", 1.0)],
- ("rainy", "cold", True) : [("physica", 1.0)],
- ("rainy", "cold", False) : [("physica", 1.0)],
- }
- return weather_effects
-
- def __load_places(self):
- places = { #schoolyard
- "schoolyard" : {"outdoor": True},
- #square
- "square" : {"outdoor": True},
- #classroom
- "classroom" : {"outdoor": False},
- #home
- "home": {"outdoor": False},
- #country
- "country": {"outdoor": True}
- }
- return places
-
- def __load_environments(self):
- environments = {#schoolyard
- "schoolyard_sunny" : character.Environment("assets/background/schoolyard_sunny.png", "music_path"),
- "schoolyard_rainy" : character.Environment("assets/background/schoolyard_rainy.png", "music_path"),
- "schoolyard_normal" : character.Environment("assets/background/schoolyard_normal.png", "music_path"),
- "schoolyard_cold" : character.Environment("assets/background/schoolyard_cold.png", "music_path"),
- #square
- "square_sunny" : character.Environment("assets/background/square_sunny.png", "music_path"),
- "square_rainy" : character.Environment("assets/background/square_rainy.png", "music_path"),
- "square_normal" : character.Environment("assets/background/square_normal.png", "music_path"),
- "square_cold" : character.Environment("assets/background/square_cold.png", "music_path"),
- #classroom
- "classroom_sunny" : character.Environment("assets/background/classroom_sunny.png", "music_path"),
- "classroom_rainy" : character.Environment("assets/background/classroom_rainy.png", "music_path"),
- "classroom_normal" : character.Environment("assets/background/classroom_normal.png", "music_path"),
- "classroom_cold" : character.Environment("assets/background/classroom_cold.png", "music_path"),
- #home
- "home_sunny" : character.Environment("assets/background/home_sunny.png", "music_path"),
- "home_rainy" : character.Environment("assets/background/home_rainy.png", "music_path"),
- "home_normal" : character.Environment("assets/background/home_normal.png", "music_path"),
- "home_cold" : character.Environment("assets/background/home_cold.png", "music_path"),
- #country
- "country_sunny" : character.Environment("assets/background/country_sunny.png", "music_path"),
- "country_rainy" : character.Environment("assets/background/country_rainy.png", "music_path"),
- "country_normal" : character.Environment("assets/background/country_normal.png", "music_path"),
- "country_cold" : character.Environment("assets/background/country_cold.png", "music_path"),
- }
-
- return environments
+
diff --git a/Saludame.activity/customization.py b/Saludame.activity/customization.py
index 329d762..4156ccd 100755
--- a/Saludame.activity/customization.py
+++ b/Saludame.activity/customization.py
@@ -59,7 +59,6 @@ class CustomizationWindow(gui.Window):
self.kid = CustomizatedKid(self.rect, kid_rect, 1, character)
self.add_child(self.kid)
- #self.btn_close = gui.TextButton(self.rect, pygame.Rect((910, 2), (30, 30)), 1, "X", 30, (0, 0, 0), self._cb_button_click_close)
self.btn_close = utilities.get_accept_button(self.rect, pygame.Rect((400, 500), (1, 1)), _("Continue"), self._cb_button_click_close)
button_back = pygame.image.load("customization/customization_button.png").convert()
@@ -67,8 +66,7 @@ class CustomizationWindow(gui.Window):
self.btn_skin = gui.TextButton2(self.rect, pygame.Rect((500, 200), (70, 30)), 1, _("Skin"), 30, (255, 255, 255), button_back, self._cb_button_skin)
self.btn_socks = gui.TextButton2(self.rect, pygame.Rect((500, 280), (70, 30)), 1, _("Socks"), 30, (255, 255, 255), button_back, self._cb_button_socks)
self.btn_shoes = gui.TextButton2(self.rect, pygame.Rect((500, 360), (70, 30)), 1, _("Shoes"), 30, (255, 255, 255), button_back, self._cb_button_shoes)
- self.buttons += [self.btn_close, self.btn_hair, self.btn_skin, self.btn_socks, self.btn_shoes]
- self.widgets += [self.btn_close, self.btn_hair, self.btn_skin, self.btn_socks, self.btn_shoes]
+ map(self.add_button, [self.btn_close, self.btn_hair, self.btn_skin, self.btn_socks, self.btn_shoes])
self.hair_color_index = 0
self.skin_color_index = 0
@@ -116,7 +114,7 @@ class CustomizatedKid(gui.Widget):
self.character = character
self.set_gender("male") # Sets the correct picture and applies color mappings
- self.dirty = True
+ self.dirty_mappings = True # Only for the first update
def set_mapping(self, key, colors):
self.character.mappings[key] = tuple(colors)
@@ -126,6 +124,7 @@ class CustomizatedKid(gui.Widget):
self.background = self.kid.copy()
maps = self.character.mappings
self.change_color(animation.COLORS_TO_MAP, maps["hair"] + maps["skin"] + maps["socks"] + maps["shoes"])
+ self.set_dirty()
def change_color(self, old, new):
index = 0
@@ -148,9 +147,9 @@ class CustomizatedKid(gui.Widget):
self.set_rect_size(self.kid.get_size())
self.apply_mappings()
- # Override
- def draw(self, screen):
- if self.dirty:
- self.dirty = False
+ def update(self, frames):
+ if self.dirty_mappings:
+ self.dirty_mappings = False
self.apply_mappings()
- return gui.Widget.draw(self, screen)
+ self.set_dirty()
+ \ No newline at end of file
diff --git a/Saludame.activity/game.py b/Saludame.activity/game.py
index bbf0548..87fe9e8 100755
--- a/Saludame.activity/game.py
+++ b/Saludame.activity/game.py
@@ -48,7 +48,7 @@ class Main():
global running, pauses
if from_sugar:
- import gtk
+ import gtk
import app_init
import challenges_creator
@@ -66,7 +66,7 @@ class Main():
pygame.init()
if not from_sugar:
- target_size = (1200, 800)#(1000, 650) # In regular computers the native resolution is too high (5/6)
+ target_size = (1000, 650) #(1200, 800) # In regular computers the native resolution is too high (5/6)
screen = pygame.display.set_mode(target_size)
screen = pygame.display.get_surface()
diff --git a/Saludame.activity/game_manager.py b/Saludame.activity/game_manager.py
index d1d325b..6bfb092 100755
--- a/Saludame.activity/game_manager.py
+++ b/Saludame.activity/game_manager.py
@@ -22,7 +22,7 @@ class GameManager:
y los eventos del juego.
"""
- def __init__(self, character, bars_controller, actions_list, events_list, places_dictionary, environments_dictionary, weather_effects, moods_list, windows_controller):
+ def __init__(self, character, bars_controller, actions_list, events_list, places_dictionary, weathers, environments_dictionary, weather_effects, moods_list, windows_controller):
"""
Constructor de la clase
"""
@@ -50,9 +50,10 @@ class GameManager:
self.active_events = []
self.active_social_events = []
self.active_mood = None
- self.__check_active_mood() # sets active_mood
+ #self.__check_active_mood() # sets active_mood -> doesn't work because status bars aren't ready
self.places_dictionary = places_dictionary
+ self.weathers = weathers
#for events handling:
self.events_interval = EVENTS_OCCURRENCE_INTERVAL
@@ -72,8 +73,7 @@ class GameManager:
# menu handling
self.menu_active = False
- #for weather
- self.p_i = 0
+ # weather
self.weather_effects = weather_effects
self.environment_effect = None # this is an Effect that represents the effect on the character by the environment: weather + place + clothes
self.update_environment_effect()
@@ -113,10 +113,10 @@ class GameManager:
Sets the character environment and send a message to the
windows_controller
"""
- environment_id = self.character.current_place + "_" + self.current_weather
+ environment_id = (self.character.current_place, self.current_weather)
self.environment = self.environments_dictionary[environment_id]
- self.windows_controller.set_environment(self.environment)
+ self.windows_controller.set_environment(self.environment, self.current_time)
def update_environment_effect(self):
"""
@@ -134,6 +134,8 @@ class GameManager:
def __handle_time(self):
if not self.hour_count:
+ sound_manager.instance.play_time_change()
+
self.hour_count = HOUR_COUNT_CYCLE
self.hour += 1
@@ -165,16 +167,12 @@ class GameManager:
"""
Returns a random weather, never returns the previous weather.
"""
- l = ["rainy", "sunny", "cold", "normal"]
- i = random.randint(0, 3)
- if i == self.p_i:
- return self.get_random_weather()
- else:
- self.p_i = i
+ random_weather = self.current_weather
+ while random_weather == self.current_weather:
+ random_weather = random.choice(self.weathers)
- print "se genero el clima: ", l[i]
-
- return l[i]
+ print "se genero el clima: ", random_weather
+ return random_weather
### location
@@ -311,15 +309,15 @@ class GameManager:
elif overall_bar_percent > 0.66:
overall_bar_mood = 10 #set mood in happy 3
+ mood = self.moods_list[overall_bar_mood]
+
event_preferred_moods = [event.preferred_mood for event in self.active_events]
#event_preferred_moods += [event.preferred_mood for event in self.active_social_events]
if event_preferred_moods:
event_preferred_mood = min(event_preferred_moods)
- if event_preferred_mood <= overall_bar_mood: # choose the lowest value
- mood = self.moods_list[event_preferred_mood]
- else:
- mood = self.moods_list[overall_bar_mood]
+ if event_preferred_mood <= overall_bar_mood: # choose the lowest value
+ mood = self.moods_list[event_preferred_mood]
if mood <> self.active_mood:
self.active_mood = mood
diff --git a/Saludame.activity/gui/utilities.py b/Saludame.activity/gui/utilities.py
index 519b230..d4fcb7a 100644
--- a/Saludame.activity/gui/utilities.py
+++ b/Saludame.activity/gui/utilities.py
@@ -42,7 +42,8 @@ class Text(Widget):
def refresh(self):
background = self.get_background_rect().copy()
self.background = self.font.render(self.text, False, self.color)
-
+ self.set_dirty()
+
def switch_color_text(self, color):
self.color = color
self.refresh()
@@ -73,27 +74,31 @@ class Button(Widget):
self.function_on_mouse_over = cb_over
self.function_on_mouse_out = cb_out
- self.over = False
self.enable = True
-
- def set_tooltip(self, text):
- self.tooltip = text
- def set_super_tooltip(self, text):
- self.super_tooltip = text
+ self.set_click_sound_path("assets/sound/click.ogg")
+ # Override
def on_mouse_click(self):
+ Widget.on_mouse_click(self) # Super
+
if self.function_on_mouse_click and self.enable: # if there's a callback setted makes the call
self.function_on_mouse_click(self)
-
+
+ # Override
def on_mouse_over(self):
+ self.over = True
+ self.set_dirty()
if self.function_on_mouse_over and self.enable: # if there's a callback setted makes the call
self.function_on_mouse_over(self)
+ # Override
def on_mouse_out(self):
+ self.over = False
+ self.set_dirty()
if self.function_on_mouse_out and self.enable: # if there's a callback setted makes the call
self.function_on_mouse_out(self)
-
+
def set_on_mouse_click(self, fn):
self.function_on_mouse_click = fn
@@ -101,13 +106,20 @@ class Button(Widget):
self.function_on_mouse_over = fn
def set_on_mouse_out(self, fn):
- self.function_on_mouse_out = fn
-
+ self.function_on_mouse_out = fn
+
+ def draw(self, screen):
+ updates = Widget.draw(self, screen)
+ if self.visible and self.background and self.over:
+ copy = self.background.convert_alpha()
+ copy.fill((40,40,40), None, pygame.BLEND_ADD) # Makes the widget brighter
+ screen.blit(copy, self.rect_absolute)
+ return updates
+
class ImageButton(Button):
def __init__(self, container, rect, frame_rate, image, cb_click=None, cb_over=None, cb_out=None):
- self.image = image
if not isinstance(image, pygame.Surface):
image = pygame.image.load(image)
if image.get_bitsize() == 8:
@@ -115,14 +127,21 @@ class ImageButton(Button):
else:
self.image = image.convert_alpha()
- rect.size = self.image.get_rect().size
- Button.__init__(self, container, rect, frame_rate, self.image, cb_click, cb_over, cb_out)
+ rect.size = image.get_rect().size
+ Button.__init__(self, container, rect, frame_rate, image, cb_click, cb_over, cb_out)
def switch_image_background(self, image):
if not isinstance(image, pygame.Surface):
- image = pygame.imaself.text_intro.visible = True
- self.text_result.visible = Falsege.load(image).convert_alpha()
+ image = pygame.image.load(image).convert_alpha()
+ if image.get_bitsize() == 8:
+ image = image.convert()
+ else:
+ image = image.convert_alpha()
+ self.text_intro.visible = True
+
+ self.text_result.visible = False
self.background = image
+ self.set_dirty()
class TextButton(ImageButton):
def __init__(self, container, rect, frame_rate, text, size, color, cb_click=None, cb_over=None, cb_out=None):
@@ -131,6 +150,7 @@ class TextButton(ImageButton):
def switch_color_text(self, color):
self.background = self.text.switch_color_text(color).background
+ self.set_dirty()
class TextButton2(ImageButton):
@@ -147,6 +167,7 @@ class TextButton2(ImageButton):
def switch_color_text(self, color):
self.color = color
self.background = self.get_surface()
+ self.set_dirty()
def get_surface(self):
font = get_font(self.size)
diff --git a/Saludame.activity/gui/widget.py b/Saludame.activity/gui/widget.py
index 3f5b582..3f013b2 100755
--- a/Saludame.activity/gui/widget.py
+++ b/Saludame.activity/gui/widget.py
@@ -4,32 +4,52 @@ import pygame
class Widget:
- # Un widget representa cualquier cosa "pintable"
+ """ A widget represents anything drawable on the screen """
def __init__(self, container, rect_in_container, frame_rate, surface=None, tooltip=None):
- self.container = container # Ventana (Rect) que "contiene" al widget
+ self.container = container # Rect, containing the widget
self.set_rect_in_container(rect_in_container)
self.frame_rate = frame_rate
self.background = surface
self.parent = None
- # El widget puede (opcionalmente) tener un tooltip
+ # Tooltip
self.tooltip = tooltip
self.super_tooltip = None
self.showing_tooltip = False
+ # Click Sound
+ self.click_sound_path = None
+
self.visible = True
+
+ self.over = False
+
+ # A widget it's dirty when it changes somehow, for example an animation will be dirty after every new sprite
+ # A widget should change in the update method (before draw)
+ self.dirty = True
+
+ # When this flag it's on, the widget it's always dirty, unless the update method is overriden
+ self.keep_dirty = False
+
+ def update(self, frames):
+ """ Abstract. This method is called before draw, the purpose is to override it to alter the widget and let
+ know the application that the widget became dirty, for example when an animation changes its image or its position."""
+ if self.keep_dirty:
+ self.set_dirty()
def draw(self, screen):
+ self.dirty = False
if self.visible:
if self.background:
screen.blit(self.background, self.rect_absolute)
return self.rect_absolute
- def force_update(self): # Forzamos la actualizacion del widget independientemente del frame_rate
- #screen.blit(self.background, self.rect_in_container)
- #pygame.display.update(self.rect_in_container)
- pass
+ def set_image(self, image):
+ self.background = image
+
+ def get_image(self):
+ return self.background
def set_rect_in_container(self, rect):
# Rect del widget (relativo al container)
@@ -44,7 +64,35 @@ class Widget:
# Rect del widget (absoluto al screen)
self.rect_absolute.size = size
-
+
+ def set_click_sound_path(self, path):
+ self.click_sound_path = path
+
+ def set_tooltip(self, text):
+ self.tooltip = text
+
+ def set_super_tooltip(self, text):
+ self.super_tooltip = text
+
+ def handle_mouse_down(self, (x, y)):
+ self.on_mouse_click()
+
+ def on_mouse_click(self):
+ if self.click_sound_path:
+ sound = pygame.mixer.Sound(self.click_sound_path)
+ sound.play()
+
+ def on_mouse_over(self):
+ self.over = True
+
+ def on_mouse_out(self):
+ self.over = False
+
+ def set_dirty(self):
+ self.dirty = True
+ if self.parent:
+ self.parent.set_dirty()
+
def get_background_and_owner(self):
if self.background:
return (self.background, self)
diff --git a/Saludame.activity/gui/window.py b/Saludame.activity/gui/window.py
index b130dde..e3e10c8 100755
--- a/Saludame.activity/gui/window.py
+++ b/Saludame.activity/gui/window.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import pygame
+import widget
class Window:
@@ -20,16 +21,23 @@ class Window:
self.register_id = register_id
self.windows_controller.register_new_window(register_id, self)
- self.widgets = [] # Lista de widgets que contiene la ventana
- self.windows = [] # Lista de ventanas que contiene la ventana
- self.buttons = [] # Lista de botones que contiene la ventana
+ self.widgets = [] # Widgets contained in the window
+ self.windows = [] # SubWindows contained in the window
+ self.buttons = [] # Buttons contained in the window
+ self.childs = [] # The sum of widgets, buttons and subwindows, usefull to keep adding order
self.repaint = True
+ self.visible = True
+ self.__erased = True # after hidding a window it's background should be restored, that's why we need this flag
+
+ self.dirty_background = True # Indicates the background its dirty, so it must be redrawn and so every child.
+ self.dirty = True # Indicates the window has at least a dirty child
+
def get_register_id(self):
return self.register_id
- def set_bg_image(self, image):
+ def set_bg_image(self, image, alpha=True):
if not isinstance(image, pygame.Surface):
# Is a path, convert it to a surface
self.bg_image = pygame.image.load(image).convert_alpha()
@@ -42,47 +50,110 @@ class Window:
def dispose(self):
self.windows_controller.unregister_window(self)
+ def update(self, frames):
+ if self.visible:
+ for win in self.windows:
+ if frames % win.frame_rate == 0:
+ win.update(frames)
+
+ for widget in self.widgets:
+ if frames % widget.frame_rate == 0:
+ widget.update(frames)
+
# Abstract function.
def pre_draw(self, screen):
return []
# Logica de pintado de cualquier ventana
- def draw(self, screen, frames):
+ def draw(self, screen, frames, forced=False):
changes = []
- changes += self.pre_draw(screen)
-
- if self.repaint: # Solo actualizamos el fondo de la ventana cuando hagamos un 'repaint'
- # De otra forma solo actualizamos los widgets y subventanas
+ if self.visible:
- if self.bg_image != None:
- screen.blit(self.bg_image, self.rect) # Pintamos el "fondo" de la ventana
- else:
- if self.bg_color:
- screen.fill(self.bg_color, self.rect)
+ if self.repaint: # repaint is old, keep it for compatibility
+ self.dirty_background = True
+
+ if self.dirty_background:
+ forced = True
+
+ # Restores the regions where dirty windows/widgets are
+ changes += self._restore_background(screen, forced)
+ self.repaint = self.dirty = self.dirty_background = False
- changes.append(self.rect)
+ changes += self.pre_draw(screen)
- self.repaint = False
-
- for win in self.windows:
- if frames % win.frame_rate == 0:
- changes.extend(win.draw(screen, frames)) # Le decimos a cada ventana que se pinte
-
- for widget in self.widgets:
- if frames % widget.frame_rate == 0:
- changes.append(widget.draw(screen)) # Pintamos los widgets que "contiene" la ventana
+ for child in self.childs:
+ if isinstance(child, Window):
+ if child.dirty or child.dirty_background or forced:
+ changes.extend(child.draw(screen, frames, forced))
+ else:
+ if child.dirty or forced:
+ changes.append(child.draw(screen))
+
+ if forced:
+ changes = [self.rect] # When the whole window was forced, the changes are the whole window
+
+ return changes
+
+ def _restore_background(self, screen, forced):
+ """ Restores the background in the dirty regions"""
+ changes = []
+ if self.bg_image:
+ if forced:
+ screen.blit(self.bg_image, self.rect.topleft)
+ else:
+ for win in self.windows:
+
+ if win.bg_image:
+ # No need to restore the screen, the subwindow will be redrawn over it
+ pass
+
+ elif win.visible and (win.dirty or win.dirty_background):
+ relative_rect = win.rect.move([-coord for coord in self.rect.topleft])
+ screen.blit(self.bg_image, win.rect.topleft, relative_rect)
+
+ elif not win.visible and not win.__erased:
+ win.__erased = True
+ relative_rect = win.rect.move([-coord for coord in self.rect.topleft])
+ screen.blit(self.bg_image, win.rect.topleft, relative_rect)
+ changes.append(win.rect)
+
+ for widget in self.widgets:
+ if widget.dirty:
+ screen.blit(self.bg_image, widget.rect_absolute.topleft, widget.rect_in_container)
return changes
+
+ def set_dirty(self):
+ self.dirty = True
+ if self.parent and not self.parent.dirty:
+ self.parent.set_dirty()
+
+ def set_dirty_background(self):
+ self.dirty_background = True
+ if self.parent and not self.parent.dirty:
+ self.parent.set_dirty()
+ def hide(self):
+ if self.visible:
+ self.visible = False
+ self.__erased = False
+ self.set_dirty_background()
+
+ def show(self):
+ self.visible = True
+
def add_child(self, widget):
self.widgets.append(widget)
+ self.childs.append(widget)
widget.parent = self
def remove_child(self, widget):
if widget in self.widgets:
self.widgets.remove(widget)
+ self.childs.remove(widget)
+ self.set_dirty_background()
def add_button(self, button):
self.add_child(button)
@@ -94,64 +165,83 @@ class Window:
self.buttons.remove(button)
self.remove_child(button)
button.parent = None
+ self.set_dirty_background()
+ def clear_childs(self):
+ for widget in self.widgets:
+ widget.parent = None
+ self.childs.remove(widget)
+ self.buttons = []
+ self.widgets = []
+ self.set_dirty_background()
+
def add_window(self, window):
self.windows.append(window)
+ self.childs.append(window)
window.parent = self
def remove_window(self, window):
self.windows.remove(window)
-
+ self.childs.remove(window)
+ self.set_dirty_background()
+
def enable_repaint(self):
self.repaint = True
for win in self.windows:
win.enable_repaint()
- def handle_mouse_down(self, (x, y)):
- for button in self.buttons:
- if button.contains_point(x, y):
- # Tooltips
- if button.showing_tooltip:
- self.windows_controller.hide_active_tooltip()
- button.showing_tooltip = False
- button.on_mouse_click()
- return # No seguimos buscando el botón
+ def is_transparent(self):
+ return (self.bg_image or self.bg_color)
- for win in self.windows:
- if win.rect.collidepoint(x, y):
- win.handle_mouse_down((x, y))
+ def contains_point(self, x, y):
+ return self.rect.collidepoint(x,y)
+ def handle_mouse_down(self, (x, y)):
+ stop = False
+
+ for child in reversed(self.childs):
+
+ if child.contains_point(x, y):
+ if isinstance(child, widget.Widget):
+ # Tooltips
+ if child.showing_tooltip:
+ self.windows_controller.hide_active_tooltip()
+ child.showing_tooltip = False
+ stop = child.handle_mouse_down((x, y))
+ if stop:
+ break
+
+ return stop
+
def handle_mouse_over(self, (x, y)):
- buttons = []
- buttons += self.buttons
for win in self.windows:
- buttons += win.buttons
-
- for button in buttons:
- if button.contains_point(x, y):
- if not button.over:
+ if win.rect.collidepoint(x, y):
+ win.handle_mouse_over((x,y))
+
+ for widget in self.widgets:
+ if widget.contains_point(x, y):
+ if not widget.over:
# Tooltips
- if button.tooltip: # Si el boton tiene tooltip entonces lo mostramos
+ if widget.tooltip: # Si el boton tiene tooltip entonces lo mostramos
self.windows_controller.hide_active_tooltip()
- self.windows_controller.show_tooltip(button.tooltip)
- button.showing_tooltip = True
- if button.super_tooltip:
+ self.windows_controller.show_tooltip(widget.tooltip)
+ widget.showing_tooltip = True
+ if widget.super_tooltip:
self.windows_controller.hide_active_tooltip()
- self.windows_controller.show_super_tooltip(button.super_tooltip)
- button.showing_tooltip = True
- button.on_mouse_over()
- button.over = True
+ self.windows_controller.show_super_tooltip(widget.super_tooltip)
+ widget.showing_tooltip = True
+ widget.on_mouse_over()
return # No seguimos buscando el botón
else:
# Ineficiente! Por ahora lo dejo asi para PROBAR
# Esta todo el tiempo haciendo esto! Cambiar
- if button.showing_tooltip:
+ if widget.showing_tooltip:
# Si estabamos mostrando el tooltip ahora debemos esconderlo
self.windows_controller.hide_active_tooltip()
- button.showing_tooltip = False
- button.over = False
- button.on_mouse_out()
+ widget.showing_tooltip = False
+ if widget.over:
+ widget.on_mouse_out()
# It will be overridden by cooking challenge or other D&D challenge
def handle_mouse_motion(self, (x, y)):
diff --git a/Saludame.activity/gui/windows_controller.py b/Saludame.activity/gui/windows_controller.py
index fb05aa4..eca558a 100755
--- a/Saludame.activity/gui/windows_controller.py
+++ b/Saludame.activity/gui/windows_controller.py
@@ -130,6 +130,8 @@ class WindowsController:
pygame.display.flip() # Actualizamos el screen para hacer visibles los efectos
self.reload_main = False
+ self.windows_stack[-1].update(frames)
+
changes = []
if frames % self.windows_stack[-1].frame_rate == 0:
changes.extend(self.windows_stack[-1].draw(self.screen, frames))
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
diff --git a/Saludame.activity/locale/es/LC_MESSAGES/org.ceibaljam.Saludame.mo b/Saludame.activity/locale/es/LC_MESSAGES/org.ceibaljam.Saludame.mo
index 6e4dacc..23c2c9d 100644
--- a/Saludame.activity/locale/es/LC_MESSAGES/org.ceibaljam.Saludame.mo
+++ b/Saludame.activity/locale/es/LC_MESSAGES/org.ceibaljam.Saludame.mo
Binary files differ
diff --git a/Saludame.activity/main_window.py b/Saludame.activity/main_window.py
index 1224789..09b90d9 100755
--- a/Saludame.activity/main_window.py
+++ b/Saludame.activity/main_window.py
@@ -21,37 +21,42 @@ class MainWindow(gui.Window):
self.game_manager = game_man
self.windows = [] # Lista de ventanas que 'componen' la ventana principal
-
+
self.panel_win = PanelWindow(container, pygame.Rect((180, 609), (1015, 200)), 1, windows_controller)
- self.windows.append(self.panel_win)
+ self.add_window(self.panel_win)
self.kidW = KidWindow(container, pygame.Rect((227, 0), (973, 609)), 1, windows_controller, game_man)
- self.windows.append(self.kidW)
+ self.add_window(self.kidW)
- self.windows.append(animation.FPS(container, pygame.Rect((1150, 0), (50, 20)), 15, self.clock))
- self.windows.append(status_bars.BarsWindow(container, pygame.Rect(0, 0, 227, 590), 5, windows_controller, bars_loader))
+ self.add_child(animation.FPS(container, pygame.Rect((1150, 0), (50, 20)), 15, self.clock))
+ self.add_window(status_bars.BarsWindow(container, pygame.Rect(0, 0, 227, 590), 5, windows_controller, bars_loader))
self.add_child(Clock(container, pygame.Rect(0, 528, 1, 1), 1, game_man))
# Challenges
challenges_button = gui.ImageButton(self.rect, pygame.Rect((1120, 400), (60, 60)), 1, "challenges/trophy.png", self._cb_button_click_mc_challenges)
challenges_button.set_tooltip(_("Multiple choice"))
+ challenges_button.keep_dirty = True
self.add_button(challenges_button)
challenges_button2 = gui.ImageButton(self.rect, pygame.Rect((1120, 500), (60, 60)), 1, "challenges/trophy.png", self._cb_button_click_tf_challenges)
challenges_button2.set_tooltip(_("True or false"))
+ challenges_button2.keep_dirty = True
self.add_button(challenges_button2)
challenges_button3 = gui.ImageButton(self.rect, pygame.Rect((1120, 300), (60, 60)), 1, "challenges/trophy.png", self._cb_button_click_master_challenge)
challenges_button3.set_tooltip(_("Master challenge"))
+ challenges_button3.keep_dirty = True
self.add_button(challenges_button3)
challenges_button4 = gui.ImageButton(self.rect, pygame.Rect((1120, 200), (60, 60)), 1, "challenges/trophy.png", self._cb_button_click_cooking_challenge)
challenges_button4.set_tooltip(_("Cooking"))
+ challenges_button4.keep_dirty = True
self.add_button(challenges_button4)
button_back = pygame.image.load("customization/customization_button.png").convert()
btn_reset = gui.TextButton2(self.rect, pygame.Rect((1000, 20), (70, 30)), 1, _("Reset"), 30, (255, 255, 255), button_back, self._cb_reset_game)
+ btn_reset.keep_dirty = True
self.add_button(btn_reset)
#btn_change_mood = gui.ImageButton(self.rect, pygame.Rect((1120, 500), (60, 60)), 1, "assets/icons/change.png", self._cb_button_click_change_mood)
@@ -108,17 +113,15 @@ class Clock(gui.Widget):
self.set_frame()
def set_frame(self):
- self.frame = pygame.image.load(self.frame_paths[self.frame_index]).convert()
-
- def draw(self, screen):
- change = gui.Widget.draw(self, screen)
+ image = pygame.image.load(self.frame_paths[self.frame_index]).convert()
+ rect = pygame.Rect((0,0), image.get_size())
+ rect.center = self.rect_absolute.width/2, self.rect_absolute.height/2
+ self.background.blit(image, rect)
+ def update(self, frames):
if self.game_manager.hour <> self.frame_index:
self.frame_index = self.game_manager.hour
self.set_frame()
-
- rect = pygame.Rect((0, 0), self.frame.get_size())
- rect.center = self.rect_absolute.center
- screen.blit(self.frame, rect)
-
- return change
+
+ self.set_dirty() # Always dirty because it draws over the panel_window
+ \ No newline at end of file
diff --git a/Saludame.activity/menu.py b/Saludame.activity/menu.py
index 2b14895..1e7025b 100755
--- a/Saludame.activity/menu.py
+++ b/Saludame.activity/menu.py
@@ -15,13 +15,14 @@ import effects
import random
from gettext import gettext as _
-SIZE = 600, 280
+SIZE = 700, 300
EXP_SPEED = 15.0 #expansion speed, in pixels per frame
MAX_ITEMS = 8 #max items quantity per selection
RADIUS = 90.0
#fonts
-LARGE_TEXT = 10 #fewer mean small text
+LARGE_TEXT = 10 # larger than this will use large button
+
#buttons
SMALL_BUTTON = "assets/menu/A.png"
LARGE_BUTTON = "assets/menu/B.png"
@@ -37,8 +38,8 @@ class Menu(gui.Window):
rect = pygame.Rect((0, 0), SIZE)
rect.center = center
- self.windows_controller = windows_controller
self.game_manager = game_manager
+
gui.Window.__init__(self, container, rect, frame_rate, windows_controller, "menu_window")
self.depth = 0 #it means we are in the root of the menu, mayor values means we are not.
@@ -60,7 +61,7 @@ class Menu(gui.Window):
self.current_selection = self.item_list #list of current subitems selection
self.radius = RADIUS
- self.show = False
+ self.hide()
self.on_expansion = False
self.calculate()
@@ -73,28 +74,16 @@ class Menu(gui.Window):
self.item_list = items_list
- def pre_draw(self, screen):
- changes = []
- if self.show:
- if self.on_expansion:
- if self.radius < 90:
- self.radius += EXP_SPEED
- self.__calculate_items_position(self.current_selection)
- else:
- self.on_expansion = False
-
- for item in self.current_selection:
- item.draw_item(screen)
- changes.append(item.rect_absolute)
-
- if self.depth == 0:
- self.exit.draw_item(screen)
- changes.append(self.exit.rect_absolute)
+ def update(self, frames):
+ if self.visible and self.on_expansion:
+ if self.radius < 90:
+ self.radius += EXP_SPEED
+ self.__calculate_items_position(self.current_selection)
else:
- self.back.draw_item(screen)
- changes.append(self.back.rect_absolute)
+ self.on_expansion = False
- return changes
+ if self.visible:
+ self.set_dirty_background() # Sets the background as dirty, cause the menú is animated
def send_action(self, action_id):
"""
@@ -122,6 +111,15 @@ class Menu(gui.Window):
#
self.on_expansion = True #if the selection changes, display the animation
self.radius = 0
+
+ self.clear_childs()
+ map(self.add_button, self.current_selection)
+
+ if self.depth == 0:
+ self.add_button(self.exit)
+ else:
+ self.add_button(self.back)
+
def get_allowed_items(self, items_list):
"""
@@ -214,10 +212,11 @@ class Menu(gui.Window):
"""
Close the Menu Window
"""
- self.show = False
+ self.hide()
self.depth = 0
self.previous_items = []
self.current_selection = []
+ self.clear_childs()
self.game_manager.menu_active = False
def back_to_previous_selection(self):
@@ -240,7 +239,7 @@ class Menu(gui.Window):
#handlers
def handle_mouse_down(self, coord):
- if self.show and not self.on_expansion:
+ if self.visible and not self.on_expansion:
if self.exit.rect_absolute.collidepoint(coord) and self.depth == 0:
self.close()
elif self.exit.rect_absolute.collidepoint(coord) and self.depth > 0: #click on back item, it's in the same position of exit item
@@ -253,7 +252,7 @@ class Menu(gui.Window):
else:
self.set_current_selection(self.item_list)
- self.show = True
+ self.show()
self.game_manager.menu_active = True
#privates
@@ -302,7 +301,7 @@ class Menu(gui.Window):
item.set_rect_in_container(rect) # Recalculates the absolute coordinates
-class Item(gui.Widget):
+class Item(gui.Button):
"""
Entity that represent an item
"""
@@ -332,11 +331,11 @@ class Item(gui.Widget):
self.help_image = pygame.image.load(HELP_BUTTON).convert()
self.help_rect = self.help_image.get_rect()
- size_and_surface = self.get_surface(20, self.name, self.bg_image, self.help_image)
+ size, surface = self.get_surface(20, self.name, self.bg_image, self.help_image)
- self.rect = pygame.Rect((0, 0), size_and_surface[0])
+ self.rect = pygame.Rect((0, 0), size)
- gui.Widget.__init__(self, container, self.rect, frame_rate, size_and_surface[1])
+ gui.Button.__init__(self, container, self.rect, frame_rate, surface)
def get_surface(self, font_size, text, bg_image, help_image):
font = utilities.get_font(font_size)
@@ -360,19 +359,6 @@ class Item(gui.Widget):
"""
self.subitems_list.append(item)
-
- def draw_item(self, screen):
- """
- draw the item in the screen
- """
- screen.blit(self.background, self.rect_absolute)
-
- def on_mouse_over(self):
- return
-
- def on_mouse_out(self):
- return
-
def on_mouse_click(self):
"""
Handle mouse click
diff --git a/Saludame.activity/panel_window.py b/Saludame.activity/panel_window.py
index 8686099..fe0a314 100644
--- a/Saludame.activity/panel_window.py
+++ b/Saludame.activity/panel_window.py
@@ -24,7 +24,7 @@ class PanelWindow(gui.Window):
self.timing = 1 # la idea de timing es llevar una cuenta adentro, de los frames que fueron pasando
gui.Window.__init__(self, container, rect, frame_rate, windows_controller, "panel_window")
- self.set_bg_image(PANEL_BG_PATH)
+ self.set_bg_image(PANEL_BG_PATH, False)
# Actions
self.rect_action = pygame.Rect((560, 36), (310, 124))
@@ -79,18 +79,31 @@ class PanelWindow(gui.Window):
self.add_button(info_button)
# Environment
- self.weather_button = None
+ self.weather_widget = None
self.set_weather()
def set_weather(self):
- if self.weather_button:
- self.buttons.remove(self.weather_button)
- self.widgets.remove(self.weather_button)
+ if self.weather_widget:
+ self.remove_child(self.weather_widget)
weather = self.windows_controller.game_man.current_weather
file_path = "assets/events/weather/" + weather + ".png"
- self.weather_button = gui.ImageButton(self.rect, pygame.Rect(51, 34, 1, 1), 1, file_path)
- self.add_button(self.weather_button)
+ self.weather_widget = gui.Image(self.rect, pygame.Rect(51, 34, 1, 1), 1, file_path)
+ self.add_child(self.weather_widget)
+ self.weather_widget.set_dirty()
+
+ info = "%s \n" % (weather)
+
+ effect = self.windows_controller.game_man.environment_effect
+ if effect:
+ for eff in effect.effect_status_list:
+ bar_label = effect.bars_controller.get_bar_label(eff[0])
+ if eff[1] > 0:
+ info += "+ %s \n" % (bar_label)
+ else:
+ info += "- %s \n" % (bar_label)
+
+ self.weather_widget.set_super_tooltip(info)
# Actions
def set_active_action(self, action):
@@ -144,6 +157,7 @@ class PanelWindow(gui.Window):
self.remove_button(self.b_event_personal)
self.b_event_personal = b_event_personal
self.add_button(self.b_event_personal)
+ self.b_event_personal.set_dirty()
self.index_personal_event = len(self.active_personal_events) - 1
self.refresh_count_personal_events()
@@ -189,6 +203,7 @@ class PanelWindow(gui.Window):
self.remove_button(self.b_event_social)
self.b_event_social = b_event_social
self.add_button(self.b_event_social)
+ self.b_event_social.set_dirty()
self.index_social_event = len(self.active_social_events) - 1
self.refresh_count_social_events()
@@ -230,25 +245,17 @@ class PanelWindow(gui.Window):
self.count_social_events.text = "0/0"
self.count_social_events.refresh()
- def pre_draw(self, screen):
-
+ def update(self, frames):
+
self.timing += 1
# Actions
if self.on_animation and self.current_animation and self.timing % self.current_animation.frame_rate == 0:
if self.timing > 12:
self.timing = 0
-
- # Events
- self.surf_personal.fill(WHITE)
- self.surf_social.fill(WHITE)
-
- # Blit the personal and social surfaces with screen
- screen.blit(self.surf_personal, self.rect_personal)
- screen.blit(self.surf_social, self.rect_social)
-
- return [self.rect]
+ gui.Window.update(self, frames)
+
# Buttons Callbacks
def _cb_button_click_personal(self, button):
if game.set_library_function:
@@ -307,8 +314,8 @@ class ActionProgressBar(gui.Widget):
gui.Widget.__init__(self, container, rect_in_container, frame_rate)
- self.background = surface # Borders of the bar
- self.surface = surface.copy() # Actual surface to blit in the screen, _prepare_surface
+ self.borders = surface # Borders of the bar
+ self.background = surface.copy() # Actual surface to blit in the screen, _prepare_surface
self.decrease = action.time_span
self._prepare_surface()
@@ -318,17 +325,16 @@ class ActionProgressBar(gui.Widget):
charged_rect.width = ((float)(self.decrease) / self.action.time_span) * rect.width
- self.surface.fill(BAR_BACK_COLOR, rect)
- self.surface.fill(BAR_FILL_COLOR, charged_rect)
- self.surface.blit(self.background, (0, 0)) # Background blits over the charge, because it has the propper alpha
+ self.background.fill(BAR_BACK_COLOR, rect)
+ self.background.fill(BAR_FILL_COLOR, charged_rect)
+ self.background.blit(self.borders, (0, 0)) # Background blits over the charge, because it has the propper alpha
self.decrease = self.action.time_left
-
- def draw(self, screen):
+ self.set_dirty()
+
+ def update(self, frames):
"""
- Draw the progress bar (if the action is still active), override widget draw
+ Updates the progress bar (if the action is still active)
"""
if self.decrease > 0:
self._prepare_surface()
- screen.blit(self.surface, self.rect_absolute)
- return self.rect_absolute
diff --git a/Saludame.activity/po/Saludame.pot b/Saludame.activity/po/Saludame.pot
index 59a206c..1baeb3a 100644
--- a/Saludame.activity/po/Saludame.pot
+++ b/Saludame.activity/po/Saludame.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-17 19:17-0200\n"
+"POT-Creation-Date: 2011-01-22 18:20-0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -52,370 +52,378 @@ msgstr ""
msgid "Control médico"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:11
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:12
msgid "Eat..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:13
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:14
msgid "Comidas completas..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:15
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:16
msgid "Stew"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:16
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:17
msgid "Currasco"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:18
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:19
msgid "Milanesa"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:19
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:20
msgid "Torta frita"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:20
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:21
msgid "Ensalada"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:21
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:22
msgid "Pascualina"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:26
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:27
msgid "Fruta..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:28
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:29
msgid "Manzana"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:29
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:30
msgid "Naranja"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:30
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:31
msgid "Banana"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:31
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:32
msgid "Kiwi"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:35
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:36
msgid "Desayuno y merienda..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:37
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:38
msgid "Tostadas con membrillo"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:38
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:39
msgid "Queso"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:39
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:40
msgid "Galletitas saladas"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:40
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:41
msgid "Galletitas dulces"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:41
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:42
msgid "Galletitas con dulce de leche"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:42
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:43
msgid "Leche chocolatada"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:43
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:44
msgid "Café con leche"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:44
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:45
msgid "Leche"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:45
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:46
msgid "Leche con cereales"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:48
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:50
msgid "Líquidos..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:50
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:52
#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Agua"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:51
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:53
msgid "Limonada"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:52
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:54
msgid "Jugo de naranja"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:53
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:55
msgid "Jugo de peras"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:54
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:56
msgid "Jugo de zanahorias"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:60
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:62
msgid "Deportes..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:61
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:63
msgid "Run"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:62
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:64
msgid "Jump the rope"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:63
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:65
msgid "Play footbal"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:64
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:66
msgid "Hide and Seek"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:67
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:69
msgid "Tiempo libre..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:68
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:70
msgid "Go to sleep"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:69
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:71
msgid "Talk with a friend"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:70
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:72
msgid "Do homework"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:71
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:73
msgid "Clean up the bedroom"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:74
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:76
msgid "Ir a..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:75
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:77
msgid "Schoolyard"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:76
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:78
msgid "Country"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:77
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:79
msgid "Classroom"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:78
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:80
msgid "Square"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:79
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:81
msgid "Home..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:80
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:82
msgid "Living room"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:81
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:83
msgid "Bedroom"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:82
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:84
msgid "Kitchen"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:86
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:88
msgid "Cambiar de ropa"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:87
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:89
msgid "School"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:88
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:90
msgid "Sunny"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:89
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:91
msgid "Rainy"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:92
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:94
msgid "Higiene..."
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:93
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:95
msgid "Bañarse"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:94
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:96
msgid "Lavarse los dientes"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:95
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:97
msgid "Lavarse las manos"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:96
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:98
msgid "Ir al baño"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges.py:243
+#: /home/pmoleri/saludame/Saludame.activity/challenges.py:272
#: /home/pmoleri/saludame/Saludame.activity/customization.py:63
msgid "Continue"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/main_window.py:39
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:38
msgid "Multiple choice"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/main_window.py:43
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:42
msgid "True or false"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/main_window.py:47
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:46
+msgid "Master challenge"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:50
+msgid "Cooking"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:54
msgid "Reset"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:40
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Which foods do we need to eat every day?"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:40
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Some food from each group every day"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:40
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Some fruits and vegetables only"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:40
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Some food from all the groups but not fats and sugar"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "What is the most important meal of the day?"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Breakfast"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Lunch"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Tea"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Dinner"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "How regularly should children exercise?"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "Once a month"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "Once a week"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "Once a day"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:44
msgid "What percentage of the body is made up of water?"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:49
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:50
msgid ""
"La alimentación adecuada previene muchas enfermedades \n"
"importantes"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:50
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:51
msgid ""
"Si no nos vacunamos con las vacunas obligatorias podemos \n"
"enfermarnos"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:51
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:52
msgid ""
"Cuando estamos ingiriendo alimentos en menor proporción \n"
"a lo que necesitamos, podemos volvernos más \n"
"susceptibles a las infecciones "
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:54
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:55
msgid ""
"Muchos alimentos pueden estar contaminados con agroquímicos, \n"
"y pesticidas porque son frecuentemente usados"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:55
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:56
msgid "Si no voy a comer no necesito lavarme las manos "
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:56
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:57
msgid ""
"Lo primero que hay que hay que hacer cuando vamos a lavarnos \n"
"las manos es ponernos jabón"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:59
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:60
msgid ""
"Cuando aprendemos hábitos saludables estamos cuidando nuestra \n"
"salud"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:60
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:61
msgid ""
"Tomar mucha agua, hacer ejercicio y comer frutas y verduras \n"
"ayuda a mover el intestino sin dificultad"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:61
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:62
msgid "El desayuno no es importante en nuestra alimentación"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:64
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:65
msgid "La actividad física mejora nuestra imagen"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:65
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:66
msgid ""
"La actividad física no nos ayuda prevenir enfermedades \n"
"como el sobrepeso y la obesidad "
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:66
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:67
msgid ""
"Ser sedentarios no tiene importancia y no afecta nuestra \n"
"salud"
@@ -453,7 +461,7 @@ msgstr ""
msgid "Next >"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/panel_window.py:76
+#: /home/pmoleri/saludame/Saludame.activity/panel_window.py:74
msgid "Customization module"
msgstr ""
@@ -485,31 +493,31 @@ msgstr ""
msgid "Credits"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/content_window.py:118
+#: /home/pmoleri/saludame/Saludame.activity/content_window.py:116
msgid "Library"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:58
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:59
msgid "TOTAL"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:61
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:62
msgid "ESTADO FÍSICO"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:64
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:65
msgid "HIGIENE"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:67
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:68
msgid "ALIMENTACIÓN"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:70
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:71
msgid "TIEMPO LIBRE"
msgstr ""
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:349
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:352
msgid "LEVEL"
msgstr ""
@@ -596,3 +604,11 @@ msgstr ""
#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:42
msgid "Tiempo Libre"
msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/menu.py:53
+msgid "exit"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/menu.py:57
+msgid "back"
+msgstr ""
diff --git a/Saludame.activity/po/es.po b/Saludame.activity/po/es.po
index c270bf5..a3f1df2 100755
--- a/Saludame.activity/po/es.po
+++ b/Saludame.activity/po/es.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-07 18:49-0200\n"
+"POT-Creation-Date: 2011-01-22 18:20-0200\n"
"PO-Revision-Date: 2010-11-07 20:45-0200\n"
"Last-Translator: Pablo Moleri <pmoleri@gmail.com>\n"
"Language-Team: Spanish\n"
@@ -53,291 +53,383 @@ msgstr "Estudiar"
msgid "Control médico"
msgstr "Control médico"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:11
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:12
msgid "Eat..."
msgstr "Comer..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:13
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:14
msgid "Comidas completas..."
msgstr "Comidas completas..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:15
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:16
msgid "Stew"
msgstr "Guiso"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:16
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:17
msgid "Currasco"
msgstr "Churrasco"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:18
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:19
msgid "Milanesa"
msgstr "Milanesa"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:19
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:20
msgid "Torta frita"
msgstr "Torta frita"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:20
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:21
msgid "Ensalada"
msgstr "Ensalada"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:21
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:22
msgid "Pascualina"
msgstr "Pascualina"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:26
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:27
msgid "Fruta..."
msgstr "Fruta..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:28
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:29
msgid "Manzana"
msgstr "Manzana"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:29
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:30
msgid "Naranja"
msgstr "Naranja"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:30
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:31
msgid "Banana"
msgstr "Banana"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:31
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:32
msgid "Kiwi"
msgstr "Kiwi"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:35
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:36
msgid "Desayuno y merienda..."
msgstr "Desayuno y merienda..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:37
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:38
msgid "Tostadas con membrillo"
msgstr "Tostadas con membrillo"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:38
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:39
msgid "Queso"
msgstr "Queso"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:39
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:40
msgid "Galletitas saladas"
msgstr "Galletitas saladas"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:40
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:41
msgid "Galletitas dulces"
msgstr "Galletitas dulces"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:41
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:42
msgid "Galletitas con dulce de leche"
msgstr "Galletitas con dulce de leche"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:42
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:43
msgid "Leche chocolatada"
msgstr "Leche chocolatada"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:43
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:44
msgid "Café con leche"
msgstr "Café con leche"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:44
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:45
msgid "Leche"
msgstr "Leche"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:45
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:46
msgid "Leche con cereales"
msgstr "Leche con cereales"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:49
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:50
msgid "Líquidos..."
msgstr "Líquidos..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:51
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:33
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:52
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Agua"
msgstr "Agua"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:52
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:53
msgid "Limonada"
msgstr "Limonada"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:53
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:54
msgid "Jugo de naranja"
msgstr "Jugo de naranja"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:54
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:55
msgid "Jugo de peras"
msgstr "Jugo de peras"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:55
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:56
msgid "Jugo de zanahorias"
msgstr "Jugo de zanahorias"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:61
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:62
msgid "Deportes..."
msgstr "Deportes..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:62
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:63
msgid "Run"
msgstr "Correr"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:63
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:64
msgid "Jump the rope"
msgstr "Saltar la cuerda"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:64
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:65
msgid "Play footbal"
msgstr "Jugar al fútbol"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:65
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:66
msgid "Hide and Seek"
msgstr "Escondidas"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:68
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:69
msgid "Tiempo libre..."
msgstr "Tiempo libre..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:69
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:70
msgid "Go to sleep"
msgstr "Ir a dormir"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:70
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:71
msgid "Talk with a friend"
msgstr "Hablar con un amigo"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:71
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:72
msgid "Do homework"
msgstr "Hacer deberes"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:72
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:73
msgid "Clean up the bedroom"
msgstr "Limpiar el cuarto"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:75
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:76
msgid "Ir a..."
msgstr "Ir a..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:76
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:77
msgid "Schoolyard"
msgstr "Patio de la escuela"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:77
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:78
msgid "Country"
msgstr "Campo"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:78
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:79
msgid "Classroom"
msgstr "Clase"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:79
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:80
msgid "Square"
msgstr "Plaza"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:80
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:81
msgid "Home..."
msgstr "Casa..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:81
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:82
msgid "Living room"
msgstr "Living"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:82
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:83
msgid "Bedroom"
msgstr "Dormitorio"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:83
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:84
msgid "Kitchen"
msgstr "Cocina"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:87
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:88
msgid "Cambiar de ropa"
msgstr "Cambiar de ropa"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:88
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:89
msgid "School"
msgstr "Escuela"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:89
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:90
msgid "Sunny"
msgstr "Caluroso"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:90
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:91
msgid "Rainy"
msgstr "Luvioso"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:93
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:94
msgid "Higiene..."
msgstr "Higiene..."
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:94
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:95
msgid "Bañarse"
msgstr "Bañarse"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:95
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:96
msgid "Lavarse los dientes"
msgstr "Lavarse los dientes"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:96
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:97
msgid "Lavarse las manos"
msgstr "Lavarse las manos"
-#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:97
+#: /home/pmoleri/saludame/Saludame.activity/menu_creator.py:98
msgid "Ir al baño"
msgstr "Ir al baño"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/challenges.py:272
+#: /home/pmoleri/saludame/Saludame.activity/customization.py:63
+msgid "Continue"
+msgstr "Continuar"
+
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:38
+msgid "Multiple choice"
+msgstr "Múltiple opción"
+
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:42
+msgid "True or false"
+msgstr "Verdadero o Falso"
+
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:46
+msgid "Master challenge"
+msgstr "Gran desafío"
+
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:50
+msgid "Cooking"
+msgstr "Cocina"
+
+#: /home/pmoleri/saludame/Saludame.activity/main_window.py:54
+msgid "Reset"
+msgstr "Reiniciar"
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Which foods do we need to eat every day?"
msgstr "¿Qué comidas necesitamos comer todos los días?"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Some food from each group every day"
msgstr "Algo de cada grupo todos los días"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Some fruits and vegetables only"
msgstr "Solo frutas y vegetales"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:41
msgid "Some food from all the groups but not fats and sugar"
msgstr "Algo de fruta de todos los grupos pero no grasas y azucar"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:28
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "What is the most important meal of the day?"
msgstr "¿Cual es la comida más importante del día?"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:28
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Breakfast"
msgstr "Desayuno"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:28
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Lunch"
msgstr "Almuerzo"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:28
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Tea"
msgstr "Té"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:28
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:42
msgid "Dinner"
msgstr "Cena"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:29
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "How regularly should children exercise?"
msgstr "¿Cuán a menudo deben ejercitarse los niños?"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:29
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "Once a month"
msgstr "Al menos una vez al mes"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:29
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "Once a week"
msgstr "Al menos una vez a la semana"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:29
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:43
msgid "Once a day"
msgstr "Al menos una vez al día"
-#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:30
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:44
msgid "What percentage of the body is made up of water?"
msgstr "¿Qué porcentaje del cuerpo está hecho de agua?"
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:50
+msgid ""
+"La alimentación adecuada previene muchas enfermedades \n"
+"importantes"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:51
+msgid ""
+"Si no nos vacunamos con las vacunas obligatorias podemos \n"
+"enfermarnos"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:52
+msgid ""
+"Cuando estamos ingiriendo alimentos en menor proporción \n"
+"a lo que necesitamos, podemos volvernos más \n"
+"susceptibles a las infecciones "
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:55
+msgid ""
+"Muchos alimentos pueden estar contaminados con agroquímicos, \n"
+"y pesticidas porque son frecuentemente usados"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:56
+msgid "Si no voy a comer no necesito lavarme las manos "
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:57
+msgid ""
+"Lo primero que hay que hay que hacer cuando vamos a lavarnos \n"
+"las manos es ponernos jabón"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:60
+msgid ""
+"Cuando aprendemos hábitos saludables estamos cuidando nuestra \n"
+"salud"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:61
+msgid ""
+"Tomar mucha agua, hacer ejercicio y comer frutas y verduras \n"
+"ayuda a mover el intestino sin dificultad"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:62
+msgid "El desayuno no es importante en nuestra alimentación"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:65
+msgid "La actividad física mejora nuestra imagen"
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:66
+msgid ""
+"La actividad física no nos ayuda prevenir enfermedades \n"
+"como el sobrepeso y la obesidad "
+msgstr ""
+
+#: /home/pmoleri/saludame/Saludame.activity/challenges_creator.py:67
+msgid ""
+"Ser sedentarios no tiene importancia y no afecta nuestra \n"
+"salud"
+msgstr ""
+
#: /home/pmoleri/saludame/Saludame.activity/startup_window.py:52
msgid "New game"
msgstr "Nuevo juego"
@@ -370,14 +462,10 @@ msgstr "< Atrás"
msgid "Next >"
msgstr "Siguiente >"
-#: /home/pmoleri/saludame/Saludame.activity/panel_window.py:76
+#: /home/pmoleri/saludame/Saludame.activity/panel_window.py:74
msgid "Customization module"
msgstr "Personalización"
-#: /home/pmoleri/saludame/Saludame.activity/customization.py:63
-msgid "Continue"
-msgstr "Continuar"
-
#: /home/pmoleri/saludame/Saludame.activity/customization.py:66
msgid "Hair"
msgstr "Pelo"
@@ -406,31 +494,31 @@ msgstr "Biblioteca"
msgid "Credits"
msgstr "Créditos"
-#: /home/pmoleri/saludame/Saludame.activity/content_window.py:118
+#: /home/pmoleri/saludame/Saludame.activity/content_window.py:116
msgid "Library"
msgstr "Biblioteca"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:56
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:59
msgid "TOTAL"
msgstr "TOTAL"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:59
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:62
msgid "ESTADO FÍSICO"
msgstr "ESTADO FÍSICO"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:62
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:65
msgid "HIGIENE"
msgstr "HIGIENE"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:65
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:68
msgid "ALIMENTACIÓN"
msgstr "ALIMENTACIÓN"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:68
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:71
msgid "TIEMPO LIBRE"
msgstr "TIEMPO LIBRE"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:342
+#: /home/pmoleri/saludame/Saludame.activity/status_bars.py:352
msgid "LEVEL"
msgstr "NIVEL"
@@ -450,74 +538,82 @@ msgstr "Energía"
msgid "Defenses"
msgstr "Defensas"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:21
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:24
msgid "Peso"
msgstr "Peso"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:29
msgid "Ducha"
msgstr "Ducha"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:29
msgid "Manos"
msgstr "Manos"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:29
msgid "Dientes"
msgstr "Dientes"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:27
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:29
msgid "Baño"
msgstr "Baño"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:33
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Cereales y leguminosas"
msgstr "Cereales y leguminosas"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:33
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Verduras y frutas"
msgstr "Verduras y frutas"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:33
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Carnes y huevos"
msgstr "Carnes y huevos"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:33
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Dulces"
msgstr "Dulces"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:33
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Grasas y aceites"
msgstr "Grasas y aceites"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:33
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:35
msgid "Leches y quesos"
msgstr "Leches y quesos"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:34
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:36
msgid "Alimentation"
msgstr "Alimentación"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:39
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:41
msgid "Deportes"
msgstr "Deportes"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:39
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:41
msgid "Diversión"
msgstr "Diversión"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:39
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:41
msgid "Descanso"
msgstr "Descanso"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:39
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:41
msgid "Responsabilidad"
msgstr "Responsabilidad"
-#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:40
+#: /home/pmoleri/saludame/Saludame.activity/status_bars_creator.py:42
msgid "Tiempo Libre"
msgstr "Tiempo libre"
+#: /home/pmoleri/saludame/Saludame.activity/menu.py:53
+msgid "exit"
+msgstr "Salir"
+
+#: /home/pmoleri/saludame/Saludame.activity/menu.py:57
+msgid "back"
+msgstr "Atrás"
+
#~ msgid "Accept"
#~ msgstr "Aceptar"
diff --git a/Saludame.activity/saludame_windows_controller.py b/Saludame.activity/saludame_windows_controller.py
index 9a128c4..e441908 100644
--- a/Saludame.activity/saludame_windows_controller.py
+++ b/Saludame.activity/saludame_windows_controller.py
@@ -42,8 +42,9 @@ class SaludameWindowsController(gui.WindowsController):
self.set_active_window("customization_window")
# BACKGROUND
- def set_environment(self, environment):
- self.windows["kid"].set_environment(environment)
+ def set_environment(self, environment, time):
+ self.windows["kid"].set_environment(environment, time)
+ self.windows["panel_window"].set_weather()
# CLOTHES
diff --git a/Saludame.activity/sound_manager.py b/Saludame.activity/sound_manager.py
index 479fe42..6003aba 100644
--- a/Saludame.activity/sound_manager.py
+++ b/Saludame.activity/sound_manager.py
@@ -37,6 +37,7 @@ class SoundManager:
if name <> self.current_music_name:
self.state = SoundManager.FADE_OUT
self.next_music_name = name
+ pygame.mixer.music.fadeout(1000)
elif self.state == SoundManager.FADE_OUT:
if name == self.current_music_name:
@@ -52,6 +53,15 @@ class SoundManager:
def start_playing(self):
global music
+
+ if self.next_music_name:
+ self.current_music_name = self.next_music_name
+ self.next_music_name = None
+
path = music[self.current_music_name]
pygame.mixer.music.load(path)
pygame.mixer.music.play()
+
+ # Sounds
+ def play_time_change(self):
+ pygame.mixer.Sound("assets/sound/time_change.ogg").play()
diff --git a/Saludame.activity/status_bars.py b/Saludame.activity/status_bars.py
index b283a50..b2048ed 100755
--- a/Saludame.activity/status_bars.py
+++ b/Saludame.activity/status_bars.py
@@ -18,7 +18,7 @@ SECTION_TOP_PADDING = 18
BAR_OFFSET_X = 30
BAR_WIDTH = 182
-BAR_HEIGHT = 26
+BAR_HEIGHT = 24
SCORE_BAR_HEIGHT = 36
SCORE_BAR_WIDTH = 118
@@ -49,34 +49,40 @@ class BarsWindow(gui.Window):
self.rect.size = (227, 590)
# game bars
- self.bars = bars_loader.get_second_level_bars()
+ bars = bars_loader.get_second_level_bars()
# sections
score_section_width = SECTION_WIDTH - 20
- self.score_section = ScoreSection(bars_loader.get_score_bar(), self.rect, (score_section_width, 40), (SECTION_OFFSET_X + 25, 4), 1)
+ score_section = ScoreSection(bars_loader.get_score_bar(), self.rect, (score_section_width, 40), (SECTION_OFFSET_X + 25, 4), 1)
y = 50
- self.overall_section = BarSection(windows_controller, self.rect, _(u"TOTAL"), bars_loader.get_overall_bar(), [] , (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_total.png")
+ overall_section = BarSection(windows_controller, self.rect, _(u"TOTAL"), bars_loader.get_overall_bar(), [] , (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_total.png")
y = 110
- self.physica_section = BarSection(windows_controller, self.rect, _(u"ESTADO FÍSICO"), self.bars[0], self.bars[0].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_physica.png")
+ physica_section = BarSection(windows_controller, self.rect, _(u"ESTADO FÍSICO"), bars[0], bars[0].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_physica.png")
y += SECTION_MIN_HEIGHT
- self.hygiene_section = BarSection(windows_controller, self.rect, _(u"HIGIENE"), self.bars[1], self.bars[1].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_hygiene.png")
+ hygiene_section = BarSection(windows_controller, self.rect, _(u"HIGIENE"), bars[1], bars[1].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_hygiene.png")
y += SECTION_MIN_HEIGHT
- self.nutrition_section = BarSection(windows_controller, self.rect, _(u"ALIMENTACIÓN"), self.bars[2], self.bars[2].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_nutrition.png")
+ nutrition_section = BarSection(windows_controller, self.rect, _(u"ALIMENTACIÓN"), bars[2], bars[2].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_nutrition.png")
y += SECTION_MIN_HEIGHT
- self.spare_time_section = BarSection(windows_controller, self.rect, _(u"TIEMPO LIBRE"), self.bars[3], self.bars[3].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_spare_time.png")
+ spare_time_section = BarSection(windows_controller, self.rect, _(u"TIEMPO LIBRE"), bars[3], bars[3].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_spare_time.png")
- self.sections_list = [self.score_section, self.overall_section, self.physica_section, self.hygiene_section, self.nutrition_section, self.spare_time_section]
- self.accordeon = Accordeon([self.physica_section, self.hygiene_section, self.nutrition_section, self.spare_time_section])
+ y += SECTION_MIN_HEIGHT
+ farm_section = BarSection(windows_controller, self.rect, _(u"HUERTA"), bars[4], bars[4].children_list, (SECTION_WIDTH, SECTION_MIN_HEIGHT), (SECTION_OFFSET_X, y), "assets/layout/icon_nutrition.png")
+
+ self.sections_list = [score_section, overall_section, physica_section, hygiene_section, nutrition_section, spare_time_section, farm_section]
+ self.accordeon = Accordeon([physica_section, hygiene_section, nutrition_section, spare_time_section, farm_section])
self.set_bg_image("assets/layout/status.png")
- self.windows += [section for section in self.sections_list if section != self.score_section] # Score section no va porque no está convertida a window
- self.add_child(self.score_section)
+ for section in self.sections_list:
+ if section != score_section: # Score section no va porque es Widget
+ self.add_window(section)
+
+ self.add_child(score_section)
def on_mouse_over(self):
return
@@ -91,8 +97,9 @@ class BarsWindow(gui.Window):
self.accordeon.compress_sections()
else:
self.accordeon.expand_section(section)
+ pygame.mixer.Sound("assets/sound/open_bars.ogg").play()
+ self.set_dirty_background() # Makes the window repaint its background
break
- self.repaint = True # Makes the window repaint its background
class Accordeon:
"""
@@ -133,6 +140,7 @@ class Accordeon:
for section in self.sections_list: # move up the sections
section.move_up()
section.compress()
+ section.set_dirty()
class BarSection(gui.Window):
"""
@@ -169,15 +177,15 @@ class BarSection(gui.Window):
if icon_path:
icon = pygame.image.load(icon_path).convert()
self.icon = gui.Widget(self.rect, pygame.Rect((0, 0), icon.get_size()), 1, icon)
+ self.icon.keep_dirty = True
self.fixed_widgets.append(self.icon)
else:
self.icon = None
-
# visuals constant
self.init_top = self.rect[1]
self.init_height = size[1]
- self.max_expand = len(children_bar) * (BAR_HEIGHT + 1)
+ self.max_expand = len(children_bar) * BAR_HEIGHT
self.expanded = False # Este flag se activa cuando se están mostrando las sub-barras
self.__calculate() # calculo la posición de cada barra en la sección
@@ -225,19 +233,20 @@ class BarSection(gui.Window):
self.root_bar_display.container = self.rect
self.root_bar_display.set_rect_in_container(self.root_bar_display.rect_in_container)
- self.widgets = []
- self.widgets.extend(self.fixed_widgets)
+ self.clear_childs()
+ for widget in self.fixed_widgets:
+ self.add_child(widget)
if self.expanded:
y = SECTION_TOP_PADDING
for display in self.displays_list:
- y += (BAR_HEIGHT + 1)
+ y += BAR_HEIGHT
display.container = self.rect
display.rect_in_container.top = y
display.set_rect_in_container(display.rect_in_container)
- self.widgets.append(display)
+ self.add_child(display)
def __get_displays(self):
"""
@@ -281,30 +290,36 @@ class BarDisplay(gui.Widget):
self.show_name = True
+ def update(self, frames):
+ if self.last_value != self.status_bar.value:
+ self.set_dirty()
+
def draw(self, screen):
- if self.last_value != self.status_bar.value:
- if isinstance(self.status_bar, WeightBar):
- position = self.status_bar.value * (self.rect_in_container.width) / (BAR_WIDTH)
- arrow_position = min([position, BAR_WIDTH + BAR_OFFSET_X])
- self.surface.blit(self.background, (0, 0))
- self.surface.blit(self.arrow, (arrow_position, 14))
- elif isinstance(self.status_bar, StatusBar):
- rect = pygame.Rect((1, 2), (self.rect_in_container.width - 2, self.rect_in_container.height - 4))
- charged_rect = pygame.Rect(rect) # create a copy
- charged_rect.width = self.status_bar.value * rect.width / self.status_bar.max
-
- color = self.get_color()
-
- self.surface.fill(BAR_BACK_COLOR, rect)
- self.surface.fill(color, charged_rect)
- self.surface.blit(self.background, (0, 0)) # Background blits over the charge, because it has the propper alpha
+ if isinstance(self.status_bar, WeightBar):
+ position = self.status_bar.value * (self.rect_in_container.width) / (BAR_WIDTH)
+ arrow_position = min([position, BAR_WIDTH + BAR_OFFSET_X])
+ self.surface.blit(self.background, (0, 0))
+ self.surface.blit(self.arrow, (arrow_position, 14))
+
+ elif isinstance(self.status_bar, StatusBar):
+ rect = pygame.Rect((1, 2), (self.rect_in_container.width - 2, self.rect_in_container.height - 4))
+ charged_rect = pygame.Rect(rect) # create a copy
+ charged_rect.width = self.status_bar.value * rect.width / self.status_bar.max
- if self.show_name:
- self.surface.blit(self.font.render(self.label, 1, pygame.Color(SUB_BAR_TEXT_COLOR)), (8, 4))
+ color = self.get_color()
+
+ self.surface.fill(BAR_BACK_COLOR, rect)
+ self.surface.fill(color, charged_rect)
+ self.surface.blit(self.background, (0, 0)) # Background blits over the charge, because it has the propper alpha
+ if self.show_name:
+ self.surface.blit(self.font.render(self.label, 1, pygame.Color(SUB_BAR_TEXT_COLOR)), (8, 4))
+
screen.blit(self.surface, self.rect_absolute)
+ self.dirty = False
+
return self.rect_absolute
def get_color(self):
@@ -331,7 +346,6 @@ class ScoreSection(gui.Widget):
self.score_bar_display = BarDisplay(score_background.get_height(), score_background.get_width(), (SCORE_BAR_X_OFFSET, 12), self.score_bar, SCORE_BAR_PARTITIONS)
self.score_bar_display.background = score_background
- #self.surface = self.get_background().subsurface(self.rect_in_container)
self.surface = pygame.Surface(self.rect_in_container.size)
self.surface.set_alpha(255)
diff --git a/Saludame.activity/status_bars_creator.py b/Saludame.activity/status_bars_creator.py
index 2577a4b..190a17e 100755
--- a/Saludame.activity/status_bars_creator.py
+++ b/Saludame.activity/status_bars_creator.py
@@ -37,14 +37,20 @@ class BarsLoader:
nutrition_children_bar = [status_bars.StatusBar(id[0], id[1], nutrition, [], hard_level[0], hard_level[1]) for id in nutrition_children_id]
nutrition.children_list = nutrition_children_bar
- ### fun
+ ### spare time
fun_children_id = [("sports", _("Deportes")), ("fun", _(u"Diversión")), ("relaxing", _("Descanso")), ("responsability", _("Responsabilidad"))]
fun = status_bars.StatusBar("spare_time", _("Tiempo Libre"), self.overall_bar, [], hard_level[0], hard_level[1])
fun_children_bar = [status_bars.StatusBar(id[0], id[1], fun, [], hard_level[0], hard_level[1]) for id in fun_children_id]
fun.children_list = fun_children_bar
-
- self.second_level = [physica, hygiene, nutrition, fun]
- self.third_level = physica.children_list + hygiene.children_list + nutrition.children_list + fun.children_list
+
+ ### farm
+ farm_children_id = [("riego", _("Riego")), ("siembra", _(u"Siembra")), ("cosecha", _("Cosecha"))]
+ farm = status_bars.StatusBar("farm", _("Huerta"), self.overall_bar, [], hard_level[0], hard_level[1])
+ farm_children_bar = [status_bars.StatusBar(id[0], id[1], fun, [], hard_level[0], hard_level[1]) for id in farm_children_id]
+ farm.children_list = farm_children_bar
+
+ self.second_level = [physica, hygiene, nutrition, fun, farm]
+ self.third_level = physica.children_list + hygiene.children_list + nutrition.children_list + fun.children_list + farm.children_list
self.overall_bar.children_list = self.second_level
diff --git a/Saludame.activity/utilities.py b/Saludame.activity/utilities.py
index 104c802..5029926 100755
--- a/Saludame.activity/utilities.py
+++ b/Saludame.activity/utilities.py
@@ -58,6 +58,6 @@ def verify_path(action, game_manager):
return check_directory("%s/%s/%s" % (game_manager.character.mood.kid_animation_path, game_manager.character.sex, action.effect.clothes_id))
if isinstance(action.effect, effects.LocationEffect): # If the action has location effects
- return check_image(game_manager.environments_dictionary[action.effect.place_id + "_" + game_manager.current_weather].background_path)
+ return check_image(game_manager.environments_dictionary[(action.effect.place_id, game_manager.current_weather)].background_path)
return True