Files
Commonwealth-Online-Public/plugin/lib/commonlibf4/include/RE/A/ActorState.h
T
2026-05-30 18:33:24 +12:00

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);
}