19/src/tools/TRS.cpp
2023-08-19 13:08:45 +03:00

133 lines
4.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "tools/TRS.h"
// Инициализирует дополнительную информацию модели
void TRS::init_etc()
{
for (int i = 0; i < tool.parts.size(); i++)
tool.parts[i].id.etc = i+1;
}
// Рендер инструмента нужного типа для выбранного объекта
void TRS::render(GLuint64 selectedID, ShaderProgram &shaderProgram, UBO &material_buffer)
{
// Если есть выбранная модель - рендерим инструмент для неё
if (selectedID)
{
// Указатель на объект
I_Movable* selectedObject = (I_Movable*) selectedID;
// Смещение инструмента в центр модели
tool.position = selectedObject->getPos();
// Замена идентификатора инструмента идентификатором выбранного объекта
tool.set_group_id(selectedID); // без замены доп. информации
// Рендер инструмента
tool.render(shaderProgram, material_buffer);
}
}
Transform::Transform()
{
tool = loadOBJtoGroupted("../resources/models/tools/transform.obj", "../resources/models/tools/", "../resources/textures/");
// Масштабирование
tool.scale = glm::vec3(0.3);
// Инициализация дополнительной информации
init_etc();
}
// Взаимодействие с инструментом
void Transform::process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos)
{
// Если есть выбранная модель - рендерим инструмент для неё
if (selectedID)
{
// Указатель на объект
Movable* selectedObject = (Movable*) selectedID;
glm::vec3 dVec(0);
if (etc & 01)
dVec.x = dpos.x * T_SENSITIVITY;
if (etc & 02)
dVec.y = dpos.y * T_SENSITIVITY;
if (etc & 04)
dVec.z = dpos.z * T_SENSITIVITY;
if (etc > 0)
selectedObject->dPosition(dVec);
}
}
Rotate::Rotate()
{
tool = loadOBJtoGroupted("../resources/models/tools/rotate.obj", "../resources/models/tools/", "../resources/textures/");
// Масштабирование
tool.scale = glm::vec3(0.3);
// Инициализация дополнительной информации
tool.parts[0].id.etc = 1;
tool.parts[1].id.etc = 2;
tool.parts[2].id.etc = 4;
}
// Взаимодействие с инструментом
void Rotate::process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos)
{
// Если есть выбранная модель - рендерим инструмент для неё
if (selectedID)
{
// Указатель на объект
Movable* selectedObject = (Movable*) selectedID;
glm::vec3 dVec(0);
if (etc & 01)
dVec.x = dpos.x * R_SENSITIVITY;
if (etc & 02)
dVec.y = dpos.y * R_SENSITIVITY;
if (etc & 04)
dVec.z = dpos.z * R_SENSITIVITY;
if (etc > 0)
selectedObject->dRotation(dVec);
}
}
Scale::Scale()
{
tool = loadOBJtoGroupted("../resources/models/tools/scale.obj", "../resources/models/tools/", "../resources/textures/");
// Масштабирование
tool.scale = glm::vec3(0.3);
// Инициализация дополнительной информации
init_etc();
}
// Взаимодействие с инструментом
void Scale::process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos)
{
// Если есть выбранная модель - рендерим инструмент для неё
if (selectedID)
{
// Указатель на объект
Movable* selectedObject = (Movable*) selectedID;
glm::vec3 dVec(0);
if (etc & 01)
dVec.x = dpos.x * S_SENSITIVITY;
if (etc & 02)
dVec.y = dpos.y * S_SENSITIVITY;
if (etc & 04)
dVec.z = dpos.z * S_SENSITIVITY;
if (etc > 0)
selectedObject->dScale(dVec);
}
}