From 13f84fc9bca8a171654416ba2645f49a935d1b82 Mon Sep 17 00:00:00 2001 From: Nathan Date: Mon, 20 Apr 2026 11:21:57 -0500 Subject: [PATCH] orbit --- .../Archimedes-Modules/Rubiks/Rubiks.cpp | 3 +- .../Archimedes-Modules/Rubiks/RubiksCube.h | 58 ++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/modules/Archimedes-Modules/Rubiks/Rubiks.cpp b/src/modules/Archimedes-Modules/Rubiks/Rubiks.cpp index baadedd..e517958 100644 --- a/src/modules/Archimedes-Modules/Rubiks/Rubiks.cpp +++ b/src/modules/Archimedes-Modules/Rubiks/Rubiks.cpp @@ -73,7 +73,7 @@ void Rubiks::onLoad() { void Rubiks::run() { - static float scale = 1.0f, scalePrev = 1.0f; + static float scale = 0.8f, scalePrev = 1.0f; static glm::vec3 pos(0), rot(0); static glm::vec3 posPrev(0), rotPrev(0); @@ -98,6 +98,7 @@ void Rubiks::run() { camRotPrev = camRot; for(auto& b : rubiksCube.getBlocks()) { + b.scaleTo(scale); window->getRenderer()->draw( b.getMesh(), b.getTransform(), diff --git a/src/modules/Archimedes-Modules/Rubiks/RubiksCube.h b/src/modules/Archimedes-Modules/Rubiks/RubiksCube.h index 02ac65f..c9256a6 100644 --- a/src/modules/Archimedes-Modules/Rubiks/RubiksCube.h +++ b/src/modules/Archimedes-Modules/Rubiks/RubiksCube.h @@ -9,6 +9,9 @@ #include "utils/Renderer/Renderer.h" +#include +#include + class RubiksCube { public: @@ -34,12 +37,65 @@ class RubiksCube { for(int i = 0; i < blocks.size(); i++) { blocks.at(i) = Archimedes::Body(rt); blocks.at(i).moveTo(positions.at(i)); - blocks.at(i).scaleTo(0.1f); } } std::vector getBlocks() { return blocks; } + enum class Direction { + X, Y, Z + }; + + enum class Plate { + Top = 1, Middle = 0, Bottom = -1 + }; + + void orbit(Archimedes::Body& body, glm::vec3 center, glm::vec3 direction, float radians) { + glm::vec3 o = body.getPosition() - center; + + direction = glm::normalize(glm::cross(glm::cross(o, direction), o)); + + body.setTransform(glm::rotate(body.getTransform(), radians, direction)); + } + + std::vector selectPlate(Plate plate, Direction direction) { + std::vector p; + p.reserve(plate == Plate::Middle ? 8 : 9); + switch(direction) { + case Direction::X: + for(auto& b : blocks) { + + if(b.getPosition().x == (float)plate) { + p.push_back(b); + } + } + break; + case Direction::Y: + break; + case Direction::Z: + break; + default: + break; + } + + return p; + } + + void turn(Plate plate, Direction direction) { + switch(direction) { + case Direction::X: + break; + case Direction::Y: + break; + case Direction::Z: + break; + default: + break; + } + } + + void update() {} + private: std::vector blocks = std::vector(26);