SingletonModel m_model;
OriginKey m_originKey;
Vector3 m_origin;
+
RotationKey m_rotationKey;
Float9 m_rotation;
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;
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;
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())
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),
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);
}
}
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);
}
{
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
}
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());