Esempio n. 1
0
void Audio::playSFX(const std::string &filename, bool relative, const cml::vector2f &pos, float attenuation, float min_dist)
{
    if(sounds.empty())
        for(int i = 0; i < 32; i++)
        {
            SoundPtr s(new sf::Sound());
            s->SetVolume(60.0f);
            sounds.push_back(s);
        }


    SoundPtr s;

    for(unsigned int i = 0; i < sounds.size(); i++)
        if(sounds[i]->GetStatus() == sf::Sound::Stopped)
            s = sounds[i];

    if(!s)
    {
        warning("too many sounds");
        return;
    }

    SoundBufferPtr sb = getSoundBuffer(filename);
    s->SetRelativeToListener(relative);
    s->SetPosition(pos[0], pos[1], 0.0f);
    s->SetAttenuation(attenuation);
    s->SetMinDistance(min_dist);
    s->SetBuffer(*(sb.get()));
    s->Play();
}
Esempio n. 2
0
			//----------
			void Assets::refreshView() {
				auto filterString = ofToLower(this->filter.get());
				this->view->clear();
				this->ownedElements.clear();
				
				auto filterWidget = Widgets::EditableValue<string>::make(this->filter);
				auto filterWidgetWeak = weak_ptr<Element>(filterWidget);
				filterWidget->onValueChange += [this, filterWidgetWeak](const string &) {
					auto filterWidget = filterWidgetWeak.lock();
					this->refreshView();
				};
				this->view->add(filterWidget);

				auto addReloadButton = [this](ElementPtr element, shared_ptr<ofxAssets::BaseAsset> asset) {
					auto button = Widgets::Button::make("Reload",
															[asset]() {
																asset->reload();
															});
					this->ownedElements.push_back(button);
					button->addListenersToParent(element);
					element->onBoundsChange += [button](BoundsChangeArguments & args) {
						auto bounds = args.localBounds;
						const int width = 80;
						bounds.width = width;
						bounds.x = args.localBounds.width - width;
						button->setBounds(bounds);
					};
				};
				
				auto & assetRegister = ofxAssets::Register::X();
				
				this->view->add("Images");
				{
					const auto & images = assetRegister.getImages();
					const auto & names = images.getNames();
					for(const auto & name : names) {
						if (!filterString.empty()) {
							if(ofToLower(name).find(filterString) == string::npos) {
								continue;
							}
						}
						
						auto asset = images[name];
						auto & image = asset->get();
						auto width = image.getWidth();
						auto height = image.getHeight();
						
						auto element = make_shared<Element>();
						
						float longestAxis = max(width, height);
						auto scaleFactor = 48.0f / longestAxis;
						auto drawWidth = width * scaleFactor;
						auto drawHeight = height * scaleFactor;
						
						element->onDraw += [asset, name, width, height, drawWidth, drawHeight](DrawArguments & args) {
							stringstream text;
							text << name << endl;
							text << width << "x" << height;
							ofxCvGui::Utils::drawText(text.str(), 58, 0);
							
							asset->get().draw(5, 0, drawWidth, drawHeight);
						};
						element->setHeight(58.0f);
						this->view->add(element);
						
						addReloadButton(element, asset);
					}
				}
				
				this->view->add("Shaders");
				{
					const auto & shaders = assetRegister.getShaders();
					const auto & names = shaders.getNames();
					
					for(const auto & name : names) {
						if (!filterString.empty()) {
							if(ofToLower(name).find(filterString) == string::npos) {
								continue;
							}
						}
						
						auto asset = shaders[name];
						auto & shader = asset->get();
						bool loaded = shader.isLoaded();
						
						auto element = make_shared<Element>();
						
						element->onDraw += [name, loaded](DrawArguments & args) {
							stringstream text;
							text << name << endl;
							text << "Loaded : " << (loaded ? "true" : "false");
							ofxCvGui::Utils::drawText(text.str(), 5, 0);
						};
						element->setHeight(58.0f);
						this->view->add(element);
						
						addReloadButton(element, asset);
					}
				}
				
				this->view->add("Fonts");
				{
					auto fonts = assetRegister.getFonts();
					auto names = fonts.getNames();
					
					for(const auto & name : names) {
						auto sizes = assetRegister.getFontSizes(name);
						
						for(const auto & size : sizes) {
							auto sizeString = ofToString(size);
							if (!filterString.empty()) {
								if(ofToLower(name).find(filterString) == string::npos && filterString != sizeString) {
									continue;
								}
							}
							
							auto asset = fonts[name];
							
							auto element = make_shared<Element>();
							element->onDraw += [name, size, asset](DrawArguments & args) {
								stringstream text;
								text << name << ", size " << size;
								ofxCvGui::Utils::drawText(text.str(), 5, 38);
								
								asset->get(size).drawString("AaBbCcDdEeFf0123456789", 5, 35);
							};
							element->setScissor(true);
							element->setHeight(58.0f);
							this->view->add(element);
							
							addReloadButton(element, asset);
						}
					}
				}
				
				this->view->add("Sounds");
				{
					auto sounds = assetRegister.getSounds();
					auto names = sounds.getNames();
					for(const auto & name : names) {
						if (!filterString.empty()) {
							if(ofToLower(name).find(filterString) == string::npos) {
								continue;
							}
						}
						
						auto asset = sounds[name];
						auto & buffer = asset->getSoundBuffer();
						auto duration = buffer.getDurationMS();
						auto channels = buffer.getNumChannels();
						
						auto element = make_shared<Element>();
						element->onDraw += [name, duration, channels](DrawArguments & args) {
							stringstream text;
							text << name << endl;
							text << "Duration = " << duration << ". Channels = " << channels;
							
							ofxCvGui::Utils::drawText(text.str(), 0, 5);
						};
						element->setHeight(58.0f);
						this->view->add(element);
						
						auto playButton = Widgets::Toggle::make("Play",
						[asset]() {
							return asset->getSoundPlayer().isPlaying();
						},
						[asset](bool play) {
							if(play) {
								asset->getSoundPlayer().play();
							}
						});
						this->ownedElements.push_back(playButton);
						playButton->addListenersToParent(element);
						
						element->onBoundsChange += [playButton](BoundsChangeArguments & args) {
							auto bounds = args.localBounds;
							bounds.width = 64;
							bounds.x = args.localBounds.width - (80 + 64);
							playButton->setBounds(bounds);
						};
						
						addReloadButton(element, asset);
					}
				}
				this->viewDirty = false;
			}