Files
DarkRP2D/external/Box2D-2.3.1/Contributions/Tests/BipedDef.cpp
Julian Nießner d175d433a8 Added Box2D
2018-05-06 12:43:20 +02:00

479 lines
15 KiB
C++

#include "BipedDef.h"
int16 BipedDef::count = 0;
const float32 k_scale = 3.0f;
BipedDef::BipedDef()
{
SetMotorTorque(2.0f);
SetMotorSpeed(0.0f);
SetDensity(20.0f);
SetRestitution(0.0f);
SetLinearDamping(0.0f);
SetAngularDamping(0.005f);
SetGroupIndex(--count);
EnableMotor();
EnableLimit();
DefaultVertices();
DefaultPositions();
DefaultJoints();
LFootPoly.friction = RFootPoly.friction = 0.85f;
}
void BipedDef::IsFast(bool b)
{
B2_NOT_USED(b);
/*
LFootDef.isFast = b;
RFootDef.isFast = b;
LCalfDef.isFast = b;
RCalfDef.isFast = b;
LThighDef.isFast = b;
RThighDef.isFast = b;
PelvisDef.isFast = b;
StomachDef.isFast = b;
ChestDef.isFast = b;
NeckDef.isFast = b;
HeadDef.isFast = b;
LUpperArmDef.isFast = b;
RUpperArmDef.isFast = b;
LForearmDef.isFast = b;
RForearmDef.isFast = b;
LHandDef.isFast = b;
RHandDef.isFast = b;
*/
}
void BipedDef::SetGroupIndex(int16 i)
{
LFootPoly.filter.groupIndex = i;
RFootPoly.filter.groupIndex = i;
LCalfPoly.filter.groupIndex = i;
RCalfPoly.filter.groupIndex = i;
LThighPoly.filter.groupIndex = i;
RThighPoly.filter.groupIndex = i;
PelvisPoly.filter.groupIndex = i;
StomachPoly.filter.groupIndex = i;
ChestPoly.filter.groupIndex = i;
NeckPoly.filter.groupIndex = i;
HeadCirc.filter.groupIndex = i;
LUpperArmPoly.filter.groupIndex = i;
RUpperArmPoly.filter.groupIndex = i;
LForearmPoly.filter.groupIndex = i;
RForearmPoly.filter.groupIndex = i;
LHandPoly.filter.groupIndex = i;
RHandPoly.filter.groupIndex = i;
}
void BipedDef::SetLinearDamping(float f)
{
LFootDef.linearDamping = f;
RFootDef.linearDamping = f;
LCalfDef.linearDamping = f;
RCalfDef.linearDamping = f;
LThighDef.linearDamping = f;
RThighDef.linearDamping = f;
PelvisDef.linearDamping = f;
StomachDef.linearDamping = f;
ChestDef.linearDamping = f;
NeckDef.linearDamping = f;
HeadDef.linearDamping = f;
LUpperArmDef.linearDamping = f;
RUpperArmDef.linearDamping = f;
LForearmDef.linearDamping = f;
RForearmDef.linearDamping = f;
LHandDef.linearDamping = f;
RHandDef.linearDamping = f;
}
void BipedDef::SetAngularDamping(float f)
{
LFootDef.angularDamping = f;
RFootDef.angularDamping = f;
LCalfDef.angularDamping = f;
RCalfDef.angularDamping = f;
LThighDef.angularDamping = f;
RThighDef.angularDamping = f;
PelvisDef.angularDamping = f;
StomachDef.angularDamping = f;
ChestDef.angularDamping = f;
NeckDef.angularDamping = f;
HeadDef.angularDamping = f;
LUpperArmDef.angularDamping = f;
RUpperArmDef.angularDamping = f;
LForearmDef.angularDamping = f;
RForearmDef.angularDamping = f;
LHandDef.angularDamping = f;
RHandDef.angularDamping = f;
}
void BipedDef::SetMotorTorque(float f)
{
LAnkleDef.maxMotorTorque = f;
RAnkleDef.maxMotorTorque = f;
LKneeDef.maxMotorTorque = f;
RKneeDef.maxMotorTorque = f;
LHipDef.maxMotorTorque = f;
RHipDef.maxMotorTorque = f;
LowerAbsDef.maxMotorTorque = f;
UpperAbsDef.maxMotorTorque = f;
LowerNeckDef.maxMotorTorque = f;
UpperNeckDef.maxMotorTorque = f;
LShoulderDef.maxMotorTorque = f;
RShoulderDef.maxMotorTorque = f;
LElbowDef.maxMotorTorque = f;
RElbowDef.maxMotorTorque = f;
LWristDef.maxMotorTorque = f;
RWristDef.maxMotorTorque = f;
}
void BipedDef::SetMotorSpeed(float f)
{
LAnkleDef.motorSpeed = f;
RAnkleDef.motorSpeed = f;
LKneeDef.motorSpeed = f;
RKneeDef.motorSpeed = f;
LHipDef.motorSpeed = f;
RHipDef.motorSpeed = f;
LowerAbsDef.motorSpeed = f;
UpperAbsDef.motorSpeed = f;
LowerNeckDef.motorSpeed = f;
UpperNeckDef.motorSpeed = f;
LShoulderDef.motorSpeed = f;
RShoulderDef.motorSpeed = f;
LElbowDef.motorSpeed = f;
RElbowDef.motorSpeed = f;
LWristDef.motorSpeed = f;
RWristDef.motorSpeed = f;
}
void BipedDef::SetDensity(float f)
{
LFootPoly.density = f;
RFootPoly.density = f;
LCalfPoly.density = f;
RCalfPoly.density = f;
LThighPoly.density = f;
RThighPoly.density = f;
PelvisPoly.density = f;
StomachPoly.density = f;
ChestPoly.density = f;
NeckPoly.density = f;
HeadCirc.density = f;
LUpperArmPoly.density = f;
RUpperArmPoly.density = f;
LForearmPoly.density = f;
RForearmPoly.density = f;
LHandPoly.density = f;
RHandPoly.density = f;
}
void BipedDef::SetRestitution(float f)
{
LFootPoly.restitution = f;
RFootPoly.restitution = f;
LCalfPoly.restitution = f;
RCalfPoly.restitution = f;
LThighPoly.restitution = f;
RThighPoly.restitution = f;
PelvisPoly.restitution = f;
StomachPoly.restitution = f;
ChestPoly.restitution = f;
NeckPoly.restitution = f;
HeadCirc.restitution = f;
LUpperArmPoly.restitution = f;
RUpperArmPoly.restitution = f;
LForearmPoly.restitution = f;
RForearmPoly.restitution = f;
LHandPoly.restitution = f;
RHandPoly.restitution = f;
}
void BipedDef::EnableLimit()
{
SetLimit(true);
}
void BipedDef::DisableLimit()
{
SetLimit(false);
}
void BipedDef::SetLimit(bool b)
{
LAnkleDef.enableLimit = b;
RAnkleDef.enableLimit = b;
LKneeDef.enableLimit = b;
RKneeDef.enableLimit = b;
LHipDef.enableLimit = b;
RHipDef.enableLimit = b;
LowerAbsDef.enableLimit = b;
UpperAbsDef.enableLimit = b;
LowerNeckDef.enableLimit = b;
UpperNeckDef.enableLimit = b;
LShoulderDef.enableLimit = b;
RShoulderDef.enableLimit = b;
LElbowDef.enableLimit = b;
RElbowDef.enableLimit = b;
LWristDef.enableLimit = b;
RWristDef.enableLimit = b;
}
void BipedDef::EnableMotor()
{
SetMotor(true);
}
void BipedDef::DisableMotor()
{
SetMotor(false);
}
void BipedDef::SetMotor(bool b)
{
LAnkleDef.enableMotor = b;
RAnkleDef.enableMotor = b;
LKneeDef.enableMotor = b;
RKneeDef.enableMotor = b;
LHipDef.enableMotor = b;
RHipDef.enableMotor = b;
LowerAbsDef.enableMotor = b;
UpperAbsDef.enableMotor = b;
LowerNeckDef.enableMotor = b;
UpperNeckDef.enableMotor = b;
LShoulderDef.enableMotor = b;
RShoulderDef.enableMotor = b;
LElbowDef.enableMotor = b;
RElbowDef.enableMotor = b;
LWristDef.enableMotor = b;
RWristDef.enableMotor = b;
}
BipedDef::~BipedDef(void)
{
}
void BipedDef::DefaultVertices()
{
{ // feet
LFootPoly.vertexCount = RFootPoly.vertexCount = 5;
LFootPoly.vertices[0] = RFootPoly.vertices[0] = k_scale * b2Vec2(.033f,.143f);
LFootPoly.vertices[1] = RFootPoly.vertices[1] = k_scale * b2Vec2(.023f,.033f);
LFootPoly.vertices[2] = RFootPoly.vertices[2] = k_scale * b2Vec2(.267f,.035f);
LFootPoly.vertices[3] = RFootPoly.vertices[3] = k_scale * b2Vec2(.265f,.065f);
LFootPoly.vertices[4] = RFootPoly.vertices[4] = k_scale * b2Vec2(.117f,.143f);
}
{ // calves
LCalfPoly.vertexCount = RCalfPoly.vertexCount = 4;
LCalfPoly.vertices[0] = RCalfPoly.vertices[0] = k_scale * b2Vec2(.089f,.016f);
LCalfPoly.vertices[1] = RCalfPoly.vertices[1] = k_scale * b2Vec2(.178f,.016f);
LCalfPoly.vertices[2] = RCalfPoly.vertices[2] = k_scale * b2Vec2(.205f,.417f);
LCalfPoly.vertices[3] = RCalfPoly.vertices[3] = k_scale * b2Vec2(.095f,.417f);
}
{ // thighs
LThighPoly.vertexCount = RThighPoly.vertexCount = 4;
LThighPoly.vertices[0] = RThighPoly.vertices[0] = k_scale * b2Vec2(.137f,.032f);
LThighPoly.vertices[1] = RThighPoly.vertices[1] = k_scale * b2Vec2(.243f,.032f);
LThighPoly.vertices[2] = RThighPoly.vertices[2] = k_scale * b2Vec2(.318f,.343f);
LThighPoly.vertices[3] = RThighPoly.vertices[3] = k_scale * b2Vec2(.142f,.343f);
}
{ // pelvis
PelvisPoly.vertexCount = 5;
PelvisPoly.vertices[0] = k_scale * b2Vec2(.105f,.051f);
PelvisPoly.vertices[1] = k_scale * b2Vec2(.277f,.053f);
PelvisPoly.vertices[2] = k_scale * b2Vec2(.320f,.233f);
PelvisPoly.vertices[3] = k_scale * b2Vec2(.112f,.233f);
PelvisPoly.vertices[4] = k_scale * b2Vec2(.067f,.152f);
}
{ // stomach
StomachPoly.vertexCount = 4;
StomachPoly.vertices[0] = k_scale * b2Vec2(.088f,.043f);
StomachPoly.vertices[1] = k_scale * b2Vec2(.284f,.043f);
StomachPoly.vertices[2] = k_scale * b2Vec2(.295f,.231f);
StomachPoly.vertices[3] = k_scale * b2Vec2(.100f,.231f);
}
{ // chest
ChestPoly.vertexCount = 4;
ChestPoly.vertices[0] = k_scale * b2Vec2(.091f,.042f);
ChestPoly.vertices[1] = k_scale * b2Vec2(.283f,.042f);
ChestPoly.vertices[2] = k_scale * b2Vec2(.177f,.289f);
ChestPoly.vertices[3] = k_scale * b2Vec2(.065f,.289f);
}
{ // head
HeadCirc.radius = k_scale * .115f;
}
{ // neck
NeckPoly.vertexCount = 4;
NeckPoly.vertices[0] = k_scale * b2Vec2(.038f,.054f);
NeckPoly.vertices[1] = k_scale * b2Vec2(.149f,.054f);
NeckPoly.vertices[2] = k_scale * b2Vec2(.154f,.102f);
NeckPoly.vertices[3] = k_scale * b2Vec2(.054f,.113f);
}
{ // upper arms
LUpperArmPoly.vertexCount = RUpperArmPoly.vertexCount = 5;
LUpperArmPoly.vertices[0] = RUpperArmPoly.vertices[0] = k_scale * b2Vec2(.092f,.059f);
LUpperArmPoly.vertices[1] = RUpperArmPoly.vertices[1] = k_scale * b2Vec2(.159f,.059f);
LUpperArmPoly.vertices[2] = RUpperArmPoly.vertices[2] = k_scale * b2Vec2(.169f,.335f);
LUpperArmPoly.vertices[3] = RUpperArmPoly.vertices[3] = k_scale * b2Vec2(.078f,.335f);
LUpperArmPoly.vertices[4] = RUpperArmPoly.vertices[4] = k_scale * b2Vec2(.064f,.248f);
}
{ // forearms
LForearmPoly.vertexCount = RForearmPoly.vertexCount = 4;
LForearmPoly.vertices[0] = RForearmPoly.vertices[0] = k_scale * b2Vec2(.082f,.054f);
LForearmPoly.vertices[1] = RForearmPoly.vertices[1] = k_scale * b2Vec2(.138f,.054f);
LForearmPoly.vertices[2] = RForearmPoly.vertices[2] = k_scale * b2Vec2(.149f,.296f);
LForearmPoly.vertices[3] = RForearmPoly.vertices[3] = k_scale * b2Vec2(.088f,.296f);
}
{ // hands
LHandPoly.vertexCount = RHandPoly.vertexCount = 5;
LHandPoly.vertices[0] = RHandPoly.vertices[0] = k_scale * b2Vec2(.066f,.031f);
LHandPoly.vertices[1] = RHandPoly.vertices[1] = k_scale * b2Vec2(.123f,.020f);
LHandPoly.vertices[2] = RHandPoly.vertices[2] = k_scale * b2Vec2(.160f,.127f);
LHandPoly.vertices[3] = RHandPoly.vertices[3] = k_scale * b2Vec2(.127f,.178f);
LHandPoly.vertices[4] = RHandPoly.vertices[4] = k_scale * b2Vec2(.074f,.178f);;
}
}
void BipedDef::DefaultJoints()
{
//b.LAnkleDef.body1 = LFoot;
//b.LAnkleDef.body2 = LCalf;
//b.RAnkleDef.body1 = RFoot;
//b.RAnkleDef.body2 = RCalf;
{ // ankles
b2Vec2 anchor = k_scale * b2Vec2(-.045f,-.75f);
LAnkleDef.localAnchor1 = RAnkleDef.localAnchor1 = anchor - LFootDef.position;
LAnkleDef.localAnchor2 = RAnkleDef.localAnchor2 = anchor - LCalfDef.position;
LAnkleDef.referenceAngle = RAnkleDef.referenceAngle = 0.0f;
LAnkleDef.lowerAngle = RAnkleDef.lowerAngle = -0.523598776f;
LAnkleDef.upperAngle = RAnkleDef.upperAngle = 0.523598776f;
}
//b.LKneeDef.body1 = LCalf;
//b.LKneeDef.body2 = LThigh;
//b.RKneeDef.body1 = RCalf;
//b.RKneeDef.body2 = RThigh;
{ // knees
b2Vec2 anchor = k_scale * b2Vec2(-.030f,-.355f);
LKneeDef.localAnchor1 = RKneeDef.localAnchor1 = anchor - LCalfDef.position;
LKneeDef.localAnchor2 = RKneeDef.localAnchor2 = anchor - LThighDef.position;
LKneeDef.referenceAngle = RKneeDef.referenceAngle = 0.0f;
LKneeDef.lowerAngle = RKneeDef.lowerAngle = 0;
LKneeDef.upperAngle = RKneeDef.upperAngle = 2.61799388f;
}
//b.LHipDef.body1 = LThigh;
//b.LHipDef.body2 = Pelvis;
//b.RHipDef.body1 = RThigh;
//b.RHipDef.body2 = Pelvis;
{ // hips
b2Vec2 anchor = k_scale * b2Vec2(.005f,-.045f);
LHipDef.localAnchor1 = RHipDef.localAnchor1 = anchor - LThighDef.position;
LHipDef.localAnchor2 = RHipDef.localAnchor2 = anchor - PelvisDef.position;
LHipDef.referenceAngle = RHipDef.referenceAngle = 0.0f;
LHipDef.lowerAngle = RHipDef.lowerAngle = -2.26892803f;
LHipDef.upperAngle = RHipDef.upperAngle = 0;
}
//b.LowerAbsDef.body1 = Pelvis;
//b.LowerAbsDef.body2 = Stomach;
{ // lower abs
b2Vec2 anchor = k_scale * b2Vec2(.035f,.135f);
LowerAbsDef.localAnchor1 = anchor - PelvisDef.position;
LowerAbsDef.localAnchor2 = anchor - StomachDef.position;
LowerAbsDef.referenceAngle = 0.0f;
LowerAbsDef.lowerAngle = -0.523598776f;
LowerAbsDef.upperAngle = 0.523598776f;
}
//b.UpperAbsDef.body1 = Stomach;
//b.UpperAbsDef.body2 = Chest;
{ // upper abs
b2Vec2 anchor = k_scale * b2Vec2(.045f,.320f);
UpperAbsDef.localAnchor1 = anchor - StomachDef.position;
UpperAbsDef.localAnchor2 = anchor - ChestDef.position;
UpperAbsDef.referenceAngle = 0.0f;
UpperAbsDef.lowerAngle = -0.523598776f;
UpperAbsDef.upperAngle = 0.174532925f;
}
//b.LowerNeckDef.body1 = Chest;
//b.LowerNeckDef.body2 = Neck;
{ // lower neck
b2Vec2 anchor = k_scale * b2Vec2(-.015f,.575f);
LowerNeckDef.localAnchor1 = anchor - ChestDef.position;
LowerNeckDef.localAnchor2 = anchor - NeckDef.position;
LowerNeckDef.referenceAngle = 0.0f;
LowerNeckDef.lowerAngle = -0.174532925f;
LowerNeckDef.upperAngle = 0.174532925f;
}
//b.UpperNeckDef.body1 = Chest;
//b.UpperNeckDef.body2 = Head;
{ // upper neck
b2Vec2 anchor = k_scale * b2Vec2(-.005f,.630f);
UpperNeckDef.localAnchor1 = anchor - ChestDef.position;
UpperNeckDef.localAnchor2 = anchor - HeadDef.position;
UpperNeckDef.referenceAngle = 0.0f;
UpperNeckDef.lowerAngle = -0.610865238f;
UpperNeckDef.upperAngle = 0.785398163f;
}
//b.LShoulderDef.body1 = Chest;
//b.LShoulderDef.body2 = LUpperArm;
//b.RShoulderDef.body1 = Chest;
//b.RShoulderDef.body2 = RUpperArm;
{ // shoulders
b2Vec2 anchor = k_scale * b2Vec2(-.015f,.545f);
LShoulderDef.localAnchor1 = RShoulderDef.localAnchor1 = anchor - ChestDef.position;
LShoulderDef.localAnchor2 = RShoulderDef.localAnchor2 = anchor - LUpperArmDef.position;
LShoulderDef.referenceAngle = RShoulderDef.referenceAngle = 0.0f;
LShoulderDef.lowerAngle = RShoulderDef.lowerAngle = -1.04719755f;
LShoulderDef.upperAngle = RShoulderDef.upperAngle = 3.14159265f;
}
//b.LElbowDef.body1 = LForearm;
//b.LElbowDef.body2 = LUpperArm;
//b.RElbowDef.body1 = RForearm;
//b.RElbowDef.body2 = RUpperArm;
{ // elbows
b2Vec2 anchor = k_scale * b2Vec2(-.005f,.290f);
LElbowDef.localAnchor1 = RElbowDef.localAnchor1 = anchor - LForearmDef.position;
LElbowDef.localAnchor2 = RElbowDef.localAnchor2 = anchor - LUpperArmDef.position;
LElbowDef.referenceAngle = RElbowDef.referenceAngle = 0.0f;
LElbowDef.lowerAngle = RElbowDef.lowerAngle = -2.7925268f;
LElbowDef.upperAngle = RElbowDef.upperAngle = 0;
}
//b.LWristDef.body1 = LHand;
//b.LWristDef.body2 = LForearm;
//b.RWristDef.body1 = RHand;
//b.RWristDef.body2 = RForearm;
{ // wrists
b2Vec2 anchor = k_scale * b2Vec2(-.010f,.045f);
LWristDef.localAnchor1 = RWristDef.localAnchor1 = anchor - LHandDef.position;
LWristDef.localAnchor2 = RWristDef.localAnchor2 = anchor - LForearmDef.position;
LWristDef.referenceAngle = RWristDef.referenceAngle = 0.0f;
LWristDef.lowerAngle = RWristDef.lowerAngle = -0.174532925f;
LWristDef.upperAngle = RWristDef.upperAngle = 0.174532925f;
}
}
void BipedDef::DefaultPositions()
{
LFootDef.position = RFootDef.position = k_scale * b2Vec2(-.122f,-.901f);
LCalfDef.position = RCalfDef.position = k_scale * b2Vec2(-.177f,-.771f);
LThighDef.position = RThighDef.position = k_scale * b2Vec2(-.217f,-.391f);
LUpperArmDef.position = RUpperArmDef.position = k_scale * b2Vec2(-.127f,.228f);
LForearmDef.position = RForearmDef.position = k_scale * b2Vec2(-.117f,-.011f);
LHandDef.position = RHandDef.position = k_scale * b2Vec2(-.112f,-.136f);
PelvisDef.position = k_scale * b2Vec2(-.177f,-.101f);
StomachDef.position = k_scale * b2Vec2(-.142f,.088f);
ChestDef.position = k_scale * b2Vec2(-.132f,.282f);
NeckDef.position = k_scale * b2Vec2(-.102f,.518f);
HeadDef.position = k_scale * b2Vec2(.022f,.738f);
}