Пример #1
0
        public void DestroyConstraint()
        {
            duringCreateDestroy = true;

            var physicsWorldData = GetPhysicsWorldData(false);

            if (physicsWorldData != null)
            {
                if (constraintRigid != null)
                {
                    if (physicsWorldData.world.JointList.Contains(constraintRigid))
                    {
                        physicsWorldData.world.Remove(constraintRigid);
                    }
                }
            }

            created         = false;
            creationBodyA   = null;
            creationBodyB   = null;
            constraintRigid = null;
            //softAnchorModeClosestNodeIndex = -1;

            duringCreateDestroy = false;
        }
Пример #2
0
        protected override Joint OnCreateConstraint(Component_PhysicalBody2D creationBodyA, Component_PhysicalBody2D creationBodyB)
        {
            var anchor1 = Physics2DUtility.Convert(TransformV.Position.ToVector2());
            var anchor2 = Physics2DUtility.Convert((TransformV * new Vector3(1, 0, 0)).ToVector2());

            return(new DistanceJoint(creationBodyA.Physics2DBody, creationBodyB.Physics2DBody, anchor1, anchor2, true));
        }
        protected override Joint OnCreateConstraint(Component_PhysicalBody2D creationBodyA, Component_PhysicalBody2D creationBodyB)
        {
            var anchor = Physics2DUtility.Convert(TransformV.Position.ToVector2());

            var angle = -MathEx.DegreeToRadian(TransformV.Rotation.ToAngles().Yaw);
            var axis  = Physics2DUtility.Convert(new Vector2(Math.Cos(angle), Math.Sin(angle)));

            return(new PrismaticJoint(creationBodyA.Physics2DBody, creationBodyB.Physics2DBody, anchor, anchor, axis, true));
        }
Пример #4
0
        protected override Joint OnCreateConstraint(Component_PhysicalBody2D creationBodyA, Component_PhysicalBody2D creationBodyB)
        {
            var anchor = Physics2DUtility.Convert(TransformV.Position.ToVector2());

            return(new WeldJoint(creationBodyA.Physics2DBody, creationBodyB.Physics2DBody, anchor, anchor, true));
        }
Пример #5
0
        void CreateConstraint()
        {
            if (constraintRigid != null)
            {
                Log.Fatal("Component_Constraint2D: CreateConstraint: constraintRigid != null.");
            }
            if (!EnabledInHierarchy)
            {
                Log.Fatal("Component_Constraint2D: CreateConstraint: !EnabledInHierarchy.");
            }

            var physicsWorldData = GetPhysicsWorldData(true);

            if (physicsWorldData == null)
            {
                return;
            }

            duringCreateDestroy = true;
            try
            {
                var ba = BodyA.Value;
                var bb = BodyB.Value;

                //check bodies are enabled
                if (ba != null && ba.Physics2DBody == null)
                {
                    return;
                }
                if (bb != null && bb.Physics2DBody == null)
                {
                    return;
                }
                //check no bodies
                if (ba == null && bb == null)
                {
                    return;
                }

                created       = true;
                creationBodyA = ba;
                creationBodyB = bb;

                //transform without Scale
                var transform = Transform.Value;
                var t         = transform.ToMatrix4();
                //var t = new Matrix4( transform.Rotation.ToMatrix3(), transform.Position );

                if (creationBodyA != null && creationBodyB != null)
                {
                    constraintRigid = OnCreateConstraint(creationBodyA, creationBodyB);

                    var bodyATransformFull = creationBodyA.Transform.Value;
                    var bodyATransform     = new Matrix4(bodyATransformFull.Rotation.ToMatrix3(), bodyATransformFull.Position);
                    constraintAFrame = bodyATransform.GetInverse() * t;
                }
                //else
                //{
                //var body = creationBodyA ?? creationBodyB;

                //var bodyTransformFull = body.Transform.Value;
                //var bodyTransform = new Matrix4( bodyTransformFull.Rotation.ToMatrix3(), bodyTransformFull.Position );
                //constraintAFrame = bodyTransform.GetInverse() * t;

                //var mat = BulletPhysicsUtility.Convert( constraintAFrame );
                //constraintRigid = new Generic6DofSpring2Constraint( (RigidBody)body.BulletBody, mat );
                //}

                if (constraintRigid != null)
                {
                    constraintRigid.CollideConnected = CollisionsBetweenLinkedBodies;
                    OnCreateConstraintApplyParameters();
                    constraintRigid.Tag = this;

                    physicsWorldData.world.Add(constraintRigid);
                }
            }
            finally
            {
                duringCreateDestroy = false;
            }
        }
Пример #6
0
 protected abstract Joint OnCreateConstraint(Component_PhysicalBody2D creationBodyA, Component_PhysicalBody2D creationBodyB);