[Bf-blender-cvs] [5ba18bc] soc-2014-bge: gameengine scenegraph: whitespace and comment cleanup - KX_SlowParentRelation
Ines Almeida
noreply at git.blender.org
Sat Jul 19 03:41:56 CEST 2014
Commit: 5ba18bc764681756b2ebe628593b3d0d2ddfeec2
Author: Ines Almeida
Date: Fri Jul 18 21:16:06 2014 +0100
https://developer.blender.org/rB5ba18bc764681756b2ebe628593b3d0d2ddfeec2
gameengine scenegraph: whitespace and comment cleanup - KX_SlowParentRelation
===================================================================
M source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
M source/gameengine/Ketsji/KX_SG_NodeRelationships.h
===================================================================
diff --git a/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp b/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
index ba08c8e..0a45bd0 100644
--- a/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
+++ b/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
@@ -144,71 +144,49 @@ KX_VertexParentRelation::KX_VertexParentRelation()
+
+
/**
- * Slow parent relationship
+ * KX_SlowParentRelation - the child only inherits the position, not the orientation or scale
*/
- KX_SlowParentRelation *
-KX_SlowParentRelation::
-New(
- MT_Scalar relaxation
-) {
+KX_SlowParentRelation* KX_SlowParentRelation::New(MT_Scalar relaxation)
+{
return new KX_SlowParentRelation(relaxation);
}
-/**
- * Method inherited from KX_ParentRelation
- */
-
- bool
-KX_SlowParentRelation::
-UpdateChildCoordinates(
- SG_Spatial * child,
- const SG_Spatial * parent,
- bool& parentUpdated
-) {
+bool KX_SlowParentRelation::UpdateChildCoordinates(SG_Spatial *child, const SG_Spatial *parent, bool &parentUpdated)
+{
MT_assert(child != NULL);
- // the child will move even if the parent is not
- parentUpdated = true;
-
- const MT_Vector3 & child_scale = child->GetLocalScale();
- const MT_Point3 & child_pos = child->GetLocalPosition();
- const MT_Matrix3x3 & child_rotation = child->GetLocalOrientation();
+ /* The child has no parent, it is a root object.
+ * The world and local coordinates should be the same and applied directly. */
+ if (parent==NULL) {
+ child->SetWorldFromLocalTransform();
+ }
+ else {
+ const MT_Vector3 & parent_w_scale = parent->GetWorldScaling();
+ const MT_Point3 & parent_w_pos = parent->GetWorldPosition();
+ const MT_Matrix3x3 & parent_w_orientation = parent->GetWorldOrientation();
- // the childs world locations which we will update.
-
- MT_Vector3 child_w_scale;
- MT_Point3 child_w_pos;
- MT_Matrix3x3 child_w_rotation;
-
- if (parent) {
+ const MT_Vector3 & child_l_scale = child->GetLocalScale();
+ const MT_Point3 & child_l_pos = child->GetLocalPosition();
+ const MT_Matrix3x3 & child_l_orientation = child->GetLocalOrientation();
- // This is a slow parent relation
// first compute the normal child world coordinates.
+ MT_Vector3 child_n_scale = parent_w_scale * child_l_scale;
+ MT_Point3 child_n_pos = parent_w_pos + parent_w_scale * (parent_w_orientation * child_l_pos);
+ MT_Matrix3x3 child_n_orientation = parent_w_orientation * child_l_orientation;
- MT_Vector3 child_n_scale;
- MT_Point3 child_n_pos;
- MT_Matrix3x3 child_n_rotation;
-
- const MT_Vector3 & p_world_scale = parent->GetWorldScaling();
- const MT_Point3 & p_world_pos = parent->GetWorldPosition();
- const MT_Matrix3x3 & p_world_rotation = parent->GetWorldOrientation();
-
- child_n_scale = p_world_scale * child_scale;
- child_n_rotation = p_world_rotation * child_rotation;
-
- child_n_pos = p_world_pos + p_world_scale *
- (p_world_rotation * child_pos);
-
+ MT_Vector3 child_w_scale;
+ MT_Point3 child_w_pos;
+ MT_Matrix3x3 child_w_orientation;
if (m_initialized) {
-
// get the current world positions
-
child_w_scale = child->GetWorldScaling();
child_w_pos = child->GetWorldPosition();
- child_w_rotation = child->GetWorldOrientation();
+ child_w_orientation = child->GetWorldOrientation();
// now 'interpolate' the normal coordinates with the last
// world coordinates to get the new world coordinates.
@@ -217,60 +195,45 @@ UpdateChildCoordinates(
child_w_scale = (m_relax * child_w_scale + child_n_scale) * weight;
child_w_pos = (m_relax * child_w_pos + child_n_pos) * weight;
// for rotation we must go through quaternion
- MT_Quaternion child_w_quat = child_w_rotation.getRotation().slerp(child_n_rotation.getRotation(), weight);
- child_w_rotation.setRotation(child_w_quat);
+ MT_Quaternion child_w_quat = child_w_orientation.getRotation().slerp(child_n_orientation.getRotation(), weight);
+ child_w_orientation.setRotation(child_w_quat);
//FIXME: update physics controller.
} else {
+ /**
+ * We need to compute valid world coordinates the first
+ * time we update spatial data of the child. This is done
+ * by just doing a normal parent relation the first time.
+ */
child_w_scale = child_n_scale;
child_w_pos = child_n_pos;
- child_w_rotation = child_n_rotation;
+ child_w_orientation = child_n_orientation;
m_initialized = true;
}
-
- } else {
-
- child_w_scale = child_scale;
- child_w_pos = child_pos;
- child_w_rotation = child_rotation;
+ child->SetWorldScale(child_w_scale);
+ child->SetWorldPosition(child_w_pos);
+ child->SetWorldOrientation(child_w_orientation);
}
- child->SetWorldScale(child_w_scale);
- child->SetWorldPosition(child_w_pos);
- child->SetWorldOrientation(child_w_rotation);
+ parentUpdated = true; //this variable is going to be used to update the children of this child
child->ClearModified();
// this node must always be updated, so reschedule it for next time
child->ActivateRecheduleUpdateCallback();
-
- return true; //parent != NULL;
+ return true;
}
-/**
- * Method inherited from KX_ParentRelation
- */
-
- SG_ParentRelation *
-KX_SlowParentRelation::
-NewCopy(
-) {
+SG_ParentRelation* KX_SlowParentRelation::NewCopy()
+{
return new KX_SlowParentRelation(m_relax);
}
-KX_SlowParentRelation::
-KX_SlowParentRelation(
- MT_Scalar relaxation
-):
- m_relax(relaxation),
+KX_SlowParentRelation::KX_SlowParentRelation(MT_Scalar relaxation)
+ :m_relax(relaxation),
m_initialized(false)
{
//nothing to do
}
-KX_SlowParentRelation::
-~KX_SlowParentRelation(
-) {
+KX_SlowParentRelation::~KX_SlowParentRelation()
+{
//nothing to do
}
-
-
-
-
diff --git a/source/gameengine/Ketsji/KX_SG_NodeRelationships.h b/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
index 38157b4..c9a7a03 100644
--- a/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
+++ b/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
@@ -30,13 +30,12 @@
* \ingroup ketsji
* \section KX_SG_NodeRelationships
* This file provides common concrete implementations of
- * SG_ParentRelation used by the game engine. These are
- * KX_SlowParentRelation a slow parent relationship.
- * KX_NormalParentRelation a normal parent relationship where
- * orientation and position are inherited from the parent by
+ * SG_ParentRelation used by the game engine. These are:
+ * - KX_NormalParentRelation a normal parent relationship where
+ * orientation, position and scale are inherited from the parent by
* the child.
- * KX_VertexParentRelation only location information is
- * inherited by the child.
+ * - KX_VertexParentRelation only location information is inherited by the child.
+ * - KX_SlowParentRelation a slow parent relationship.
*/
#ifndef __KX_SG_NODERELATIONSHIPS_H__
@@ -127,72 +126,43 @@ class KX_SlowParentRelation : public SG_ParentRelation
public :
/**
- * Allocate and construct a new KX_VertexParentRelation
- * on the heap.
+ * Allocate and construct a new KX_SlowParentRelation on the heap.
*/
+ static KX_SlowParentRelation* New(MT_Scalar relaxation);
- static
- KX_SlowParentRelation *
- New(
- MT_Scalar relaxation
- );
-
- /**
+ /**
* Method inherited from KX_ParentRelation
+ * Update the child's global coordinates based upon the local ones and the parent's global coordinates.
*/
+ bool UpdateChildCoordinates(SG_Spatial *child, const SG_Spatial *parent, bool &parentUpdated);
- bool
- UpdateChildCoordinates(
- SG_Spatial * child,
- const SG_Spatial * parent,
- bool& parentUpdated
- );
-
- /**
+ /**
* Method inherited from KX_ParentRelation
+ * This should return a pointer to a new duplicate allocated on the heap.
+ * Responsibility for deleting the duplicate resides with the caller of this method.
*/
-
- SG_ParentRelation *
- NewCopy(
- );
-
- MT_Scalar
- GetTimeOffset(
- ) { return m_relax; }
-
- void
- SetTimeOffset(
- MT_Scalar relaxation
- ) { m_relax = relaxation; }
-
- ~KX_SlowParentRelation(
- );
-
- bool
- IsSlowRelation(
- ) {
+ SG_ParentRelation* NewCopy();
+
+ ~KX_SlowParentRelation();
+
+ bool IsSlowRelation()
+ {
return true;
}
-private :
+ MT_Scalar GetTimeOffset() { return m_relax; }
+ void SetTimeOffset(MT_Scalar relaxation) { m_relax = relaxation; }
- KX_SlowParentRelation(
- MT_Scalar relaxation
- );
+private :
- // the relaxation coefficient.
+ KX_SlowParentRelation(MT_Scalar relaxation);
+ /* the relaxation coefficient. */
MT_Scalar m_relax;
/**
* Looks like a hack flag to me.
- * We need to compute valid world coordinates the first
- * time we update spatial data of the child. This is done
- * by just doing a normal parent relation the first time
- * UpdateChildCoordinates is called and then doing the
- * slow parent relation
*/
-
bool m_initialized;
More information about the Bf-blender-cvs
mailing list