Skip to content

Commit

Permalink
Update rubik and cuboid for ecs usage
Browse files Browse the repository at this point in the history
  • Loading branch information
NeonSky committed Sep 26, 2020
1 parent 9a1183e commit 6068ce6
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 20 deletions.
13 changes: 3 additions & 10 deletions src/app/rubiks_cube.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,7 @@ static const graphics::Color red(1.0F, 0.0F, 0.0F);
static const graphics::Color black(0.0F, 0.0F, 0.0F);

RubiksCube::RubiksCube(graphics::Renderer& renderer)
: RubiksCube(renderer, geometry::Transform()) {}

RubiksCube::RubiksCube(graphics::Renderer& renderer, engine::geometry::Transform transform)
: _renderer(renderer),
_transform(std::move(transform)) {
: _renderer(renderer) {

for (int z = 0; z < 3; z++) {
for (int y = 0; y < 3; y++) {
Expand All @@ -43,10 +39,6 @@ RubiksCube::RubiksCube(graphics::Renderer& renderer, engine::geometry::Transform
}
}

auto RubiksCube::transform() -> geometry::Transform& {
return _transform;
}

void RubiksCube::rotate_left(bool ccw) {
geometry::Rotation rot = geometry::Rotation(geometry::pi / 2.0F * (ccw ? 1.0F : -1.0F), 0.0F, 0.0F);

Expand Down Expand Up @@ -227,9 +219,10 @@ void RubiksCube::rotate_front(bool ccw) {
std::swap(_pieces[2][1][0], _pieces[2][1][2]);
}

// void RubiksCube::render(graphics::opengl::Context& ctx, geometry::Matrix<4> view_projection) {
void RubiksCube::render(geometry::Matrix<4> view_projection) {
for (unsigned int z = 0; z < 3; z++)
for (unsigned int y = 0; y < 3; y++)
for (unsigned int x = 0; x < 3; x++)
_pieces[z][y][x]->render(view_projection * _transform.matrix());
_pieces[z][y][x]->render(view_projection);
}
5 changes: 1 addition & 4 deletions src/app/rubiks_cube.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@ namespace app {
class RubiksCube {
public:
RubiksCube(engine::graphics::Renderer& renderer);
RubiksCube(engine::graphics::Renderer& renderer, engine::geometry::Transform transform);

auto transform() -> engine::geometry::Transform&;

/// @brief Rotates the left face by 90 degrees.
///
Expand Down Expand Up @@ -46,12 +43,12 @@ namespace app {

/// @brief Renders this model's current state.
void render(engine::geometry::Matrix<4> view_projection);
// void render(engine::graphics::opengl::Context& ctx, engine::geometry::Matrix<4> view_projection);

private:
/// @{
/// Private state.
std::reference_wrapper<engine::graphics::Renderer> _renderer;
engine::geometry::Transform _transform;
std::array<std::array<std::array<std::unique_ptr<RubiksCubePiece>, 3>, 3>, 3> _pieces;
/// @}
};
Expand Down
4 changes: 2 additions & 2 deletions src/engine/graphics/cuboid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void Cuboid::compile() {
CHECK_GL_ERROR();
}

void Cuboid::render(geometry::Matrix<4> view_projection, bool draw_corners) {
void Cuboid::render(geometry::Matrix<4> view_projection) {
if (!_renderer.get().current_context().is_vao(_vao))
compile();

Expand All @@ -67,7 +67,7 @@ void Cuboid::render(geometry::Matrix<4> view_projection, bool draw_corners) {

glDrawElements(GL_TRIANGLES, 3 * 12, GL_UNSIGNED_INT, nullptr);

if (draw_corners) {
if (_draw_corners) {
glPointSize(10.0F);
glDrawElements(GL_POINTS, 3 * 12, GL_UNSIGNED_INT, nullptr);
}
Expand Down
10 changes: 6 additions & 4 deletions src/engine/graphics/cuboid.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ namespace engine::graphics {

/// @todo Consider relying on a geometry shader to go from Transform -> 8 corners. Sending a Transform is quite expensive though. Would be worthwhile if the cuboid was a AABB.
/// @todo Add colored outline option by using Polygon Offset.
/// @todo Should have ref-wrapper not a pointer to renderer.
/// @TODO Remove transform..? Weird to have transform component and this transform.
/// @TODO REMOVE. Use component::cuboid.
class Cuboid {
public:
Cuboid(Renderer& renderer, geometry::Cuboid geometry, const Color& color);

void compile();
void render(geometry::Matrix<4> view_projection, bool draw_corners = false);
void render(geometry::Matrix<4> view_projection);

auto transform() -> geometry::Transform&;

Expand All @@ -26,7 +27,8 @@ namespace engine::graphics {
geometry::Cuboid _geometry;
Color _color;
Shader _shader;
unsigned int _vao = 0;
unsigned int _vbo = 0;
unsigned int _vao = 0;
unsigned int _vbo = 0;
bool _draw_corners = false;
};
}

0 comments on commit 6068ce6

Please sign in to comment.