Esempio n. 1
0
    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);
        }
    }
Esempio n. 2
0
            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));
            }
Esempio n. 3
0
    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));
        }
    }
Esempio n. 4
0
 public bool CollidesWith(MovableParticle other) => position == other.position;