Spieleprogrammierung/RubiksCube/SceneInterface.h
2025-01-09 01:57:18 +01:00

71 lines
1.2 KiB
C++

#pragma once
#include <queue>
#include "Plane.h"
#include "InputSystem.h"
#include "GameInterface.h"
#include "Shader.h"
#include "Cube.h"
#include <ext/quaternion_float.hpp>
#include <gl/glew.h>
struct Action {
glm::ivec3 axis;
int index;
double duration;
Action() : axis(glm::ivec3(0)), index(0), duration(0.0f) { }
Action(const glm::ivec3& axis, int index, double duration)
: axis(axis), index(index), duration(duration) {
}
};
class SceneInterface : public GameInterface
{
private:
Cube _cube;
std::queue<Action> _actions;
Action currentAction;
InputSystem _inputSystem;
glm::quat _orientation;
bool _wasMouseDown;
glm::vec2 _initialMouseLocation;
Plane _plane;
glm::vec2 _mousePositionPlane;
glm::mat4 _view;
glm::mat4 _perspective;
GLuint _shaderProgram;
GLuint _transformLocation;
GLuint _arrayBufferObject;
GLuint _vertexBufferObject;
const float MIN_DRAG_MAGNITUDE = 0.16f;
void ApplyAction(const Action& action);
void OnDragStart();
void OnDrag(double deltaTime);
void OnDragStop();
public:
void Initialize(GLFWwindow* window) override;
void Update(float deltaTime) override;
void Render(float aspectRatio) override;
void EnqueueAction(const Action& action);
void ClearResources() override;
};