public override void ActivateBatch(object world, ulong clusterObjectID) { System.Diagnostics.Debug.Assert(m_world == null, "Cannot activate already active object!"); m_world = (HkWorld)world; ClusterObjectID = clusterObjectID; IsInWorld = true; Matrix rigidBodyMatrix = GetRigidBodyTransform(); if (RigidBody != null) { RigidBody.SetWorldMatrix(rigidBodyMatrix); m_world.AddRigidBodyBatch(RigidBody); } if (RigidBody2 != null) { RigidBody2.SetWorldMatrix(rigidBodyMatrix); m_world.AddRigidBodyBatch(RigidBody2); } if (CharacterProxy != null) { CharacterProxy.SetRigidBodyTransform(rigidBodyMatrix); CharacterProxy.Activate(m_world); } foreach (var constraint in m_constraints) { m_constraintsAddBatch.Add(constraint); } }
internal void SetRigidBodyTransform(MatrixD worldMatrix) { Matrix rigidBodyMatrix = GetRigidBodyMatrix(worldMatrix); if (RigidBody != null) { RigidBody.SetWorldMatrix(rigidBodyMatrix); } Matrix m = RigidBody.GetRigidBodyMatrix(); Matrix wM = GetWorldMatrix(); if (RigidBody2 != null) { RigidBody2.SetWorldMatrix(rigidBodyMatrix); } if (CharacterProxy != null) { CharacterProxy.Position = rigidBodyMatrix.Translation; CharacterProxy.Forward = rigidBodyMatrix.Forward; CharacterProxy.Up = rigidBodyMatrix.Up; CharacterProxy.Speed = 0; if (CharacterProxy.ImmediateSetWorldTransform) { CharacterProxy.SetRigidBodyTransform(rigidBodyMatrix); } } }