71 lines
1.2 KiB
C++
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;
|
|
};
|
|
|