#include "entitylib.h"
class NullModel :
- public Bounded,
- public Cullable
-{
-Shader* m_state;
-AABB m_aabb_local;
-RenderableSolidAABB m_aabb_solid;
-RenderableWireframeAABB m_aabb_wire;
+ public Bounded,
+ public Cullable {
+ Shader *m_state;
+ AABB m_aabb_local;
+ RenderableSolidAABB m_aabb_solid;
+ RenderableWireframeAABB m_aabb_wire;
public:
-NullModel() : m_aabb_local( Vector3( 0, 0, 0 ), Vector3( 8, 8, 8 ) ), m_aabb_solid( m_aabb_local ), m_aabb_wire( m_aabb_local ){
- m_state = GlobalShaderCache().capture( "" );
-}
-~NullModel(){
- GlobalShaderCache().release( "" );
-}
-
-VolumeIntersectionValue intersectVolume( const VolumeTest& volume, const Matrix4& localToWorld ) const {
- return volume.TestAABB( m_aabb_local, localToWorld );
-}
-
-const AABB& localAABB() const {
- return m_aabb_local;
-}
-
-void renderSolid( Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld ) const {
- renderer.SetState( m_state, Renderer::eFullMaterials );
- renderer.addRenderable( m_aabb_solid, localToWorld );
-}
-void renderWireframe( Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld ) const {
- renderer.addRenderable( m_aabb_wire, localToWorld );
-}
-
-void testSelect( Selector& selector, SelectionTest& test, const Matrix4& localToWorld ){
- test.BeginMesh( localToWorld );
-
- SelectionIntersection best;
- aabb_testselect( m_aabb_local, test, best );
- if ( best.valid() ) {
- selector.addIntersection( best );
- }
-}
+ NullModel() : m_aabb_local(Vector3(0, 0, 0), Vector3(8, 8, 8)), m_aabb_solid(m_aabb_local),
+ m_aabb_wire(m_aabb_local)
+ {
+ m_state = GlobalShaderCache().capture("");
+ }
+
+ ~NullModel()
+ {
+ GlobalShaderCache().release("");
+ }
+
+ VolumeIntersectionValue intersectVolume(const VolumeTest &volume, const Matrix4 &localToWorld) const
+ {
+ return volume.TestAABB(m_aabb_local, localToWorld);
+ }
+
+ const AABB &localAABB() const
+ {
+ return m_aabb_local;
+ }
+
+ void renderSolid(Renderer &renderer, const VolumeTest &volume, const Matrix4 &localToWorld) const
+ {
+ renderer.SetState(m_state, Renderer::eFullMaterials);
+ renderer.addRenderable(m_aabb_solid, localToWorld);
+ }
+
+ void renderWireframe(Renderer &renderer, const VolumeTest &volume, const Matrix4 &localToWorld) const
+ {
+ renderer.addRenderable(m_aabb_wire, localToWorld);
+ }
+
+ void testSelect(Selector &selector, SelectionTest &test, const Matrix4 &localToWorld)
+ {
+ test.BeginMesh(localToWorld);
+
+ SelectionIntersection best;
+ aabb_testselect(m_aabb_local, test, best);
+ if (best.valid()) {
+ selector.addIntersection(best);
+ }
+ }
};
-class NullModelInstance : public scene::Instance, public Renderable, public SelectionTestable
-{
-class TypeCasts
-{
-InstanceTypeCastTable m_casts;
+class NullModelInstance : public scene::Instance, public Renderable, public SelectionTestable {
+ class TypeCasts {
+ InstanceTypeCastTable m_casts;
+ public:
+ TypeCasts()
+ {
+ InstanceContainedCast<NullModelInstance, Bounded>::install(m_casts);
+ InstanceContainedCast<NullModelInstance, Cullable>::install(m_casts);
+ InstanceStaticCast<NullModelInstance, Renderable>::install(m_casts);
+ InstanceStaticCast<NullModelInstance, SelectionTestable>::install(m_casts);
+ }
+
+ InstanceTypeCastTable &get()
+ {
+ return m_casts;
+ }
+ };
+
+ NullModel &m_nullmodel;
public:
-TypeCasts(){
- InstanceContainedCast<NullModelInstance, Bounded>::install( m_casts );
- InstanceContainedCast<NullModelInstance, Cullable>::install( m_casts );
- InstanceStaticCast<NullModelInstance, Renderable>::install( m_casts );
- InstanceStaticCast<NullModelInstance, SelectionTestable>::install( m_casts );
-}
-InstanceTypeCastTable& get(){
- return m_casts;
-}
+
+ typedef LazyStatic<TypeCasts> StaticTypeCasts;
+
+ Bounded &get(NullType<Bounded>)
+ {
+ return m_nullmodel;
+ }
+
+ Cullable &get(NullType<Cullable>)
+ {
+ return m_nullmodel;
+ }
+
+ NullModelInstance(const scene::Path &path, scene::Instance *parent, NullModel &nullmodel) :
+ Instance(path, parent, this, StaticTypeCasts::instance().get()),
+ m_nullmodel(nullmodel)
+ {
+ }
+
+ void renderSolid(Renderer &renderer, const VolumeTest &volume) const
+ {
+ m_nullmodel.renderSolid(renderer, volume, Instance::localToWorld());
+ }
+
+ void renderWireframe(Renderer &renderer, const VolumeTest &volume) const
+ {
+ m_nullmodel.renderWireframe(renderer, volume, Instance::localToWorld());
+ }
+
+ void testSelect(Selector &selector, SelectionTest &test)
+ {
+ m_nullmodel.testSelect(selector, test, Instance::localToWorld());
+ }
};
-NullModel& m_nullmodel;
+class NullModelNode : public scene::Node::Symbiot, public scene::Instantiable {
+ class TypeCasts {
+ NodeTypeCastTable m_casts;
+ public:
+ TypeCasts()
+ {
+ NodeStaticCast<NullModelNode, scene::Instantiable>::install(m_casts);
+ }
+
+ NodeTypeCastTable &get()
+ {
+ return m_casts;
+ }
+ };
+
+
+ scene::Node m_node;
+ InstanceSet m_instances;
+ NullModel m_nullmodel;
public:
-typedef LazyStatic<TypeCasts> StaticTypeCasts;
-
-Bounded& get( NullType<Bounded>){
- return m_nullmodel;
-}
-Cullable& get( NullType<Cullable>){
- return m_nullmodel;
-}
-
-NullModelInstance( const scene::Path& path, scene::Instance* parent, NullModel& nullmodel ) :
- Instance( path, parent, this, StaticTypeCasts::instance().get() ),
- m_nullmodel( nullmodel ){
-}
-
-void renderSolid( Renderer& renderer, const VolumeTest& volume ) const {
- m_nullmodel.renderSolid( renderer, volume, Instance::localToWorld() );
-}
-void renderWireframe( Renderer& renderer, const VolumeTest& volume ) const {
- m_nullmodel.renderWireframe( renderer, volume, Instance::localToWorld() );
-}
-
-void testSelect( Selector& selector, SelectionTest& test ){
- m_nullmodel.testSelect( selector, test, Instance::localToWorld() );
-}
+ typedef LazyStatic<TypeCasts> StaticTypeCasts;
+
+ NullModelNode() : m_node(this, this, StaticTypeCasts::instance().get())
+ {
+ m_node.m_isRoot = true;
+ }
+
+ void release()
+ {
+ delete this;
+ }
+
+ scene::Node &node()
+ {
+ return m_node;
+ }
+
+ scene::Instance *create(const scene::Path &path, scene::Instance *parent)
+ {
+ return new NullModelInstance(path, parent, m_nullmodel);
+ }
+
+ void forEachInstance(const scene::Instantiable::Visitor &visitor)
+ {
+ m_instances.forEachInstance(visitor);
+ }
+
+ void insert(scene::Instantiable::Observer *observer, const scene::Path &path, scene::Instance *instance)
+ {
+ m_instances.insert(observer, path, instance);
+ }
+
+ scene::Instance *erase(scene::Instantiable::Observer *observer, const scene::Path &path)
+ {
+ return m_instances.erase(observer, path);
+ }
};
-class NullModelNode : public scene::Node::Symbiot, public scene::Instantiable
-{
-class TypeCasts
+NodeSmartReference NewNullModel()
{
-NodeTypeCastTable m_casts;
-public:
-TypeCasts(){
- NodeStaticCast<NullModelNode, scene::Instantiable>::install( m_casts );
-}
-NodeTypeCastTable& get(){
- return m_casts;
-}
-};
-
-
-scene::Node m_node;
-InstanceSet m_instances;
-NullModel m_nullmodel;
-public:
-
-typedef LazyStatic<TypeCasts> StaticTypeCasts;
-
-NullModelNode() : m_node( this, this, StaticTypeCasts::instance().get() ){
- m_node.m_isRoot = true;
+ return NodeSmartReference((new NullModelNode)->node());
}
-void release(){
- delete this;
-}
-scene::Node& node(){
- return m_node;
-}
-
-scene::Instance* create( const scene::Path& path, scene::Instance* parent ){
- return new NullModelInstance( path, parent, m_nullmodel );
-}
-void forEachInstance( const scene::Instantiable::Visitor& visitor ){
- m_instances.forEachInstance( visitor );
-}
-void insert( scene::Instantiable::Observer* observer, const scene::Path& path, scene::Instance* instance ){
- m_instances.insert( observer, path, instance );
-}
-scene::Instance* erase( scene::Instantiable::Observer* observer, const scene::Path& path ){
- return m_instances.erase( observer, path );
-}
-};
-
-NodeSmartReference NewNullModel(){
- return NodeSmartReference( ( new NullModelNode )->node() );
+void NullModel_construct()
+{
}
-void NullModel_construct(){
-}
-void NullModel_destroy(){
+void NullModel_destroy()
+{
}