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