private void ApplyForce(MovableParticle _movingParticle) { Vector3 newForce = Vector3.zero; foreach (ParticleWithCharge particle in particlesWithCharge) { if (particle == _movingParticle) { continue; } float distance = Vector3.Distance(_movingParticle.transform.position, particle.transform.position); if (distance == 0) { continue; } float force = (ForceMultiplier * _movingParticle.charge * particle.charge) / Mathf.Pow(distance, 2); Vector3 direction = _movingParticle.transform.position - particle.transform.position; direction.Normalize(); newForce = force * direction * cycleInterval; _movingParticle.rb.AddForce(newForce); } }
public bool Approaches(MovableParticle other) { // Is this actually correct? var positionDifference = position.SignedDifferenceFrom(other.position); var accelerationDifference = acceleration.SignedDifferenceFrom(other.acceleration); return(positionDifference == accelerationDifference && (acceleration + other.acceleration == Location3D.Zero)); }
public IEnumerator Cycle(MovableParticle _movingParticle) { bool isFirst = true; while (true) { if (isFirst) { isFirst = false; yield return(new WaitForSeconds(Random.Range(0, cycleInterval))); } ApplyForce(_movingParticle); yield return(new WaitForSeconds(cycleInterval)); } }
public bool CollidesWith(MovableParticle other) => position == other.position;