]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - plugins/entity/doom3group.cpp
- Updated UFA:Plugin (mattn2)
[xonotic/netradiant.git] / plugins / entity / doom3group.cpp
index 5d819909f5d13eb199715029a4a53713587451e5..66e2f9249f03acd58fcf605324b9c5cc00fdb1c1 100644 (file)
@@ -82,6 +82,7 @@ class Doom3Group :
   SingletonModel m_model;
   OriginKey m_originKey;
   Vector3 m_origin;
+  
   RotationKey m_rotationKey;
   Float9 m_rotation;
 
@@ -92,11 +93,14 @@ class Doom3Group :
   Doom3GroupOrigin m_funcStaticOrigin;
   RenderablePivot m_renderOrigin;
   RenderableNamedEntity m_renderName;
+  mutable Vector3 m_name_origin;
   ModelSkinKey m_skin;
 
 public:
   NURBSCurve m_curveNURBS;
+  SignalHandlerId m_curveNURBSChanged;
   CatmullRomSpline m_curveCatmullRom;
+  SignalHandlerId m_curveCatmullRomChanged;
 private:
   mutable AABB m_curveBounds;
 
@@ -196,9 +200,14 @@ private:
 
   void updateIsModel()
   {
-    setIsModel(!string_empty(m_modelKey.c_str()) && !string_equal(m_modelKey.c_str(), m_name.c_str()));
+    setIsModel(!string_equal(m_modelKey.c_str(), m_name.c_str()));
   }
 
+// vc 2k5 compiler fix
+#if _MSC_VER >= 1400
+       public:
+#endif
+
   void nameChanged(const char* value)
   {
     m_name = value;
@@ -226,8 +235,8 @@ private:
     m_transform.localToParent() = g_matrix4_identity;
     if(isModel())
     {
-      matrix4_translate_by_vec3(m_transform.localToParent(), m_originKey.m_origin);
-      matrix4_multiply_by_matrix4(m_transform.localToParent(), rotation_toMatrix(m_rotationKey.m_rotation));
+      matrix4_translate_by_vec3(m_transform.localToParent(), m_origin);
+      matrix4_multiply_by_matrix4(m_transform.localToParent(), rotation_toMatrix(m_rotation));
     }
     m_transformChanged();
     if(!isModel())
@@ -274,7 +283,8 @@ public:
     m_named(m_entity),
     m_nameKeys(m_entity),
     m_funcStaticOrigin(m_traverse, m_origin),
-    m_renderName(m_named, g_vector3_identity),
+    m_renderName(m_named, m_name_origin),
+       m_name_origin(g_vector3_identity),
     m_skin(SkinChangedCaller(*this)),
     m_curveNURBS(boundsChanged),
     m_curveCatmullRom(boundsChanged),
@@ -397,11 +407,24 @@ public:
       renderer.addRenderable(m_curveCatmullRom.m_renderCurve, localToWorld);
     }
   }
-  void renderWireframe(Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld, bool selected) const
+
+  void renderWireframe(Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld, bool selected, const AABB& childBounds) const
   {
     renderSolid(renderer, volume, localToWorld, selected);
-    if(g_showNames && isModel())
+
+    if(g_showNames)
     {
+      // draw models as usual
+      if(!isModel())
+      {
+        // don't draw the name for worldspawn
+        if(!strcmp(m_entity.getEntityClass().name(), "worldspawn"))
+            return;
+
+               // place name in the middle of the "children cloud"
+               m_name_origin = childBounds.origin;
+      }
+
       renderer.addRenderable(m_renderName, localToWorld);
     }
   }
@@ -522,8 +545,8 @@ public:
     m_curveCatmullRom(m_contained.m_curveCatmullRom.m_controlPointsTransformed, SelectionChangedComponentCaller(*this))
   {
     m_contained.instanceAttach(Instance::path());
-    m_contained.m_curveNURBS.attach(CurveEdit::CurveChangedCaller(m_curveNURBS));
-    m_contained.m_curveCatmullRom.attach(CurveEdit::CurveChangedCaller(m_curveCatmullRom));
+    m_contained.m_curveNURBSChanged = m_contained.m_curveNURBS.connect(CurveEdit::CurveChangedCaller(m_curveNURBS));
+    m_contained.m_curveCatmullRomChanged = m_contained.m_curveCatmullRom.connect(CurveEdit::CurveChangedCaller(m_curveCatmullRom));
 
     StaticRenderableConnectionLines::instance().attach(*this);
   }
@@ -531,8 +554,8 @@ public:
   {
     StaticRenderableConnectionLines::instance().detach(*this);
 
-    m_contained.m_curveCatmullRom.detach(CurveEdit::CurveChangedCaller(m_curveCatmullRom));
-    m_contained.m_curveNURBS.detach(CurveEdit::CurveChangedCaller(m_curveNURBS));
+    m_contained.m_curveCatmullRom.disconnect(m_contained.m_curveCatmullRomChanged);
+    m_contained.m_curveNURBS.disconnect(m_contained.m_curveNURBSChanged);
     m_contained.instanceDetach(Instance::path());
   }
   void renderSolid(Renderer& renderer, const VolumeTest& volume) const
@@ -544,7 +567,7 @@ public:
   }
   void renderWireframe(Renderer& renderer, const VolumeTest& volume) const
   {
-    m_contained.renderWireframe(renderer, volume, Instance::localToWorld(), getSelectable().isSelected());
+       m_contained.renderWireframe(renderer, volume, Instance::localToWorld(), getSelectable().isSelected(), Instance::childBounds());
 
     m_curveNURBS.renderComponentsSelected(renderer, volume, localToWorld());
     m_curveCatmullRom.renderComponentsSelected(renderer, volume, localToWorld());