KX_ObjectActuator:: KX_ObjectActuator( SCA_IObject* gameobj, KX_GameObject* refobj, const MT_Vector3& force, const MT_Vector3& torque, const MT_Vector3& dloc, const MT_Vector3& drot, const MT_Vector3& linV, const MT_Vector3& angV, const short damping, const KX_LocalFlags& flag ) : SCA_IActuator(gameobj, KX_ACT_OBJECT), m_force(force), m_torque(torque), m_dloc(dloc), m_drot(drot), m_linear_velocity(linV), m_angular_velocity(angV), m_linear_length2(0.0f), m_current_linear_factor(0.0f), m_current_angular_factor(0.0f), m_damping(damping), m_previous_error(0.0f,0.0f,0.0f), m_error_accumulator(0.0f,0.0f,0.0f), m_bitLocalFlag (flag), m_reference(refobj), m_active_combined_velocity (false), m_linear_damping_active(false), m_angular_damping_active(false), m_jumping(false) { if (m_bitLocalFlag.ServoControl) { // in servo motion, the force is local if the target velocity is local m_bitLocalFlag.Force = m_bitLocalFlag.LinearVelocity; m_pid = m_torque; } if (m_bitLocalFlag.CharacterMotion) { KX_GameObject *parent = static_cast<KX_GameObject *>(GetParent()); PHY_ICharacter *character = parent->GetScene()->GetPhysicsEnvironment()->GetCharacterController(parent); if (!character) { printf("Character motion enabled on non-character object (%s), falling back to simple motion.\n", parent->GetName().Ptr()); m_bitLocalFlag.CharacterMotion = false; } } if (m_reference) m_reference->RegisterActuator(this); UpdateFuzzyFlags(); }
KX_ObjectActuator:: KX_ObjectActuator( SCA_IObject* gameobj, KX_GameObject* refobj, const MT_Vector3& force, const MT_Vector3& torque, const MT_Vector3& dloc, const MT_Vector3& drot, const MT_Vector3& linV, const MT_Vector3& angV, const short damping, const KX_LocalFlags& flag ) : SCA_IActuator(gameobj, KX_ACT_OBJECT), m_force(force), m_torque(torque), m_dloc(dloc), m_drot(drot), m_linear_velocity(linV), m_angular_velocity(angV), m_linear_length2(0.0), m_current_linear_factor(0.0), m_current_angular_factor(0.0), m_damping(damping), m_previous_error(0.0,0.0,0.0), m_error_accumulator(0.0,0.0,0.0), m_bitLocalFlag (flag), m_reference(refobj), m_active_combined_velocity (false), m_linear_damping_active(false), m_angular_damping_active(false) { if (m_bitLocalFlag.ServoControl) { // in servo motion, the force is local if the target velocity is local m_bitLocalFlag.Force = m_bitLocalFlag.LinearVelocity; m_pid = m_torque; } if (m_reference) m_reference->RegisterActuator(this); UpdateFuzzyFlags(); }