Files
tanks-reborn/source/game/engine.hpp

103 lines
2.2 KiB
C++

#ifndef TANKS_ENGINE_HPP
#define TANKS_ENGINE_HPP
#include <cstdint>
#include <entt/entt.hpp>
#include <game/level.hpp>
#include <game/model.hpp>
#include <render/context.hpp>
#include <render/renderer.hpp>
#include <render/shader_compiler.hpp>
#include <ui/user_input.hpp>
namespace trb::game {
class engine {
private:
ui::user_input input = {};
ui::display display;
render::renderer renderer;
entt::basic_registry<std::uint32_t> entities = {};
struct game_models {
game::scene boundary;
game::scene boxes;
};
game_models models;
glm::vec3 area_origin;
glm::vec3 area_size;
glm::vec3 tile_size;
std::vector<std::uint32_t> level_border_entity_ids = {};
glm::vec3 full_box_size;
glm::vec3 half_box_size;
glm::mat4 box_transform;
struct map_boxes {
std::uint32_t solid_full;
std::uint32_t solid_half;
std::uint32_t cork_full;
std::uint32_t cork_half;
};
map_boxes box_entities;
std::optional<level> current_level = level();
bool is_editing_level = false;
struct {
bool playing_bounds = false;
bool individual_tiles = false;
bool level_editor = false;
} debug_drawing;
// std::nullopt;
[[nodiscard]] static game_models
load_models(std::filesystem::path model_directory);
[[nodiscard]] map_boxes load_boxes();
[[nodiscard]] std::vector<std::uint32_t>
load_scene_to_ecs(game::scene &scene);
[[nodiscard]] render::request
add_level_bounds_to_render_request(render::request request) const;
[[nodiscard]] render::request
add_level_to_render_request(render::request request, level *level) const;
[[nodiscard]] render::request
add_playing_bounds_to_render_request(render::request request) const;
[[nodiscard]] render::request
add_tiles_to_render_request(render::request request) const;
struct mesh_bounds {
glm::vec3 min;
glm::vec3 max;
glm::vec3 size;
};
[[nodiscard]] mesh_bounds compute_size_of_mesh(const mesh_node &meshes);
void calculate_game_plane_size();
void calculate_box_size();
[[nodiscard]] glm::mat4
transform_given_coordinate(glm::uvec2 coordinate) const;
void do_level_editor_ui();
void do_debug_ui();
public:
engine();
void run();
};
} // namespace trb::game
#endif