public float GetChargePolarityMultiplier(PipeMazeMagnetic other) { if (this.charge == Charge.None) { return((other.charge == Charge.None) ? 0.0f : 0.5f); } else if (this.charge == Charge.Positive) { if (other.charge == Charge.None) { return(0.5f); } return((other.charge == Charge.Positive) ? -1.0f : 1.0f); } else if (this.charge == Charge.Negative) { if (other.charge == Charge.None) { return(0.5f); } return((other.charge == Charge.Negative) ? -1.0f : 1.0f); } return(0.0f); }
public void OnTriggerExit(Collider other) { PipeMazeMagnetic magnetic = other.gameObject.GetComponent <PipeMazeMagnetic>(); if (magnetic != null) { if (nearbyMagnetics.Contains(magnetic)) { nearbyMagnetics.Remove(magnetic); } } }
public Vector3 GetChargeForce(PipeMazeMagnetic other) { Vector3 forceDirection = (other.transform.position - this.transform.position).normalized; if (this.IsSurfaceMagnetic()) { forceDirection = other.transform.TransformDirection(other.staticLocalMagneticDir); } //TODO: Make the force ramp up as the distance shortens float forceMultiplier = this.GetChargePolarityMultiplier(other) * this.chargeStrength; return(forceMultiplier * forceDirection); }