From 12a2eae7fcc538f7b9998e5e969865772e9f705d Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Fri, 1 Feb 2019 15:00:49 +0100 Subject: [PATCH] fixed facing --- src/common/Util/UtilMath.cpp | 13 +++++++++++-- src/world/Actor/Chara.cpp | 2 +- src/world/Actor/Chara.h | 2 +- src/world/Network/Handlers/PacketHandlers.cpp | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/common/Util/UtilMath.cpp b/src/common/Util/UtilMath.cpp index 16be477b..1605f231 100644 --- a/src/common/Util/UtilMath.cpp +++ b/src/common/Util/UtilMath.cpp @@ -77,6 +77,15 @@ uint8_t Sapphire::Util::floatToUInt8Rot( float val ) float Sapphire::Util::RelativeAngle( float heading, float x1, float y1, float x2, float y2 ) { - float angle = ( ( float ) atan2( y2 - y1, x2 - x1 ) * ( 180.0 / PI ) ); - return clamp( angle - heading , -180.0f, 180.0f ); + float angle = ( (float)atan2( y2 - y1, x2 - x1 ) * ( 180.0 / PI ) ); + float value = angle - heading; + + float high = 180.0f; + float low = -180.0; + + float range = high - low; + float modifier = ( ( int ) ( ( value - low ) / range ) - ( value < low ? 1 : 0 ) ) * range; + value -= modifier; + + return value; } diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index dc09ae69..92ae76e8 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -63,7 +63,7 @@ std::string Sapphire::Entity::Chara::getName() const bool Sapphire::Entity::Chara::isFacing( Entity::CharaPtr target, float arcDegree ) { auto angleBetween = Util::RelativeAngle( getRot(), getPos().x, getPos().y, target->getPos().x, target->getPos().y ); - return angleBetween >= ( -( arcDegree / 2 ) && angleBetween <= ( arcDegree / 2 ) ); + return angleBetween >= -( arcDegree / 2 ) && angleBetween <= ( arcDegree / 2 ); } /*! \return current stance of the actors */ diff --git a/src/world/Actor/Chara.h b/src/world/Actor/Chara.h index 4354b6b8..108c73a7 100644 --- a/src/world/Actor/Chara.h +++ b/src/world/Actor/Chara.h @@ -160,7 +160,7 @@ namespace Sapphire::Entity std::string getName() const; - bool isFacing( Entity::CharaPtr target, float arcDegree = 100 ); + bool isFacing( Entity::CharaPtr target, float arcDegree = 80 ); bool face( const Common::FFXIVARR_POSITION3& p ); diff --git a/src/world/Network/Handlers/PacketHandlers.cpp b/src/world/Network/Handlers/PacketHandlers.cpp index 77070f93..65fc2272 100644 --- a/src/world/Network/Handlers/PacketHandlers.cpp +++ b/src/world/Network/Handlers/PacketHandlers.cpp @@ -230,7 +230,7 @@ void Sapphire::Network::GameConnection::updatePositionHandler( FrameworkPtr pFw, float distanceToNewPos = Util::distance( { player.getPos().x, player.getPos().y, player.getPos().z }, - { *reinterpret_cast< float* >( ©.data[ 0x1C ] ), + { *reinterpret_cast< float* >( ©.data[ 0x1C ] ), *reinterpret_cast< float* >( ©.data[ 0x20 ] ), *reinterpret_cast< float* >( ©.data[ 0x24 ] ) } ); //TODO: find a better value