diff --git a/libs/dragplanes.h b/libs/dragplanes.h index 4c3d7221..081cdd40 100644 --- a/libs/dragplanes.h +++ b/libs/dragplanes.h @@ -232,7 +232,6 @@ class ScaleRadius { ObservedSelectable m_selectable; public: static Matrix4 m_model; - float m_radius; ScaleRadius( const SelectionChangeCallback& onchanged ) : m_selectable( onchanged ) { @@ -243,31 +242,18 @@ public: void setSelected( bool selected ) { m_selectable.setSelected( selected ); } - void selectPlanes( const float& radius, Selector& selector, SelectionTest& test, const PlaneCallback& selectedPlaneCallback ) { + void selectPlanes( Selector& selector, SelectionTest& test, const PlaneCallback& selectedPlaneCallback ) { m_model = test.getVolume().GetModelview(); - m_model[0] = m_model[0] >= 0 ? 1 : -1; - m_model[5] = m_model[5] >= 0 ? 1 : -1; - m_model[10] = m_model[10] >= 0 ? 1 : -1; - Selector_add( selector, m_selectable ); selectedPlaneCallback( Plane3( 2, 0, 0, 0 ) ); - - m_radius = radius; } float evaluateResize( const Vector3& translation ) const { - float delta; + const float len = vector3_length( translation ); + if( len == 0 ) + return 0; Vector3 tra = matrix4_transformed_direction( m_model, translation ); - //globalOutputStream() << tra << " tra\n"; - //globalOutputStream() << m_model << " m_model\n"; -// if( ( tra[0] + tra[1] + tra[2] ) >= 0.f ){ -// delta = vector3_length( translation ); -// } -// else{ -// delta = vector3_length( translation ) * -1.f; -// } - delta = tra[0]; - - return ( m_radius + delta ); + vector3_normalise( tra ); + return tra[0] * len; } }; Matrix4 ScaleRadius::m_model = g_matrix4_identity; diff --git a/plugins/entity/light.cpp b/plugins/entity/light.cpp index b54ff063..7380c9a2 100644 --- a/plugins/entity/light.cpp +++ b/plugins/entity/light.cpp @@ -795,40 +795,36 @@ void flagsChanged( const char* value ){ } typedef MemberCaller1 FlagsChangedCaller; -void calculateTransformedRadii( const float& radius ){ +void calculateTransformedRadii( float radius ){ + float (&r)[3] = m_radii_transformed; if ( spawnflags_linear( m_flags ) ) { - m_radii_transformed[0] = radius + 47.0f / m_fade; - if( m_radii_transformed[0] <= 1.f ){ - m_radii_transformed[0] = m_radii_transformed[1] = m_radii_transformed[2] = 1.f; + r[0] = radius + 47.0f / m_fade; + if( r[0] <= 1.f ){ + r[0] = r[1] = r[2] = 1.f; return; } - m_radii_transformed[1] = radius; - m_radii_transformed[2] = radius - 207.0f / m_fade;; + r[1] = radius; + r[2] = radius - 207.0f / m_fade;; } else { - m_radii_transformed[0] = radius * sqrt( 48.f ); - if( m_radii_transformed[0] <= 1.f ){ - m_radii_transformed[0] = m_radii_transformed[1] = m_radii_transformed[2] = 1.f; + r[0] = radius * sqrt( 48.f ); + if( r[0] <= 1.f ){ + r[0] = r[1] = r[2] = 1.f; return; } - m_radii_transformed[1] = radius; - m_radii_transformed[2] = m_radii_transformed[0] / sqrt( 255.f ); + r[1] = radius; + r[2] = r[0] / sqrt( 255.f ); } - //globalOutputStream() << m_radii_transformed[0] << " " << m_radii_transformed[1] << " " << m_radii_transformed[2] << " \n"; + //globalOutputStream() << r[0] << " " << r[1] << " " << r[2] << " \n"; } float calculateIntensityFromRadii(){ float intensity; - - if ( spawnflags_linear( m_flags ) ) { + if ( spawnflags_linear( m_flags ) ) intensity = ( m_radii_transformed[0] * m_fade + 1.f ) / ( fPointScale * fLinearScale ); - } else - { intensity = m_radii_transformed[0] * m_radii_transformed[0] * 1.f / fPointScale; - } - intensity /= m_scale; - return intensity; + return intensity / m_scale; } }; @@ -1502,7 +1498,7 @@ void snapto( float snap ){ m_originKey.write( &m_entity ); } } -void setLightRadii( const float& radius ){ +void setLightRadii( float radius ){ m_radii.calculateTransformedRadii( radius ); } void setLightRadius( const AABB& aabb ){ @@ -1773,7 +1769,8 @@ class LightInstance : public SelectionTestable, public RendererLight, public PlaneSelectable, - public ComponentSelectionTestable + public ComponentSelectionTestable, + public ComponentEditable { class TypeCasts { @@ -1788,6 +1785,7 @@ TypeCasts(){ InstanceStaticCast::install( m_casts ); InstanceStaticCast::install( m_casts ); InstanceStaticCast::install( m_casts ); + InstanceStaticCast::install( m_casts ); InstanceIdentityCast::install( m_casts ); } InstanceTypeCastTable& get(){ @@ -1848,7 +1846,7 @@ void selectPlanes( Selector& selector, SelectionTest& test, const PlaneCallback& m_dragPlanes.selectPlanes( m_contained.aabb(), selector, test, selectedPlaneCallback, rotation() ); } else{ - m_scaleRadius.selectPlanes( m_contained.getLightRadii().m_radii[1], selector, test, selectedPlaneCallback ); + m_scaleRadius.selectPlanes( selector, test, selectedPlaneCallback ); } } void selectReversedPlanes( Selector& selector, const SelectedPlanes& selectedPlanes ){ @@ -1878,6 +1876,10 @@ void setSelectedComponents( bool select, SelectionSystem::EComponentMode mode ){ void testSelectComponents( Selector& selector, SelectionTest& test, SelectionSystem::EComponentMode mode ){ } +const AABB& getSelectedComponentsBounds() const { + return m_contained.aabb(); +} + void selectedChangedComponent( const Selectable& selectable ){ GlobalSelectionSystem().getObserver ( SelectionSystem::eComponent )( selectable ); GlobalSelectionSystem().onComponentSelection( *this, selectable ); @@ -1897,8 +1899,7 @@ void evaluateTransform(){ m_contained.setLightRadius( m_dragPlanes.evaluateResize( getTranslation(), rotation() ) ); } else{ - m_scaleRadius.m_radius = m_contained.getLightRadii().m_radii[1]; - m_contained.setLightRadii( m_scaleRadius.evaluateResize( getTranslation() ) ); + m_contained.setLightRadii( m_contained.getLightRadii().m_radii[1] + m_scaleRadius.evaluateResize( getTranslation() ) ); } } }