diff options
author | dmazzone <mazzone.diego@gmail.com> | 2010-09-19 21:59:49 (GMT) |
---|---|---|
committer | dmazzone <mazzone.diego@gmail.com> | 2010-09-19 21:59:49 (GMT) |
commit | a1e71cac7d637bd3366a170ac683c73f2e4c78a6 (patch) | |
tree | 971f0c345117e83f300ecddcec83e1f9204a8614 | |
parent | feb0f807671ba215d5d1478168f54456c30ffb32 (diff) |
Dado que echinelli tuvo problemas al hacer el PUSH, lo hago yo en su nombre.
Modificaciones:
*game.py: agregué import menucreator.py, cambio la linea donde se agrega el menu a la lista de ventanas.
*menu.py: la clase Menu tiene otro enfoque, agregué la clase Item.
Agregados:
*assets/icons
*assets/icons/icon3.png ... icon2.png ...icon.png ... salir.png Iconos que cree para probar el levantado de imagenes en los items.
*menucreator.py Este modulo tiene como objetivo levantar el menu desde un archivo, por ahora lo levanta de una lista.
*Animación para la navegación por el menu: Switcheando de un item a otro del menu, vi que quedaba muy brusco el cambio, entonces hice como una animación para cambiar de un item a otro. Al iniciar la app se dispara, la idea es que se dispare cuando hagas click en un item que tiene sub-items.
-rw-r--r-- | Saludame.activity/assets/icons/icon.png | bin | 0 -> 1583 bytes | |||
-rw-r--r-- | Saludame.activity/assets/icons/icon2.png | bin | 0 -> 1519 bytes | |||
-rw-r--r-- | Saludame.activity/assets/icons/icon3.png | bin | 0 -> 1820 bytes | |||
-rw-r--r-- | Saludame.activity/assets/icons/salir.png | bin | 0 -> 6030 bytes | |||
-rw-r--r-- | Saludame.activity/game.py | 3 | ||||
-rw-r--r-- | Saludame.activity/menu.py | 170 | ||||
-rw-r--r-- | Saludame.activity/menucreator.py | 35 |
7 files changed, 161 insertions, 47 deletions
diff --git a/Saludame.activity/assets/icons/icon.png b/Saludame.activity/assets/icons/icon.png Binary files differnew file mode 100644 index 0000000..5f6e5a3 --- /dev/null +++ b/Saludame.activity/assets/icons/icon.png diff --git a/Saludame.activity/assets/icons/icon2.png b/Saludame.activity/assets/icons/icon2.png Binary files differnew file mode 100644 index 0000000..da0995c --- /dev/null +++ b/Saludame.activity/assets/icons/icon2.png diff --git a/Saludame.activity/assets/icons/icon3.png b/Saludame.activity/assets/icons/icon3.png Binary files differnew file mode 100644 index 0000000..d19cd8c --- /dev/null +++ b/Saludame.activity/assets/icons/icon3.png diff --git a/Saludame.activity/assets/icons/salir.png b/Saludame.activity/assets/icons/salir.png Binary files differnew file mode 100644 index 0000000..91abf0c --- /dev/null +++ b/Saludame.activity/assets/icons/salir.png diff --git a/Saludame.activity/game.py b/Saludame.activity/game.py index 5e4f3c7..726392b 100644 --- a/Saludame.activity/game.py +++ b/Saludame.activity/game.py @@ -9,6 +9,7 @@ import window import animation import menu import challenges +import menucreator log = logging.getLogger('saludame') log.setLevel(logging.DEBUG) @@ -52,7 +53,7 @@ def main(fromSugar): windows.append(window.StatusWindow(pygame.Rect((700, 300), (300, 140)), 2, pygame.Color("gray"))) windows.append(window.MainWindow(pygame.Rect((0, 0), (600, 500)), 1)) windows.append(animation.Apple(pygame.Rect((150, 500), (150, 172)), 10)) - windows.append(menu.Menu(pygame.Rect((150, 500), (150, 172)), 1)) + windows.append(menucreator.load_menu()) windows.append(animation.FPS(pygame.Rect((650, 80), (50, 20)), 15, clock)) #Challenges Module diff --git a/Saludame.activity/menu.py b/Saludame.activity/menu.py index 63a1afb..f9fa776 100644 --- a/Saludame.activity/menu.py +++ b/Saludame.activity/menu.py @@ -9,63 +9,141 @@ import pygame import os import math - -BLACK = pygame.Color("black") - -example = [ - ("name", "icon.png", "tooltip", None), - ("eat", "icon.png", "comer algo", [ - ("apple", "icon.png", "Eat an apple", None), - ("meat", "icon.png", "Eat meat", None) - ]), - ("sport", "icon.png", "Do sports...", [ - ("run", "icon.png", "Run", None), - ("jump rope", "icon.png", "Jump the rope", None), - ("footbal", "icon.png", "Play footbal", None) - ]), - ("sleep", "icon.png", "Go to sleep", None) -] +from ibus.lang import __load_lang class Menu: - def __init__(self, rect, frame_rate): - self.rect = rect + def __init__(self,frame_rate,item_list): + #self.rect = rect self.frame_rate = frame_rate - self.menu = example + self.item_list = item_list # item's list that going to be displayed + self.path = None # Path of items selected + self.actual_selection= self.item_list #list of actual subitems selection + self.salir = Item(" ","assets/icons/salir.png"," ",[]) + self.salir.rect.center = (190,140) + self.radious =100 + self.on_compression = True #para mostrar la animación al iniciar + self.on_expansion = False - self.path = None # Path of items selected - - # Test + self.__calculate() + """ self.path = ["sport"] self.calculate() + """ + + def draw(self, screen): + font = pygame.font.Font(None, 35) + if(self.on_compression): + if(self.radious > 0): + self.radious -= 8 + self.__calculate_items_position((190,140), self.radious, self.item_list) + else: + self.on_compression=False + self.on_expansion=True + if(self.on_expansion): + if(self.radious <100): + item = self.item_list[2] + self.actual_selection = item.subitems_list + self.radious+=5 + self.__calculate_items_position((190,140), self.radious, self.actual_selection) + else: + self.on_expansion = False + + for item in self.actual_selection: + item.draw_item(screen,font) + self.salir.draw_item(screen,font) + pygame.display.update() + return [] + + def on_mouse_over(self,coord): + for item in self.actual_selection: + if(item.rect.collidepoint(coord)): + item.on_mouse_over() + break + + def on_mouse_out(self,coord): + for item in self.actual_selection: + if(item.rect.collidepoint(coord)): + item.on_mouse_out() + break + + def on_mouse_click(self,coord): + for item in self.actual_selection: + if(item.rect.collidepoint(coord)): + item.on_mouse_clik() + break - def calculate(self): + + + def __calculate(self): """ - creates a rect list with the coordinates of the menu options to be displayed + Calculate the position for each menu's item """ + self.__calculate_items_position((170,140), self.radious, self.item_list) - menu = self.menu - for entry in self.path: - parent = menu - menu = [item[3] for item in menu if item[0] == entry][0] # Selects the submenu named entry - - qty = len(menu) - - angle = (2 * math.pi) / qty # Angle beetwen options (in radians) - radius = 100 - width, height = 120, 30 - center = pygame.Rect(200, 250, width, height) + def __calculate_items_position(self,center,radius,item_list): + if(len(item_list)>0): + angle = (2*math.pi) / len(item_list) + else: + angle = 0 + current_angle = math.pi / 4 + for item in item_list: + self.__calculate_item_position(item,center, current_angle, radius) #calculate the position for each item + self.__calculate_items_position(center,radius,item.subitems_list) #calculate the position for each item's subitem + current_angle += angle + + def __calculate_item_position(self,item,center,angle,radius): + """ + Calculates the position in the display for each menu item. + """ - self.rect_list = [center] + coord = int(center[0] + math.cos(angle)*radius),int(center[1] + math.sin(angle)*radius) + if(coord[0] < center[0]): + if(coord[1] > center[1]): #third quadrant + item.rect.topright = coord + elif(coord[1] < center[1]): #second quadrant + item.rect.bottomright = coord + else: + item.rect.midright = coord + elif(coord[0] > center[0]): + if(coord[1] > center[1]): #fourth quadrant + item.rect.topleft = coord + elif(coord[1] < center[1]): #first quadrant + item.rect.bottomleft = coord + else: + item.rect.midleft = coord + else: + if(coord[1] > center[1]): + item.rect.midbottom = coord + else: + item.rect.midtop =coord + +class Item: + + def __init__(self,name,icon_path,tooltip,subitems_list): + self.name = name + self.image = pygame.image.load(icon_path) + self.rect = self.image.get_rect() + self.tooltip = tooltip + self.subitems_list = subitems_list - current_angle = math.pi / 2 - for item in menu: - rect = center.copy() - rect.center = rect.center[0] + math.cos(current_angle)*radius, rect.center[1] + math.sin(current_angle)*radius - self.rect_list.append(rect) - current_angle += angle + def add_subitem(self,item): + """ + Append a subitem to the item list + """ + self.subitems_list.append(item) + + def draw_item(self,screen,font): + img_font=font.render(self.name,True,(0,0,0)) + screen.blit(self.image,self.rect) + screen.blit(img_font,self.rect.topright) + + def on_mouse_over(self): + return + + def on_mouse_out(self): + return + + def on_mouse_click(self): + return - def draw(self, screen): - for rect in self.rect_list: - screen.fill(BLACK, rect) - return self.rect_list diff --git a/Saludame.activity/menucreator.py b/Saludame.activity/menucreator.py new file mode 100644 index 0000000..d036dca --- /dev/null +++ b/Saludame.activity/menucreator.py @@ -0,0 +1,35 @@ +import menu + +example = [ + ("name", "assets/icons/icon.png", "tooltip", None), + ("eat", "assets/icons/icon2.png", "comer algo", [ + ("apple", "assets/icons/icon.png", "Eat an apple", None), + ("meat", "assets/icons/icon.png", "Eat meat", None) + ]), + ("sport", "assets/icons/icon.png", "Do sports...", [ + ("run", "assets/icons/icon.png", "Run", None), + ("jump rope", "assets/icons/icon.png", "Jump the rope", None), + ("footbal", "assets/icons/icon.png", "Play footbal", None) + ]), + ("sleep", "assets/icons/icon.png", "Go to sleep", None), + ("talk", "assets/icons/icon3.png", "talk with a friend", None), + ("study", "assets/icons/icon2.png", "do the homeworks", None), + ("clean", "assets/icons/icon3.png", "clean up the bedroom", None) +] + +def load_menu(): + item_list=[] + for item in example: + an_item = create_item(item) + item_list.append(an_item) + m = menu.Menu(1,item_list) + return m + + +def create_item(item_tuple): + if(item_tuple[3] != None): + an_item = menu.Item(item_tuple[0],item_tuple[1],item_tuple[2],[create_item(sub_item) for sub_item in item_tuple[3]]) + else: + an_item = menu.Item(item_tuple[0],item_tuple[1],item_tuple[2],[]) + return an_item +
\ No newline at end of file |