]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - plugins/entity/curve.h
q3map2/games: add warsow and warfork
[xonotic/netradiant.git] / plugins / entity / curve.h
index de610de35f05d6409b78b09d2278d9256c1141af..c22a51aa899cb043602b3405c82cddfda6049057 100644 (file)
@@ -111,50 +111,6 @@ inline void ControlPoint_testSelect( const Vector3& point, ObservedSelectable& s
        }
 }
 
-class ControlPointTransform
-{
-const Matrix4& m_matrix;
-public:
-ControlPointTransform( const Matrix4& matrix ) : m_matrix( matrix ){
-}
-void operator()( Vector3& point ) const {
-       matrix4_transform_point( m_matrix, point );
-}
-};
-
-class ControlPointSnap
-{
-float m_snap;
-public:
-ControlPointSnap( float snap ) : m_snap( snap ){
-}
-void operator()( Vector3& point ) const {
-       vector3_snap( point, m_snap );
-}
-};
-
-class ControlPointAdd
-{
-RenderablePointVector& m_points;
-public:
-ControlPointAdd( RenderablePointVector& points ) : m_points( points ){
-}
-void operator()( const Vector3& point ) const {
-       m_points.push_back( PointVertex( vertex3f_for_vector3( point ), colour_vertex ) );
-}
-};
-
-class ControlPointAddSelected
-{
-RenderablePointVector& m_points;
-public:
-ControlPointAddSelected( RenderablePointVector& points ) : m_points( points ){
-}
-void operator()( const Vector3& point ) const {
-       m_points.push_back( PointVertex( vertex3f_for_vector3( point ), colour_selected ) );
-}
-};
-
 class CurveEditType
 {
 public:
@@ -253,15 +209,21 @@ void write( const char* key, Entity& entity ){
 }
 
 void transform( const Matrix4& matrix ){
-       forEachSelected( ControlPointTransform( matrix ) );
+       forEachSelected([&](Vector3 &point) {
+               matrix4_transform_point(matrix, point);
+       });
 }
 void snapto( float snap ){
-       forEachSelected( ControlPointSnap( snap ) );
+       forEachSelected([&](Vector3 &point) {
+               vector3_snap(point, snap);
+       });
 }
 
 void updateSelected() const {
        m_selectedRender.clear();
-       forEachSelected( ControlPointAddSelected( m_selectedRender ) );
+       forEachSelected([&](const Vector3 &point) {
+               m_selectedRender.push_back(PointVertex(vertex3f_for_vector3(point), colour_selected));
+       });
 }
 
 void renderComponents( Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld ) const {
@@ -285,11 +247,13 @@ void curveChanged(){
 
        m_controlsRender.clear();
        m_controlsRender.reserve( m_controlPoints.size() );
-       forEach( ControlPointAdd( m_controlsRender ) );
+       forEach([&](const Vector3 &point) {
+               m_controlsRender.push_back(PointVertex(vertex3f_for_vector3(point), colour_vertex));
+       });
 
        m_selectedRender.reserve( m_controlPoints.size() );
 }
-typedef MemberCaller<CurveEdit, &CurveEdit::curveChanged> CurveChangedCaller;
+typedef MemberCaller<CurveEdit, void(), &CurveEdit::curveChanged> CurveChangedCaller;
 };
 
 
@@ -299,7 +263,7 @@ const int NURBS_degree = 3;
 class NURBSCurve
 {
 Signal0 m_curveChanged;
-Callback m_boundsChanged;
+Callback<void()> m_boundsChanged;
 public:
 ControlPoints m_controlPoints;
 ControlPoints m_controlPointsTransformed;
@@ -308,7 +272,7 @@ Knots m_knots;
 RenderableCurve m_renderCurve;
 AABB m_bounds;
 
-NURBSCurve( const Callback& boundsChanged ) : m_boundsChanged( boundsChanged ){
+NURBSCurve( const Callback<void()>& boundsChanged ) : m_boundsChanged( boundsChanged ){
 }
 
 SignalHandlerId connect( const SignalHandler& curveChanged ){
@@ -379,20 +343,20 @@ void curveChanged( const char* value ){
        m_controlPointsTransformed = m_controlPoints;
        curveChanged();
 }
-typedef MemberCaller1<NURBSCurve, const char*, &NURBSCurve::curveChanged> CurveChangedCaller;
+typedef MemberCaller<NURBSCurve, void(const char*), &NURBSCurve::curveChanged> CurveChangedCaller;
 };
 
 class CatmullRomSpline
 {
 Signal0 m_curveChanged;
-Callback m_boundsChanged;
+Callback<void()> m_boundsChanged;
 public:
 ControlPoints m_controlPoints;
 ControlPoints m_controlPointsTransformed;
 RenderableCurve m_renderCurve;
 AABB m_bounds;
 
-CatmullRomSpline( const Callback& boundsChanged ) : m_boundsChanged( boundsChanged ){
+CatmullRomSpline( const Callback<void()>& boundsChanged ) : m_boundsChanged( boundsChanged ){
 }
 
 SignalHandlerId connect( const SignalHandler& curveChanged ){
@@ -447,7 +411,7 @@ void curveChanged( const char* value ){
        m_controlPointsTransformed = m_controlPoints;
        curveChanged();
 }
-typedef MemberCaller1<CatmullRomSpline, const char*, &CatmullRomSpline::curveChanged> CurveChangedCaller;
+typedef MemberCaller<CatmullRomSpline, void(const char*), &CatmullRomSpline::curveChanged> CurveChangedCaller;
 };
 
 const char* const curve_Nurbs = "curve_Nurbs";