/// <summary> /// Applies force to the held obstacle, if necessary. /// </summary> protected void ApplyForceToObstacle() { Vector3 currentDistance = HookingData.HookedObstacle.GetPosition() - transform.position; var forceCalculator = ForceCalculator.GetInstance(); Vector3 glovePositionalForce = forceCalculator.GlovePositionalForce(currentDistance, HookingData.HookingRefDistance, Strength); Vector3 gloveRotationalForce = forceCalculator.GloveRotationalForce(HookingData.HookingRefDistance, GameConstants.PlayerRotationRefVector, transform.rotation, Strength); Vector3 dampeningForce = forceCalculator.DampeningForce(HookingData.HookedObstacle.GetVelocity(), _dampeningFactor, Strength); Vector3 totalForce = glovePositionalForce + gloveRotationalForce; totalForce += dampeningForce; totalForce *= Time.deltaTime; HookingData.HookedObstacle.ApplyForce(totalForce); }
public Vector2 CalculateForce( PlanetController planet, ForceCalculator forceCalculator ) { Vector2 acceleration = Vector2.zero; Visit(node => { bool shouldContinue = false; if (node.IsLeaf) { if (node.HasPlanets) { acceleration += forceCalculator(planet, node.Planet); } } else { float size = node.Size; float distance = Vector2.Distance( planet.Position, node.Position ); shouldContinue = size / distance >= Theta; if (!shouldContinue) { acceleration += forceCalculator(planet, node); } } return(shouldContinue); }); return(acceleration); }
void Start() { forceScript = GetComponent <ForceCalculator>(); vectorScript = GetComponent <GroundModifier>(); projector = projectorObj.GetComponent <Projector>(); }