Have a basic little click sound going, but hover events will need some work. I'm doing those on every mouse move.

master
Zed A. Shaw 4 days ago
parent 7186c2ecb0
commit 2ecef8d9f9
  1. 4
      assets/config.json
  2. 1
      combat_ui.cpp
  3. 15
      guecs.cpp
  4. 7
      guecs.hpp
  5. 10
      sound.cpp
  6. 10
      sound.hpp

@ -17,7 +17,9 @@
"Marmot_Scream_1": "assets/sounds/Creature_Sounds-Marmot_Scream_1.ogg", "Marmot_Scream_1": "assets/sounds/Creature_Sounds-Marmot_Scream_1.ogg",
"blank": "assets/sounds/blank.ogg", "blank": "assets/sounds/blank.ogg",
"pickup": "assets/sounds/pickup.ogg", "pickup": "assets/sounds/pickup.ogg",
"ambient_1": "assets/sounds/ambient_1.ogg" "ambient_1": "assets/sounds/ambient_1.ogg",
"ui_click": "assets/sounds/ui_click.ogg",
"ui_hover": "assets/sounds/ui_hover.ogg"
}, },
"sprites": { "sprites": {
"gold_savior": "gold_savior":

@ -17,6 +17,7 @@ namespace gui {
auto button = $gui.entity(name); auto button = $gui.entity(name);
$gui.set<Sprite>(button, {"leather_pouch-128"}); $gui.set<Sprite>(button, {"leather_pouch-128"});
// $gui.set<Rectangle>(button, {}); // $gui.set<Rectangle>(button, {});
$gui.set<Sound>(button, {"ui_click", "ui_hover"});
$gui.set<Label>(button, {label}); $gui.set<Label>(button, {label});
$gui.set<Effect>(button, {.duration=0.1f}); $gui.set<Effect>(button, {.duration=0.1f});
$gui.set<Clickable>(button, $gui.set<Clickable>(button,

@ -1,5 +1,6 @@
#include "guecs.hpp" #include "guecs.hpp"
#include "shaders.hpp" #include "shaders.hpp"
#include "sound.hpp"
namespace guecs { namespace guecs {
@ -58,6 +59,14 @@ namespace guecs {
bar.init(cell); bar.init(cell);
} }
void Sound::play(bool hover) {
if(hover) {
// BUG: need to sort out how to make hover a one shot thing
// sound::play(on_hover);
} else {
sound::play(on_click);
}
}
void Background::init() { void Background::init() {
sf::Vector2f size{float(w), float(h)}; sf::Vector2f size{float(w), float(h)};
@ -232,6 +241,12 @@ namespace guecs {
effect.run(); effect.run();
} }
if($world.has<Sound>(ent)) {
auto& sound = $world.get<Sound>(ent);
sound.play(hover);
}
if(hover) return; // kinda gross if(hover) return; // kinda gross
if(auto action_data = get_if<ActionData>(ent)) { if(auto action_data = get_if<ActionData>(ent)) {

@ -97,6 +97,13 @@ namespace guecs {
shared_ptr<sf::Shader> checkout_ptr(); shared_ptr<sf::Shader> checkout_ptr();
}; };
struct Sound {
std::string on_click{""};
std::string on_hover{""};
void play(bool hover);
};
struct Background { struct Background {
float x = 0.0f; float x = 0.0f;
float y = 0.0f; float y = 0.0f;

@ -37,7 +37,7 @@ namespace sound {
} }
} }
void load(const std::string name, const std::string sound_path) { void load(const std::string& name, const std::string& sound_path) {
dbc::check(fs::exists(sound_path), fmt::format("sound file {} does not exist", sound_path)); dbc::check(fs::exists(sound_path), fmt::format("sound file {} does not exist", sound_path));
// create the buffer and keep in the buffer map // create the buffer and keep in the buffer map
@ -51,7 +51,7 @@ namespace sound {
SMGR.sounds.try_emplace(name, buffer, sound); SMGR.sounds.try_emplace(name, buffer, sound);
} }
void play(const std::string name, bool loop) { void play(const std::string& name, bool loop) {
if(muted) return; if(muted) return;
auto& pair = get_sound_pair(name); auto& pair = get_sound_pair(name);
pair.sound->setLooping(loop); pair.sound->setLooping(loop);
@ -59,18 +59,18 @@ namespace sound {
pair.sound->play(); pair.sound->play();
} }
void stop(const std::string name) { void stop(const std::string& name) {
auto& pair = get_sound_pair(name); auto& pair = get_sound_pair(name);
pair.sound->stop(); pair.sound->stop();
} }
bool playing(const std::string name) { bool playing(const std::string& name) {
auto& pair = get_sound_pair(name); auto& pair = get_sound_pair(name);
auto status = pair.sound->getStatus(); auto status = pair.sound->getStatus();
return status == sf::SoundSource::Status::Playing; return status == sf::SoundSource::Status::Playing;
} }
void play_at(const std::string name, float x, float y, float z) { void play_at(const std::string& name, float x, float y, float z) {
auto& pair = get_sound_pair(name); auto& pair = get_sound_pair(name);
pair.sound->setPosition({x, y, z}); pair.sound->setPosition({x, y, z});
pair.sound->play(); pair.sound->play();

@ -16,11 +16,11 @@ namespace sound {
}; };
void init(); void init();
void load(const std::string name, const std::string path); void load(const std::string& name, const std::string& path);
void play(const std::string name, bool loop=false); void play(const std::string& name, bool loop=false);
void play_at(const std::string name, float x, float y, float z); void play_at(const std::string& name, float x, float y, float z);
void stop(const std::string name); void stop(const std::string& name);
void mute(bool setting); void mute(bool setting);
bool playing(const std::string name); bool playing(const std::string& name);
SoundPair& get_sound_pair(const std::string& name); SoundPair& get_sound_pair(const std::string& name);
} }

Loading…
Cancel
Save