Files
CDAG/Research/scene/Octree/MaterialNode.h

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());
}
};