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); }
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); }