January 28, 2014♦
☀
E
F
F
L
U
E
N
C
E
☀
from os import listdir
from os.path import join
from pygame.mixer import Channel, Sound, music, find_channel
from GameChild import *
from Input import *
class Audio(GameChild):
current_channel = None
paused = False
muted = False
def __init__(self, game):
GameChild.__init__(self, game)
self.delegate = self.get_delegate()
self.load_fx()
self.subscribe(self.respond)
def load_fx(self):
fx = {}
if self.get_configuration().has_option("audio", "sfx-path"):
root = self.get_resource("audio", "sfx-path")
if root:
for name in listdir(root):
fx[name.split(".")[0]] = Sound(join(root, name))
self.fx = fx
def respond(self, event):
if self.delegate.compare(event, "mute"):
self.mute()
def mute(self):
self.muted = True
self.set_volume()
def unmute(self):
self.muted = False
self.set_volume()
def set_volume(self):
volume = int(not self.muted)
music.set_volume(volume)
if self.current_channel:
self.current_channel.set_volume(volume)
def play_bgm(self, path, stream=False):
self.stop_current_channel()
if stream:
music.load(path)
music.play(-1)
else:
self.current_channel = Sound(path).play(-1)
self.set_volume()
def stop_current_channel(self):
music.stop()
if self.current_channel:
self.current_channel.stop()
self.current_channel = None
self.paused = False
def play_fx(self, name, panning=.5):
if not self.muted:
channel = find_channel(True)
if panning != .5:
offset = 1 - abs(panning - .5) * 2
if panning < .5:
channel.set_volume(1, offset)
else:
channel.set_volume(offset, 1)
channel.play(self.fx[name])
def pause(self):
channel = self.current_channel
paused = self.paused
if paused:
music.unpause()
if channel:
channel.unpause()
else:
music.pause()
if channel:
channel.pause()
self.paused = not paused
def is_bgm_playing(self):
current = self.current_channel
if current and current.get_sound():
return True
return music.get_busy()
from lib.pgfw.pgfw.Configuration import TypeDeclarations
class Types(TypeDeclarations):
additional_defaults = {
"gaia": {"path": "path",
"int": "offset"},
"introduction": {"int": ["segments", "transition"]},
"epithet": {"int": ["width", "margin", "font-size", "it-size",
"outline-flash"],
"float": "scramble",
"int-list": ["color", "i-color", "t-color"]},
"spanky": {"path": "path",
"int-list": ["jump-order", "jump-framerate", "wag-order",
"wag-framerate", "walk-order",
"walk-framerate"]},
"title": {"path": "background"},
"home": {"path": ["static-environment-path", "audio"],
"int": ["food-inactive-x", "food-inactive-y", "food-active-y",
"food-margin", "tv-edge"],
"float": "food-step"},
"collection": {"int-list": ["coordinates", "size"]},
"view": {"int": ["hue-shift", "alpha-step"],
"path": "path",
"int-list": "coordinates"},
"level": {"int": ["stall", "fall-pause", "entrance-offset"],
"path": "audio",
"int-list": "background-color",
"float": ["gravity", "entrance-speed"],
"float-list": "velocity"},
"door": {"int": "x",
"path": "path"},
"exit-arrow": {"int": ["width", "height", "overlap", "arrow-count",
"frame-count", "interval", "saturation",
"offset", "fade-in", "fade-out", "alpha"],
"int-list": "hue"},
"land": {"int": ["horizon", "gradient", "x-step", "height"],
"float": ["spacing-factor", "velocity-ratio",
"altitude-ratio", "fade-speed"]},
"planet": {"path": "path",
"int": ["interval", "shifts", "offset"]},
"moon": {"path": "path",
"int": "margin",
"float": "tint-level",
"int-list": ["count", "interval"]},
"stars": {"int-list": ["count", "size", "saturation"]},
"gun": {"path": "path",
"int": "framerate"},
"drop": {"float": "spawn-decrease",
"int": ["consecutive", "speed", "first-spawn", "blob-length"]},
"food": {"path": ["path", "mouth-bg-path", "upper-jaw-path",
"lower-jaw-path"],
"int": ["offset", "crouch", "mouth-bg-alpha", "mouth-gap",
"blink-rate", "freeze-length"],
"int-list": ["angle-range", "mouth-offset", "mouth-size",
"mouth-bg-shrink", "drop-velocity"],
"float": ["dx", "dx-boost"]},
"platform": {"int": ["height", "first-gap", "buffer", "thickness"],
"int-list": ["gap", "width"]},
"obstacle": {"int": "blink-rate"},
"missile": {"int": ["margin", "delay", "angle"],
"int-list": "count",
"float": ["chance", "peak", "speed"]},
"hurdle": {"int-list": ["count", "first-range", "margin"],
"int": ["delay", "pause"],
"float": ["chance", "speed"]},
"spikes": {"int": "delay",
"float": ["speed", "chance"]},
"fireball": {"int": ["delay", "peak"],
"int-list": "count",
"float": ["chance", "speed"]},
"window": {"path": "path",
"int": ["alpha", "remain-length", "margin"],
"float": "fade-step"},
"siphon": {"int-list": "root-colors"},
}