Keys work 1

This commit is contained in:
9and3r
2014-08-07 21:02:59 +02:00
parent 676abd6b91
commit 45a6e83798
2 changed files with 49 additions and 2 deletions

View File

@@ -129,6 +129,8 @@ class ScreenManager():
self.screens[4].check_connection() self.screens[4].check_connection()
self.change_screen(self.current_screen) self.change_screen(self.current_screen)
self.screen_objects_manager.set_selected("pause_play")
def update(self): def update(self):
surface = pygame.Surface(self.size) surface = pygame.Surface(self.size)
self.background.draw_background(surface) self.background.draw_background(surface)
@@ -186,6 +188,8 @@ class ScreenManager():
self.screens[4].check_connection() self.screens[4].check_connection()
elif key[:-1] == "menu_": elif key[:-1] == "menu_":
self.change_screen(int(key[-1:])) self.change_screen(int(key[-1:]))
elif event.type == InputManager.key:
self.screen_objects_manager.change_selected((0,0), InputManager.down)
self.screens[self.current_screen].touch_event(event) self.screens[self.current_screen].touch_event(event)
def volume_changed(self, volume): def volume_changed(self, volume):

View File

@@ -3,6 +3,9 @@ import math
import pygame import pygame
from .input_manager import InputManager
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -10,6 +13,7 @@ class ScreenObjectsManager():
def __init__(self): def __init__(self):
self.touch_objects = {} self.touch_objects = {}
self.text_objects = {} self.text_objects = {}
self.selected = None
def set_object(self, key, add_object): def set_object(self, key, add_object):
self.text_objects[key] = add_object self.text_objects[key] = add_object
@@ -47,6 +51,37 @@ class ScreenObjectsManager():
else: else:
self.touch_objects = {} self.touch_objects = {}
def set_selected(self, key):
if self.selected is not None:
self.selected.set_selected(False)
if key is not None:
self.selected = self.touch_objects[key]
self.selected.set_selected(True)
def change_selected(self, pos, direction):
if direction == InputManager.up:
pass
elif direction == InputManager.down:
best = None
for key in self.touch_objects:
if self.touch_objects[key].pos[1] > pos[1]:
if best is None:
best = self.touch_objects[key].pos[1]
elif best > self.touch_objects[key].pos[1]:
best = self.touch_objects[key].pos[1]
self.set_selected(self.find_best(pos, True, best))
def find_best(self, pos, horizontal, best):
if horizontal:
keys = []
for key in self.touch_objects:
if self.touch_objects[key].pos[1] == best:
keys.append(key)
logger.error(keys)
return keys[0]
class BaseItem(): class BaseItem():
def __init__(self, pos, size): def __init__(self, pos, size):
@@ -129,6 +164,7 @@ class TouchObject(BaseItem):
def __init__(self, pos, size): def __init__(self, pos, size):
BaseItem.__init__(self, pos, size) BaseItem.__init__(self, pos, size)
self.active = False self.active = False
self.selected = False
def is_pos_inside(self, pos): def is_pos_inside(self, pos):
return self.rect_in_pos.collidepoint(pos) return self.rect_in_pos.collidepoint(pos)
@@ -136,13 +172,18 @@ class TouchObject(BaseItem):
def set_active(self, active): def set_active(self, active):
self.active = active self.active = active
def set_selected(self, selected):
self.selected = selected
class TouchAndTextItem(TouchObject, TextItem): class TouchAndTextItem(TouchObject, TextItem):
def __init__(self, font, text, pos, size): def __init__(self, font, text, pos, size):
TextItem.__init__(self, font, text, pos, size) TextItem.__init__(self, font, text, pos, size)
TouchObject.__init__(self, pos, self.size) TouchObject.__init__(self, pos, self.size)
self.active_color = (0, 150, 255) self.active_color = (0, 150, 255)
self.selected_color = (150, 0, 255)
self.active_box = self.font.render(text, True, self.active_color) self.active_box = self.font.render(text, True, self.active_color)
self.selected_box = self.font.render(text, True, self.selected_color)
def update(self): def update(self):
TextItem.update(self) TextItem.update(self)
@@ -150,6 +191,7 @@ class TouchAndTextItem(TouchObject, TextItem):
def set_text(self, text, change_size): def set_text(self, text, change_size):
TextItem.set_text(self, text, change_size) TextItem.set_text(self, text, change_size)
self.active_box = self.font.render(text, True, self.active_color) self.active_box = self.font.render(text, True, self.active_color)
self.selected_box = self.font.render(text, True, self.selected_color)
def render(self, surface): def render(self, surface):
if self.fit_horizontal: if self.fit_horizontal:
@@ -160,8 +202,9 @@ class TouchAndTextItem(TouchObject, TextItem):
self.active_color) self.active_color)
else: else:
self.box = self.font.render(self.text, True, self.color) self.box = self.font.render(self.text, True, self.color)
if self.active: if self.selected:
# Area h*2 to render letters like g, j, y... surface.blit(self.selected_box, self.pos, area=self.rect)
elif self.active:
surface.blit(self.active_box, self.pos, area=self.rect) surface.blit(self.active_box, self.pos, area=self.rect)
else: else:
surface.blit(self.box, self.pos, area=self.rect) surface.blit(self.box, self.pos, area=self.rect)