#pragma once #include #include "Node.h" #include "BaseTree.h" #include "../../inc/glm/glm.hpp" #include "../../core/Defines.h" #include "../../core/Serializer.h" template > class MaterialNode : public Node { private: T mMaterial; public: MaterialNode(BaseTree* root, unsigned8 level = 0) : Node(root, level) {} MaterialNode(BaseTree* root, T material, unsigned8 level = 0) : MaterialNode(root, level) { mMaterial = material; } //MaterialNode(const MaterialNode& node) : mMaterial(node.mMaterial), Node(node) {} // Copy ctor MaterialNode(MaterialNode&& node) : Node(std::move(node)) { mMaterial = std::move(node.mMaterial); } ~MaterialNode() {} //MaterialNode& operator=(const MaterialNode& node) //{ // mMaterial = node.mMaterial; // Node::operator=(node); // return *this; //} MaterialNode& operator=(MaterialNode&& node) { mMaterial = std::move(node.mMaterial); Node::operator=(std::move(node)); return *this; } T GetMaterial() const { return mMaterial; } void SetMaterial(T material) { mMaterial = material; } bool Compare(const MaterialNode& node) const { if (this->mMaterial != node.mMaterial) return Comparer()(this->mMaterial, node.mMaterial); return Node::Compare(node); } bool Equals(const MaterialNode& node) const { if (this == &node) return true; return node.mMaterial == this->mMaterial && Node::Equals(node); } void WriteProperties(std::ostream& file) { Serializer::Serialize(mMaterial, file); } void ReadProperties(std::istream& file) { Serializer::Deserialize(mMaterial, file); } void CopyProperties(MaterialNode* source) { auto node = (MaterialNode*)source; this->SetMaterial(node->GetMaterial()); } };