MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / moveTo

Method moveTo

src/Core/Graphics/Sprite.cpp:374–432  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

372 }
373
374 void SpriteHandlePoint::moveTo(
375 const Transform::UnitVector& position, const Transform::UnitVector& camera)
376 {
377 m_dp = m_sprite.getPositionTransformer()(position, -camera, m_sprite.getLayer());
378 if (m_type == SpriteHandlePointType::ScaleHandle)
379 {
380 const Transform::UnitVector pos
381 = m_sprite.getPosition(m_referential).to<Transform::Units::ScenePixels>();
382 const Transform::UnitVector oppositePos
383 = m_sprite.getPosition(m_referential.flip())
384 .to<Transform::Units::ScenePixels>();
385
386 if (m_referential.isOnCorner())
387 {
388 const Transform::UnitVector centerSpritePos
389 = m_sprite.getPosition(Transform::Referential::Center);
390 const double spriteAngle = m_sprite.getRotation();
391 const Transform::UnitVector oppositePosInRef
392 = oppositePos.rotate(spriteAngle, centerSpritePos);
393 const Transform::UnitVector posInRef
394 = pos.rotate(spriteAngle, centerSpritePos);
395 const Transform::UnitVector cursorInRef
396 = m_dp.rotate(spriteAngle, centerSpritePos);
397 const Transform::UnitVector scaleVector
398 = (cursorInRef - oppositePosInRef) / (posInRef - oppositePosInRef);
399 const double vScale = std::max(scaleVector.x, scaleVector.y);
400 if ((cursorInRef - oppositePosInRef).x != 0
401 && (cursorInRef - oppositePosInRef).y != 0)
402 m_sprite.scale(
403 Transform::UnitVector(vScale, vScale, m_sprite.getSize().unit),
404 m_referential.flip());
405 }
406 else
407 {
408 const Transform::UnitVector e1 = oppositePos - pos;
409 const Transform::UnitVector e2 = m_dp - pos;
410
411 const double valDp = e1.x * e2.x + e1.y * e2.y;
412 const double len = e1.x * e1.x + e1.y * e1.y;
413
414 /*m_dp.x = pos.x + (valDp * e1.x) / len;
415 m_dp.y = pos.y + (valDp * e1.y) / len;*/
416 const Transform::UnitVector npp(pos.x + (valDp * e1.x) / len,
417 pos.y + (valDp * e1.y) / len, m_dp.unit);
418 m_sprite.setPointPosition(npp, m_referential);
419 }
420 }
421 else
422 {
423 const Transform::UnitVector center
424 = m_sprite.getPosition(Transform::Referential::Center)
425 .to<Transform::Units::ScenePixels>();
426 const double n = (90 + ((m_sprite.getScaleFactor().y < 0) ? 180 : 0))
427 - (std::atan2(center.y - m_dp.y, center.x - m_dp.x)) * 180.0
428 / obe::Utils::Math::pi;
429
430 m_sprite.setRotation(std::fmod(n, 360));
431 }

Callers

nothing calls this directly

Calls 13

UnitVectorClass · 0.85
getLayerMethod · 0.80
flipMethod · 0.80
isOnCornerMethod · 0.80
getScaleFactorMethod · 0.80
getPositionMethod · 0.45
getRotationMethod · 0.45
rotateMethod · 0.45
scaleMethod · 0.45
getSizeMethod · 0.45
setPointPositionMethod · 0.45

Tested by

no test coverage detected