コード例 #1
0
    private List <Joint> create_joints(int N)
    {
        List <Joint> joints = new List <Joint>();

        for (int i = 0; i < N; i++)
        {
            HingeJoint joint = new HingeJoint();
            joint.Name = String.Format("j{0}", i);

            joint.Motor__enable            = true;
            joint.Motor__targetVelocity    = 1F;
            joint.Motor__maxImpulse        = 1024F;
            joint.AngularLimit__softness   = 0.1F;
            joint.AngularLimit__bias       = 0.99F;
            joint.AngularLimit__relaxation = 0.1F;
            joint.Params__bias             = 0.99F;

            MeshInstance joint_ind = generate_joint_mesh(String.Format("{0}_indicator", joint.Name));

            joint.AddChild(joint_ind);

            joints.Add(joint);
        }

        return(joints);
    }
コード例 #2
0
        private static List <Joint> generate_joints()
        {
            List <Joint> joints = new List <Joint>();

            DEBUG_PRINT("Generating joints...");
            for (int i = 0; i < joint_count; i++)
            {
                HingeJoint joint = new HingeJoint();
                joint.Name = String.Format("j{0}", i);

                joint.Motor__enable         = true;
                joint.Motor__targetVelocity = 1F;
                joint.Motor__maxImpulse     = 1024F;

                joint.AngularLimit__bias       = 0.99F;
                joint.AngularLimit__softness   = 0.1F;
                joint.AngularLimit__relaxation = 0.1F;
                joint.Params__bias             = 0.99F;

                MeshInstance joint_indicator = generate_joint_mesh(
                    String.Format("{0}_indicator", joint.Name)
                    );

                joint.AddChild(joint_indicator);

                joints.Add(joint);
            }
            DEBUG_PRINT("Finished joint generation.");

            return(joints);
        }
コード例 #3
0
    private void Generate2DoFArmHelper()
    {
        GD.Print("Creating arm with code...");
        StaticBody base_node = generate_static("Arm");

        MeshInstance base_mesh_node = new MeshInstance();

        base_mesh_node.Name = "base_mesh";

        CubeMesh base_mesh  = new CubeMesh();
        Vector3  base_sizes = new Vector3(.7F, .2F, .7F);

        base_mesh.Size = base_sizes;

        base_mesh_node.Mesh = base_mesh;


        HingeJoint j0 = new HingeJoint();

        j0.Name = "j0";
        j0.AngularLimit__enable   = false;
        j0.Motor__enable          = true;
        j0.Motor__targetVelocity  = 1F;
        j0.Motor__maxImpulse      = 300F;
        j0.AngularLimit__bias     = .99F;
        j0.AngularLimit__softness = 0.01F;

        j0.AddChild(generate_joint_mesh(j0.Name));

        RigidBody l0 = new RigidBody();

        l0.Name   = "l0";
        l0.Mass   = 2.0f;
        l0.Weight = (l0.Mass * 9.8F);
        l0.PhysicsMaterialOverride = new PhysicsMaterial();
        l0.ContinuousCd            = true;
        l0.CanSleep = false;

        MeshInstance l0_mesh_node = new MeshInstance();

        l0_mesh_node.Name = "l0_mesh";

        CubeMesh l0_mesh = new CubeMesh();
        Vector3  l0_size = new Vector3(.2F, .8F, .1F);

        l0_mesh.Size = l0_size;

        l0_mesh_node.Mesh = l0_mesh;

        base_node.AddChild(j0);
        base_node.AddChild(base_mesh_node);

        RootView.GetNode("main/env").AddChild(base_node);



        // Translate links/joints
        Transform j0_og = j0.Transform;

        j0_og = j0_og.Translated(new Vector3(0F, .1F, 0F));
        // j0_og = j0_og.Rotated(new Vector3(1F, 0F, 0F), Mathf.Pi / 2F);
        j0.Transform = j0_og;

        j0.AddChild(l0);
        l0.AddChild(l0_mesh_node);

        j0.Nodes__nodeA = base_node.GetPath();
        j0.Nodes__nodeB = l0.GetPath();

        Transform l0_og = l0.Transform;

        l0.Transform = l0_og.Translated(new Vector3(0F, .4F, 0F));
    }