/// <summary>
/// Constructs a new demo.
/// </summary>
/// <param name="game">Game owning this demo.</param>
public InverseKinematicsTestDemo(DemosGame game)
: base(game)
{
cameraControl = new FreeCameraControlScheme(10, game.Camera, game);
whitePixel = game.Content.Load<Texture2D>("whitePixel");
game.Camera.Position = new Vector3(0, 3, 5);
Box ground = new Box(new Vector3(0, 0, 0), 30, 1, 30);
Space.Add(ground);
Space.ForceUpdater.Gravity = new Vector3(0, -9.81f, 0);
stateControlGroup = new StateControlGroup(game.Camera, controls);
drawer = new InstancedModelDrawer(game);
solver.ActiveSet.UseAutomass = true;
solver.AutoscaleControlImpulses = true;
solver.AutoscaleControlMaximumForce = float.MaxValue;
solver.TimeStepDuration = .1f;
solver.ControlIterationCount = 100;
solver.FixerIterationCount = 10;
solver.VelocitySubiterationCount = 3;
BuildChain(new Vector3(-5, 2, 0));
BuildStick(new Vector3(-10, 2, 0));
BuildActionFigure(new Vector3(5, 6, -8));
BuildActionFigure(new Vector3(5, 6, -3));
BuildActionFigure(new Vector3(5, 6, 3));
BuildActionFigure(new Vector3(5, 6, 8));
BuildCyclicMesh(new Vector3(-5, 5, -5));
//BuildJointTest(new Vector3(0, 5, 0));
//BuildTinyTest(new Vector3(0, 15, 0));
BuildRoboArmThing(new Vector3(0, 5, 0));
BuildRing(new Vector3(0, 10, 8));
//Create the display objects.
Model cylinder = game.Content.Load<Model>("cylinder");
for (int i = 0; i < bones.Count; i++)
{
var displayBone = new DisplayModel(cylinder, drawer);
var completedBone = bones[i];
completedBone.DisplayBone = displayBone;
bones[i] = completedBone;
drawer.Add(displayBone);
}
}