using UnityEngine;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
public class gravityWell : MonoBehaviour {
|
|
|
|
public float wellMass;
|
|
public int gravConstPow;
|
|
|
|
public GameObject[] targets;
|
|
//public float minDistance;
|
|
//public float bufferZone;
|
|
//public float bufferDampner;
|
|
public float clampVelo;
|
|
public float maxVelo;
|
|
|
|
public float moveSpeed;
|
|
|
|
// Use this for initialization
|
|
void Start () {
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void FixedUpdate () {
|
|
foreach (GameObject target in targets) {
|
|
/*target.rigidbody.AddForce( calcGrav (target));
|
|
target.rigidbody.velocity = Vector3.ClampMagnitude(target.rigidbody.velocity, clampVelo);
|
|
Debug.Log(target.rigidbody.velocity.magnitude);*/
|
|
float step = moveSpeed * Time.deltaTime;
|
|
target.transform.position = Vector3.MoveTowards(target.transform.position,transform.position, step);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
private Vector3 calcGrav(GameObject target){
|
|
double GRAVCONSTANT = 6.673f * Mathf.Pow (10, gravConstPow);
|
|
|
|
Vector3 distance = this.transform.position - target.transform.position;
|
|
float mag = distance.magnitude;
|
|
|
|
distance /= mag;
|
|
|
|
float gravityForce = (target.GetComponent<Rigidbody>().mass * wellMass * (float)GRAVCONSTANT) / (mag * mag);
|
|
|
|
//if (minDistance > mag)
|
|
// return (Vector3.zero);
|
|
//else if (bufferZone > mag)
|
|
// return (-(distance * gravityForce)/bufferDampner);
|
|
//else
|
|
Debug.Log ((distance * gravityForce).magnitude);
|
|
if ((distance * gravityForce).magnitude > maxVelo)
|
|
return (Vector3.zero);
|
|
else
|
|
return (distance * gravityForce);
|
|
|
|
}
|
|
|
|
|
|
}
|