#ifndef BLANK_UI_INTERFACE_HPP_
#define BLANK_UI_INTERFACE_HPP_
+#include "FixedText.hpp"
#include "HUD.hpp"
+#include "MessageBox.hpp"
#include "../app/FPSController.hpp"
#include "../app/IntervalTimer.hpp"
+#include "../audio/Sound.hpp"
#include "../model/geometry.hpp"
#include "../model/OutlineModel.hpp"
#include "../world/Block.hpp"
+#include "../world/EntityCollision.hpp"
+#include "../world/WorldCollision.hpp"
-#include <SDL.h>
+#include <string>
#include <glm/glm.hpp>
+#include <SDL.h>
namespace blank {
-class Chunk;
-class DirectionalLighting;
+class Environment;
+class Viewport;
class World;
class Interface {
bool keyboard_disabled = false;
bool mouse_disabled = false;
+ bool audio_disabled = false;
bool visual_disabled = false;
};
- Interface(const Config &, World &);
+ Interface(const Config &, Environment &, World &);
void HandlePress(const SDL_KeyboardEvent &);
void HandleRelease(const SDL_KeyboardEvent &);
void HandlePress(const SDL_MouseButtonEvent &);
void HandleRelease(const SDL_MouseButtonEvent &);
void Handle(const SDL_MouseWheelEvent &);
- void Handle(const SDL_WindowEvent &) noexcept;
void FaceBlock();
void TurnBlock();
void SelectNext();
void SelectPrevious();
+ void ToggleAudio();
+ void ToggleVisual();
+
+ void ToggleDebug();
+ void UpdateCounter();
+ void UpdatePosition();
+ void UpdateOrientation();
+ void UpdateBlockInfo();
+ void UpdateEntityInfo();
+
+ void PostMessage(const char *);
+ void PostMessage(const std::string &msg) {
+ PostMessage(msg.c_str());
+ }
+
void Update(int dt);
- void Render(DirectionalLighting &) noexcept;
+ void Render(Viewport &) noexcept;
private:
void CheckAim();
+ void UpdateOutline();
private:
+ Environment &env;
World &world;
FPSController ctrl;
HUD hud;
Ray aim;
- Chunk *aim_chunk;
- int aim_block;
- glm::vec3 aim_normal;
+ WorldCollision aim_world;
+ EntityCollision aim_entity;
OutlineModel outline;
glm::mat4 outline_transform;
+ FixedText counter_text;
+ FixedText position_text;
+ FixedText orientation_text;
+ FixedText block_text;
+ FixedText entity_text;
+ Block last_block;
+ Entity *last_entity;
+ MessageBox messages;
+ IntervalTimer msg_timer;
+
Config config;
IntervalTimer place_timer;
Block remove;
Block selection;
- glm::tvec3<int> fwd, rev;
+ Sound place_sound;
+ Sound remove_sound;
+
+ glm::ivec3 fwd, rev;
+
+ bool debug;
};