X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2Fapp.cpp;h=3111091377afe0fd0ccd25fa75b6a18bd5952e45;hb=745729c1935276e6f49d108a0a465214aa93c3cb;hp=d13dfc6aafe7c398a633de83d48bef3857b3993f;hpb=0e3f96ecb9ade07a7b831078fee025aff44d44d4;p=blank.git diff --git a/src/app/app.cpp b/src/app/app.cpp index d13dfc6..3111091 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -2,6 +2,8 @@ #include "Assets.hpp" #include "FrameCounter.hpp" +#include "init.hpp" +#include "../audio/Sound.hpp" #include "../graphics/Font.hpp" #include "../world/BlockType.hpp" #include "../world/Entity.hpp" @@ -26,18 +28,23 @@ string get_asset_path() { namespace blank { -Application::Application(const Config &config) -: init(config.doublebuf, config.multisampling) +Application::Application(Window &win, const Config &config) +: window(win) , viewport() , assets(get_asset_path()) +, audio() , counter() , world(config.world) -, interface(config.interface, assets, counter, world) +, interface(config.interface, assets, audio, counter, world) , test_controller(MakeTestEntity(world)) , running(false) { viewport.VSync(config.vsync); } +Application::~Application() { + audio.StopAll(); +} + Entity &Application::MakeTestEntity(World &world) { Entity &e = world.AddEntity(); e.Name("test"); @@ -81,7 +88,7 @@ void Application::RunS(size_t n, size_t t) { void Application::Run() { running = true; Uint32 last = SDL_GetTicks(); - init.window.GrabMouse(); + window.GrabMouse(); while (running) { Uint32 now = SDL_GetTicks(); int delta = now - last; @@ -138,10 +145,10 @@ void Application::HandleEvents() { void Application::Handle(const SDL_WindowEvent &event) { switch (event.event) { case SDL_WINDOWEVENT_FOCUS_GAINED: - init.window.GrabMouse(); + window.GrabMouse(); break; case SDL_WINDOWEVENT_FOCUS_LOST: - init.window.ReleaseMouse(); + window.ReleaseMouse(); break; case SDL_WINDOWEVENT_RESIZED: viewport.Resize(event.data1, event.data2); @@ -156,6 +163,14 @@ void Application::Update(int dt) { interface.Update(dt); test_controller.Update(dt); world.Update(dt); + + glm::mat4 trans = world.Player().Transform(Chunk::Pos(0, 0, 0)); + glm::vec3 dir(trans * glm::vec4(0.0f, 0.0f, -1.0f, 0.0f)); + glm::vec3 up(trans * glm::vec4(0.0f, 1.0f, 0.0f, 0.0f)); + audio.Position(world.Player().Position()); + audio.Velocity(world.Player().Velocity()); + audio.Orientation(dir, up); + counter.ExitUpdate(); } @@ -169,12 +184,13 @@ void Application::Render() { interface.Render(viewport); counter.ExitRender(); - init.window.Flip(); + window.Flip(); } Assets::Assets(const string &base) -: fonts(base + "fonts/") { +: fonts(base + "fonts/") +, sounds(base + "sounds/") { } @@ -183,6 +199,11 @@ Font Assets::LoadFont(const string &name, int size) const { return Font(full.c_str(), size); } +Sound Assets::LoadSound(const string &name) const { + string full = sounds + name + ".wav"; + return Sound(full.c_str()); +} + void FrameCounter::EnterFrame() noexcept { last_enter = SDL_GetTicks();