if (surface_reset_anim_timer > SURFACE_RESET_TIME) {
flags.reset(0);
} else {
- for (auto &tri : surface_triangles) {
+ for (auto &tri : *surface_triangles) {
tri.update(dt);
}
}
unsigned char alpha =
((1.0F - surface_reset_anim_timer / SURFACE_RESET_TIME_TRI_DRAW) *
255.0F);
- surface_triangles.at(x * 2 + y * SURFACE_UNIT_WIDTH * 2)
+ surface_triangles->at(x * 2 + y * SURFACE_UNIT_WIDTH * 2)
.draw(Color{color.r, color.g, color.b, alpha});
- surface_triangles.at(x * 2 + 1 + y * SURFACE_UNIT_WIDTH * 2)
+ surface_triangles->at(x * 2 + 1 + y * SURFACE_UNIT_WIDTH * 2)
.draw(Color{color.r, color.g, color.b, alpha});
}
}
// standard library includes
#include <array>
#include <bitset>
+#include <memory>
#include <optional>
// third party includes
SURFACE_UNIT_WIDTH * SURFACE_UNIT_HEIGHT>
surface;
std::array<BoundingBox, SURFACE_UNIT_WIDTH * SURFACE_UNIT_HEIGHT> surface_bbs;
- std::array<SurfaceTriangle, SURFACE_UNIT_WIDTH * SURFACE_UNIT_HEIGHT * 2>
- surface_triangles;
std::array<Walker, 4> walkers;
Camera3D camera;
Vector3 camera_pos;
Vector3 camera_target;
Vector3 mouse_hit;
+ std::unique_ptr<std::array<SurfaceTriangle,
+ SURFACE_UNIT_WIDTH * SURFACE_UNIT_HEIGHT * 2> >
+ surface_triangles;
unsigned int idx_hit;
std::optional<unsigned int> controlled_walker_idx;
const int left_text_width;
// standard library includes
#include <array>
+#include <memory>
// third party includes
#include <raylib.h>
};
template <typename SurfaceUnitOptT, std::size_t ASize>
-extern std::array<SurfaceTriangle, ASize * 2> surface_to_triangles(
- const std::array<SurfaceUnitOptT, ASize> &surface,
- const std::size_t width) {
- std::array<SurfaceTriangle, ASize * 2> triangles;
+extern std::unique_ptr<std::array<SurfaceTriangle, ASize * 2> >
+surface_to_triangles(const std::array<SurfaceUnitOptT, ASize> &surface,
+ const std::size_t width) {
+ std::unique_ptr<std::array<SurfaceTriangle, ASize * 2> > triangles =
+ std::make_unique<std::array<SurfaceTriangle, ASize * 2> >();
for (std::size_t idx = 0; idx < ASize; ++idx) {
std::size_t x = idx % width;
std::size_t toffset = x * 2 + y * width * 2;
if (!surface[idx].has_value()) {
- triangles.at(toffset) = SurfaceTriangle();
- triangles.at(toffset + 1) = SurfaceTriangle();
+ triangles->at(toffset) = SurfaceTriangle();
+ triangles->at(toffset + 1) = SurfaceTriangle();
continue;
}
const auto &surface_unit = surface[idx].value();
- triangles.at(toffset) = SurfaceTriangle(
+ triangles->at(toffset) = SurfaceTriangle(
Vector3{0.5F, surface_unit.ne, -0.5F},
Vector3{-0.5F, surface_unit.nw, -0.5F},
Vector3{-0.5F, surface_unit.sw, 0.5F},
Vector3{posx,
(surface_unit.ne + surface_unit.nw + surface_unit.sw) / 3.0F,
posz});
- triangles.at(toffset + 1) = SurfaceTriangle(
+ triangles->at(toffset + 1) = SurfaceTriangle(
Vector3{0.5F, surface_unit.ne, -0.5F},
Vector3{-0.5F, surface_unit.sw, 0.5F},
Vector3{0.5F, surface_unit.se, 0.5F},