def post(self): if not self.request.files: self.render("account/icon.html", error=151) return files = self.request.files["icon"] if len(files) == 0: self.render("account/icon.html", error=151) return if files[0]["content_type"].split("/")[1] not in self.image_types: self.render("account/icon.html", error=152) return image_type = files[0]["content_type"].split("/")[1] """TODO头像分片存储""" ext = os.path.splitext(files[0]["filename"])[1] filepath = "u_%s_%s%s" % (self.current_user["_id"], str(int(time.time())), ext) file_dir = "%s/%s" % (self.settings["icon_dir"], filepath) try: writer = open(file_dir, "wb") writer.write(files[0]["body"]) writer.flush() writer.close() except Exception, ex: Log.error(ex) self.render("account/icon.html", error=153) return
def process(self): try: self._clear_result() self._reduce_comments() self._reduce_favers() except Exception, ex: Log.error(ex, "mapreduce")
def post(self): if not self.request.files: self.render("account/icon.html", error=151) return files = self.request.files["icon"] if len(files) == 0: self.render("account/icon.html", error=151) return if files[0]["content_type"].split("/")[1] not in self.image_types: self.render("account/icon.html", error=152) return image_type = files[0]["content_type"].split("/")[1] """TODO头像分片存储""" ext = os.path.splitext(files[0]["filename"])[1] filepath = "u_%s_%s%s" % (self.current_user["_id"], str(int(time.time())), ext) file_dir = "%s/%s" % (self.settings["icon_dir"], filepath) try: writer = open(file_dir, "wb") writer.write(files[0]["body"]) writer.flush() writer.close() except Exception, ex: Log.error(ex) self.render("account/icon.html", error=153) return
def order_transform(length=3600): start_time = time.time() dump = transform_data() logger = Log() while True: try: dump.init() for i in range(10000000): time_dist = int(time.time() - start_time) if time_dist % 55 > 52: dump.get_1s() dump.get_1m() if time_dist % 295 > 292: dump.get_5m() if time_dist % 1795 > 1792: dump.get_30m() if time_dist % 3595 > 2592: dump.get_1h() time.sleep(1) except Exception as e: logger.error(str(e)) print(str(e))
def loadImgDrawing(self, target, name, fileName, textureSize=None): """ Load an SVG drawing synchronously. @param target: An object that will own the drawing @param name: The name of the attribute the drawing will be assigned to @param fileName: The name of the file in the data directory @param textureSize: Either None or (x, y), in which case the file will be rendered to an x by y texture @return: L{ImgDrawing} instance """ imgDrawing = self.getImgDrawing(fileName) if not imgDrawing: if target and name: setattr(target, name, None) else: Log.error("Image not found: " + fileName) return None if target: drawing = self.resource.load(target, name, lambda: imgDrawing, synch=True) else: drawing = imgDrawing return drawing
def getOptions(self, section, option): """ Read the preset options of a configuration key. @param section: Section name @param option: Option name @return: Tuple of Key list and Values list """ try: options = self.prototype[section][option].options.values() keys = self.prototype[section][option].options.keys() type = self.prototype[section][option].type except KeyError: Log.error("Config key %s.%s not defined while reading %s." % (section, option, self.fileName)) raise optionList = [] if type != None: for i in range(len(options)): value = _convertValue(keys[i], type) optionList.append(value) return optionList, options
def loadVideo(self, libraryName, songName): vidSource = None if self.songStage == 1: songBackgroundVideoPath = os.path.join(libraryName, songName, "background.ogv") if os.path.isfile(songBackgroundVideoPath): vidSource = songBackgroundVideoPath loop = False else: Log.warn("Video not found: %s" % songBackgroundVideoPath) if vidSource is None: vidSource = os.path.join(self.pathfull, "default.ogv") loop = True if not os.path.isfile(vidSource): Log.warn("Video not found: %s" % vidSource) Log.warn("Falling back to default stage mode.") self.mode = 1 # Fallback return try: # Catches invalid video files or unsupported formats Log.debug("Attempting to load video: %s" % vidSource) self.vidPlayer = VideoLayer(self.engine, vidSource, mute=True, loop=loop) self.engine.view.pushLayer(self.vidPlayer) except (IOError, VideoPlayerError): self.mode = 1 Log.error( "Failed to load song video (falling back to default stage mode):" )
def post(self): user_id = self.get_argument("uid", None) title = self.get_argument("title", "") link = self.get_argument("link", "") profile = self.get_argument("profile", True) tags = self.get_argument("tags", "").split(" ") description = self.get_argument("description", "") image_path = self.get_argument("Filedata.path", None) image_name = self.get_argument("Filedata.name", None) image_md5 = self.get_argument("Filedata.md5", None) image_size = self.get_argument("Filedata.size", None) categories = self.get_argument("categories", None) if not user_id: return user_id = int(user_id) if not image_path: return name, ext = os.path.splitext(image_name) response = upload_crop(image_path, ext) if not response["status"]: return source_path = response["source_path"].split("/upload/")[1] thumb_path = response["thumb_path"].split("/upload/")[1] middle_path = response["middle_path"].split("/upload/")[1] width = response["width"] height = response["height"] entry = self.entry_dal.template() entry["user_id"] = user_id entry["user"] = self.entry_dal.dbref("users", user_id) entry["title"] = title entry["link"] = link entry["profile"] = profile entry["tags"] = tags entry["description"] = description entry["source"] = source_path entry["thumb"] = thumb_path entry["middle"] = middle_path entry["height"] = height entry["width"] = width entry["md5"] = image_md5 entry["size"] = image_size if categories: entry["categories"] = [int(item.strip()) for item in categories.split(",") if item.strip()] if title: title = title.encode("utf-8", "ignore") keywords = [seg for seg in seg_txt_search(title) if len(seg) > 1] if len(tags) and tags[0]: keywords = keywords + tags entry["_keywords"] = keywords try: self.entry_dal.save(entry) self.user_dal.update_entries_count(user_id) except Exception, ex: Log.error(ex)
def loadVideo(self, libraryName, songName): vidSource = None if self.songStage == 1: songBackgroundVideoPath = os.path.join(libraryName, songName, "background.ogv") if os.path.isfile(songBackgroundVideoPath): vidSource = songBackgroundVideoPath loop = False else: Log.warn("Video not found: %s" % songBackgroundVideoPath) if vidSource is None: vidSource = os.path.join(self.pathfull, "default.ogv") loop = True if not os.path.isfile(vidSource): Log.warn("Video not found: %s" % vidSource) Log.warn("Falling back to default stage mode.") self.mode = 1 # Fallback return try: # Catches invalid video files or unsupported formats Log.debug("Attempting to load video: %s" % vidSource) self.vidPlayer = VideoLayer(self.engine, vidSource, mute = True, loop = loop) self.engine.view.pushLayer(self.vidPlayer) except (IOError, VideoPlayerError): self.mode = 1 Log.error("Failed to load song video (falling back to default stage mode):")
def rename(): try: Log.info("rename pics begins") actors = actorDAO.getAllActorsFully() for actor in actors: renameActor(actor["name"], actor["short_name"]) except Exception as err: Log.error("rename pics stopped: ") Log.exception(err)
def __init__(self, name = None, target = GL_TEXTURE_2D, useMipmaps = True): # Delete all pending textures try: func, args = cleanupQueue[0] del cleanupQueue[0] func(*args) except IndexError: pass except Exception, e: #MFH - to catch "did you call glewInit?" crashes Log.error("Texture.py texture deletion exception: %s" % e)
def process(self): try: self._clear_result() self._reduce_entries() self._reduce_likes() self._reduce_followers() self._reduce_friends() except Exception, ex: Log.error(ex, "mapreduce") return
def downloadPicsAllActors(): try: Log.info("download pics begins") actors = actorDAO.getAllActorsFully() count = 0 for actor in actors: count = count + downloadActor(actor["short_name"]) if count > 1000: break except Exception as err: Log.error("download pics stopped: ") Log.exception(err)
def keyPressed(self, key, unicode): if key == pygame.K_LALT: self.altStatus = True elif key == pygame.K_RETURN and self.altStatus: if not self.engine.toggleFullscreen(): Log.error("Unable to toggle fullscreen mode.") return True elif key == pygame.K_d and self.altStatus: self.engine.setDebugModeEnabled(not self.engine.isDebugModeEnabled()) return True elif key == pygame.K_g and self.altStatus and self.engine.isDebugModeEnabled(): self.engine.debugLayer.gcDump() return True
def getTipText(self, section, option): """ Return the tip text for a configuration key. @param section: Section name @param option: Option name @return: Tip Text String """ try: text = self.prototype[section][option].tipText except KeyError: Log.error("Config key %s.%s not defined while reading %s." % (section, option, self.fileName)) raise return text
def getDefault(self, section, option): """ Read the default value of a configuration key. @param section: Section name @param option: Option name @return: Key value """ try: type = self.prototype[section][option].type default = self.prototype[section][option].default except KeyError: Log.error("Config key %s.%s not defined while reading %s." % (section, option, self.fileName)) raise value = _convertValue(default, type) return value
def remove(self): """ Remove component with given name. Returns ComponentLog if the component successfully removed. """ Log.debug("Component.remove(): removing") name = self.c_id exe_hash = self.c_exe_hash super().remove() import os try: os.remove(self._component_file) except IOError: Log.error("Component.remove(): unable to remove component file.") return False try: cl = ComponentLog.add(name, exe_hash) except InstanceAlreadyExists as e: cl = e.original() return cl
def remove(self): """ Remove component with given name. Returns ComponentLog if the component successfully removed. """ Log.debug("Component.remove(): removing") name = self.c_id exe_hash = self.c_exe_hash super().remove() import os try: os.remove(self._component_file) except IOError: Log.error("Component.remove(): unable to remove component file.") return False try: cl = ComponentLog.add(name, exe_hash) except InstanceAlreadyExists as e: cl = e.original() return cl
def __init__(self, context, ImgData): self.ImgData = None self.texture = None self.context = context self.cache = None self.filename = ImgData # Detect the type of data passed in if isinstance(ImgData, file): self.ImgData = ImgData.read() elif isinstance(ImgData, basestring): self.texture = Texture(ImgData) elif isinstance(ImgData, Image.Image): #stump: let a PIL image be passed in self.texture = Texture() self.texture.loadImage(ImgData) # Make sure we have a valid texture if not self.texture: if isinstance(ImgData, basestring): e = "Unable to load texture for %s." % ImgData else: e = "Unable to load texture for SVG file." Log.error(e) raise RuntimeError(e) self.pixelSize = self.texture.pixelSize #the size of the image in pixels (from texture) self.position = [0.0, 0.0] #position of the image in the viewport self.scale = [1.0, 1.0] #percentage scaling self.angle = 0 #angle of rotation (degrees) self.color = (1.0, 1.0, 1.0, 1.0) #glColor rgba self.rect = (0, 1, 0, 1) #texture mapping coordinates self.shift = -.5 #horizontal alignment self.vshift = -.5 #vertical alignment self.path = self.texture.name #path of the image file self.texArray = np.zeros((4, 2), dtype=np.float32) self.createTex()
def __init__(self, context, ImgData): self.ImgData = None self.texture = None self.context = context self.cache = None self.filename = ImgData # Detect the type of data passed in if isinstance(ImgData, file): self.ImgData = ImgData.read() elif isinstance(ImgData, basestring): self.texture = Texture(ImgData) elif isinstance(ImgData, Image.Image): #stump: let a PIL image be passed in self.texture = Texture() self.texture.loadImage(ImgData) # Make sure we have a valid texture if not self.texture: if isinstance(ImgData, basestring): e = "Unable to load texture for %s." % ImgData else: e = "Unable to load texture for SVG file." Log.error(e) raise RuntimeError(e) self.pixelSize = self.texture.pixelSize #the size of the image in pixels (from texture) self.position = [0.0,0.0] #position of the image in the viewport self.scale = [1.0,1.0] #percentage scaling self.angle = 0 #angle of rotation (degrees) self.color = (1.0,1.0,1.0,1.0) #glColor rgba self.rect = (0,1,0,1) #texture mapping coordinates self.shift = -.5 #horizontal alignment self.vshift = -.5 #vertical alignment self.path = self.texture.name #path of the image file self.texArray = np.zeros((4,2), dtype=np.float32) self.createTex()
def set(self, section, option, value): """ Set the value of a configuration key. @param section: Section name @param option: Option name @param value: Value name """ try: prototype[section][option] except KeyError: Log.error("Config key %s.%s not defined while writing %s." % (section, option, self.fileName)) raise if not self.config.has_section(section): self.config.add_section(section) self.config.set(section, option, utf8(value)) f = open(self.fileName, "w") self.config.write(f, self.type) f.close()
def loadImgDrawing(self, target, name, fileName, textureSize=None): """ Load an SVG drawing synchronously. @param target: An object that will own the drawing @param name: The name of the attribute the drawing will be assigned to @param fileName: The name of the file in the data directory @param textureSize: Either None or (x, y), in which case the file will be rendered to an x by y texture @return: L{ImgDrawing} instance """ imgDrawing = self.getImgDrawing(fileName) if not imgDrawing: if target and name: setattr(target, name, None) else: Log.error("Image not found: " + fileName) return None if target: drawing = self.resource.load(target, name, lambda: imgDrawing, synch=True) else: drawing = imgDrawing return drawing
def post(self): user_id = self.get_argument("uid", None) title = self.get_argument("title", "") link = self.get_argument("link", "") profile = self.get_argument("profile", True) tags = self.get_argument("tags", "").split(" ") description = self.get_argument("description", "") image_path = self.get_argument("Filedata.path", None) image_name = self.get_argument("Filedata.name", None) image_md5 = self.get_argument("Filedata.md5", None) image_size = self.get_argument("Filedata.size", None) categories = self.get_argument("categories", None) if not user_id: return user_id = int(user_id) if not image_path: return name, ext = os.path.splitext(image_name) response = upload_crop(image_path, ext) if not response["status"]: return source_path = response["source_path"].split("/upload/")[1] thumb_path = response["thumb_path"].split("/upload/")[1] middle_path = response["middle_path"].split("/upload/")[1] width = response["width"] height = response["height"] entry = self.entry_dal.template() entry["user_id"] = user_id entry["user"] = self.entry_dal.dbref("users", user_id) entry["title"] = title entry["link"] = link entry["profile"] = profile entry["tags"] = tags entry["description"] = description entry["source"] = source_path entry["thumb"] = thumb_path entry["middle"] = middle_path entry["height"] = height entry["width"] = width entry["md5"] = image_md5 entry["size"] = image_size if categories: entry["categories"] = [ int(item.strip()) for item in categories.split(",") if item.strip() ] if title: title = title.encode("utf-8", "ignore") keywords = [seg for seg in seg_txt_search(title) if len(seg) > 1] if len(tags) and tags[0]: keywords = keywords + tags entry["_keywords"] = keywords try: self.entry_dal.save(entry) self.user_dal.update_entries_count(user_id) except Exception, ex: Log.error(ex)
def upload_crop(image_path, ext): response = {} pin_width = 0 pin_height = 0 if not os.path.exists(image_path): response["status"] = True response["message"] = "Not found: %s" % image_path return response image_ext = ext[1:].upper() if image_ext == "JPG": image_ext = "JPEG" store_dir = _get_image_dir(UPLOAD_DIR) base_name = get_uuid() source_name = "%s_source%s" % (base_name, ext) source_path = os.path.join(store_dir, source_name) thumb_name = "%s_thumb%s" % (base_name, ext) thumb_path = os.path.join(store_dir, thumb_name) middle_name = "%s_mid%s" % (base_name, ext) middle_path = os.path.join(store_dir, middle_name) # source try: os.rename(image_path, source_path) except Exception: Log.error("Save source error: %s" % image_path) response["status"] = False response["message"] = "Save source error: %s" % image_path return response img = Image.open(source_path) # middle dest_width = MIDDLE_WIDTH width, height = img.size if width < dest_width or height < dest_width: response["status"] = False response["message"] = "Image size too small" return response dest_height = int(float(dest_width) * float(height) / float(width)) img_mid = img.resize((dest_width, dest_height), Image.ANTIALIAS) img_mid.save(middle_path, image_ext, quality=150) pin_width, pin_height = (dest_width, dest_height) # thumb dest_width, dest_height = THUMB_SIZE left, upper, right, lowwer = 0, 0, dest_width, dest_height crop_width, crop_height = dest_width, dest_height if float(dest_width) / float(dest_height) < float(width) / float(height): crop_height = height crop_width = int(height * (float(dest_width) / float(dest_height))) left = int((width - crop_width) / 2) right = left + crop_width lowwer = height else: crop_width = width crop_height = int(width * (float(dest_height) / float(dest_width))) upper = int((height - crop_height) / 2) lowwer = upper + crop_height right = width box = (left, upper, right, lowwer) img_thumb = img.crop(box) img_thumb = img_thumb.resize((dest_width, dest_height), Image.ANTIALIAS) img_thumb.save(thumb_path, image_ext, quality=150) response["status"] = True response["source_path"] = source_path response["thumb_path"] = thumb_path response["middle_path"] = middle_path response["height"] = pin_height response["width"] = pin_width return response
def __init__(self, engine, songName = None): self.engine = engine self.time = 0.0 self.offset = 0.5 # akedrou - this seems to fix the delay issue, but I'm not sure why. Return here! self.speedDiv = 20000.0 self.speedDir = 1.0 self.doneList = [] self.themename = Config.get("coffee", "themename") nf = self.engine.data.font ns = 0.002 bs = 0.001 hs = 0.003 c1 = (1, 1, .5, 1) c2 = (1, .75, 0, 1) self.text_size = nf.getLineSpacing(scale = hs) #akedrou - Translatable Strings: self.bank = {} self.bank['intro'] = [_("Frets on Fire X is a progression of MFH-mod,"), _("which was built on Alarian's mod,"), _("which was built on UltimateCoffee's Ultimate mod,"), _("which was built on RogueF's RF_mod 4.15,"), _("which was, of course, built on Frets on Fire 1.2.451,"), _("which was created by Unreal Voodoo")] self.bank['noOrder'] = [_("No particular order")] self.bank['accessOrder']= [_("In order of project commit access")] self.bank['coders'] = [_("Active Coders")] self.bank['otherCoding']= [_("Programming")] self.bank['graphics'] = [_("Graphic Design")] self.bank['3d'] = [_("3D Textures")] self.bank['logo'] = [_("FoFiX Logo Design")] self.bank['hollowmind'] = [_("Hollowmind Necks")] self.bank['themes'] = [_("Included Themes")] self.bank['shaders'] = [_("Shaders")] self.bank['sounds'] = [_("Sound Design")] self.bank['translators']= [_("Translators")] self.bank['honorary'] = [_("Honorary Credits")] self.bank['codeHonor'] = [_("Without whom this game would not exist")] self.bank['giveThanks'] = [_("Special Thanks to")] self.bank['community'] = [_("nwru and all of the community at fretsonfire.net")] self.bank['other'] = [_("Other Contributors:")] self.bank['tutorial'] = [_("Jurgen FoF tutorial inspired by adam02"), _("Drum test song tutorial by Heka"), _("Drum Rolls practice tutorial by venom426")] self.bank['disclaimer'] = [_("If you have contributed to this game and are not credited,"), _("please let us know what and when you contributed.")] self.bank['thanks'] = [_("Thank you for your contribution.")] self.bank['oversight'] = [_("Please keep in mind that it is not easy to trace down and"), _("credit every single person who contributed; if your name is"), _("not included, it was not meant to slight you."), _("It was an oversight.")] # evilynux - Theme strings self.bank['themeCreators'] = [_("%s theme credits:") % self.themename] self.bank['themeThanks'] = [_("%s theme specific thanks:") % self.themename] # Languages self.bank['french'] = [_("French")] self.bank['french90'] = [_("French (reform 1990)")] self.bank['german'] = [_("German")] self.bank['italian'] = [_("Italian")] self.bank['piglatin'] = [_("Pig Latin")] self.bank['portuguese-b'] = [_("Portuguese (Brazilian)")] self.bank['russian'] = [_("Russian")] self.bank['spanish'] = [_("Spanish")] self.bank['swedish'] = [_("Swedish")] self.videoLayer = False self.background = None vidSource = os.path.join(Version.dataPath(), 'themes', self.themename, \ 'menu', 'credits.ogv') if os.path.isfile(vidSource): try: self.vidPlayer = VideoLayer(self.engine, vidSource, mute = True, loop = True) except (IOError, VideoPlayerError): Log.error('Error loading credits video:') else: self.vidPlayer.play() self.engine.view.pushLayer(self.vidPlayer) self.videoLayer = True if not self.videoLayer and \ not self.engine.loadImgDrawing(self, 'background', os.path.join('themes', self.themename, 'menu', 'credits.png')): self.background = None if not self.engine.loadImgDrawing(self, 'topLayer', os.path.join('themes', self.themename, 'menu', 'creditstop.png')): self.topLayer = None space = Text(nf, hs, c1, "center", " ") self.credits = [ Picture(self.engine, "fofix_logo.png", .10), Text(nf, ns, c1, "center", "%s" % Version.version()), space] # evilynux: Main FoFiX credits (taken from CREDITS). self.parseText("CREDITS") self.credits.extend([space, space, space]) # evilynux: Theme credits (taken from data/themes/<theme name>/CREDITS). self.parseText(os.path.join('data', 'themes', self.themename, 'CREDITS')) self.credits.extend( [ space, space, Text(nf, ns, c1, "left", _("Made with:")), Text(nf, ns, c2, "right", "Python " + sys.version.split(' ')[0]), #stump: the version that's actually in use Text(nf, bs, c2, "right", "http://www.python.org"), space, Text(nf, ns, c2, "right", "PyGame " + pygame.version.ver.replace('release', '')), #stump: the version that's actually in use Text(nf, bs, c2, "right", "http://www.pygame.org"), space, Text(nf, ns, c2, "right", "PyOpenGL " + OpenGL.__version__), #evilynux: the version that's actually in use Text(nf, bs, c2, "right", "http://pyopengl.sourceforge.net"), space, Text(nf, ns, c2, "right", "Illusoft Collada module 0.3.159"), Text(nf, bs, c2, "right", "http://colladablender.illusoft.com"), space, Text(nf, ns, c2, "right", "MXM Python Midi Package 0.1.4"), Text(nf, bs, c2, "right", "http://www.mxm.dk/products/public/pythonmidi"), space, space, Text(nf, bs, c1, "center", _("Source Code available under the GNU General Public License")), Text(nf, bs, c2, "center", "http://code.google.com/p/fofix"), space, space, Text(nf, bs, c1, "center", _("Copyright 2006, 2007 by Unreal Voodoo")), Text(nf, bs, c1, "center", _("Copyright 2008-2013 by Team FoFiX")), space, space ])
class Spider(object): ''' Spider ''' def __init__(self, name='Spider', url_list_file='./urls', output_path='./output', interval=1, timeout=1, silent=False): ''' @name: string, 定向爬虫的名字 @url_list_file: string, 种子文件 @output_path: string, 输出文件路径 @interval: int, 爬取间隔 @timeout: int, 请求超时 @silent: bool, 是否为静默打印 ''' # 设置保存爬取页面的coolie值(非必要) cj = cookielib.LWPCookieJar() cookie_support = urllib2.HTTPCookieProcessor(cj) self.opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) urllib2.install_opener(self.opener) # 设置请求头部(非必要) self.headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36' } self.url_list_file = url_list_file self.output_path = output_path self.interval = interval self.timeout = timeout level = 'INFO' if silent else 'DEBUG' self.log = Log(name, level, 'spider.log', 'a') # 定义一个多线程共享队列,存放需要加载的url self.queue = Queue() # 存放非重复url集合 self.url_set = set() # 定义多线程访问锁 self.lock = Lock() # 匹配根域名 self.base_pattern = r'^(https?:\/\/[a-z0-9\-\.]+)[\/\?]?' if not os.path.exists(self.url_list_file): # 种子文件不存在 self.log.error('%s dose not exist. Exit program !' % (self.url_list_file)) os._exit(0) if not os.path.exists(self.output_path): # 输出文件目录不存在 self.log.info('Create new directory %s' % (self.output_path)) os.makedirs(self.output_path) ''' def __decodeHtml__(self, html): """ Decode Html @html: string, 原生html内容 return: 返回解码后的html内容 """ try: encoding = chardet.detect(html)['encoding'] if encoding == 'GB2312': encoding = 'GBK' else: encoding = 'utf-8' return html.decode(encoding, 'ignore') except Exception, e: self.log.error("Decode error: %s.", e.message) return None ''' def __request__(self, url, threadID=-1, data=None): ''' Request URL @url: string, 指定抓取的url @data: object, POST方法发送的数据 ''' try: req = urllib2.Request(url, data, self.headers) res = urllib2.urlopen(req, timeout=self.timeout).read() self.log.debug('Thread-%d Get %s' % (threadID, url)) return res except Exception, e: self.log.error('Thread-%d in __requests__: %s %s' % (threadID, e.message, url)) return None
def __init__(self, engine, songName=None): self.engine = engine self.time = 0.0 self.offset = 0.5 # akedrou - this seems to fix the delay issue, but I'm not sure why. Return here! self.speedDiv = 20000.0 self.speedDir = 1.0 self.doneList = [] self.themename = Config.get("coffee", "themename") nf = self.engine.data.font ns = 0.002 bs = 0.001 hs = 0.003 c1 = (1, 1, 0.5, 1) c2 = (1, 0.75, 0, 1) self.text_size = nf.getLineSpacing(scale=hs) # akedrou - Translatable Strings: self.bank = {} self.bank["intro"] = [ _("Frets on Fire X is a progression of MFH-mod,"), _("which was built on Alarian's mod,"), _("which was built on UltimateCoffee's Ultimate mod,"), _("which was built on RogueF's RF_mod 4.15,"), _("which was, of course, built on Frets on Fire 1.2.451,"), _("which was created by Unreal Voodoo"), ] self.bank["noOrder"] = [_("No particular order")] self.bank["accessOrder"] = [_("In order of project commit access")] self.bank["coders"] = [_("Active Coders")] self.bank["otherCoding"] = [_("Programming")] self.bank["graphics"] = [_("Graphic Design")] self.bank["3d"] = [_("3D Textures")] self.bank["logo"] = [_("FoFiX Logo Design")] self.bank["hollowmind"] = [_("Hollowmind Necks")] self.bank["themes"] = [_("Included Themes")] self.bank["shaders"] = [_("Shaders")] self.bank["sounds"] = [_("Sound Design")] self.bank["translators"] = [_("Translators")] self.bank["honorary"] = [_("Honorary Credits")] self.bank["codeHonor"] = [_("Without whom this game would not exist")] self.bank["giveThanks"] = [_("Special Thanks to")] self.bank["community"] = [_("nwru and all of the community at fretsonfire.net")] self.bank["other"] = [_("Other Contributors:")] self.bank["tutorial"] = [ _("Jurgen FoF tutorial inspired by adam02"), _("Drum test song tutorial by Heka"), _("Drum Rolls practice tutorial by venom426"), ] self.bank["disclaimer"] = [ _("If you have contributed to this game and are not credited,"), _("please let us know what and when you contributed."), ] self.bank["thanks"] = [_("Thank you for your contribution.")] self.bank["oversight"] = [ _("Please keep in mind that it is not easy to trace down and"), _("credit every single person who contributed; if your name is"), _("not included, it was not meant to slight you."), _("It was an oversight."), ] # evilynux - Theme strings self.bank["themeCreators"] = [_("%s theme credits:") % self.themename] self.bank["themeThanks"] = [_("%s theme specific thanks:") % self.themename] # Languages self.bank["french"] = [_("French")] self.bank["french90"] = [_("French (reform 1990)")] self.bank["german"] = [_("German")] self.bank["italian"] = [_("Italian")] self.bank["piglatin"] = [_("Pig Latin")] self.bank["portuguese-b"] = [_("Portuguese (Brazilian)")] self.bank["russian"] = [_("Russian")] self.bank["spanish"] = [_("Spanish")] self.bank["swedish"] = [_("Swedish")] self.videoLayer = False self.background = None vidSource = os.path.join(Version.dataPath(), "themes", self.themename, "menu", "credits.ogv") if os.path.isfile(vidSource): try: self.vidPlayer = VideoLayer(self.engine, vidSource, mute=True, loop=True) except (IOError, VideoPlayerError): Log.error("Error loading credits video:") else: self.vidPlayer.play() self.engine.view.pushLayer(self.vidPlayer) self.videoLayer = True if not self.videoLayer and not self.engine.loadImgDrawing( self, "background", os.path.join("themes", self.themename, "menu", "credits.png") ): self.background = None if not self.engine.loadImgDrawing( self, "topLayer", os.path.join("themes", self.themename, "menu", "creditstop.png") ): self.topLayer = None space = Text(nf, hs, c1, "center", " ") self.credits = [ Picture(self.engine, "fofix_logo.png", 0.10), Text(nf, ns, c1, "center", "%s" % Version.version()), space, ] # evilynux: Main FoFiX credits (taken from CREDITS). self.parseText("CREDITS") self.credits.extend([space, space, space]) # evilynux: Theme credits (taken from data/themes/<theme name>/CREDITS). self.parseText(os.path.join("data", "themes", self.themename, "CREDITS")) self.credits.extend( [ space, space, Text(nf, ns, c1, "left", _("Made with:")), Text( nf, ns, c2, "right", "Python " + sys.version.split(" ")[0] ), # stump: the version that's actually in use Text(nf, bs, c2, "right", "http://www.python.org"), space, Text( nf, ns, c2, "right", "PyGame " + pygame.version.ver.replace("release", "") ), # stump: the version that's actually in use Text(nf, bs, c2, "right", "http://www.pygame.org"), space, Text( nf, ns, c2, "right", "PyOpenGL " + OpenGL.__version__ ), # evilynux: the version that's actually in use Text(nf, bs, c2, "right", "http://pyopengl.sourceforge.net"), space, Text(nf, ns, c2, "right", "Illusoft Collada module 0.3.159"), Text(nf, bs, c2, "right", "http://colladablender.illusoft.com"), space, Text(nf, ns, c2, "right", "MXM Python Midi Package 0.1.4"), Text(nf, bs, c2, "right", "http://www.mxm.dk/products/public/pythonmidi"), space, space, Text(nf, bs, c1, "center", _("Source Code available under the GNU General Public License")), Text(nf, bs, c2, "center", "http://code.google.com/p/fofix"), space, space, Text(nf, bs, c1, "center", _("Copyright 2006, 2007 by Unreal Voodoo")), Text(nf, bs, c1, "center", _("Copyright 2008-2013 by Team FoFiX")), space, space, ] )
def __init__(self, engine): self.engine = engine self.logClassInits = Config.get("game", "log_class_inits") if self.logClassInits == 1: Log.debug("MainMenu class init (MainMenu.py)...") self.time = 0.0 self.nextLayer = None self.visibility = 0.0 self.active = False self.showStartupMessages = False self.gfxVersionTag = Config.get("game", "gfx_version_tag") self.chosenNeck = Config.get("game", "default_neck") exists = 0 if engine.loadImgDrawing(self, "ok", os.path.join("necks",self.chosenNeck+".png")): exists = 1 elif engine.loadImgDrawing(self, "ok", os.path.join("necks","Neck_"+self.chosenNeck+".png")): exists = 1 #MFH - fallback logic now supports a couple valid default neck filenames #MFH - check for Neck_1 if exists == 0: if engine.loadImgDrawing(self, "ok", os.path.join("necks","Neck_1.png")): Config.set("game", "default_neck", "1") Log.warn("Default chosen neck not valid; fallback Neck_1.png forced.") exists = 1 #MFH - check for defaultneck if exists == 0: if engine.loadImgDrawing(self, "ok", os.path.join("necks","defaultneck.png")): Log.warn("Default chosen neck not valid; fallback defaultneck.png forced.") Config.set("game", "default_neck", "defaultneck") exists = 1 else: Log.error("Default chosen neck not valid; fallbacks Neck_1.png and defaultneck.png also not valid!") #Get theme self.theme = self.engine.data.theme self.themeCoOp = self.engine.data.themeCoOp self.themename = self.engine.data.themeLabel self.useSoloMenu = self.engine.theme.use_solo_submenu allowMic = True self.menux = self.engine.theme.menuPos[0] self.menuy = self.engine.theme.menuPos[1] self.rbmenu = self.engine.theme.menuRB #MFH self.main_menu_scale = self.engine.theme.main_menu_scaleVar self.main_menu_vspacing = self.engine.theme.main_menu_vspacingVar if not self.engine.loadImgDrawing(self, "background", os.path.join("themes",self.themename,"menu","mainbg.png")): self.background = None self.engine.loadImgDrawing(self, "BGText", os.path.join("themes",self.themename,"menu","maintext.png")) self.engine.loadImgDrawing(self, "optionsBG", os.path.join("themes",self.themename,"menu","optionsbg.png")) self.engine.loadImgDrawing(self, "optionsPanel", os.path.join("themes",self.themename,"menu","optionspanel.png")) #racer: added version tag if self.gfxVersionTag or self.engine.theme.versiontag == True: if not self.engine.loadImgDrawing(self, "version", os.path.join("themes",self.themename,"menu","versiontag.png")): if not self.engine.loadImgDrawing(self, "version", "versiontag.png"): #falls back on default versiontag.png in data\ folder self.version = None else: self.version = None #myfingershurt: random main menu music function, menu.ogg and menuXX.ogg (any filename with "menu" as the first 4 letters) self.files = None filepath = self.engine.getPath(os.path.join("themes",self.themename,"sounds")) if os.path.isdir(filepath): self.files = [] allfiles = os.listdir(filepath) for name in allfiles: if os.path.splitext(name)[1] == ".ogg": if string.find(name,"menu") > -1: self.files.append(name) if self.files: i = random.randint(0,len(self.files)-1) filename = self.files[i] sound = os.path.join("themes",self.themename,"sounds",filename) self.menumusic = True engine.menuMusic = True self.song = Audio.Music(self.engine.resource.fileName(sound)) self.song.setVolume(self.engine.config.get("audio", "menu_volume")) self.song.play(0) #no loop else: self.menumusic = False self.opt_text_color = self.engine.theme.opt_text_colorVar self.opt_selected_color = self.engine.theme.opt_selected_colorVar trainingMenu = [ (_("Tutorials"), self.showTutorial), (_("Practice"), lambda: self.newLocalGame(mode1p = 1)), ] self.opt_bkg_size = [float(i) for i in self.engine.theme.opt_bkg_size] self.opt_text_color = self.engine.theme.hexToColor(self.engine.theme.opt_text_colorVar) self.opt_selected_color = self.engine.theme.hexToColor(self.engine.theme.opt_selected_colorVar) if self.BGText: strCareer = "" strQuickplay = "" strSolo = "" strMultiplayer = "" strTraining = "" strSettings = "" strQuit = "" else: strCareer = "Career" strQuickplay = "Quickplay" strSolo = "Solo" strMultiplayer = "Multiplayer" strTraining = "Training" strSettings = "Settings" strQuit = "Quit" multPlayerMenu = [ (_("Face-Off"), lambda: self.newLocalGame(players = 2, maxplayers = 4)), (_("Pro Face-Off"), lambda: self.newLocalGame(players = 2, mode2p = 1, maxplayers = 4)), (_("Party Mode"), lambda: self.newLocalGame( mode2p = 2)), (_("FoFiX Co-Op"), lambda: self.newLocalGame(players = 2, mode2p = 3, maxplayers = 4, allowMic = allowMic)), (_("RB Co-Op"), lambda: self.newLocalGame(players = 2, mode2p = 4, maxplayers = 4, allowMic = allowMic)), (_("GH Co-Op"), lambda: self.newLocalGame(players = 2, mode2p = 5, maxplayers = 4)), (_("GH Battle"), lambda: self.newLocalGame(players = 2, mode2p = 6, allowDrum = False)), #akedrou- so you can block drums ] if not self.useSoloMenu: mainMenu = [ (strCareer, lambda: self.newLocalGame(mode1p = 2, allowMic = allowMic)), (strQuickplay, lambda: self.newLocalGame(allowMic = allowMic)), ((strMultiplayer,"multiplayer"), multPlayerMenu), ((strTraining,"training"), trainingMenu), ((strSettings,"settings"), self.settingsMenu), (strQuit, self.quit), ] else: soloMenu = [ (_("Solo Tour"), lambda: self.newLocalGame(mode1p = 2, allowMic = allowMic)), (_("Quickplay"), lambda: self.newLocalGame(allowMic = allowMic)), ] mainMenu = [ ((strSolo,"solo"), soloMenu), ((strMultiplayer,"multiplayer"), multPlayerMenu), ((strTraining,"training"), trainingMenu), ((strSettings,"settings"), self.settingsMenu), (strQuit, self.quit), ] w, h, = self.engine.view.geometry[2:4] self.menu = Menu(self.engine, mainMenu, onClose = lambda: self.engine.view.popLayer(self), pos = (self.menux, .75-(.75*self.menuy))) engine.mainMenu = self #Points engine.mainMenu to the one and only MainMenu object instance ## whether the main menu has come into view at least once self.shownOnce = False
##Alarian: Get unlimited themes by foldername themepath = os.path.join(Version.dataPath(), "themes") themes = [] defaultTheme = None #myfingershurt allthemes = os.listdir(themepath) for name in allthemes: if os.path.exists(os.path.join(themepath,name,"notes","notes.png")): themes.append(name) if name == "MegaLight V4": defaultTheme = name i = len(themes) if i == 0: if os.name == 'posix': Log.error("No valid theme found!\n"+\ "Make sure theme files are properly cased "+\ "e.g. notes.png works, Notes.png doesn't\n") else: Log.error("No valid theme found!") sys.exit(1); if defaultTheme is None: defaultTheme = themes[0] #myfingershurt #myfingershurt: default theme must be an existing one! Config.define("coffee", "themename", str, defaultTheme, text = _("Theme"), options = dict([(str(themes[n]),themes[n]) for n in range(0, i)]), tipText = _("Sets the overall graphical feel of the game. You can find and download many more at fretsonfire.net")) ##Alarian: End Get unlimited themes by foldername Player.loadControls()
def set(self, dir): """Do all shader setup. dir = directory to load shaders from """ #stump: check whether all needed extensions are actually supported if not glInitShaderObjectsARB(): Log.warn('OpenGL extension ARB_shader_objects not supported - shaders disabled') return if not glInitVertexShaderARB(): Log.warn('OpenGL extension ARB_vertex_shader not supported - shaders disabled') return if not glInitFragmentShaderARB(): Log.warn('OpenGL extension ARB_fragment_shader not supported - shaders disabled') return if not glInitMultitextureARB(): Log.warn('OpenGL extension ARB_multitexture not supported - shaders disabled') return if not glInitTexture3DEXT(): if sys.platform != 'darwin': Log.warn('OpenGL extension EXT_texture3D not supported - shaders disabled') return self.workdir = dir # Load textures needed by the shaders. try: self.noise3D = self.loadTex3D("noise3d.dds") self.outline = self.loadTex2D("outline.tga") except: Log.error('Could not load shader textures - shaders disabled: ') return self.multiTex = (GL_TEXTURE0_ARB,GL_TEXTURE1_ARB,GL_TEXTURE2_ARB,GL_TEXTURE3_ARB) self.enabled = True self.turnon = True # Compile the shader objects that we are going to use. # Also set uniform shader variables to default values. try: self.make("lightning","stage") except: Log.error("Error compiling lightning shader: ") else: self.enable("stage") self.setVar("ambientGlowHeightScale",6.0) self.setVar("color",(0.0,0.0,0.0,0.0)) self.setVar("glowFallOff",0.024) self.setVar("height",0.44) self.setVar("sampleDist",0.0076) self.setVar("speed",1.86) self.setVar("vertNoise",0.78) self.setVar("fading",1.0) self.setVar("solofx",False) self.setVar("scalexy",(5.0,2.4)) self.setVar("fixalpha",True) self.setVar("offset",(0.0,-2.5)) self.disable() try: self.make("lightning","sololight") except: Log.error("Error compiling lightning shader: ") else: self.enable("sololight") self.setVar("scalexy",(5.0,1.0)) self.setVar("ambientGlow",0.5) self.setVar("ambientGlowHeightScale",6.0) self.setVar("solofx",True) self.setVar("height",0.3) self.setVar("glowFallOff",0.024) self.setVar("sampleDist",0.0076) self.setVar("fading",4.0) self.setVar("speed",1.86) self.setVar("vertNoise",0.78) self.setVar("solofx",True) self.setVar("color",(0.0,0.0,0.0,0.0)) self.setVar("fixalpha",True) self.setVar("glowStrength",100.0) self.disable() try: self.make("lightning","tail") except: Log.error("Error compiling lightning shader: ") else: self.enable("tail") self.setVar("scalexy",(5.0,1.0)) self.setVar("ambientGlow",0.1) self.setVar("ambientGlowHeightScale",6.0) self.setVar("solofx",True) self.setVar("fading",4.0) self.setVar("height",0.0) self.setVar("glowFallOff",0.024) self.setVar("sampleDist",0.0076) self.setVar("speed",1.86) self.setVar("vertNoise",0.78) self.setVar("solofx",True) self.setVar("color",(0.3,0.7,0.9,0.6)) self.setVar("glowStrength",70.0) self.setVar("fixalpha",True) self.setVar("offset",(0.0,0.0)) self.disable() try: self.make("rockbandtail","tail2") except: Log.error("Error compiling rockbandtail shader: ") else: self.enable("tail2") self.setVar("height",0.2) self.setVar("color",(0.0,0.6,1.0,1.0)) self.setVar("speed",9.0) self.setVar("offset",(0.0,0.0)) self.setVar("scalexy",(5.0,1.0)) self.disable() try: self.make("metal","notes") except: Log.error("Error compiling metal shader: ") else: self.enable("notes") self.disable() try: self.make("neck","neck") except: Log.error("Error compiling neck shader: ") try: self.make("cd","cd") except: Log.error("Error compiling cd shader: ")
def screenError(self): Log.error( "Video setup failed. Make sure your graphics card supports 32-bit display modes." ) raise
def upload_crop(image_path, ext): response = {} pin_width = 0 pin_height = 0 if not os.path.exists(image_path): response["status"] = True response["message"] = "Not found: %s" % image_path return response image_ext = ext[1:].upper() if image_ext == "JPG": image_ext = "JPEG" store_dir = _get_image_dir(PHOTO_PATH) base_name = get_uuid() source_name = "%s_source%s" % (base_name, ext) source_path = os.path.join(store_dir, source_name) thumb_name = "%s_thumb%s" % (base_name, ext) thumb_path = os.path.join(store_dir, thumb_name) middle_name = "%s_mid%s" % (base_name, ext) middle_path = os.path.join(store_dir, middle_name) # source try: os.rename(image_path, source_path) except Exception: Log.error("Save source error: %s" % image_path) response["status"] = False response["message"] = "Save source error: %s" % image_path return response img = Image.open(source_path) # middle dest_width = MIDDLE_WIDTH width, height = img.size if width < dest_width or height < dest_width: response["status"] = False response["message"] = "Image size too small" return response dest_height = int(float(dest_width) * float(height) / float(width)) img_mid = img.resize((dest_width, dest_height), Image.ANTIALIAS) img_mid.save(middle_path, image_ext, quality=150) pin_width, pin_height = (dest_width, dest_height) # thumb dest_width, dest_height = THUMB_SIZE left, upper, right, lowwer = 0, 0, dest_width, dest_height crop_width, crop_height = dest_width, dest_height if float(dest_width)/float(dest_height) < float(width)/float(height): crop_height = height crop_width = int(height * (float(dest_width) / float(dest_height))) left = int((width - crop_width) / 2) right = left + crop_width lowwer = height else: crop_width = width crop_height = int(width * (float(dest_height) / float(dest_width))) upper = int((height - crop_height) / 2) lowwer = upper + crop_height right = width box = (left, upper, right, lowwer) img_thumb = img.crop(box) img_thumb = img_thumb.resize((dest_width, dest_height), Image.ANTIALIAS) img_thumb.save(thumb_path, image_ext, quality=150) response["status"] = True response["source_path"] = source_path response["thumb_path"] = thumb_path response["middle_path"] = middle_path response["height"] = pin_height response["width"] = pin_width return response
def __init__(self): self.logClassInits = Config.get("game", "log_class_inits") if self.logClassInits == 1: Log.debug("Input class init (Input.py)...") Task.__init__(self) self.mouse = pygame.mouse self.mouseListeners = [] self.keyListeners = [] self.systemListeners = [] self.priorityKeyListeners = [] self.controls = Controls() self.activeGameControls = [] self.p2Nav = self.controls.p2Nav self.type1 = self.controls.type[0] self.keyCheckerMode = Config.get("game", "key_checker_mode") self.disableKeyRepeat() self.gameGuitars = 0 self.gameDrums = 0 self.gameMics = 0 self.gameBots = 0 # Initialize joysticks pygame.joystick.init() self.joystickNames = {} self.joystickAxes = {} self.joystickHats = {} self.joysticks = [ pygame.joystick.Joystick(id) for id in range(pygame.joystick.get_count()) ] for j in self.joysticks: j.init() self.joystickNames[j.get_id()] = j.get_name() self.joystickAxes[j.get_id()] = [0] * j.get_numaxes() self.joystickHats[j.get_id()] = [(0, 0)] * j.get_numhats() Log.debug("%d joysticks found." % len(self.joysticks)) # Enable music events Audio.Music.setEndEvent(MusicFinished) #Audio.Music.setEndEvent() #MFH - no event required? # Custom key names self.getSystemKeyName = pygame.key.name pygame.key.name = self.getKeyName self.midi = [] if haveMidi: pygame.midi.init() for i in range(pygame.midi.get_count()): interface, name, is_input, is_output, is_opened = pygame.midi.get_device_info( i) Log.debug("Found MIDI device: %s on %s" % (name, interface)) if not is_input: Log.debug("MIDI device is not an input device.") continue try: self.midi.append(pygame.midi.Input(i)) Log.debug("Device opened as device number %d." % len(self.midi)) except pygame.midi.MidiException: Log.error("Error opening device for input.") if len(self.midi) == 0: Log.debug("No MIDI input ports found.") else: Log.notice( "MIDI input support is not available; install at least pygame 1.9 to get it." )
def __init__(self, engine): self.engine = engine self.logClassInits = Config.get("game", "log_class_inits") if self.logClassInits == 1: Log.debug("MainMenu class init (MainMenu.py)...") self.time = 0.0 self.nextLayer = None self.visibility = 0.0 self.active = False self.showStartupMessages = False self.gfxVersionTag = Config.get("game", "gfx_version_tag") self.chosenNeck = Config.get("game", "default_neck") exists = 0 if engine.loadImgDrawing( self, "ok", os.path.join("necks", self.chosenNeck + ".png")): exists = 1 elif engine.loadImgDrawing( self, "ok", os.path.join("necks", "Neck_" + self.chosenNeck + ".png")): exists = 1 #MFH - fallback logic now supports a couple valid default neck filenames #MFH - check for Neck_1 if exists == 0: if engine.loadImgDrawing(self, "ok", os.path.join("necks", "Neck_1.png")): Config.set("game", "default_neck", "1") Log.warn( "Default chosen neck not valid; fallback Neck_1.png forced." ) exists = 1 #MFH - check for defaultneck if exists == 0: if engine.loadImgDrawing(self, "ok", os.path.join("necks", "defaultneck.png")): Log.warn( "Default chosen neck not valid; fallback defaultneck.png forced." ) Config.set("game", "default_neck", "defaultneck") exists = 1 else: Log.error( "Default chosen neck not valid; fallbacks Neck_1.png and defaultneck.png also not valid!" ) #Get theme self.theme = self.engine.data.theme self.themeCoOp = self.engine.data.themeCoOp self.themename = self.engine.data.themeLabel self.useSoloMenu = self.engine.theme.use_solo_submenu allowMic = True self.menux = self.engine.theme.menuPos[0] self.menuy = self.engine.theme.menuPos[1] self.rbmenu = self.engine.theme.menuRB #MFH self.main_menu_scale = self.engine.theme.main_menu_scaleVar self.main_menu_vspacing = self.engine.theme.main_menu_vspacingVar if not self.engine.loadImgDrawing( self, "background", os.path.join("themes", self.themename, "menu", "mainbg.png")): self.background = None self.engine.loadImgDrawing( self, "BGText", os.path.join("themes", self.themename, "menu", "maintext.png")) self.engine.loadImgDrawing( self, "optionsBG", os.path.join("themes", self.themename, "menu", "optionsbg.png")) self.engine.loadImgDrawing( self, "optionsPanel", os.path.join("themes", self.themename, "menu", "optionspanel.png")) #racer: added version tag if self.gfxVersionTag or self.engine.theme.versiontag == True: if not self.engine.loadImgDrawing( self, "version", os.path.join("themes", self.themename, "menu", "versiontag.png")): if not self.engine.loadImgDrawing( self, "version", "versiontag.png" ): #falls back on default versiontag.png in data\ folder self.version = None else: self.version = None #myfingershurt: random main menu music function, menu.ogg and menuXX.ogg (any filename with "menu" as the first 4 letters) self.files = None filepath = self.engine.getPath( os.path.join("themes", self.themename, "sounds")) if os.path.isdir(filepath): self.files = [] allfiles = os.listdir(filepath) for name in allfiles: if os.path.splitext(name)[1] == ".ogg": if string.find(name, "menu") > -1: self.files.append(name) if self.files: i = random.randint(0, len(self.files) - 1) filename = self.files[i] sound = os.path.join("themes", self.themename, "sounds", filename) self.menumusic = True engine.menuMusic = True self.song = Audio.Music(self.engine.resource.fileName(sound)) self.song.setVolume(self.engine.config.get("audio", "menu_volume")) self.song.play(0) #no loop else: self.menumusic = False self.opt_text_color = self.engine.theme.opt_text_colorVar self.opt_selected_color = self.engine.theme.opt_selected_colorVar trainingMenu = [ (_("Tutorials"), self.showTutorial), (_("Practice"), lambda: self.newLocalGame(mode1p=1)), ] self.opt_bkg_size = [float(i) for i in self.engine.theme.opt_bkg_size] self.opt_text_color = self.engine.theme.hexToColor( self.engine.theme.opt_text_colorVar) self.opt_selected_color = self.engine.theme.hexToColor( self.engine.theme.opt_selected_colorVar) if self.BGText: strCareer = "" strQuickplay = "" strSolo = "" strMultiplayer = "" strTraining = "" strSettings = "" strQuit = "" else: strCareer = "Career" strQuickplay = "Quickplay" strSolo = "Solo" strMultiplayer = "Multiplayer" strTraining = "Training" strSettings = "Settings" strQuit = "Quit" multPlayerMenu = [ (_("Face-Off"), lambda: self.newLocalGame(players=2, maxplayers=4)), (_("Pro Face-Off"), lambda: self.newLocalGame(players=2, mode2p=1, maxplayers=4)), (_("Party Mode"), lambda: self.newLocalGame(mode2p=2)), (_("FoFiX Co-Op"), lambda: self.newLocalGame( players=2, mode2p=3, maxplayers=4, allowMic=allowMic)), (_("RB Co-Op"), lambda: self.newLocalGame( players=2, mode2p=4, maxplayers=4, allowMic=allowMic)), (_("GH Co-Op"), lambda: self.newLocalGame(players=2, mode2p=5, maxplayers=4)), (_("GH Battle"), lambda: self.newLocalGame(players=2, mode2p=6, allowDrum=False) ), #akedrou- so you can block drums ] if not self.useSoloMenu: mainMenu = [ (strCareer, lambda: self.newLocalGame(mode1p=2, allowMic=allowMic)), (strQuickplay, lambda: self.newLocalGame(allowMic=allowMic)), ((strMultiplayer, "multiplayer"), multPlayerMenu), ((strTraining, "training"), trainingMenu), ((strSettings, "settings"), self.settingsMenu), (strQuit, self.quit), ] else: soloMenu = [ (_("Solo Tour"), lambda: self.newLocalGame(mode1p=2, allowMic=allowMic)), (_("Quickplay"), lambda: self.newLocalGame(allowMic=allowMic)), ] mainMenu = [ ((strSolo, "solo"), soloMenu), ((strMultiplayer, "multiplayer"), multPlayerMenu), ((strTraining, "training"), trainingMenu), ((strSettings, "settings"), self.settingsMenu), (strQuit, self.quit), ] w, h, = self.engine.view.geometry[2:4] self.menu = Menu(self.engine, mainMenu, onClose=lambda: self.engine.view.popLayer(self), pos=(self.menux, .75 - (.75 * self.menuy))) engine.mainMenu = self #Points engine.mainMenu to the one and only MainMenu object instance ## whether the main menu has come into view at least once self.shownOnce = False
engine.cmdMode = nbrplayers, mode, 0 else: engine.cmdMode = nbrplayers, 0, mode # Play the intro video if it is present, we have the capability, and # we are not in one-shot mode. videoLayer = False if not engine.cmdPlay: themename = Config.get("coffee", "themename") vidSource = os.path.join(Version.dataPath(), 'themes', themename, \ 'menu', 'intro.ogv') if os.path.isfile(vidSource): try: vidPlayer = VideoLayer(engine, vidSource, cancellable=True) except (IOError, VideoPlayerError): Log.error("Error loading intro video:") else: vidPlayer.play() engine.view.pushLayer(vidPlayer) videoLayer = True engine.ticksAtStart = pygame.time.get_ticks() while not vidPlayer.finished: engine.run() engine.view.popLayer(vidPlayer) engine.view.pushLayer(MainMenu(engine)) if not videoLayer: engine.setStartupLayer(MainMenu(engine)) # Run the main game loop. try: engine.ticksAtStart = pygame.time.get_ticks()
class UserMapReduced(object): @classmethod def instance(cls): if not hasattr(cls, "_instance"): cls._instance = cls() return cls._instance def __init__(self): self.mongo = Database() self.reduce = Code( "function(key, values) {" " var result = { entries:0, likes:0, followers:0, friends:0 };" " values.forEach(function(value) {" " if (value.entries !== null) {" " result.entries += value.entries;" " }" " if (value.likes !== null) {" " result.likes += value.likes;" " }" " if (value.followers !== null) {" " result.followers += value.followers;" " }" " if (value.friends !== null) {" " result.friends += value.friends;" " }" " });" " return result;" "}") def _reduce_entries(self): map = Code( "function() {" " var args = { entries:1, likes:0, followers:0, friends:0 };" " emit(this.user_id, args);" "}") self.mongo.db["entries"].map_reduce( map, self.reduce, out={"reduce" : "user_status"}) def _reduce_likes(self): map = Code( "function() {" " var args = { entries:0, likes:1, followers:0, friends:0 };" " emit(this.user_id, args);" "}") self.mongo.db["favs"].map_reduce( map, self.reduce, out={"reduce" : "user_status"}) def _reduce_followers(self): map = Code( "function() {" " var args = { entries:0, likes:0, followers:1, friends:0 };" " emit(this.user_id, args);" "}") self.mongo.db["relations"].map_reduce( map, self.reduce, out={"reduce" : "user_status"}) def _reduce_friends(self): map = Code( "function() {" " var args = { entries:0, likes:0, followers:0, friends:1 };" " emit(this.follower_id, args);" "}") self.mongo.db["relations"].map_reduce( map, self.reduce, out={"reduce" : "user_status"}) def _clear_result(self): self.mongo.db["user_status"].remove() def _save_result(self): cursor = self.mongo.db.user_status.find() for item in cursor: params = {"_id": item["_id"]} for k, v in item["value"].items(): item["value"][k] = int(v) user = {"count_info" : item["value"] } self.mongo.db.users.update(params, {"$set" : user}) def process(self): try: self._clear_result() self._reduce_entries() self._reduce_likes() self._reduce_followers() self._reduce_friends() except Exception, ex: Log.error(ex, "mapreduce") return try: self._save_result() except Exception, ex: Log.error(ex, "mapreduce")
def __init__(self, engine, instrument, playerObj): self.engine = engine self.player = instrument.player self.instrument = instrument self.isDrum = self.instrument.isDrum self.isBassGuitar = self.instrument.isBassGuitar self.isVocal = self.instrument.isVocal self.oNeckovr = None #MFH - needs to be here to prevent crashes! self.staticStrings = self.engine.config.get("performance", "static_strings") self.indexFps = self.engine.config.get("video", "fps") #QQstarS self.neckAlpha=[] # necks transparency self.neckAlpha.append( self.engine.config.get("game", "necks_alpha") ) # all necks self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "neck_alpha") ) # normal neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "solo_neck_alpha") ) # solo neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "bg_neck_alpha") ) # bass groove neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "overlay_neck_alpha") ) # overlay neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "fail_neck_alpha") ) # fail neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "4x_neck_alpha") ) # 4x multi neck self.boardWidth = self.engine.theme.neckWidth self.boardLength = self.engine.theme.neckLength self.shaderSolocolor = self.engine.theme.shaderSolocolor self.boardFadeAmount = self.engine.theme.boardFade self.doNecksRender = self.engine.theme.doNecksRender #death_au: fixed neck size if self.isDrum and self.engine.config.get("game", "large_drum_neck"): self.boardWidth = 4.0 self.boardLength = 12.0 self.beatsPerBoard = 5.0 self.beatsPerUnit = self.beatsPerBoard / self.boardLength color = (1,1,1) self.vis = 1 size = 0 # evilynux - Neck color self.board_col = np.array([[color[0],color[1],color[2], 0], [color[0],color[1],color[2], 0], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], 0], [color[0],color[1],color[2], 0]], dtype=np.float32) w = self.boardWidth l = self.boardLength # evilynux - Neck vertices self.board_vtx = np.array([[-w / 2, 0, -2], [w / 2, 0, -2], [-w/ 2, 0, -1], [w / 2, 0, -1], [-w / 2, 0, l * .7], [w / 2, 0, l * .7], [-w / 2, 0, l], [w / 2, 0, l]], dtype=np.float32) self.shader_neck_vtx = np.array([[-w / 2, 0.1, -2], [w / 2, 0.1, -2], [-w / 2, 0.1, l], [w / 2, 0.1, l]], dtype=np.float32) self.track_vtx = np.array([[-w / 2, 0, -2+size], [w / 2, 0, -2+size], [-w / 2, 0, -1+size], [w / 2, 0, -1+size], [-w / 2, 0, l * .7], [w / 2, 0, l * .7], [-w / 2, 0, l], [w / 2, 0, l]], dtype=np.float32) self.soloLightVtx1 = np.array([[w / 2-1.0, 0.4, -2], [w / 2+1.0, 0.4, -2], [w / 2-1.0, 0.4, l], [w / 2+1.0, 0.4, l]], dtype=np.float32) self.soloLightVtx2 = np.array([[-w / 2+1.0, 0.4, -2], [-w / 2-1.0, 0.4, -2], [-w / 2+1.0, 0.4, l], [-w / 2-1.0, 0.4, l]], dtype=np.float32) self.bpm_vtx = np.array([[-(w / 2), 0, 0], [-(w / 2), 0, 0], [(w / 2), 0, 0], [(w / 2), 0, 0]], dtype=np.float32) self.board_scroll_vtx = np.array([[-w / 2, 0, 0], [w / 2, 0, 0], [-w/ 2, 0, 0], [w / 2, 0, 0], [-w/ 2, 0, 0], [w / 2, 0, 0], [-w/ 2, 0, 0], [w / 2, 0, 0]], dtype=np.float32) # evilynux - Sidebars vertices w += 0.15 self.sidebars_vtx = np.array([[-w / 2, 0, -2], [w / 2, 0, -2], [-w/ 2, 0, -1], [w / 2, 0, -1], [-w / 2, 0, l * .7], [w / 2, 0, l * .7], [-w / 2, 0, l], [w / 2, 0, l]], dtype=np.float32) self.sidebars_scroll_vtx = np.array([[-w / 2, 0, 0], [w / 2, 0, 0], [-w/ 2, 0, 0], [w / 2, 0, 0], [-w/ 2, 0, 0], [w / 2, 0, 0], [-w/ 2, 0, 0], [w / 2, 0, 0]], dtype=np.float32) self.bpm_tex = np.array([[0.0, 1.0], [0.0, 0.0], [1.0, 1.0], [1.0, 0.0]], dtype=np.float32) self.bpm_col = np.array([[1, 1, 1, self.vis], [1, 1, 1, self.vis], [1, 1, 1, self.vis], [1, 1, 1, self.vis]], dtype=np.float32) self.board_col_flash = np.array([[color[0],color[1],color[2], 0], [color[0],color[1],color[2], 0], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], self.vis], [color[0],color[1],color[2], 0], [color[0],color[1],color[2], 0]], dtype=np.float32) self.board_tex_static = np.array([[0.0, self.project(-2 * self.beatsPerUnit)], [1.0, self.project(-2 * self.beatsPerUnit)], [0.0, self.project(-1 * self.beatsPerUnit)], [1.0, self.project(-1 * self.beatsPerUnit)], [0.0, self.project(l * self.beatsPerUnit * .7)], [1.0, self.project(l * self.beatsPerUnit * .7)], [0.0, self.project(l * self.beatsPerUnit)], [1.0, self.project(l * self.beatsPerUnit)]], dtype=np.float32) self.board_tex = np.array([[0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0]], dtype=np.float32) # evilynux - Just in case the type has became double, convert to float32 self.board_col = self.board_col.astype(np.float32) self.board_vtx = self.board_vtx.astype(np.float32) self.sidebars_vtx = self.sidebars_vtx.astype(np.float32) self.sidebars_scroll_vtx = self.sidebars_scroll_vtx.astype(np.float32) self.bpm_tex = self.bpm_tex.astype(np.float32) self.bpm_col = self.bpm_col.astype(np.float32) self.soloLightVtx1 = self.soloLightVtx1.astype(np.float32) self.soloLightVtx2 = self.soloLightVtx2.astype(np.float32) self.shader_neck_vtx = self.shader_neck_vtx.astype(np.float32) self.track_vtx = self.track_vtx.astype(np.float32) self.board_col_flash = self.board_col_flash.astype(np.float32) self.bpm_vtx = self.bpm_vtx.astype(np.float32) self.board_tex_static = self.board_tex_static.astype(np.float32) self.board_tex = self.board_tex.astype(np.float32) self.board_scroll_vtx = self.board_scroll_vtx.astype(np.float32) self.neckType = playerObj.neckType if self.neckType == 0: self.neck = engine.mainMenu.chosenNeck else: self.neck = str(playerObj.neck) playerObj = None #Get theme themename = self.engine.data.themeLabel #now theme determination logic is only in data.py: self.theme = self.engine.data.theme self.incomingNeckMode = self.engine.config.get("game", "incoming_neck_mode") #blazingamer self.failcount = 0 self.failcount2 = False self.spcount = 0 self.spcount2 = 0 self.bgcount = 0 self.fourXcount = 0 self.ovrneckoverlay = self.engine.config.get("fretboard", "ovrneckoverlay") self.ocount = 0 self.currentPeriod = 60000.0 / self.instrument.currentBpm self.lastBpmChange = -1.0 self.baseBeat = 0.0 #myfingershurt: self.bassGrooveNeckMode = self.engine.config.get("game", "bass_groove_neck") self.guitarSoloNeckMode = self.engine.config.get("game", "guitar_solo_neck") self.fourxNeckMode = self.engine.config.get("game", "4x_neck") self.useMidiSoloMarkers = False self.markSolos = 0 neckFind = True themeNeckPath = os.path.join(self.engine.resource.fileName("themes", themename, "necks")) if self.neckType == 1 and os.path.exists(themeNeckPath): themeNeck = [] neckfiles = [ f for f in os.listdir(themeNeckPath) if os.path.isfile(os.path.join(themeNeckPath, f)) ] neckfiles.sort() for i in neckfiles: themeNeck.append(str(i)) if len(themeNeck) > 0: i = random.randint(0,len(themeNeck)-1) if engine.loadImgDrawing(self, "neckDrawing", os.path.join("themes", themename, "necks", themeNeck[i]), textureSize = (256, 256)): neckFind = False Log.debug("Random theme neck chosen: " + themeNeck[i]) else: Log.error("Unable to load theme neck: " + themeNeck[i]) # fall back to defaultneck self.neck = "defaultneck" if neckFind: # evilynux - Fixed random neck -- MFH: further fixing random neck if self.neck == "0" or self.neck == "Neck_0" or self.neck == "randomneck": self.neck = [] # evilynux - improved loading logic to support arbitrary filenames path = self.engine.resource.fileName("necks") neckfiles = [ f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) ] neckfiles.sort() for i in neckfiles: # evilynux - Special cases, ignore these... if( os.path.splitext(i)[0] == "randomneck" or os.path.splitext(i)[0] == "overdriveneck" ): continue else: self.neck.append(str(i)[:-4]) # evilynux - filename w/o extension i = random.randint(0,len(self.neck)-1) if engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks",self.neck[i]+".png"), textureSize = (256, 256)): Log.debug("Random neck chosen: " + self.neck[i]) else: Log.error("Unable to load neck: " + self.neck[i]) self.neck = "defaultneck" engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks",self.neck+".png"), textureSize = (256, 256)) else: # evilynux - first assume the self.neck contains the full filename if not engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks",self.neck+".png"), textureSize = (256, 256)): if not engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks","Neck_"+self.neck+".png"), textureSize = (256, 256)): engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks","defaultneck.png"), textureSize = (256, 256)) #blazingamer: #this helps me clean up the code a bit #what it does is if you're using drums or bass #it checks that directory first, if it doesn't #exist, then it goes back to the default directory if self.isDrum: self.extension = "drums" elif self.isBassGuitar: self.extension = "bass" else: self.extension = None themepath = os.path.join("themes", themename, "board") def loadImage(name, file): if self.extension: if not engine.loadImgDrawing(self, name, os.path.join(themepath, self.extension, file)): engine.loadImgDrawing(self, name, os.path.join(themepath, file)) else: engine.loadImgDrawing(self, name, os.path.join(themepath, file)) loadImage("sideBars", "side_bars.png") loadImage("oSideBars", "overdrive_side_bars.png") loadImage("oSoloSideBars", "overdrive_solo_side_bars.png") loadImage("failSideBars", "fail_side_bars.png") loadImage("soloSideBars", "solo_side_bars.png") loadImage("oCenterLines", "overdrive_center_lines.png") loadImage("centerLines", "center_lines.png") loadImage("oNeck", "overdriveneck.png") loadImage("oFlash", "overdrive_string_flash.png") loadImage("bpm_halfbeat", "bpm_halfbeat.png") loadImage("bpm_beat", "bpm_beat.png") loadImage("bpm_measure", "bpm_measure.png") loadImage("failNeck", "failneck.png") if not self.failNeck: engine.loadImgDrawing(self, "failNeck", os.path.join("failneck.png")) if self.ovrneckoverlay: loadImage("oNeckovr", "overdriveneckovr.png") #myfingershurt: Bass Groove neck: self.bassGrooveNeck = None if self.isBassGuitar and self.bassGrooveNeckMode > 0: if self.bassGrooveNeckMode == 2: #overlay neck engine.loadImgDrawing(self, "bassGrooveNeck", os.path.join(themepath, "bass", "bassgrooveneckovr.png")) if self.bassGrooveNeckMode == 1 or not self.bassGrooveNeck: #replace neck engine.loadImgDrawing(self, "bassGrooveNeck", os.path.join(themepath, "bass", "bassgrooveneck.png")) #myfingershurt: Guitar Solo neck: self.soloNeck = None if not self.isVocal: if self.guitarSoloNeckMode > 0: if self.guitarSoloNeckMode == 1 or not engine.loadImgDrawing(self, "soloNeck", os.path.join(themepath, "soloneckovr.png")): #replace neck loadImage("soloNeck", "soloneck.png") elif self.guitarSoloNeckMode == 2 or not engine.loadImgDrawing(self, "soloNeck", os.path.join(themepath, "soloneck.png")): #overlay neck loadImage("soloNeck", "soloneckovr.png") self.fourMultiNeck = None if not self.isBassGuitar and self.fourxNeckMode > 0: if self.fourxNeckMode == 1: #replace neck engine.loadImgDrawing(self, "fourMultiNeck", os.path.join(themepath, "fourmultineck.png")) if self.fourxNeckMode == 2: #overlay neck engine.loadImgDrawing(self, "fourMultiNeck", os.path.join(themepath, "fourmultineckovr.png")) self.isFailing = False self.canGuitarSolo = self.instrument.canGuitarSolo self.guitarSolo = False self.scoreMultiplier = 1 self.overdriveFlashCounts = self.indexFps/4 #how many cycles to display the oFlash: self.indexFps/2 = 1/2 second self.overdriveFlashCount = self.overdriveFlashCounts self.ocount = 0 self.paused = False
def __init__(self, engine, instrument, playerObj): self.engine = engine self.player = instrument.player self.instrument = instrument self.isDrum = self.instrument.isDrum self.isBassGuitar = self.instrument.isBassGuitar self.isVocal = self.instrument.isVocal self.oNeckovr = None #MFH - needs to be here to prevent crashes! self.staticStrings = self.engine.config.get("performance", "static_strings") self.indexFps = self.engine.config.get("video", "fps") #QQstarS self.neckAlpha = [] # necks transparency self.neckAlpha.append(self.engine.config.get( "game", "necks_alpha")) # all necks self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "neck_alpha")) # normal neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "solo_neck_alpha")) # solo neck self.neckAlpha.append(self.neckAlpha[0] * self.engine.config.get( "game", "bg_neck_alpha")) # bass groove neck self.neckAlpha.append(self.neckAlpha[0] * self.engine.config.get( "game", "overlay_neck_alpha")) # overlay neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "fail_neck_alpha")) # fail neck self.neckAlpha.append( self.neckAlpha[0] * self.engine.config.get("game", "4x_neck_alpha")) # 4x multi neck self.boardWidth = self.engine.theme.neckWidth self.boardLength = self.engine.theme.neckLength self.shaderSolocolor = self.engine.theme.shaderSolocolor self.boardFadeAmount = self.engine.theme.boardFade self.doNecksRender = self.engine.theme.doNecksRender #death_au: fixed neck size if self.isDrum and self.engine.config.get("game", "large_drum_neck"): self.boardWidth = 4.0 self.boardLength = 12.0 self.beatsPerBoard = 5.0 self.beatsPerUnit = self.beatsPerBoard / self.boardLength color = (1, 1, 1) self.vis = 1 size = 0 # evilynux - Neck color self.board_col = np.array([[color[0], color[1], color[2], 0], [color[0], color[1], color[2], 0], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], 0], [color[0], color[1], color[2], 0]], dtype=np.float32) w = self.boardWidth l = self.boardLength # evilynux - Neck vertices self.board_vtx = np.array( [[-w / 2, 0, -2], [w / 2, 0, -2], [-w / 2, 0, -1], [w / 2, 0, -1], [-w / 2, 0, l * .7], [w / 2, 0, l * .7], [-w / 2, 0, l], [w / 2, 0, l]], dtype=np.float32) self.shader_neck_vtx = np.array([[-w / 2, 0.1, -2], [w / 2, 0.1, -2], [-w / 2, 0.1, l], [w / 2, 0.1, l]], dtype=np.float32) self.track_vtx = np.array( [[-w / 2, 0, -2 + size], [w / 2, 0, -2 + size], [-w / 2, 0, -1 + size], [w / 2, 0, -1 + size], [ -w / 2, 0, l * .7 ], [w / 2, 0, l * .7], [-w / 2, 0, l], [w / 2, 0, l]], dtype=np.float32) self.soloLightVtx1 = np.array( [[w / 2 - 1.0, 0.4, -2], [w / 2 + 1.0, 0.4, -2], [w / 2 - 1.0, 0.4, l], [w / 2 + 1.0, 0.4, l]], dtype=np.float32) self.soloLightVtx2 = np.array( [[-w / 2 + 1.0, 0.4, -2], [-w / 2 - 1.0, 0.4, -2], [-w / 2 + 1.0, 0.4, l], [-w / 2 - 1.0, 0.4, l]], dtype=np.float32) self.bpm_vtx = np.array([[-(w / 2), 0, 0], [-(w / 2), 0, 0], [(w / 2), 0, 0], [(w / 2), 0, 0]], dtype=np.float32) self.board_scroll_vtx = np.array( [[-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0]], dtype=np.float32) # evilynux - Sidebars vertices w += 0.15 self.sidebars_vtx = np.array( [[-w / 2, 0, -2], [w / 2, 0, -2], [-w / 2, 0, -1], [w / 2, 0, -1], [-w / 2, 0, l * .7], [w / 2, 0, l * .7], [-w / 2, 0, l], [w / 2, 0, l]], dtype=np.float32) self.sidebars_scroll_vtx = np.array( [[-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0], [-w / 2, 0, 0], [w / 2, 0, 0]], dtype=np.float32) self.bpm_tex = np.array( [[0.0, 1.0], [0.0, 0.0], [1.0, 1.0], [1.0, 0.0]], dtype=np.float32) self.bpm_col = np.array([[1, 1, 1, self.vis], [1, 1, 1, self.vis], [1, 1, 1, self.vis], [1, 1, 1, self.vis]], dtype=np.float32) self.board_col_flash = np.array( [[color[0], color[1], color[2], 0], [color[0], color[1], color[2], 0], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], self.vis], [color[0], color[1], color[2], 0], [color[0], color[1], color[2], 0]], dtype=np.float32) self.board_tex_static = np.array( [[0.0, self.project(-2 * self.beatsPerUnit)], [1.0, self.project(-2 * self.beatsPerUnit)], [0.0, self.project(-1 * self.beatsPerUnit)], [1.0, self.project(-1 * self.beatsPerUnit)], [0.0, self.project(l * self.beatsPerUnit * .7)], [1.0, self.project(l * self.beatsPerUnit * .7)], [0.0, self.project(l * self.beatsPerUnit)], [1.0, self.project(l * self.beatsPerUnit)]], dtype=np.float32) self.board_tex = np.array([[0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0], [0.0, 0], [1.0, 0]], dtype=np.float32) # evilynux - Just in case the type has became double, convert to float32 self.board_col = self.board_col.astype(np.float32) self.board_vtx = self.board_vtx.astype(np.float32) self.sidebars_vtx = self.sidebars_vtx.astype(np.float32) self.sidebars_scroll_vtx = self.sidebars_scroll_vtx.astype(np.float32) self.bpm_tex = self.bpm_tex.astype(np.float32) self.bpm_col = self.bpm_col.astype(np.float32) self.soloLightVtx1 = self.soloLightVtx1.astype(np.float32) self.soloLightVtx2 = self.soloLightVtx2.astype(np.float32) self.shader_neck_vtx = self.shader_neck_vtx.astype(np.float32) self.track_vtx = self.track_vtx.astype(np.float32) self.board_col_flash = self.board_col_flash.astype(np.float32) self.bpm_vtx = self.bpm_vtx.astype(np.float32) self.board_tex_static = self.board_tex_static.astype(np.float32) self.board_tex = self.board_tex.astype(np.float32) self.board_scroll_vtx = self.board_scroll_vtx.astype(np.float32) self.neckType = playerObj.neckType if self.neckType == 0: self.neck = engine.mainMenu.chosenNeck else: self.neck = str(playerObj.neck) playerObj = None #Get theme themename = self.engine.data.themeLabel #now theme determination logic is only in data.py: self.theme = self.engine.data.theme self.incomingNeckMode = self.engine.config.get("game", "incoming_neck_mode") #blazingamer self.failcount = 0 self.failcount2 = False self.spcount = 0 self.spcount2 = 0 self.bgcount = 0 self.fourXcount = 0 self.ovrneckoverlay = self.engine.config.get("fretboard", "ovrneckoverlay") self.ocount = 0 self.currentPeriod = 60000.0 / self.instrument.currentBpm self.lastBpmChange = -1.0 self.baseBeat = 0.0 #myfingershurt: self.bassGrooveNeckMode = self.engine.config.get( "game", "bass_groove_neck") self.guitarSoloNeckMode = self.engine.config.get( "game", "guitar_solo_neck") self.fourxNeckMode = self.engine.config.get("game", "4x_neck") self.useMidiSoloMarkers = False self.markSolos = 0 neckFind = True themeNeckPath = os.path.join( self.engine.resource.fileName("themes", themename, "necks")) if self.neckType == 1 and os.path.exists(themeNeckPath): themeNeck = [] neckfiles = [ f for f in os.listdir(themeNeckPath) if os.path.isfile(os.path.join(themeNeckPath, f)) ] neckfiles.sort() for i in neckfiles: themeNeck.append(str(i)) if len(themeNeck) > 0: i = random.randint(0, len(themeNeck) - 1) if engine.loadImgDrawing(self, "neckDrawing", os.path.join("themes", themename, "necks", themeNeck[i]), textureSize=(256, 256)): neckFind = False Log.debug("Random theme neck chosen: " + themeNeck[i]) else: Log.error("Unable to load theme neck: " + themeNeck[i]) # fall back to defaultneck self.neck = "defaultneck" if neckFind: # evilynux - Fixed random neck -- MFH: further fixing random neck if self.neck == "0" or self.neck == "Neck_0" or self.neck == "randomneck": self.neck = [] # evilynux - improved loading logic to support arbitrary filenames path = self.engine.resource.fileName("necks") neckfiles = [ f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f)) ] neckfiles.sort() for i in neckfiles: # evilynux - Special cases, ignore these... if (os.path.splitext(i)[0] == "randomneck" or os.path.splitext(i)[0] == "overdriveneck"): continue else: self.neck.append( str(i)[:-4]) # evilynux - filename w/o extension i = random.randint(0, len(self.neck) - 1) if engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks", self.neck[i] + ".png"), textureSize=(256, 256)): Log.debug("Random neck chosen: " + self.neck[i]) else: Log.error("Unable to load neck: " + self.neck[i]) self.neck = "defaultneck" engine.loadImgDrawing(self, "neckDrawing", os.path.join("necks", self.neck + ".png"), textureSize=(256, 256)) else: # evilynux - first assume the self.neck contains the full filename if not engine.loadImgDrawing(self, "neckDrawing", os.path.join( "necks", self.neck + ".png"), textureSize=(256, 256)): if not engine.loadImgDrawing( self, "neckDrawing", os.path.join("necks", "Neck_" + self.neck + ".png"), textureSize=(256, 256)): engine.loadImgDrawing(self, "neckDrawing", os.path.join( "necks", "defaultneck.png"), textureSize=(256, 256)) #blazingamer: #this helps me clean up the code a bit #what it does is if you're using drums or bass #it checks that directory first, if it doesn't #exist, then it goes back to the default directory if self.isDrum: self.extension = "drums" elif self.isBassGuitar: self.extension = "bass" else: self.extension = None themepath = os.path.join("themes", themename, "board") def loadImage(name, file): if self.extension: if not engine.loadImgDrawing( self, name, os.path.join(themepath, self.extension, file)): engine.loadImgDrawing(self, name, os.path.join(themepath, file)) else: engine.loadImgDrawing(self, name, os.path.join(themepath, file)) loadImage("sideBars", "side_bars.png") loadImage("oSideBars", "overdrive_side_bars.png") loadImage("oSoloSideBars", "overdrive_solo_side_bars.png") loadImage("failSideBars", "fail_side_bars.png") loadImage("soloSideBars", "solo_side_bars.png") loadImage("oCenterLines", "overdrive_center_lines.png") loadImage("centerLines", "center_lines.png") loadImage("oNeck", "overdriveneck.png") loadImage("oFlash", "overdrive_string_flash.png") loadImage("bpm_halfbeat", "bpm_halfbeat.png") loadImage("bpm_beat", "bpm_beat.png") loadImage("bpm_measure", "bpm_measure.png") loadImage("failNeck", "failneck.png") if not self.failNeck: engine.loadImgDrawing(self, "failNeck", os.path.join("failneck.png")) if self.ovrneckoverlay: loadImage("oNeckovr", "overdriveneckovr.png") #myfingershurt: Bass Groove neck: self.bassGrooveNeck = None if self.isBassGuitar and self.bassGrooveNeckMode > 0: if self.bassGrooveNeckMode == 2: #overlay neck engine.loadImgDrawing( self, "bassGrooveNeck", os.path.join(themepath, "bass", "bassgrooveneckovr.png")) if self.bassGrooveNeckMode == 1 or not self.bassGrooveNeck: #replace neck engine.loadImgDrawing( self, "bassGrooveNeck", os.path.join(themepath, "bass", "bassgrooveneck.png")) #myfingershurt: Guitar Solo neck: self.soloNeck = None if not self.isVocal: if self.guitarSoloNeckMode > 0: if self.guitarSoloNeckMode == 1 or not engine.loadImgDrawing( self, "soloNeck", os.path.join(themepath, "soloneckovr.png")): #replace neck loadImage("soloNeck", "soloneck.png") elif self.guitarSoloNeckMode == 2 or not engine.loadImgDrawing( self, "soloNeck", os.path.join(themepath, "soloneck.png")): #overlay neck loadImage("soloNeck", "soloneckovr.png") self.fourMultiNeck = None if not self.isBassGuitar and self.fourxNeckMode > 0: if self.fourxNeckMode == 1: #replace neck engine.loadImgDrawing( self, "fourMultiNeck", os.path.join(themepath, "fourmultineck.png")) if self.fourxNeckMode == 2: #overlay neck engine.loadImgDrawing( self, "fourMultiNeck", os.path.join(themepath, "fourmultineckovr.png")) self.isFailing = False self.canGuitarSolo = self.instrument.canGuitarSolo self.guitarSolo = False self.scoreMultiplier = 1 self.overdriveFlashCounts = self.indexFps / 4 #how many cycles to display the oFlash: self.indexFps/2 = 1/2 second self.overdriveFlashCount = self.overdriveFlashCounts self.ocount = 0 self.paused = False
def grab_proc(url, rate, camera_id): ''' 抓图处理进程 :param url: :param rate: :param camera_id: :param logger: :return: ''' logger = Log('grab-proc' + str(os.getpid()), 'logs/') logger.info('初始化seaweedfs') master = WeedClient(config.get('weed', 'host'), config.getint('weed', 'port')) logger.info('初始化Kafka') kafka = Kafka(bootstrap_servers=config.get('kafka', 'boot_servers')) topic = config.get('camera', 'topic') face_tool = Face(config.get('api', 'face_server')) detect_count = 0 # 用于detect频次计数 frame_internal = track_internal * rate trackable = False # 启动抓图线程 q = queue.Queue(maxsize=100) t = GrabJob(q, camera_id, url, rate, Log('grab-proc' + str(os.getpid()) + '-thread', 'logs/'), config) t.start() while True: try: img = q.get(timeout=20) if detect_count % frame_internal == 0: detect_count = 0 b64 = mat_to_base64(img) t1 = time.time() detect_result = face_tool.detect(b64) logger.info('detect cost time: ', round((time.time() - t1) * 1000), 'ms') if detect_result['error_message'] != '601': logger.warning('verifier detector error, error_message:', detect_result['error_message']) continue tracker = cv2.MultiTracker_create() latest_imgs = [] timestamp = round(time.time()) for face_num in range(detect_result['detect_nums']): tmp = detect_result['detect'][face_num] bbox = (tmp['left'], tmp['top'], tmp['width'], tmp['height']) tracker.add(cv2.TrackerKCF_create(), img, bbox) face_b64 = face_tool.crop(bbox[0], bbox[1], bbox[2], bbox[3], b64, True) latest_img = { 'image_base64': face_b64, 'bbox': bbox, 'landmark': detect_result['detect'][face_num]['landmark'], 'time': timestamp } # 增加人脸质量过滤 if tmp['sideFace'] == 0 and tmp[ 'quality'] == 1 and tmp['score'] > 0.95: latest_imgs.append(latest_img) if len(latest_imgs) > 0: trackable = True else: trackable = False elif trackable: # 开始追踪 ok, bboxs = tracker.update(img) if ok and detect_count < frame_internal - 1: if detect_count % 10 == 0: logger.info('tracking..., detect_count = %d' % detect_count) detect_count += 1 continue else: # 取detect到的人脸 logger.info('tracking over! detect_count = %d' % detect_count) for latest in latest_imgs: logger.info([camera_id], 'track person success!') face_b64 = latest['image_base64'] # save img to seaweed fs logger.info([camera_id], 'save grabbed detect_result to seaweed fs') assign = master.assign() logger.info([camera_id], 'assign result:', assign) ret = master.upload(assign['url'], assign['fid'], base64_to_bytes(face_b64), assign['fid'] + '.jpg') logger.info([camera_id], 'upload result:', ret) # send to Kafka url = 'http' + ':' + '//' + assign[ 'url'] + '/' + assign['fid'] logger.info('[', camera_id, ']', 'img url:', url) msg = json.dumps({ 'url': url, 'time': latest['time'], 'camera_id': camera_id, 'landmark': latest['landmark'] }) logger.info([camera_id], 'send to kafka: ', msg) kafka.send(topic, msg) # 再次进入detect detect_count = 0 trackable = False logger.info('restart detection') else: if detect_count % 10 == 0: logger.info('detect 0 detect_result, do not track', 'detect count= ', detect_count) detect_count += 1 continue except queue.Empty: logger.error('grab queue empty error, exit') break detect_count += 1 logger.info('抓图进程终止')
def __init__(self): self.logClassInits = Config.get("game", "log_class_inits") if self.logClassInits == 1: Log.debug("Input class init (Input.py)...") Task.__init__(self) self.mouse = pygame.mouse self.mouseListeners = [] self.keyListeners = [] self.systemListeners = [] self.priorityKeyListeners = [] self.controls = Controls() self.activeGameControls = [] self.p2Nav = self.controls.p2Nav self.type1 = self.controls.type[0] self.keyCheckerMode = Config.get("game","key_checker_mode") self.disableKeyRepeat() self.gameGuitars = 0 self.gameDrums = 0 self.gameMics = 0 self.gameBots = 0 # Initialize joysticks pygame.joystick.init() self.joystickNames = {} self.joystickAxes = {} self.joystickHats = {} self.joysticks = [pygame.joystick.Joystick(id) for id in range(pygame.joystick.get_count())] for j in self.joysticks: j.init() self.joystickNames[j.get_id()] = j.get_name() self.joystickAxes[j.get_id()] = [0] * j.get_numaxes() self.joystickHats[j.get_id()] = [(0, 0)] * j.get_numhats() Log.debug("%d joysticks found." % len(self.joysticks)) # Enable music events Audio.Music.setEndEvent(MusicFinished) #Audio.Music.setEndEvent() #MFH - no event required? # Custom key names self.getSystemKeyName = pygame.key.name pygame.key.name = self.getKeyName self.midi = [] if haveMidi: pygame.midi.init() for i in range(pygame.midi.get_count()): interface, name, is_input, is_output, is_opened = pygame.midi.get_device_info(i) Log.debug("Found MIDI device: %s on %s" % (name, interface)) if not is_input: Log.debug("MIDI device is not an input device.") continue try: self.midi.append(pygame.midi.Input(i)) Log.debug("Device opened as device number %d." % len(self.midi)) except pygame.midi.MidiException: Log.error("Error opening device for input.") if len(self.midi) == 0: Log.debug("No MIDI input ports found.") else: Log.notice("MIDI input support is not available; install at least pygame 1.9 to get it.")