示例#1
0
 def randomize_players(self):
     self.set_switching_lock(settings.LOCK_LINEUP_ON_DECISION)
     players_copy = self.players[:]
     while players_copy == self.players:
         randomhelper.shuffle(players_copy)
     self.players = players_copy
     SoundManager.play(Trigger.PLAYERS_SHUFFLE)
示例#2
0
 def set_player(self, player):
     # check if player has already been set before
     try:
         idx_already_set = self.players.index(player)
     except ValueError, e:
         # player is not in any team yet
         self.players[self.current_player_slot] = player
         self.highlight_player(self.current_player_slot)
         SoundManager.play(Trigger.PLAYER_JOINED, player)
示例#3
0
 def equalize_players(self):
     self.set_switching_lock(settings.LOCK_LINEUP_ON_DECISION)
     # get min team elo lineup
     permutations = list(itertools.permutations(self.players))
     team_elo_list = [[i, abs(a['attacker']['elo'] + b['defender']['elo'] - c['attacker']['elo'] - d['defender']['elo'])] for i, (a, b, c, d) in enumerate(permutations)]
     team_elo_list = sorted(team_elo_list, key=lambda x: x[1])
     equal_lineup = list(permutations[team_elo_list[0][0]])
     # check positions
     self.players = self.check_positions(equal_lineup)
     SoundManager.play(Trigger.PLAYERS_EQUALIZE)
示例#4
0
    def __handle_goal(self, team):
        if team == '1':
            GameData.add_goal(0)
            obj = self.ids.labelHome
        else:
            GameData.add_goal(1)
            obj = self.ids.labelAway

        self.score = GameData.get_score()
        HighlightOverlay(orig_obj=obj, parent=self).animate(font_size=500, color=(1, 1, 1, 0), d=2.0)
        SoundManager.play(Trigger.GOAL)
示例#5
0
 def __handle_goal(self, data):
     # 0 : home, 1: away
     if data in ["0", "1"]:
         team_id = int(data)
         GameData.add_goal(team_id)
         # play goal sound
         SoundManager.play(Trigger.GOAL)
         # update local match data
         self.update_match()
         # highlight score board
         HighlightOverlay(orig_obj=self.score_objects[team_id], parent=self).animate(font_size=500, color=(1, 1, 1, 0), d=2.0)
示例#6
0
 def on_score(self, instance, value):
     # update kickoff information
     self.handle_kickoff(False)
     # check max goal during match
     if self.state == 'running':
         if GameData.is_match_finished():
             self.state = 'finished'
             SoundManager.play(Trigger.GAME_END)
     # manual swiping can resume a finished match
     elif self.state == 'finished':
         self.state = 'running'
         SoundManager.play(Trigger.GAME_RESUME)
示例#7
0
 def __handle_rfid(self, rfid):
     self.current_rfid = rfid
     SoundManager.play(Trigger.RFID)
     # RFID --> player ID
     player_id = PlayerData.get_player_by_rfid(rfid)
     # player ID --> player dict
     player = PlayerData.get_player_by_id(player_id)
     if player:
         time.sleep(0.5)
         self.current_player = player
     else:
         self.current_player = {}
示例#8
0
 def update_match(self):
     # fetch score from GameData
     self.score = GameData.get_score()
     # update kickoff information
     self.handle_kickoff(False)
     # check max goal during match
     if self.state == 'running':
         if GameData.is_match_finished():
             self.state = 'finished'
             self.stop_time = self.get_time()
             SoundManager.play(Trigger.GAME_END)
     # manual swiping can resume a finished match
     elif self.state == 'finished' and not GameData.is_match_finished():
         self.state = 'running'
         SoundManager.play(Trigger.GAME_RESUME)
示例#9
0
 def on_back(self):
     # game still running, ask for user confirmation
     if self.state == 'running':
         SoundManager.play(Trigger.GAME_PAUSE)
         view = ModalView(size_hint=(None, None), size=(600, 400), auto_dismiss=False)
         content = Factory.STModalView(title='Spiel abbrechen', text='Das Spiel ist noch nicht beendet.\nWirklich abbrechen?', cb_yes=self.cancel_match, cb_no=self.resume_match)
         view.add_widget(content)
         view.open()
     # game not running anymore
     elif self.state in ['finished', 'submitting', 'submit_failed']:
         view = ModalView(size_hint=(None, None), size=(600, 400), auto_dismiss=False)
         content = Factory.STModalView(title='Spiel abbrechen', text='Das Ergebnis wurde noch nicht hochgeladen.\nWirklich abbrechen?', cb_yes=self.cancel_match)
         view.add_widget(content)
         view.open()
     else:
         self.manager.current = 'lounge'
示例#10
0
    def __init__(self, **kwargs):
        super(BackgroundScreenManager, self).__init__(**kwargs)
        self.transition = FadeTransition(duration=0.2)

        # setup hardware listener
        self.hwlistener = HardwareListener()
        self.hwlistener.register(self.receive_msg)

        # setup network status
        NetworkInfo.start_polling()

        # setup screens
        self.add_widget(MenuScreen(name='menu'))
        self.add_widget(RfidSetupScreen(name='rfid-setup'))
        self.add_widget(SettingsScreen(name='settings'))
        self.add_widget(LoungeScreen(name='lounge'))
        self.add_widget(MatchScreen(name='match'))

        SoundManager.play(Trigger.INTRO)
示例#11
0
    def handle_score_touch_up(self, event):
        if self.state not in ['running', 'finished']:
            return
        if self.score_touch:
            score_id = self.score_touch['id']
            dist = event.pos[1] - self.score_touch['startPos']
            if abs(dist) > settings.SCORE_SWIPE_DISTANCE:
                goal_up = dist > 0
                if goal_up:
                    swipe_allowed = GameData.add_goal(score_id)
                else:
                    swipe_allowed = GameData.revoke_goal(score_id)
                if swipe_allowed:
                    self.update_match()
                    HighlightOverlay(orig_obj=self.score_objects[score_id], parent=self).animate(font_size=500, color=(1, 1, 1, 0))
                    if goal_up:
                        SoundManager.play(Trigger.GOAL)
                    else:
                        SoundManager.play(Trigger.OFFSIDE)
                else:
                    self.denied()

            self.score_objects[score_id].color = (1, 1, 1, 1)
        self.score_touch = None
示例#12
0
 def handle_score_touch_up(self, event):
     if self.state not in ['running', 'finished']:
         return
     if self.score_touch:
         score_id = self.score_touch['id']
         dist = event.pos[1] - self.score_touch['startPos']
         if abs(dist) > self.MIN_SCORE_MOVE_PX:
             goal_up = dist > 0
             if goal_up:
                 swipe_allowed = GameData.add_goal(score_id)
             else:
                 swipe_allowed = GameData.revoke_goal(score_id)
             if swipe_allowed:
                 self.score = GameData.get_score()
                 HighlightOverlay(orig_obj=self.score_objects[score_id], parent=self).animate(font_size=500, color=(1, 1, 1, 0))
                 if goal_up:
                     SoundManager.play(Trigger.GOAL)
                 else:
                     SoundManager.play(Trigger.OFFSIDE)
             else:
                 # TODO: "Rote Karte"
                 pass
         self.score_objects[score_id].color = (1, 1, 1, 1)
     self.score_touch = None
示例#13
0
 def cancel_match(self):
     SoundManager.play(Trigger.MENU)
     self.manager.current = 'lounge'
示例#14
0
        except ValueError, e:
            # player is not in any team yet
            self.players[self.current_player_slot] = player
            self.highlight_player(self.current_player_slot)
            SoundManager.play(Trigger.PLAYER_JOINED, player)
        else:
            # only switch position if new player is not already in current slot
            if idx_already_set != self.current_player_slot:
                # switch slots
                self.players[idx_already_set] = self.players[self.current_player_slot]
                self.players[self.current_player_slot] = player
                self.highlight_player(self.current_player_slot)
                # check if target slot was empty
                if self.players[idx_already_set] == {}:
                    # player is moved to empty slot
                    SoundManager.play(Trigger.PLAYER_MOVED)
                else:
                    # player switches position with another player
                    SoundManager.play(Trigger.PLAYERS_SWITCHED)
                    self.highlight_player(idx_already_set)
        # advance to next player block
        self.current_player_slot = (self.current_player_slot + 1) % 4

    def process_message(self, msg):
        if msg['trigger'] == 'rfid':
            self.__handle_rfid(msg['data'])
        else:
            self.denied()

class STModalView(BoxLayout):
    title = StringProperty("")
示例#15
0
 def cancel_match(self):
     SoundManager.play(Trigger.MENU)
     self.manager.get_screen('lineup').set_switching_lock(False)
     self.manager.current = 'lineup'
示例#16
0
 def handle_kickoff(self, say_player):
     if not GameData.is_match_finished():
         delay = 1.0
         Clock.schedule_once(self.__animate_kickoff, delay)
         if say_player:
             SoundManager.play(Trigger.GAME_START, self.players[GameData.get_kickoff_team() * 2])
示例#17
0
 def denied(self):
     SoundManager.play(Trigger.DENIED)
示例#18
0
 def switch_players(self, slot_id_1, slot_id_2):
     self.players[slot_id_1], self.players[slot_id_2] = self.players[slot_id_2], self.players[slot_id_1]
     for player_id in [slot_id_1, slot_id_2]:
         self.highlight_player(player_id)
     SoundManager.play(Trigger.PLAYERS_SWITCHED)
示例#19
0
 def on_current_player(self, instance, value):
     self.ids.btnPlayer.iconText = self.current_player.get('name', u'---')
     SoundManager.play(Trigger.PLAYER_SELECTED, self.current_player)
     # enable "accept" button if current player is set and was not stored before
     self.ids.btnAccept.disabled = not (self.current_player.has_key('id') and self.current_player.get('id') != PlayerData.get_rfid_map().get(self.current_rfid))
示例#20
0
 def resume_match(self):
     SoundManager.play(Trigger.GAME_RESUME)
示例#21
0
 def say_connection_status(self):
     if self.connected:
         SoundManager.play(Trigger.HOTSPOT_CONNECT, self.player)
     else:
         SoundManager.play(Trigger.HOTSPOT_DISCONNECT)
示例#22
0
 def __init__(self, **kwargs):
     super(MenuScreen, self).__init__(**kwargs)
     # initial fade in
     self.fadeopacity = 0.0
     NetworkInfo.register(self.__update_network_info)
     SoundManager.play(Trigger.INTRO)