* fix and improve light power adjusting by mouse drag
This commit is contained in:
parent
565f7fc6db
commit
74e101c7ba
|
|
@ -232,7 +232,6 @@ class ScaleRadius {
|
||||||
ObservedSelectable m_selectable;
|
ObservedSelectable m_selectable;
|
||||||
public:
|
public:
|
||||||
static Matrix4 m_model;
|
static Matrix4 m_model;
|
||||||
float m_radius;
|
|
||||||
|
|
||||||
ScaleRadius( const SelectionChangeCallback& onchanged ) :
|
ScaleRadius( const SelectionChangeCallback& onchanged ) :
|
||||||
m_selectable( onchanged ) {
|
m_selectable( onchanged ) {
|
||||||
|
|
@ -243,31 +242,18 @@ public:
|
||||||
void setSelected( bool selected ) {
|
void setSelected( bool selected ) {
|
||||||
m_selectable.setSelected( 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 = 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 );
|
Selector_add( selector, m_selectable );
|
||||||
selectedPlaneCallback( Plane3( 2, 0, 0, 0 ) );
|
selectedPlaneCallback( Plane3( 2, 0, 0, 0 ) );
|
||||||
|
|
||||||
m_radius = radius;
|
|
||||||
}
|
}
|
||||||
float evaluateResize( const Vector3& translation ) const {
|
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 );
|
Vector3 tra = matrix4_transformed_direction( m_model, translation );
|
||||||
//globalOutputStream() << tra << " tra\n";
|
vector3_normalise( tra );
|
||||||
//globalOutputStream() << m_model << " m_model\n";
|
return tra[0] * len;
|
||||||
// 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 );
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Matrix4 ScaleRadius::m_model = g_matrix4_identity;
|
Matrix4 ScaleRadius::m_model = g_matrix4_identity;
|
||||||
|
|
|
||||||
|
|
@ -795,40 +795,36 @@ void flagsChanged( const char* value ){
|
||||||
}
|
}
|
||||||
typedef MemberCaller1<LightRadii, const char*, &LightRadii::flagsChanged> FlagsChangedCaller;
|
typedef MemberCaller1<LightRadii, const char*, &LightRadii::flagsChanged> FlagsChangedCaller;
|
||||||
|
|
||||||
void calculateTransformedRadii( const float& radius ){
|
void calculateTransformedRadii( float radius ){
|
||||||
|
float (&r)[3] = m_radii_transformed;
|
||||||
if ( spawnflags_linear( m_flags ) ) {
|
if ( spawnflags_linear( m_flags ) ) {
|
||||||
m_radii_transformed[0] = radius + 47.0f / m_fade;
|
r[0] = radius + 47.0f / m_fade;
|
||||||
if( m_radii_transformed[0] <= 1.f ){
|
if( r[0] <= 1.f ){
|
||||||
m_radii_transformed[0] = m_radii_transformed[1] = m_radii_transformed[2] = 1.f;
|
r[0] = r[1] = r[2] = 1.f;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_radii_transformed[1] = radius;
|
r[1] = radius;
|
||||||
m_radii_transformed[2] = radius - 207.0f / m_fade;;
|
r[2] = radius - 207.0f / m_fade;;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_radii_transformed[0] = radius * sqrt( 48.f );
|
r[0] = radius * sqrt( 48.f );
|
||||||
if( m_radii_transformed[0] <= 1.f ){
|
if( r[0] <= 1.f ){
|
||||||
m_radii_transformed[0] = m_radii_transformed[1] = m_radii_transformed[2] = 1.f;
|
r[0] = r[1] = r[2] = 1.f;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_radii_transformed[1] = radius;
|
r[1] = radius;
|
||||||
m_radii_transformed[2] = m_radii_transformed[0] / sqrt( 255.f );
|
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 calculateIntensityFromRadii(){
|
||||||
float intensity;
|
float intensity;
|
||||||
|
if ( spawnflags_linear( m_flags ) )
|
||||||
if ( spawnflags_linear( m_flags ) ) {
|
|
||||||
intensity = ( m_radii_transformed[0] * m_fade + 1.f ) / ( fPointScale * fLinearScale );
|
intensity = ( m_radii_transformed[0] * m_fade + 1.f ) / ( fPointScale * fLinearScale );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
intensity = m_radii_transformed[0] * m_radii_transformed[0] * 1.f / fPointScale;
|
intensity = m_radii_transformed[0] * m_radii_transformed[0] * 1.f / fPointScale;
|
||||||
}
|
return intensity / m_scale;
|
||||||
intensity /= m_scale;
|
|
||||||
return intensity;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1502,7 +1498,7 @@ void snapto( float snap ){
|
||||||
m_originKey.write( &m_entity );
|
m_originKey.write( &m_entity );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void setLightRadii( const float& radius ){
|
void setLightRadii( float radius ){
|
||||||
m_radii.calculateTransformedRadii( radius );
|
m_radii.calculateTransformedRadii( radius );
|
||||||
}
|
}
|
||||||
void setLightRadius( const AABB& aabb ){
|
void setLightRadius( const AABB& aabb ){
|
||||||
|
|
@ -1773,7 +1769,8 @@ class LightInstance :
|
||||||
public SelectionTestable,
|
public SelectionTestable,
|
||||||
public RendererLight,
|
public RendererLight,
|
||||||
public PlaneSelectable,
|
public PlaneSelectable,
|
||||||
public ComponentSelectionTestable
|
public ComponentSelectionTestable,
|
||||||
|
public ComponentEditable
|
||||||
{
|
{
|
||||||
class TypeCasts
|
class TypeCasts
|
||||||
{
|
{
|
||||||
|
|
@ -1788,6 +1785,7 @@ TypeCasts(){
|
||||||
InstanceStaticCast<LightInstance, Transformable>::install( m_casts );
|
InstanceStaticCast<LightInstance, Transformable>::install( m_casts );
|
||||||
InstanceStaticCast<LightInstance, PlaneSelectable>::install( m_casts );
|
InstanceStaticCast<LightInstance, PlaneSelectable>::install( m_casts );
|
||||||
InstanceStaticCast<LightInstance, ComponentSelectionTestable>::install( m_casts );
|
InstanceStaticCast<LightInstance, ComponentSelectionTestable>::install( m_casts );
|
||||||
|
InstanceStaticCast<LightInstance, ComponentEditable>::install( m_casts );
|
||||||
InstanceIdentityCast<LightInstance>::install( m_casts );
|
InstanceIdentityCast<LightInstance>::install( m_casts );
|
||||||
}
|
}
|
||||||
InstanceTypeCastTable& get(){
|
InstanceTypeCastTable& get(){
|
||||||
|
|
@ -1848,7 +1846,7 @@ void selectPlanes( Selector& selector, SelectionTest& test, const PlaneCallback&
|
||||||
m_dragPlanes.selectPlanes( m_contained.aabb(), selector, test, selectedPlaneCallback, rotation() );
|
m_dragPlanes.selectPlanes( m_contained.aabb(), selector, test, selectedPlaneCallback, rotation() );
|
||||||
}
|
}
|
||||||
else{
|
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 ){
|
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 ){
|
void testSelectComponents( Selector& selector, SelectionTest& test, SelectionSystem::EComponentMode mode ){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const AABB& getSelectedComponentsBounds() const {
|
||||||
|
return m_contained.aabb();
|
||||||
|
}
|
||||||
|
|
||||||
void selectedChangedComponent( const Selectable& selectable ){
|
void selectedChangedComponent( const Selectable& selectable ){
|
||||||
GlobalSelectionSystem().getObserver ( SelectionSystem::eComponent )( selectable );
|
GlobalSelectionSystem().getObserver ( SelectionSystem::eComponent )( selectable );
|
||||||
GlobalSelectionSystem().onComponentSelection( *this, selectable );
|
GlobalSelectionSystem().onComponentSelection( *this, selectable );
|
||||||
|
|
@ -1897,8 +1899,7 @@ void evaluateTransform(){
|
||||||
m_contained.setLightRadius( m_dragPlanes.evaluateResize( getTranslation(), rotation() ) );
|
m_contained.setLightRadius( m_dragPlanes.evaluateResize( getTranslation(), rotation() ) );
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
m_scaleRadius.m_radius = m_contained.getLightRadii().m_radii[1];
|
m_contained.setLightRadii( m_contained.getLightRadii().m_radii[1] + m_scaleRadius.evaluateResize( getTranslation() ) );
|
||||||
m_contained.setLightRadii( m_scaleRadius.evaluateResize( getTranslation() ) );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user