103 lines
2.2 KiB
C++
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
|