Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Custom colliders / Interaction with Obi Particles
#5
for reference if anyone needs similar behaviour Sonrisa

Code:
public class ObiWaterBox : MonoBehaviour
{
   public ObiSolver Solver;

   private Collider mCollider;
   private int mColliderIndex;

   void Awake()
   {
       mCollider = GetComponent<Collider>();

       for (int i = 0; i < Solver.colliderGroup.colliders.Count; ++i)
       {
           if (Solver.colliderGroup.colliders[i] == mCollider)
           {
               mColliderIndex = i;
               break;
           }
       }
   }

   void OnEnable()
   {
       Solver.OnCollision += ObiCollision;
   }

   void OnDisable()
   {
       Solver.OnCollision -= ObiCollision;
   }

   void Start()
   {
   }

   void ObiCollision(object sender, ObiSolver.ObiCollisionEventArgs eventArguments)
   {
       float damping = 10.0f;
       float force = 20.0f;
       Vector4 upForce = new Vector4(0.0f, force, 0.0f, 1.0f);
       Vector4[] velocities = {new Vector4()};

       foreach (Oni.Contact contact in eventArguments.contacts)
       {
           if(contact.other!=mColliderIndex)continue; //skip other collision

           Oni.GetParticleVelocities(Solver.OniSolver, velocities, 1, contact.particle);

           //force up
           velocities[0] += Time.deltaTime * upForce;

           //damping
           velocities[0] -= Time.deltaTime * damping * velocities[0];

           Oni.SetParticleVelocities(Solver.OniSolver, velocities, 1, contact.particle);
       }
   }

   void Update()
   {
   }
}

Ps:
would be great if OBI API had methods like external force add to provide a list of particle indicies, would be less dll calls
Reply


Messages In This Thread
RE: Integration / Water Areas - by josemendez - 20-06-2017, 09:37 AM
RE: Custom colliders / Interaction with Obi Particles - by davidrousal - 21-06-2017, 09:19 PM