#pragma once #include #include #include namespace XCEngine { namespace Resources { enum class MeshImportFlags : Core::uint32 { None = 0, FlipUVs = 1 << 0, FlipWindingOrder = 1 << 1, GenerateNormals = 1 << 2, GenerateTangents = 1 << 3, OptimizeMesh = 1 << 4, ImportSkinning = 1 << 5, ImportAnimations = 1 << 6, ImportMaterials = 1 << 7, ImportCameras = 1 << 8, ImportLights = 1 << 9 }; inline MeshImportFlags operator|(MeshImportFlags a, MeshImportFlags b) { return static_cast(static_cast(a) | static_cast(b)); } inline MeshImportFlags operator&(MeshImportFlags a, MeshImportFlags b) { return static_cast(static_cast(a) & static_cast(b)); } inline MeshImportFlags operator~(MeshImportFlags a) { return static_cast(~static_cast(a)); } class MeshImportSettings : public ImportSettings { public: MeshImportSettings(); virtual ~MeshImportSettings() override; Core::UniqueRef Clone() const override; bool LoadFromJSON(const Containers::String& json) override; Containers::String SaveToJSON() const override; void SetImportFlags(MeshImportFlags flags) { m_importFlags = flags; } MeshImportFlags GetImportFlags() const { return m_importFlags; } void AddImportFlag(MeshImportFlags flag) { m_importFlags = static_cast(static_cast(m_importFlags) | static_cast(flag)); } void RemoveImportFlag(MeshImportFlags flag) { m_importFlags = static_cast(static_cast(m_importFlags) & ~static_cast(flag)); } bool HasImportFlag(MeshImportFlags flag) const { return (static_cast(m_importFlags) & static_cast(flag)) != 0; } void SetScale(float scale) { m_scale = scale; } float GetScale() const { return m_scale; } void SetOffset(const Math::Vector3& offset) { m_offset = offset; } const Math::Vector3& GetOffset() const { return m_offset; } void SetAxisConversion(bool convert) { m_axisConversion = convert; } bool GetAxisConversion() const { return m_axisConversion; } void SetMergeMeshes(bool merge) { m_mergeMeshes = merge; } bool GetMergeMeshes() const { return m_mergeMeshes; } void SetOptimizeThreshold(float threshold) { m_optimizeThreshold = threshold; } float GetOptimizeThreshold() const { return m_optimizeThreshold; } void SetImportScale(float scale) { m_importScale = scale; } float GetImportScale() const { return m_importScale; } void SetThreshold(float threshold) { m_threshold = threshold; } float GetThreshold() const { return m_threshold; } private: MeshImportFlags m_importFlags = MeshImportFlags::None; float m_scale = 1.0f; Math::Vector3 m_offset = Math::Vector3::Zero(); bool m_axisConversion = true; bool m_mergeMeshes = false; float m_optimizeThreshold = 0.3f; float m_importScale = 1.0f; float m_threshold = 0.0f; }; } // namespace Resources } // namespace XCEngine