Initial commit: Final state of the master project
This commit is contained in:
67
Research/scene/Octree/MaterialNode.h
Normal file
67
Research/scene/Octree/MaterialNode.h
Normal file
@@ -0,0 +1,67 @@
|
||||
#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());
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user