#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"
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");
void Application::Run() {
running = true;
Uint32 last = SDL_GetTicks();
- init.window.GrabMouse();
+ window.GrabMouse();
while (running) {
Uint32 now = SDL_GetTicks();
int delta = now - last;
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);
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();
}
interface.Render(viewport);
counter.ExitRender();
- init.window.Flip();
+ window.Flip();
}
Assets::Assets(const string &base)
-: fonts(base + "fonts/") {
+: fonts(base + "fonts/")
+, sounds(base + "sounds/") {
}
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();