void OnValidate() { if (gravitable is null) { gravitable = GetComponent <Gravitable>(); } }
void applyGravity(GameObject targetObject, Gravitable targetInterface) { Vector3 lineFromTarget = transform.position - targetObject.transform.position; float distance = lineFromTarget.magnitude; Vector3 pullDirection = lineFromTarget.normalized; Vector3 pull = pullDirection; float gravityStrength; switch(GravitationMode) { case GravityMode.Constant: pull = pullDirection * BaseGravitationalForce; break; case GravityMode.Linear: gravityStrength = GravitationStrength/distance; pull = pullDirection * gravityStrength; break; case GravityMode.LinearWithBase: gravityStrength = GravitationStrength/distance; Vector3 basePull = pullDirection * BaseGravitationalForce; pull = basePull + pullDirection * gravityStrength; break; case GravityMode.Newtonian: gravityStrength = ( 1 / Mathf.Pow(distance, 2) ) * GravitationStrength; pull = pullDirection * gravityStrength; break; } if(pull.magnitude <= 1) targetInterface.EscapeGravity(gameObject); else targetInterface.Gravitate(gameObject, pull); }
public Transit( Ship self, float ftlCounterForce = 0, float timeOfLaunch = 0 ) : base(self) { asteroidSpawner = self.asteroidSpawner; gravityComponent = self.gravityComponent; this.ftlCounterForce = ftlCounterForce; this.timeOfLaunch = timeOfLaunch; this.lootCollector = self.lootCollector; }