X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2Fapp.cpp;h=86c90d83f043d644f83a25fcfecc2b8ce99a0872;hb=79bff420037f150bd6efd2eef08bd06afafeb068;hp=d13dfc6aafe7c398a633de83d48bef3857b3993f;hpb=0e3f96ecb9ade07a7b831078fee025aff44d44d4;p=blank.git diff --git a/src/app/app.cpp b/src/app/app.cpp index d13dfc6..86c90d8 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,27 +28,21 @@ 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) -, test_controller(MakeTestEntity(world)) +, interface(config.interface, assets, audio, counter, world) +, spawner(world) , running(false) { viewport.VSync(config.vsync); } -Entity &Application::MakeTestEntity(World &world) { - Entity &e = world.AddEntity(); - e.Name("test"); - e.Position({ 0.0f, 0.0f, 0.0f }); - e.Bounds({ { -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f } }); - e.WorldCollidable(true); - e.SetShape(world.BlockTypes()[1].shape, { 1.0f, 1.0f, 0.0f }); - e.AngularVelocity(glm::quat(glm::vec3{ 0.00001f, 0.000006f, 0.000013f })); - return e; +Application::~Application() { + audio.StopAll(); } @@ -81,7 +77,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 +134,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); @@ -154,8 +150,16 @@ void Application::Handle(const SDL_WindowEvent &event) { void Application::Update(int dt) { counter.EnterUpdate(); interface.Update(dt); - test_controller.Update(dt); + spawner.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 +173,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 +188,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();