59 lines
2.4 KiB
C++
59 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "RE/I/IMovementState.h"
|
|
#include "RE/W/WEAPON_STATE.h"
|
|
|
|
namespace RE
|
|
{
|
|
enum class GUN_STATE;
|
|
enum class INTERACTING_STATE;
|
|
enum class SIT_SLEEP_STATE;
|
|
|
|
class __declspec(novtable) ActorState :
|
|
public IMovementState // 00
|
|
{
|
|
public:
|
|
static constexpr auto RTTI{ RTTI::ActorState };
|
|
static constexpr auto VTABLE{ VTABLE::ActorState };
|
|
|
|
// add
|
|
virtual bool SetWeaponMagicDrawn(bool a_drawn); // 21
|
|
virtual bool SetWeaponState(WEAPON_STATE a_state); // 22
|
|
virtual bool DoSetSitSleepState(SIT_SLEEP_STATE a_state) = 0; // 23
|
|
virtual SIT_SLEEP_STATE DoGetSitSleepState() const = 0; // 24
|
|
virtual bool SetInIronSightsImpl(bool a_sighted) = 0; // 25
|
|
virtual void SetReloadingImpl(bool a_reloading); // 26
|
|
|
|
[[nodiscard]] bool GetWeaponMagicDrawn() const noexcept { return weaponState >= WEAPON_STATE::kDrawn; }
|
|
[[nodiscard]] bool IsSwimming() const noexcept { return DoGetMoveModeBits(0x400); }
|
|
|
|
// members
|
|
std::uint32_t moveMode: 14; // 08:00
|
|
std::uint32_t flyState: 3; // 08:14
|
|
std::uint32_t lifeState: 4; // 08:17
|
|
std::uint32_t knockState: 4; // 08:21
|
|
std::uint32_t meleeAttackState: 3; // 08:25
|
|
std::uint32_t talkingToPlayer: 1; // 08:28
|
|
std::uint32_t forceRun: 1; // 08:29
|
|
std::uint32_t forceSneak: 1; // 08:30
|
|
std::uint32_t headTracking: 1; // 08:31
|
|
std::uint32_t reanimating: 1; // 0C:00
|
|
WEAPON_STATE weaponState: 3; // 0C:01
|
|
std::uint32_t wantBlocking: 1; // 0C:04
|
|
std::uint32_t flightBlocked: 1; // 0C:05
|
|
std::uint32_t recoil: 2; // 0C:06
|
|
std::uint32_t allowFlying: 1; // 0C:08
|
|
std::uint32_t staggered: 1; // 0C:09
|
|
std::uint32_t inWrongProcessLevel: 1; // 0C:10
|
|
std::uint32_t stance: 3; // 0C:11
|
|
GUN_STATE gunState: 4; // 0C:14
|
|
INTERACTING_STATE interactingState: 2; // 0C:18
|
|
std::uint32_t headTrackRotation: 1; // 0C:20
|
|
std::uint32_t inSyncAnim: 1; // 0C:21
|
|
|
|
private:
|
|
bool DoGetMoveModeBits(std::uint16_t a_bits) const { return (a_bits & moveMode & 0x3FFF) == a_bits; }
|
|
};
|
|
static_assert(sizeof(ActorState) == 0x10);
|
|
}
|