93 lines
1.8 KiB
C++
93 lines
1.8 KiB
C++
/* Copyright (c) 2018-2019, Arm Limited and Contributors
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 the "License";
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "node.h"
|
|
|
|
#include "component.h"
|
|
#include "components/transform.h"
|
|
|
|
namespace vkb
|
|
{
|
|
namespace sg
|
|
{
|
|
Node::Node(const size_t id, const std::string &name) :
|
|
id{id},
|
|
name{name},
|
|
transform{*this}
|
|
{
|
|
set_component(transform);
|
|
}
|
|
|
|
const size_t Node::get_id() const
|
|
{
|
|
return id;
|
|
}
|
|
|
|
const std::string &Node::get_name() const
|
|
{
|
|
return name;
|
|
}
|
|
|
|
void Node::set_parent(Node &p)
|
|
{
|
|
parent = &p;
|
|
|
|
transform.invalidate_world_matrix();
|
|
}
|
|
|
|
Node *Node::get_parent() const
|
|
{
|
|
return parent;
|
|
}
|
|
|
|
void Node::add_child(Node &child)
|
|
{
|
|
children.push_back(&child);
|
|
}
|
|
|
|
const std::vector<Node *> &Node::get_children() const
|
|
{
|
|
return children;
|
|
}
|
|
|
|
void Node::set_component(Component &component)
|
|
{
|
|
auto it = components.find(component.get_type());
|
|
|
|
if (it != components.end())
|
|
{
|
|
it->second = &component;
|
|
}
|
|
else
|
|
{
|
|
components.insert(std::make_pair(component.get_type(), &component));
|
|
}
|
|
}
|
|
|
|
Component &Node::get_component(const std::type_index index)
|
|
{
|
|
return *components.at(index);
|
|
}
|
|
|
|
bool Node::has_component(const std::type_index index)
|
|
{
|
|
return components.count(index) > 0;
|
|
}
|
|
|
|
} // namespace sg
|
|
} // namespace vkb
|