133 lines
4.2 KiB
C++
133 lines
4.2 KiB
C++
#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);
|
||
}
|
||
}
|