Files
Viano-Core/src/server/game/Entities/Object/MovementInfo.h
T
Ovahlord f34534465a Build: enable C++20 and updated all compiler requirements
* ported some header and cmake updates from master branch
2023-07-04 23:49:57 +02:00

125 lines
3.4 KiB
C

/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MovementInfo_h__
#define MovementInfo_h__
#include "ObjectGuid.h"
#include "Position.h"
struct MovementInfo
{
// common
ObjectGuid guid;
uint32 flags;
uint16 flags2;
Position pos;
uint32 time;
uint32 movementCounter;
// transport
struct TransportInfo
{
void Reset()
{
guid.Clear();
pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
seat = -1;
time = 0;
time2 = 0;
vehicleId = 0;
}
ObjectGuid guid;
Position pos;
int8 seat = -1;
uint32 time = 0;
uint32 time2 = 0;
uint32 vehicleId = 0;
} transport;
// swimming/flying
float pitch;
// jumping
struct JumpInfo
{
void Reset()
{
fallTime = 0;
zspeed = sinAngle = cosAngle = xyspeed = 0.0f;
}
uint32 fallTime;
float zspeed, sinAngle, cosAngle, xyspeed;
} jump;
// spline
float splineElevation;
// height change
bool heightChangeFailed;
MovementInfo() :
flags(0), flags2(0), time(0), movementCounter(0), pitch(0.0f), splineElevation(0.0f), heightChangeFailed(false)
{
pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
transport.Reset();
jump.Reset();
}
uint32 GetMovementFlags() const { return flags; }
void SetMovementFlags(uint32 flag) { flags = flag; }
void AddMovementFlag(uint32 flag) { flags |= flag; }
void RemoveMovementFlag(uint32 flag) { flags &= ~flag; }
bool HasMovementFlag(uint32 flag) const { return (flags & flag) != 0; }
uint16 GetExtraMovementFlags() const { return flags2; }
void SetExtraMovementFlags(uint16 flag) { flags2 = flag; }
void AddExtraMovementFlag(uint16 flag) { flags2 |= flag; }
void RemoveExtraMovementFlag(uint16 flag) { flags2 &= ~flag; }
bool HasExtraMovementFlag(uint16 flag) const { return (flags2 & flag) != 0; }
uint32 GetFallTime() const { return jump.fallTime; }
void SetFallTime(uint32 time) { jump.fallTime = time; }
void ResetTransport();
void ResetJump();
bool HasFallDirection() const;
bool HasFallData() const;
bool HasMovementFlags() const;
bool HasExtraMovementFlags() const;
bool HasSpline() const;
bool HasHeightChangeFailed() const;
bool HasTime() const;
bool HasOrientation() const;
bool HasSplineElevation() const;
bool HasPitch() const;
bool HasTransportData() const;
bool HasTransportVehicleId() const;
bool HasTransportTime2() const;
// Returns the angle of the current movement direction based on movement flags (forward, strafe left etc)
float GetMovementDirection() const;
void OutDebug();
};
#endif // MovementInfo_h__