#include "../app/FrameCounter.hpp"
#include "../app/init.hpp"
#include "../audio/Audio.hpp"
+#include "../audio/SoundBank.hpp"
#include "../graphics/Font.hpp"
#include "../graphics/Viewport.hpp"
#include "../io/TokenStreamReader.hpp"
}
void PlayerController::UpdatePlayer() noexcept {
- constexpr float max_vel = 0.005f;
+ constexpr float max_vel = 5.0f; // in m/s
if (dirty) {
player.GetEntity().Orientation(glm::quat(glm::vec3(pitch, yaw, 0.0f)));
- player.GetEntity().Velocity(glm::rotateY(move_dir * max_vel, yaw));
+ player.GetEntity().TargetVelocity(glm::rotateY(move_dir * max_vel, yaw));
Ray aim = player.Aim();
if (!world.Intersection(aim, glm::mat4(1.0f), player.GetEntity().ChunkCoords(), aim_world)) {
}
-InteractiveManipulator::InteractiveManipulator(Environment &env, Entity &player)
+InteractiveManipulator::InteractiveManipulator(Audio &audio, const SoundBank &sounds, Entity &player)
: player(player)
-, audio(env.audio)
-, place_sound(env.loader.LoadSound("thump"))
-, remove_sound(env.loader.LoadSound("plop")) {
+, audio(audio)
+, sounds(sounds) {
}
void InteractiveManipulator::SetBlock(Chunk &chunk, int index, const Block &block) {
+ const BlockType &old_type = chunk.Type(index);
chunk.SetBlock(index, block);
+ const BlockType &new_type = chunk.Type(index);
glm::vec3 coords = chunk.ToSceneCoords(player.ChunkCoords(), Chunk::ToCoords(index));
- // TODO: get sound effect from block type
- if (block.type == 0) {
- audio.Play(remove_sound, coords);
+ if (new_type.id == 0) {
+ if (old_type.remove_sound >= 0) {
+ audio.Play(sounds[old_type.remove_sound], coords);
+ }
} else {
- audio.Play(place_sound, coords);
+ if (new_type.place_sound >= 0) {
+ audio.Play(sounds[new_type.place_sound], coords);
+ }
}
}