public Vector3 attract(Exercise_2_8_Mover m) { Vector3 force = location - m.location; float distance = force.magnitude; // TODO Constrain to some sueful Values; Look up how to //distance.constrain; distance = Mathf.Clamp(distance, 0.1f, 6f); force = force.normalized; float Strength = (G * mass * m.mass) / (distance * distance); force *= Strength; return(force); }
// Use this for initialization void Start() { Attractor = new Exercise_2_8_Attractor(CSizeX / 2, CSizeY / 2, 1, 0.2f); for (int i = 0; i < movers.Length; i++) { // TODO Fix NEW Warning when instatiating, make mono happy. movers[i] = new Exercise_2_8_Mover(UnityEngine.Random.value * 4, (UnityEngine.Random.value - 0.5f) * 20); spheres[i] = GameObject.CreatePrimitive(PrimitiveType.Sphere); spheres[i].transform.position = new Vector3(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value); spheres[i].transform.localScale = new Vector3(0.02f, 0.02f, 0.02f); spheres[i].GetComponent <Renderer>().material = refMaterial; } }
// Update is called once per frame void Update() { for (int i = 0; i < movers.Length; i++) { Vector3 force = Attractor.attract(movers[i]); movers[i].applyForce(force); //movers[i].applyForce(wind); //movers[i].applyForce(gravity); movers[i].UpdatePosition(); //movers[i].CheckEdges(); spheres[i].transform.position = new Vector3(movers[i].location.x, movers[i].location.y, 0f); } timeLeft -= Time.deltaTime; if (timeLeft <= 0) { capture(); Invoke("ClearScreen", 1f); for (int i = 0; i < movers.Length; i++) { movers[i] = new Exercise_2_8_Mover(UnityEngine.Random.value * 4, (UnityEngine.Random.value - 0.5f) * 20); } timeLeft += 2000; } }