From 1b67a09bb90ab7ab9fe0cf88e444943d37eeaeff Mon Sep 17 00:00:00 2001 From: D-AIRY <admin@ds-servers.com> Date: Sun, 22 Dec 2024 00:45:23 +0300 Subject: [PATCH] make XPET_POINTCOORD relative --- build/demos/levels/demo_ladder/demo_ladder.ent | 6 +++--- source/game/FuncLadder.cpp | 17 ++++++----------- source/game/FuncLadder.h | 3 +-- source/terrax/mainWindow.cpp | 5 +++-- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/build/demos/levels/demo_ladder/demo_ladder.ent b/build/demos/levels/demo_ladder/demo_ladder.ent index 25b90276a..f762571a8 100644 --- a/build/demos/levels/demo_ladder/demo_ladder.ent +++ b/build/demos/levels/demo_ladder/demo_ladder.ent @@ -68,7 +68,7 @@ name = model = is_static = 1 glow_color_ref = -glow_color = 0.000000 0.000000 0.000000 +glow_color = 0.000000 0.273974 0.827866 flags = 0 classname = prop_static auto_physbox = 1 @@ -130,10 +130,10 @@ OnTurnOn = OnTurnOff = [{F7FAD41B-4168-41D2-9E82-51DA455F22B6}] -up_point = 12.860000 5.000000 10.004517 +up_point = 0.000000 4.000000 0.000001 rotation = 0.000000 0.000000 0.000000 1.000000 parent = -origin = 12.858377 1.000000 10.004519 +origin = 12.849999 1.000000 9.999999 name = flags = 0 classname = func_ladder diff --git a/source/game/FuncLadder.cpp b/source/game/FuncLadder.cpp index d8e859d99..e6dd9e1ba 100644 --- a/source/game/FuncLadder.cpp +++ b/source/game/FuncLadder.cpp @@ -52,7 +52,6 @@ CFuncLadder::~CFuncLadder() void CFuncLadder::setUpPoint(const float3 &vUp) { - m_isUpSet = true; m_vUpPoint = vUp; initPhysics(); @@ -82,11 +81,7 @@ void CFuncLadder::createPhysBody() void CFuncLadder::setPos(const float3 &pos) { BaseClass::setPos(pos); - if(!m_isUpSet) - { - m_vUpPoint = (float3)(pos + float3(0.0f, 2.0f, 0.0f)); - initPhysics(); - } + initPhysics(); SAFE_CALL(m_pGhostObject, setPosition, pos); } @@ -131,7 +126,7 @@ void CFuncLadder::initPhysics() //TODO: сделать обработку ситуации когда m_vUpPoint ниже getPos mem_release(m_pCollideShape); - float3 vDelta = m_vUpPoint - getPos(); + float3 vDelta = getOrient() * m_vUpPoint; SMAABB aabb = getBound(); float3 vMinDelta, vMaxDelta; @@ -201,16 +196,16 @@ void CFuncLadder::renderEditor(bool is3D, bool bRenderSelection, IXGizmoRenderer SMAABB aabb = getBound(); pRenderer->drawAABB(aabb + getPos()); - pRenderer->drawAABB(aabb + m_vUpPoint); + pRenderer->drawAABB(aabb + getUpPos()); pRenderer->jumpTo(getPos()); - pRenderer->lineTo(m_vUpPoint); + pRenderer->lineTo(getUpPos()); } } void CFuncLadder::getMinMax(float3 *min, float3 *max) { SMAABB aabb = getBound(); - aabb = SMAABBConvex(aabb, aabb + (getUpPos() - getPos())); + aabb = SMAABBConvex(aabb, aabb + getUpPos() - getPos()); if(min) { @@ -367,7 +362,7 @@ void CFuncLadder::onUse(CBaseEntity *pUser) float3 CFuncLadder::getUpPos() { - return(m_vUpPoint); + return(getOrient() * m_vUpPoint + getPos()); } void CFuncLadder::connectToLadder(CBaseEntity *pEntity) diff --git a/source/game/FuncLadder.h b/source/game/FuncLadder.h index 520bae843..5ea6f958b 100644 --- a/source/game/FuncLadder.h +++ b/source/game/FuncLadder.h @@ -67,8 +67,7 @@ private: SMAABB getBound(); private: - float3_t m_vUpPoint; - bool m_isUpSet = false; + float3_t m_vUpPoint = float3_t(0.0f, 2.0f, 0.0f); bool m_isEnabled = false; output_t m_onPlayerGetOn; diff --git a/source/terrax/mainWindow.cpp b/source/terrax/mainWindow.cpp index 6996e46fb..2b9b8270d 100644 --- a/source/terrax/mainWindow.cpp +++ b/source/terrax/mainWindow.cpp @@ -4532,15 +4532,16 @@ XDECLARE_PROP_GIZMO(Radius, void XMETHODCALLTYPE onChange(float fNewRadius, IXEd XDECLARE_PROP_GIZMO(Handle, void XMETHODCALLTYPE moveTo(const float3 &vNewPos, IXEditorGizmoHandle *pGizmo) override { pGizmo->setPos(vNewPos); + float3_t vTmp = m_pObj->getOrient().Conjugate() * (vNewPos - m_pObj->getPos()); char tmp[64]; - sprintf(tmp, "%f %f %f", vNewPos.x, vNewPos.y, vNewPos.z); + sprintf(tmp, "%f %f %f", vTmp.x, vTmp.y, vTmp.z); m_pCommand->setKV(m_field.szKey, tmp); }, void init() { float3_t vec; if(sscanf(m_pObj->getKV(m_field.szKey), "%f %f %f", &vec.x, &vec.y, &vec.z)) { - m_pGizmo->setPos(vec); + m_pGizmo->setPos(m_pObj->getOrient() * vec + m_pObj->getPos()); } }); -- GitLab