Module Player
[hide private]
[frames] | no frames]

Source Code for Module Player

  1  ##################################################################### 
  2  # -*- coding: iso-8859-1 -*-                                        # 
  3  #                                                                   # 
  4  # Frets on Fire                                                     # 
  5  # Copyright (C) 2006 Sami Kyöstilä                                  # 
  6  #                                                                   # 
  7  # This program is free software; you can redistribute it and/or     # 
  8  # modify it under the terms of the GNU General Public License       # 
  9  # as published by the Free Software Foundation; either version 2    # 
 10  # of the License, or (at your option) any later version.            # 
 11  #                                                                   # 
 12  # This program is distributed in the hope that it will be useful,   # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of    # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     # 
 15  # GNU General Public License for more details.                      # 
 16  #                                                                   # 
 17  # You should have received a copy of the GNU General Public License # 
 18  # along with this program; if not, write to the Free Software       # 
 19  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,        # 
 20  # MA  02110-1301, USA.                                              # 
 21  ##################################################################### 
 22   
 23  import pygame 
 24  import Config 
 25  import Song 
 26  from Language import _ 
 27   
 28  LEFT    = 0x1 
 29  RIGHT   = 0x2 
 30  UP      = 0x4 
 31  DOWN    = 0x8 
 32  ACTION1 = 0x10 
 33  ACTION2 = 0x20 
 34  KEY1    = 0x40 
 35  KEY2    = 0x80 
 36  KEY3    = 0x100 
 37  KEY4    = 0x200 
 38  KEY5    = 0x400 
 39  CANCEL  = 0x800 
 40   
 41  SCORE_MULTIPLIER = [0, 10, 20, 30] 
 42   
 43  # define configuration keys 
 44  Config.define("player", "key_left",     str, "K_LEFT",   text = _("Move left")) 
 45  Config.define("player", "key_right",    str, "K_RIGHT",  text = _("Move right")) 
 46  Config.define("player", "key_up",       str, "K_UP",     text = _("Move up")) 
 47  Config.define("player", "key_down",     str, "K_DOWN",   text = _("Move down")) 
 48  Config.define("player", "key_action1",  str, "K_RETURN", text = _("Pick")) 
 49  Config.define("player", "key_action2",  str, "K_RSHIFT", text = _("Secondary Pick")) 
 50  Config.define("player", "key_1",        str, "K_F1",     text = _("Fret #1")) 
 51  Config.define("player", "key_2",        str, "K_F2",     text = _("Fret #2")) 
 52  Config.define("player", "key_3",        str, "K_F3",     text = _("Fret #3")) 
 53  Config.define("player", "key_4",        str, "K_F4",     text = _("Fret #4")) 
 54  Config.define("player", "key_5",        str, "K_F5",     text = _("Fret #5")) 
 55  Config.define("player", "key_cancel",   str, "K_ESCAPE", text = _("Cancel")) 
 56  Config.define("player", "name",         str, "") 
 57  Config.define("player", "difficulty",   int, Song.EASY_DIFFICULTY) 
 58   
59 -class Controls:
60 - def __init__(self):
61 def keycode(name): 62 k = Config.get("player", name) 63 try: 64 return int(k) 65 except: 66 return getattr(pygame, k)
67 68 self.flags = 0 69 self.controlMapping = { 70 keycode("key_left"): LEFT, 71 keycode("key_right"): RIGHT, 72 keycode("key_up"): UP, 73 keycode("key_down"): DOWN, 74 keycode("key_action1"): ACTION1, 75 keycode("key_action2"): ACTION2, 76 keycode("key_1"): KEY1, 77 keycode("key_2"): KEY2, 78 keycode("key_3"): KEY3, 79 keycode("key_4"): KEY4, 80 keycode("key_5"): KEY5, 81 keycode("key_cancel"): CANCEL, 82 } 83 84 # Multiple key support 85 self.heldKeys = {}
86
87 - def getMapping(self, key):
88 return self.controlMapping.get(key)
89
90 - def keyPressed(self, key):
91 c = self.getMapping(key) 92 if c: 93 self.toggle(c, True) 94 if c in self.heldKeys and not key in self.heldKeys[c]: 95 self.heldKeys[c].append(key) 96 return c 97 return None
98
99 - def keyReleased(self, key):
100 c = self.getMapping(key) 101 if c: 102 if c in self.heldKeys: 103 if key in self.heldKeys[c]: 104 self.heldKeys[c].remove(key) 105 if not self.heldKeys[c]: 106 self.toggle(c, False) 107 return c 108 return None 109 self.toggle(c, False) 110 return c 111 return None
112
113 - def toggle(self, control, state):
114 prevState = self.flags 115 if state: 116 self.flags |= control 117 return not prevState & control 118 else: 119 self.flags &= ~control 120 return prevState & control
121
122 - def getState(self, control):
123 return self.flags & control
124
125 -class Player(object):
126 - def __init__(self, owner, name):
127 self.owner = owner 128 self.controls = Controls() 129 self.reset()
130
131 - def reset(self):
132 self.score = 0 133 self._streak = 0 134 self.notesHit = 0 135 self.longestStreak = 0 136 self.cheating = False
137
138 - def getName(self):
139 return Config.get("player", "name")
140
141 - def setName(self, name):
142 Config.set("player", "name", name)
143 144 name = property(getName, setName) 145
146 - def getStreak(self):
147 return self._streak
148
149 - def setStreak(self, value):
150 self._streak = value 151 self.longestStreak = max(self._streak, self.longestStreak)
152 153 streak = property(getStreak, setStreak) 154
155 - def getDifficulty(self):
156 return Song.difficulties.get(Config.get("player", "difficulty"))
157
158 - def setDifficulty(self, difficulty):
159 Config.set("player", "difficulty", difficulty.id)
160 161 difficulty = property(getDifficulty, setDifficulty) 162
163 - def addScore(self, score):
164 self.score += score * self.getScoreMultiplier()
165
166 - def getScoreMultiplier(self):
167 try: 168 return SCORE_MULTIPLIER.index((self.streak / 10) * 10) + 1 169 except ValueError: 170 return len(SCORE_MULTIPLIER)
171