Commit fcb1f446 authored by D-AIRY's avatar D-AIRY

helper fix

parent 05d5dccc
common @ 1f2368a8
Subproject commit fae22b172af6ec77e9e767aecd0d012e8fd6414a
Subproject commit 1f2368a8cd9f5006648d330fd07fd33b67d9d497
......@@ -5,6 +5,7 @@ See the license in LICENSE
***********************************************************/
#include <input/sxinput.h>
#include <physics/sxphysics.h>
#include "axes_helper.h"
CAxesHelper::CAxesHelper()
......@@ -38,6 +39,7 @@ void CAxesHelper::setPosition(const float3 & pos)
void CAxesHelper::setRotation(const SMQuaternion & rot)
{
m_qRotation = rot;
//m_vRotation = QuatToEuler(rot);
m_vRotation = SMMatrixToEuler(rot.GetMatrix());
//m_mHelperMat = SMMatrixScaling(m_vScale) * m_qRotation.GetMatrix() * SMMatrixTranslation(m_vPosition);
}
......@@ -45,7 +47,9 @@ void CAxesHelper::setRotation(const SMQuaternion & rot)
void CAxesHelper::setRotation(const float3 & rot)
{
m_vRotation = rot;
m_qRotation = SMQuaternion(rot.x, 'x') * SMQuaternion(rot.y, 'y') * SMQuaternion(rot.z, 'z');
m_qRotation = SMQuaternion(-rot.x, 'x') * SMQuaternion(-rot.y, 'y') * SMQuaternion(-rot.z, 'z');
//m_qRotation.w *= -1.0f;
//m_qRotation = SMQuaternion(rot.z, 'z') * SMQuaternion(rot.y, 'y') * SMQuaternion(rot.x, 'x');
//m_mHelperMat = SMMatrixScaling(m_vScale) * m_qRotation.GetMatrix() * SMMatrixTranslation(m_vPosition);
}
......@@ -626,6 +630,7 @@ void CAxesHelper::update()
return;
}
m_vTransOffset = m_vPosition - vPlanePos;
//printf("%.2f %.2f %.2f\n", m_vTransOffset.x, m_vTransOffset.y, m_vTransOffset.z);
}
return;
}
......@@ -633,6 +638,8 @@ void CAxesHelper::update()
static float3 vCamPos;
Core_RFloat3Get(G_RI_FLOAT3_OBSERVER_POSITION, &vCamPos);
//SPhysics_GetDynWorld()->getDebugDrawer()->drawLine(F3_BTVEC(posw), F3_BTVEC(posw + dirw * 10000.0f), btVector3(1.0f, 1.0f, 1.0f));
if(m_bIsDragging)
{
//float3 dv = (pos - m_fStartDragPos) * (1000.f + SMVector3Length(vCamPos - float3(m_mHelperMat._41, m_mHelperMat._42, m_mHelperMat._43)) * AXES_HELPER_MOVE_SPEED);
......@@ -650,11 +657,14 @@ void CAxesHelper::update()
else
{
float3 vPlanePos;
if(!m_movementPlane.intersectLine(&vPlanePos, posw, posw + dirw * 10000.0f))
if(!m_movementPlane.intersectLine(&vPlanePos, vCamPos, vCamPos + dirw * 10000.0f))
{
return;
}
//SPhysics_GetDynWorld()->getDebugDrawer()->drawSphere(F3_BTVEC(vPlanePos), 0.05f, btVector3(1.0f, 1.0f, 1.0f));
m_vPosition = m_vTransOffset + vPlanePos;
//SPhysics_GetDynWorld()->getDebugDrawer()->drawLine(F3_BTVEC(vPlanePos), F3_BTVEC(m_vPosition), btVector3(1.0f, 1.0f, 1.0f));
}
}
else if(m_htype == HANDLER_TYPE_ROTATE)
......@@ -679,7 +689,10 @@ void CAxesHelper::update()
}
m_qRotation = m_qRotation * SMQuaternion(m_qRotation * vAxis, fDelta);
//m_vRotation = QuatToEuler(m_qRotation);
m_vRotation = SMMatrixToEuler(m_qRotation.GetMatrix());
m_vRotation.x *= -1.0f;
m_vRotation.z *= -1.0f;
}
else if(m_htype == HANDLER_TYPE_SCALE)
{
......
......@@ -136,7 +136,7 @@ void level_editor::GreenTraceSelect()
level_editor::pAxesHelper->setPosition(vResult2);
level_editor::pAxesHelper->setRotation(float3(0, 0, 0));
level_editor::pAxesHelper->setScale(float3(1, 1, 1));
//level_editor::pAxesHelper->setScale(float3(1, 1, 1));
level_editor::idMtl = idMtrl;
}
......@@ -160,7 +160,7 @@ void level_editor::GreenTraceSelect()
level_editor::pAxesHelper->setPosition(vResult);
level_editor::pAxesHelper->setRotation(float3(0, 0, 0));
level_editor::pAxesHelper->setScale(float3(1, 1, 1));
//level_editor::pAxesHelper->setScale(float3(1, 1, 1));
}
}
......
......@@ -231,24 +231,24 @@ namespace level_editor
ID3DXMesh *pFigureBox = 0;
CAxesHelper *pAxesHelper = 0;
int iActiveGroupType = 0; //!< EDITORS_LEVEL_GROUPTYPE_
ID idActiveGreenSplit = -1; //!< ( )
ID idActiveGreenObject = -1; //!< ( )
int iActiveGroupType = 0; //!< текущая выделенная группа мировых сущностей EDITORS_LEVEL_GROUPTYPE_
ID idActiveGreenSplit = -1; //!< текущий идентификатор сплита растительность (если выделена растительность)
ID idActiveGreenObject = -1; //!< текущий идентификатор объекта растительности (если выделена растительность)
ID idActiveElement = -1; //!<
bool canSelSelection = false; //!< ?
bool canSelZTest = false; //!< z-test ?
bool canSelMesh = false; //!< (true) (false)?
bool canSelBackFacesCull = false; //!< ?
ID idActiveElement = -1; //!< текущий идентификатор выделенного элемента из списка
bool canSelSelection = false; //!< разрешено ли выделение?
bool canSelZTest = false; //!< использовать ли z-test при выделении?
bool canSelMesh = false; //!< рисовать сеткой (true) или целиком модель выделения (false)?
bool canSelBackFacesCull = false; //!< отсекать ли задние грани при выделении?
bool canAIGBound = true; //!< ai
bool canAIGQuad = true; //!< ai
bool canAIGGraphPoint = true; //!< ai
bool canAIGBound = true; //!< отрисовка боунда ai сетки
bool canAIGQuad = true; //!< отрисовка квадов ai сетки
bool canAIGGraphPoint = true; //!< отрисовка графпоинтов ai сетки
//bound box
bool canGreenRenderBox = false; //!< ?
float3 vGreenBoxPos; //!<
float3_t vGreenBoxWHD(1, 1, 1); //!< , ,
//bound box для массового создания объектов растительности
bool canGreenRenderBox = false; //!< разрешено ли рисовать бокс?
float3 vGreenBoxPos; //!< позиция бокса
float3_t vGreenBoxWHD(1, 1, 1); //!< ширина, высота, длина бокса
float3 vHelperPos;
float3 vHelperRot;
......@@ -2276,7 +2276,7 @@ void level_editor::LevelEditorUpdate(DWORD timeDelta)
}
}
//! ,
//! если ПКМ либо данные копирования не валидны, то обнуляем данные копирования
if (SSInput_GetKeyState(SIM_RBUTTON) || (level_editor::useCopyData && level_editor::idCopy < 0))
{
level_editor::useCopyData = false;
......@@ -2444,7 +2444,7 @@ void SXLevelEditor_Transform(DWORD timeDelta)
ISXGUIEdit *pEditX = 0, *pEditY = 0, *pEditZ = 0;
int iTypeTransform = -1;
//
//если отмечена радиокнопка на позиции
if (level_editor::pRadioButtonGeomPosX->getCheck() || level_editor::pRadioButtonGeomPosY->getCheck() || level_editor::pRadioButtonGeomPosZ->getCheck())
{
vTransform = *(SGeom_ModelGetPosition(iSelected));
......@@ -2454,7 +2454,7 @@ void SXLevelEditor_Transform(DWORD timeDelta)
pEditZ = level_editor::pEditGeomPosZ;
iTypeTransform = 0;
}
//
//если отмечена радиокнопка на поворотах
else if (level_editor::pRadioButtonGeomRotX->getCheck() || level_editor::pRadioButtonGeomRotY->getCheck() || level_editor::pRadioButtonGeomRotZ->getCheck())
{
vTransform = *(SGeom_ModelGetRotation(iSelected));
......@@ -2464,7 +2464,7 @@ void SXLevelEditor_Transform(DWORD timeDelta)
pEditZ = level_editor::pEditGeomRotZ;
iTypeTransform = 1;
}
//
//если отмечена радиокнопка на масштабировании
else if (level_editor::pRadioButtonGeomScaleX->getCheck() || level_editor::pRadioButtonGeomScaleY->getCheck() || level_editor::pRadioButtonGeomScaleZ->getCheck())
{
vTransform = *(SGeom_ModelGetScale(iSelected));
......@@ -2477,13 +2477,13 @@ void SXLevelEditor_Transform(DWORD timeDelta)
else
return;
//
//управление стрелками
if (SSInput_GetKeyState(SIK_UP))
vTransform[iNumComponent] += timeDelta * 0.001f;
if (SSInput_GetKeyState(SIK_DOWN))
vTransform[iNumComponent] -= timeDelta * 0.001f;
//
//управление мышью
if (SSInput_GetKeyState(SIM_LBUTTON))
{
if (isFirstRBMTransform)
......@@ -2508,7 +2508,7 @@ void SXLevelEditor_Transform(DWORD timeDelta)
isFirstRBMTransform = false;
}
//
//обновляем данные в интерфейсе редактора
char szStr[32];
sprintf(szStr, "%f", vTransform.x);
......@@ -2520,11 +2520,17 @@ void SXLevelEditor_Transform(DWORD timeDelta)
sprintf(szStr, "%f", vTransform.z);
pEditZ->setText(szStr);
//
if (iTypeTransform == 0)
//обновляем трансформацию
if(iTypeTransform == 0)
{
SGeom_ModelSetPosition(iSelected, &vTransform);
else if (iTypeTransform == 1)
level_editor::pAxesHelper->setPosition(vTransform);
}
else if(iTypeTransform == 1)
{
SGeom_ModelSetRotation(iSelected, &vTransform);
level_editor::pAxesHelper->setRotation(vTransform);
}
else if (iTypeTransform == 2)
SGeom_ModelSetScale(iSelected, &vTransform);
}
......@@ -2610,7 +2616,7 @@ void SXLevelEditor_Transform(DWORD timeDelta)
if (SSInput_GetKeyState(SIK_DOWN))
fBiasY -= float(timeDelta) * 0.001f;
//
//управление мышью
if (SSInput_GetKeyState(SIM_LBUTTON))
{
if (isFirstRBMTransform)
......
......@@ -110,9 +110,10 @@ void level_editor::GeomSel(int iSelected)
/*level_editor::vHelperPos = (vMax + vMin) * 0.5f;
level_editor::vHelperScale = *pScale;*/
level_editor::pAxesHelper->setPosition((vMax + vMin) * 0.5f);
//level_editor::pAxesHelper->setPosition((vMax + vMin) * 0.5f);
level_editor::pAxesHelper->setPosition(*pPos);
level_editor::pAxesHelper->setRotation(*pRot);
level_editor::pAxesHelper->setScale(float3(1,1,1));
//level_editor::pAxesHelper->setScale(float3(1,1,1));
level_editor::pEditGeomName->setText(szName);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment