#pragma once #include "CTypedWrapableBase.h" #include "IBinarySerializableWrapable.h" #include "ILuaWrapable.h" #include "CWrapableBindingBase.h" #include "U_Pointers.h" #include "U_String.h" template class CWrapableBinding : public virtual CTypedWrapableBase, public virtual ILuaWrapable, public virtual IBinarySerializableWrapable, public CWrapableBindingBase { public: CWrapableBinding(const T& val) { CTypedWrapableBase::SetValue(val); } CWrapableBinding(T* ptr = nullptr) { Pointer = ptr; Update(); } void Update() override { if (!Pointer) { return; } if ((*Pointer) != KnownValue) { CWrapableBase::OnStrValueChanged(this, StringUtils::ToStr(KnownValue), StringUtils::ToStr(*Pointer)); CTypedWrapableBase::OnValueChanged(this, KnownValue, (*Pointer)); KnownValue = (*Pointer); } } void* GetPointer() override { return static_cast(Pointer); } void m_setValue(const T& val) override { (*Pointer) = KnownValue = val; } T m_getValue() const override { if (CWrapableBindingBase::ReturnCheck) { Update(); return KnownValue; } return (*Pointer); } T KnownValue; T* Pointer = nullptr; };