mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2025-11-29 17:38:24 +08:00
refactor(Core): SetTimedFacingToObject (#23142)
This commit is contained in:
@@ -20115,24 +20115,6 @@ private:
|
|||||||
AuraType _auraType;
|
AuraType _auraType;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ResetToHomeOrientation : public BasicEvent
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ResetToHomeOrientation(Creature& self) : _self(self) { }
|
|
||||||
|
|
||||||
bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override
|
|
||||||
{
|
|
||||||
if (_self.IsInWorld() && _self.FindMap() && _self.IsAlive() && !_self.IsInCombat())
|
|
||||||
{
|
|
||||||
_self.SetFacingTo(_self.GetHomePosition().GetOrientation());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
Creature& _self;
|
|
||||||
};
|
|
||||||
|
|
||||||
void Unit::CastDelayedSpellWithPeriodicAmount(Unit* caster, uint32 spellId, AuraType auraType, int32 addAmount, uint8 effectIndex)
|
void Unit::CastDelayedSpellWithPeriodicAmount(Unit* caster, uint32 spellId, AuraType auraType, int32 addAmount, uint8 effectIndex)
|
||||||
{
|
{
|
||||||
AuraEffect* aurEff = nullptr;
|
AuraEffect* aurEff = nullptr;
|
||||||
@@ -20358,7 +20340,7 @@ void Unit::SetFacingTo(float ori)
|
|||||||
init.Launch();
|
init.Launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Unit::SetFacingToObject(WorldObject* object)
|
void Unit::SetFacingToObject(WorldObject* object, Milliseconds timed /*= 0ms*/)
|
||||||
{
|
{
|
||||||
// never face when already moving
|
// never face when already moving
|
||||||
if (!IsStopped())
|
if (!IsStopped())
|
||||||
@@ -20369,24 +20351,20 @@ void Unit::SetFacingToObject(WorldObject* object)
|
|||||||
init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ());
|
init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ());
|
||||||
init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
|
init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
|
||||||
init.Launch();
|
init.Launch();
|
||||||
}
|
|
||||||
|
|
||||||
void Unit::SetTimedFacingToObject(WorldObject* object, uint32 time)
|
if (timed > 0ms)
|
||||||
{
|
{
|
||||||
// never face when already moving
|
|
||||||
if (!IsStopped() || !time)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/// @todo figure out under what conditions creature will move towards object instead of facing it where it currently is.
|
|
||||||
Movement::MoveSplineInit init(this);
|
|
||||||
init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZ());
|
|
||||||
init.SetFacing(GetAngle(object)); // when on transport, GetAngle will still return global coordinates (and angle) that needs transforming
|
|
||||||
init.Launch();
|
|
||||||
|
|
||||||
if (Creature* c = ToCreature())
|
if (Creature* c = ToCreature())
|
||||||
c->m_Events.AddEvent(new ResetToHomeOrientation(*c), c->m_Events.CalculateTime(time));
|
{
|
||||||
|
c->m_Events.AddEventAtOffset([c]()
|
||||||
|
{
|
||||||
|
if (c->IsInWorld() && c->FindMap() && c->IsAlive() && !c->IsInCombat())
|
||||||
|
c->SetFacingTo(c->GetHomePosition().GetOrientation());
|
||||||
|
}, timed);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
LOG_ERROR("entities.unit", "Unit::SetTimedFacingToObject called on non-creature unit {}. This should never happen.", GetEntry());
|
LOG_ERROR("entities.unit", "Unit::SetFacingToObject called on non-creature unit {}. This should never happen.", GetEntry());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Unit::SetWalk(bool enable)
|
bool Unit::SetWalk(bool enable)
|
||||||
|
|||||||
@@ -1919,8 +1919,8 @@ public:
|
|||||||
|
|
||||||
void SetInFront(WorldObject const* target);
|
void SetInFront(WorldObject const* target);
|
||||||
void SetFacingTo(float ori);
|
void SetFacingTo(float ori);
|
||||||
void SetFacingToObject(WorldObject* object);
|
// <timed>Reset to home orientation after given time
|
||||||
void SetTimedFacingToObject(WorldObject* object, uint32 time); // Reset to home orientation after given time
|
void SetFacingToObject(WorldObject* object, Milliseconds timed = 0ms);
|
||||||
|
|
||||||
bool isInAccessiblePlaceFor(Creature const* c) const;
|
bool isInAccessiblePlaceFor(Creature const* c) const;
|
||||||
bool isInFrontInMap(Unit const* target, float distance, float arc = M_PI) const;
|
bool isInFrontInMap(Unit const* target, float distance, float arc = M_PI) const;
|
||||||
|
|||||||
@@ -1269,7 +1269,7 @@ class spell_chapter5_return_to_capital : public SpellScript
|
|||||||
if (creature)
|
if (creature)
|
||||||
{
|
{
|
||||||
creature->PauseMovement(5000);
|
creature->PauseMovement(5000);
|
||||||
creature->SetTimedFacingToObject(player, 30000);
|
creature->SetFacingToObject(player, 30s);
|
||||||
|
|
||||||
if (roll_chance_i(30))
|
if (roll_chance_i(30))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user