Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordmazzone <mazzone.diego@gmail.com>2010-09-19 21:59:49 (GMT)
committer dmazzone <mazzone.diego@gmail.com>2010-09-19 21:59:49 (GMT)
commita1e71cac7d637bd3366a170ac683c73f2e4c78a6 (patch)
tree971f0c345117e83f300ecddcec83e1f9204a8614
parentfeb0f807671ba215d5d1478168f54456c30ffb32 (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.pngbin0 -> 1583 bytes
-rw-r--r--Saludame.activity/assets/icons/icon2.pngbin0 -> 1519 bytes
-rw-r--r--Saludame.activity/assets/icons/icon3.pngbin0 -> 1820 bytes
-rw-r--r--Saludame.activity/assets/icons/salir.pngbin0 -> 6030 bytes
-rw-r--r--Saludame.activity/game.py3
-rw-r--r--Saludame.activity/menu.py170
-rw-r--r--Saludame.activity/menucreator.py35
7 files changed, 161 insertions, 47 deletions
diff --git a/Saludame.activity/assets/icons/icon.png b/Saludame.activity/assets/icons/icon.png
new file mode 100644
index 0000000..5f6e5a3
--- /dev/null
+++ b/Saludame.activity/assets/icons/icon.png
Binary files differ
diff --git a/Saludame.activity/assets/icons/icon2.png b/Saludame.activity/assets/icons/icon2.png
new file mode 100644
index 0000000..da0995c
--- /dev/null
+++ b/Saludame.activity/assets/icons/icon2.png
Binary files differ
diff --git a/Saludame.activity/assets/icons/icon3.png b/Saludame.activity/assets/icons/icon3.png
new file mode 100644
index 0000000..d19cd8c
--- /dev/null
+++ b/Saludame.activity/assets/icons/icon3.png
Binary files differ
diff --git a/Saludame.activity/assets/icons/salir.png b/Saludame.activity/assets/icons/salir.png
new file mode 100644
index 0000000..91abf0c
--- /dev/null
+++ b/Saludame.activity/assets/icons/salir.png
Binary files differ
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