Files
vb01/model.cpp
T
2022-03-19 21:10:45 +02:00

105 lines
2.2 KiB
C++
Executable File

#include "model.h"
#include "mesh.h"
#include "material.h"
#include "vector.h"
#include "util.h"
#include "bone.h"
#include "root.h"
#include "skeleton.h"
#include "animation.h"
#include "modelAsset.h"
#include "assetManager.h"
#include <vector>
#include <Importer.hpp>
#include <scene.h>
#include <postprocess.h>
#include <fstream>
using namespace std;
using namespace Assimp;
namespace vb01{
Model::Model(string path) : Node(){
ModelAsset *asset = ((ModelAsset*)AssetManager::getSingleton()->getAsset(path));
Node *clonedRoot = asset->rootNode->clone();
for(Node *child : clonedRoot->getChildren())
attachChild(child);
}
Model::~Model(){
delete children[0]->getMesh(0)->getMaterial();
vector<Node*> descendants;
getDescendants(descendants);
for(Node *node : descendants)
for(Mesh *mesh : node->getMeshes())
mesh->setMaterial(nullptr);
while(!children.empty()){
Node *c = children[children.size() - 1];
dettachChild(c);
delete c;
}
}
void Model::update(){
Node::update();
}
void Model::setMaterial(Material *mat){
vector<Node*> descendants;
getDescendants(descendants);
for(Node *node : descendants)
for(Mesh *mesh : node->getMeshes())
mesh->setMaterial(mat);
}
void Model::setCastShadow(bool castShadow){
vector<Node*> descendants;
getDescendants(descendants);
for(Node *node : descendants)
for(Mesh *mesh : node->getMeshes())
mesh->setCastShadow(castShadow);
this->castShadow = castShadow;
}
void Model::setReflect(bool reflect){
vector<Node*> descendants;
getDescendants(descendants);
for(Node *node : descendants)
for(Mesh *mesh : node->getMeshes())
mesh->setReflect(reflect);
this->reflect = reflect;
}
void Model::setReflective(bool reflective){
vector<Node*> descendants;
getDescendants(descendants);
for(Node *node : descendants)
for(Mesh *mesh : node->getMeshes())
mesh->setReflect(reflect);
this->reflective = reflective;
}
void Model::setWireframe(bool wireframe){
vector<Node*> descendants;
getDescendants(descendants);
for(Node *node : descendants)
for(Mesh *mesh : node->getMeshes())
mesh->setWireframe(wireframe);
this->wireframe = wireframe;
}
}