X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=plugins%2Fentity%2Fdoom3group.cpp;h=66e2f9249f03acd58fcf605324b9c5cc00fdb1c1;hp=72048bdbaa3ac7041a14a086e4a89e004f22f3c2;hb=231225d6f97d0b926b2e896e5783cccfbc7c5619;hpb=6ee91d153ea09f2dafa62ed2f022f4183c090168 diff --git a/plugins/entity/doom3group.cpp b/plugins/entity/doom3group.cpp index 72048bdb..66e2f924 100644 --- a/plugins/entity/doom3group.cpp +++ b/plugins/entity/doom3group.cpp @@ -82,6 +82,7 @@ class Doom3Group : SingletonModel m_model; OriginKey m_originKey; Vector3 m_origin; + RotationKey m_rotationKey; Float9 m_rotation; @@ -92,6 +93,7 @@ class Doom3Group : Doom3GroupOrigin m_funcStaticOrigin; RenderablePivot m_renderOrigin; RenderableNamedEntity m_renderName; + mutable Vector3 m_name_origin; ModelSkinKey m_skin; public: @@ -198,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; @@ -228,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()) @@ -276,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), @@ -399,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); } } @@ -546,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());