67 lines
1.7 KiB
C++
67 lines
1.7 KiB
C++
#pragma once
|
|
#include <fstream>
|
|
#include "Node.h"
|
|
#include "BaseTree.h"
|
|
#include "../../inc/glm/glm.hpp"
|
|
#include "../../core/Defines.h"
|
|
#include "../../core/Serializer.h"
|
|
|
|
template <typename T, typename Comparer = std::less<T>>
|
|
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<T>::Serialize(mMaterial, file);
|
|
}
|
|
void ReadProperties(std::istream& file)
|
|
{
|
|
Serializer<T>::Deserialize(mMaterial, file);
|
|
}
|
|
|
|
void CopyProperties(MaterialNode* source)
|
|
{
|
|
auto node = (MaterialNode<T, Comparer>*)source;
|
|
this->SetMaterial(node->GetMaterial());
|
|
}
|
|
}; |