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

71 lines
5.3 KiB
C++

#pragma once
#include "RE/B/BSFixedString.h"
#include "RE/B/BSSpinLock.h"
#include "RE/B/BSTArray.h"
#include "RE/B/BSTHashMap.h"
#include "RE/B/BSTSmartPointer.h"
namespace RE
{
class BSStorage;
namespace BSScript
{
class BoundScript;
class IHandleReaderWriter;
class IVirtualMachine;
class IVMObjectBindInterface;
class MergedBoundScript;
class Object;
class Variable;
class __declspec(novtable) ObjectBindPolicy
{
public:
static constexpr auto RTTI{ RTTI::BSScript__ObjectBindPolicy };
static constexpr auto VTABLE{ VTABLE::BSScript__ObjectBindPolicy };
virtual ~ObjectBindPolicy(); // 00
// add
virtual void EnsureBaseDataLoaded(std::size_t a_objHandle) = 0; // 01
virtual void ObjectNoLongerNeeded(std::size_t a_objHandle) = 0; // 02
virtual void AddBoundInfoImpl(std::size_t a_objHandle) = 0; // 03
virtual void ClearBoundInfoImpl(std::size_t a_objHandle) = 0; // 04
virtual void ClearDiskLoadedBoundInfoImpl(std::size_t a_objHandle) = 0; // 05
virtual void ClearAllBoundInfoImpl() = 0; // 06
virtual void PostBindObject(std::size_t a_objHandle) = 0; // 07
virtual std::uint32_t GetExtraInfoSize(std::size_t) const = 0; // 08
virtual void WriteExtraInfo(std::size_t, const IHandleReaderWriter&, BSStorage&) const = 0; // 09
virtual void ReadExtraInfo(std::size_t a_objHandle, std::uint16_t a_handleVersion, const IHandleReaderWriter& a_handleReaderWriter, const BSStorage& a_storage) = 0; // 0A
virtual bool IsIgnoringClear() const = 0; // 0B
virtual void ResolveProperties(std::size_t a_objTarget, const BSTSmartPointer<Object>& a_object, const BSTSmartPointer<BoundScript>& a_boundScript, bool a_postSaveConstOnly) = 0; // 0D
virtual void ResolveProperties(std::size_t a_objTarget, const BSTSmartPointer<Object>& a_object, const MergedBoundScript& a_boundScript, bool a_postSaveConstOnly) = 0; // 0C
virtual void ConvertProperties(std::size_t a_objTarget, const BSTSmartPointer<BoundScript>& a_boundScript, bool a_constOnly, BSTScrapHashMap<BSFixedString, Variable>& a_properties, std::uint32_t& a_nonConvertedProperties) const = 0; // 0F
virtual void ConvertProperties(std::size_t a_objTarget, const MergedBoundScript& a_mergedScript, bool a_constOnly, BSTScrapHashMap<BSFixedString, Variable>& a_properties, std::uint32_t& a_nonConvertedProperties) const = 0; // 0E
void BindObject(const BSTSmartPointer<Object>& a_obj, std::size_t a_objHandle)
{
using func_t = decltype(&ObjectBindPolicy::BindObject);
static REL::Relocation<func_t> func{ ID::BSScript_ObjectBindPolicy::BindObject };
return func(this, a_obj, a_objHandle);
}
void UnbindObject(const BSTSmartPointer<Object>& a_obj)
{
using func_t = decltype(&ObjectBindPolicy::UnbindObject);
static REL::Relocation<func_t> func{ ID::BSScript_ObjectBindPolicy::UnbindObject };
return func(this, a_obj);
}
// members
IVirtualMachine* vm; // 10
IVMObjectBindInterface* bindInterface; // 18
BSSpinLock attachedScriptsLock; // 20
BSTHashMap<std::size_t, BSTSmallSharedArray<BSTSmartPointer<BoundScript>>> attachedScripts; // 50
};
static_assert(sizeof(ObjectBindPolicy) == 0x50);
}
}