File: NullModelNode.cpp

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (83 lines) | stat: -rw-r--r-- 1,647 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "NullModelNode.h"

#include "entitylib.h"
#include "NullModelBoxSurface.h"

namespace model
{

NullModelNode::NullModelNode() :
	_nullModel(new NullModel),
    _boxSurface(localAABB(), localToWorld())
{}

NullModelNode::NullModelNode(const NullModelPtr& nullModel) :
	_nullModel(nullModel),
    _boxSurface(localAABB(), localToWorld())
{}

std::string NullModelNode::name() const
{
	return "Nullmodel";
}

const IModel& NullModelNode::getIModel() const
{
	return *_nullModel;
}

IModel& NullModelNode::getIModel()
{
	return *_nullModel;
}

bool NullModelNode::hasModifiedScale()
{
	return false;
}

Vector3 NullModelNode::getModelScale()
{
	return Vector3(1,1,1);
}

void NullModelNode::testSelect(Selector& selector, SelectionTest& test)
{
    test.BeginMesh(localToWorld());

    SelectionIntersection best;
    aabb_testselect(_nullModel->localAABB(), test, best);

    if (best.isValid())
    {
        selector.addIntersection(best);
    }
}

void NullModelNode::createRenderableSurfaces()
{
    emplaceRenderableSurface(std::make_shared<NullModelBoxSurface>(_boxSurface, _renderEntity, localToWorld()));
}

void NullModelNode::setRenderSystem(const RenderSystemPtr& renderSystem)
{
    ModelNodeBase::setRenderSystem(renderSystem);

    // Detach renderables on render system change
    detachFromShaders();
}

const AABB& NullModelNode::localAABB() const
{
	return _nullModel->localAABB();
}

void NullModelNode::onInsertIntoScene(scene::IMapRootNode& root)
{
    ModelNodeBase::onInsertIntoScene(root);

    // When inserted into the scene, the localToWorld matrix has to be re-evaluated
    transformChanged();
}

} // namespace