- Radiant is now Vista compatible (Aero must be disabled)
[xonotic/netradiant.git] / plugins / entity / light.cpp
index 901e79de6167777503d1be3dabce277d6de166d2..667b38b7c19b164f4104b73064e7dc1779fa3719 100644 (file)
@@ -537,25 +537,30 @@ public:
   typedef MemberCaller1<LightRadii, const char*, &LightRadii::flagsChanged> FlagsChangedCaller;
 };
 
-const Vector3 c_defaultDoom3LightRadius = Vector3(300, 300, 300);
 class Doom3LightRadius
 {
 public:
+  Vector3 m_defaultRadius;
   Vector3 m_radius;
   Vector3 m_radiusTransformed;
   Vector3 m_center;
   Callback m_changed;
   bool m_useCenterKey;
 
-  Doom3LightRadius() : m_radius(c_defaultDoom3LightRadius), m_center(0, 0, 0), m_useCenterKey(false)
+  Doom3LightRadius(const char* defaultRadius) : m_defaultRadius(300, 300, 300), m_center(0, 0, 0), m_useCenterKey(false)
   {
+    if(!string_parse_vector3(defaultRadius, m_defaultRadius))
+    {
+      globalErrorStream() << "Doom3LightRadius: failed to parse default light radius\n";
+    }
+    m_radius = m_defaultRadius;
   }
 
   void lightRadiusChanged(const char* value)
   {
     if(!string_parse_vector3(value, m_radius))
     {
-      m_radius = c_defaultDoom3LightRadius;
+      m_radius = m_defaultRadius;
     }
     m_radiusTransformed = m_radius;
     m_changed();
@@ -903,6 +908,11 @@ class Light :
       m_traverse.detach(&m_traverseObservers);
     }
   }
+  
+// vc 2k5 compiler fix
+#if _MSC_VER >= 1400
+       public:
+#endif
 
   void updateOrigin()
   {
@@ -1043,6 +1053,7 @@ public:
     m_named(m_entity),
     m_nameKeys(m_entity),
     m_funcStaticOrigin(m_traverse, m_originKey.m_origin),
+    m_doom3Radius(EntityClass_valueForKey(m_entity.getEntityClass(), "light_radius")),
     m_radii_wire(m_radii, m_aabb_light.origin),
     m_radii_fill(m_radii, m_aabb_light.origin),
     m_radii_box(m_aabb_light.origin),
@@ -1066,6 +1077,7 @@ public:
     m_named(m_entity),
     m_nameKeys(m_entity),
     m_funcStaticOrigin(m_traverse, m_originKey.m_origin),
+    m_doom3Radius(EntityClass_valueForKey(m_entity.getEntityClass(), "light_radius")),
     m_radii_wire(m_radii, m_aabb_light.origin),
     m_radii_fill(m_radii, m_aabb_light.origin),
     m_radii_box(m_aabb_light.origin),
@@ -1330,14 +1342,7 @@ public:
       write_rotation(m_rotationKey.m_rotation, &m_entity);
 
       m_doom3Radius.m_radius = m_doom3Radius.m_radiusTransformed;
-      if(m_doom3Radius.m_radius == c_defaultDoom3LightRadius)
-      {
-        m_entity.setKeyValue("light_radius", "");
-      }
-      else
-      {
-        write_origin(m_doom3Radius.m_radius, &m_entity, "light_radius");
-      }
+      write_origin(m_doom3Radius.m_radius, &m_entity, "light_radius");
     }
   }
   void transformChanged()
@@ -1686,10 +1691,7 @@ public:
       //globalOutputStream() << getTranslation() << "\n";
 
       m_dragPlanes.m_bounds = m_contained.aabb();
-      AABB aabb(m_dragPlanes.evaluateResize(translation_to_local(getTranslation(), rotation())));
-      aabb.origin = m_contained.aabb().origin + translation_from_local(aabb.origin - m_contained.aabb().origin, rotation());
-
-      m_contained.setLightRadius(aabb);
+      m_contained.setLightRadius(m_dragPlanes.evaluateResize(getTranslation(), rotation()));
     }
   }
   void applyTransform()