Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Equipping Obi cloth.
#4
You can pin any object with an obiCollider on it with this. It can be update to support multiple partciles per collider if that whats needed by changing the dictionary to <ObiCollider, int[]> and a little bit more work.
Code:
       public Dictionary<ObiCollider, int> pinnedColliders = new Dictionary<ObiCollider, int>();

        public ObiCloth actor;

        public void PinObiColliderToParticle(ObiCollider obiCollider, int particleIndex, Vector3? pinOffset = null, int? pinStiffness = null)
        {
            if (pinnedColliders.ContainsKey(obiCollider))
                return;

            ObiPinConstraintBatch batch = actor.PinConstraints.GetBatches()[0] as ObiPinConstraintBatch;
            actor.PinConstraints.RemoveFromSolver(null);

            // Set the pin as the next availiable index in the batch
            pinnedColliders.Add(obiCollider, batch.ConstraintCount);

            batch.AddConstraint(particleIndex, obiCollider, pinOffset == null ? Vector3.zero : pinOffset.Value, pinStiffness == null ? 1 : pinStiffness.Value);

            actor.PinConstraints.AddToSolver(null);
            actor.PinConstraints.PushDataToSolver();
        }

        public void UnpinObiCollider(ObiCollider obiCollider)
        {
            if (!pinnedColliders.ContainsKey(obiCollider))
                return;

            ObiPinConstraintBatch batch = actor.PinConstraints.GetBatches()[0] as ObiPinConstraintBatch;
            actor.PinConstraints.RemoveFromSolver(null);

            int pinIndex = pinnedColliders[obiCollider];

            batch.RemoveConstraint(pinIndex);

            pinnedColliders.Remove(obiCollider);

            List<ObiCollider> keys = new List<ObiCollider>(pinnedColliders.Keys);

            // Decrement the pinned indices that are greater than the removed index
            foreach (ObiCollider collider in keys)
            {
                int checkIndex = pinnedColliders[collider];

                if (checkIndex >= 0 && checkIndex > pinIndex)
                {
                    pinnedColliders[collider]--;
                }
            }

            actor.PinConstraints.AddToSolver(null);
            actor.PinConstraints.PushDataToSolver();
        }
Reply


Messages In This Thread
Equipping Obi cloth. - by sriky - 18-10-2017, 07:47 PM
RE: Equipping Obi cloth. - by josemendez - 19-10-2017, 08:09 AM
RE: Equipping Obi cloth. - by sriky - 19-10-2017, 09:57 PM
RE: Equipping Obi cloth. - by niZmo - 19-10-2017, 11:35 PM
RE: Equipping Obi cloth. - by sriky - 20-10-2017, 04:26 AM