Example #1
0
    private Vector3 DampenVelocity(SPH_ParticleCollider collider, Vector3 velocity, Vector3 penetrationNormal, float drag)
    {
        Vector3 newVelocity = Vector3.Dot(velocity, penetrationNormal) * penetrationNormal * damping +
                              Vector3.Dot(velocity, collider.right) * collider.right * drag + Vector3.Dot(velocity, collider.up) * collider.up * drag;

        return(Vector3.Dot(newVelocity, Vector3.forward) * Vector3.forward + Vector3.Dot(newVelocity, Vector3.right) * Vector3.right +
               Vector3.Dot(newVelocity, Vector3.up) * Vector3.up);
    }
Example #2
0
    private bool Collision(SPH_ParticleCollider collider, Vector3 position, float radius, out Vector3 penetrationNormal,
                           out Vector3 penetrationPosition, out float penetrationLength)
    {
        Vector3 colliderProjection = collider.position - position;

        penetrationNormal   = Vector3.Cross(collider.right, collider.up);
        penetrationLength   = Mathf.Abs(Vector3.Dot(colliderProjection, penetrationNormal)) - (radius / 2);
        penetrationPosition = collider.position - colliderProjection;

        return(penetrationLength < 0 &&
               Mathf.Abs(Vector3.Dot(colliderProjection, collider.right)) < collider.scale.x &&
               Mathf.Abs(Vector3.Dot(colliderProjection, collider.up)) < collider.scale.y);
    }