#pragma once #include "optional.hpp" #include "CToken.hpp" #include "zeus/CVector3f.hpp" namespace urde { class CCharLayoutInfo; class CLayoutDescription { public: class CScaledLayoutDescription { TLockedToken x0_layoutToken; float xc_scale; std::experimental::optional x10_scaleVec; public: const TLockedToken& ScaledLayout() const { return x0_layoutToken; } float GlobalScale() const { return xc_scale; } const std::experimental::optional& GetScaleVec() const { return x10_scaleVec; } }; private: TLockedToken x0_layoutToken; std::experimental::optional xc_scaled; public: CLayoutDescription(const TLockedToken& token) : x0_layoutToken(token) {} const std::experimental::optional& GetScaledLayoutDescription() const { return xc_scaled; } const TLockedToken& GetCharLayoutInfo() const { return x0_layoutToken; } bool UsesScale() const { return bool(xc_scaled); } const TLockedToken& ScaledLayout() const { if (UsesScale()) return xc_scaled->ScaledLayout(); return x0_layoutToken; } }; } // namespace urde