added basic structures
This commit is contained in:
96
TSE_Core/src/elements/Layer.cpp
Normal file
96
TSE_Core/src/elements/Layer.cpp
Normal file
@@ -0,0 +1,96 @@
|
||||
#include "Layer.hpp"
|
||||
#include "BehaviourScripts/Renderable.hpp"
|
||||
#include "elements/BehaviourScript.hpp"
|
||||
|
||||
void HandleObject(TSE::Transformable* trans, TSE::TransformationStack& stack, TSE::IRenderer& rnd)
|
||||
{
|
||||
using namespace TSE;
|
||||
if(!trans->IsEnabled()) return;
|
||||
//OPTIMIZE this if statement
|
||||
if(trans->HasBehaviourScript(RENDERABLE) && trans->GetBehaviourScript(RENDERABLE)->IsEnabled() && ((Renderable*)trans->GetBehaviourScript(RENDERABLE))->GetMaterial() != nullptr && ((Renderable*)trans->GetBehaviourScript(RENDERABLE))->GetMaterial()->GetShader() != nullptr)
|
||||
{
|
||||
rnd.Submit(*trans, ((Renderable*)trans->GetBehaviourScript(RENDERABLE))->GetMaterial()->GetShader(), stack);
|
||||
}
|
||||
if(trans->GetChildren().size() > 0)
|
||||
{
|
||||
stack.Push(trans->GetLocalMatrix());
|
||||
for(auto child : trans->GetChildren())
|
||||
{
|
||||
HandleObject(child, stack, rnd);
|
||||
}
|
||||
stack.Pop();
|
||||
}
|
||||
}
|
||||
|
||||
TSE::Layer::Layer(string &n)
|
||||
{
|
||||
name = n;
|
||||
}
|
||||
|
||||
void TSE::Layer::Render(IRenderer &rnd) const
|
||||
{
|
||||
TransformationStack stack;
|
||||
for(auto obj : objectsToRender)
|
||||
{
|
||||
HandleObject(obj, stack, rnd);
|
||||
}
|
||||
}
|
||||
|
||||
void TSE::Layer::AddTransformable(Transformable *t)
|
||||
{
|
||||
objectsToRender.push_back(t);
|
||||
}
|
||||
|
||||
bool TSE::Layer::HasTransformable(const Transformable *t) const
|
||||
{
|
||||
for(auto trans2 : objectsToRender)
|
||||
{
|
||||
if(t->id == trans2->id)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void TSE::Layer::RemoveTransformable(const Transformable *t)
|
||||
{
|
||||
RemoveTransformable(t->id);
|
||||
}
|
||||
|
||||
void TSE::Layer::RemoveTransformable(const uuids::uuid id)
|
||||
{
|
||||
auto it = objectsToRender.begin();
|
||||
for(auto trans : objectsToRender)
|
||||
{
|
||||
if(trans->id == id)
|
||||
{
|
||||
objectsToRender.erase(it);
|
||||
break;
|
||||
}
|
||||
it++;
|
||||
}
|
||||
}
|
||||
|
||||
TSE::string TSE::Layer::GetName() const
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
void TSE::Layer::SetName(const string &n)
|
||||
{
|
||||
name = n;
|
||||
}
|
||||
|
||||
std::vector<TSE::Transformable *> &TSE::Layer::GetAllObjects()
|
||||
{
|
||||
return objectsToRender;
|
||||
}
|
||||
|
||||
void TSE::Layer::Update()
|
||||
{
|
||||
for(auto trans : objectsToRender)
|
||||
{
|
||||
trans->Update();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user