]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/scenelib.h
[q3map2] Unwind script stack in case of script loading error.
[xonotic/netradiant.git] / libs / scenelib.h
index 2b4b6007bb45fd69aa6bcc37ca5e9afc53a2e9ae..e1c05d464d8ba5ee096c55f6f08c2a122db47e9e 100644 (file)
@@ -22,6 +22,7 @@
 #if !defined ( INCLUDED_SCENELIB_H )
 #define INCLUDED_SCENELIB_H
 
+#include "globaldefs.h"
 #include "iscenegraph.h"
 #include "iselection.h"
 
@@ -106,9 +107,9 @@ NodeType() : m_typeId( NODETYPEID_NONE ){
 void initialise(){
        m_typeId = GlobalSceneGraph().getNodeTypeId( Name() );
 }
-typedef MemberCaller<NodeType<Type>, &NodeType<Type>::initialise> InitialiseCaller;
+typedef MemberCaller<NodeType<Type>, void(), &NodeType<Type>::initialise> InitialiseCaller;
 TypeId getTypeId(){
-#if defined( _DEBUG )
+#if GDEF_DEBUG
        ASSERT_MESSAGE( m_typeId != NODETYPEID_NONE, "node-type " << makeQuoted( Name() ) << " used before being initialised" );
 #endif
        return m_typeId;
@@ -166,6 +167,8 @@ class Symbiot
 {
 public:
 virtual void release() = 0;
+virtual ~Symbiot(){
+}
 };
 
 private:
@@ -223,8 +226,18 @@ bool visible(){
 bool excluded(){
        return ( m_state & eExcluded ) != 0;
 }
+bool operator<( const scene::Node& other ){
+       return this < &other;
+}
+bool operator==( const scene::Node& other ){
+       return this == &other;
+}
+bool operator!=( const scene::Node& other ){
+       return this != &other;
+}
 };
 
+
 class NullNode : public Node::Symbiot
 {
 NodeTypeCastTable m_casts;
@@ -276,16 +289,6 @@ inline TransformNode* Node_getTransformNode( scene::Node& node ){
        return NodeTypeCast<TransformNode>::cast( node );
 }
 
-inline bool operator<( scene::Node& node, scene::Node& other ){
-       return &node < &other;
-}
-inline bool operator==( scene::Node& node, scene::Node& other ){
-       return &node == &other;
-}
-inline bool operator!=( scene::Node& node, scene::Node& other ){
-       return !::operator==( node, other );
-}
-
 
 inline scene::Node& NewNullNode(){
        return ( new scene::NullNode )->node();
@@ -439,9 +442,9 @@ InstanceType() : m_typeId( INSTANCETYPEID_NONE ){
 void initialise(){
        m_typeId = GlobalSceneGraph().getInstanceTypeId( Name() );
 }
-typedef MemberCaller<InstanceType<Type>, &InstanceType<Type>::initialise> InitialiseCaller;
+typedef MemberCaller<InstanceType<Type>, void(), &InstanceType<Type>::initialise> InitialiseCaller;
 TypeId getTypeId(){
-#if defined( _DEBUG )
+#if GDEF_DEBUG
        ASSERT_MESSAGE( m_typeId != INSTANCETYPEID_NONE, "instance-type " << makeQuoted( Name() ) << " used before being initialised" );
 #endif
        return m_typeId;
@@ -572,8 +575,8 @@ mutable bool m_childSelected;
 mutable bool m_childSelectedChanged;
 mutable bool m_parentSelected;
 mutable bool m_parentSelectedChanged;
-Callback m_childSelectedChangedCallback;
-Callback m_transformChangedCallback;
+Callback<void()> m_childSelectedChangedCallback;
+Callback<void()> m_transformChangedCallback;
 
 
 void evaluateTransform() const {
@@ -671,7 +674,7 @@ void transformChanged(){
        GlobalSceneGraph().traverse_subgraph( TransformChangedWalker(), m_path );
        boundsChanged();
 }
-void setTransformChangedCallback( const Callback& callback ){
+void setTransformChangedCallback( const Callback<void()>& callback ){
        m_transformChangedCallback = callback;
 }
 
@@ -708,7 +711,7 @@ bool childSelected() const {
        return m_childSelected;
 }
 
-void setChildSelectedChangedCallback( const Callback& callback ){
+void setChildSelectedChangedCallback( const Callback<void()>& callback ){
        m_childSelectedChangedCallback = callback;
 }
 void selectedChanged(){
@@ -931,10 +934,10 @@ virtual void decrement() = 0;
 
 class SimpleCounter : public Counter
 {
-Callback m_countChanged;
+Callback<void()> m_countChanged;
 std::size_t m_count;
 public:
-void setCountChangedCallback( const Callback& countChanged ){
+void setCountChangedCallback( const Callback<void()>& countChanged ){
        m_countChanged = countChanged;
 }
 void increment(){